Bonjour !

Je m'arrache les cheveux sur un programme que l'on m'a demandé de faire, en allemand (hé oui désolé... mais bon le langage pascal est universel ! ^^)

Je le met complètement car je ne sais pas ce dont vous avez besoin pour m'aider...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
program modell;
uses graph,crt;
const BGI_Pfad = 'c:\tp7\bgi';	         {Pfad far BGI-Dateien z.B. c:\bp\bgi}
	x0 :integer =0;			 {Koordinaten-Ursprung}
	y0 :integer =0;			 {Voreinstellung fur }
	x_text:string = 't/s';    	 {x, y-Achsen-Beschriftung}
	y_text:string = 's/m';
type string10 = string [10];
var Grafiktreiber,Grafikmodus,Fehlercode:integer;
	xp0_abs,yp0_abs,xp_max,yp_max,x_max,y_max:integer;
	x_LE,y_LE:real;

procedure Eingabe_Achsen (var x_text,y_text:string10;var x_LE,y_LE:real);
{Beschriftung und Langeneinheiten der Koordinatenachsen}
begin
	ClrScr;writeln('Beschriftung der');
	write('x-Achse (z.B. t/ 4s) = ');gotoxy(25,2);readln(x_text);
	write('y-Achse (z.B. s/ 8m) = ');gotoxy(25,3);readln(y_text);
	writeln('Langeneinheiten der');
	write('x-Achse (z.B. 4)     = ');gotoxy(25,5);readln(x_LE);
	write('y-Achse (z.B. 8)	    = ');gotoxy(25,6);readln(y_LE);
end;

function x_xp(x:real):integer;
{Anwenderkoordinaten werden in Pixelwerte umgerechnet. Der absolute Nullpunkt des
Anwenders liegt bei (xO_abs=40,yO_abs=GetMaxY-40). Damit liegt der Ursprung (0,0) links
unten auf dem Bildschirm}
var x_pos:real;
begin x_pos:=x+x0;x_xp:=round(x_pos/x_max*xp_max+xp0_abs); end;

function y_yp(y:real):integer;                   {Anwenderkoordinaten in Pixelwerte vgl. x_xp}
var y_pos:real;
begin y_pos:=y+y0;y_yp:=round(yp0_abs-y_pos/y_max*yp_max); end;

procedure Gerade(xp_0,yp_0,xp_1,yp_1:integer);
{ zeichnet eine Gerade von (xp_0,yp_0) nach (xp_1,yp_l) }
begin MoveTo(xp_0,yp_0);LineTo(xp_1,yp_1); end;

procedure Koordinaten_Achsen(x_text,y_text:string10; x0,y0:integer);
{zeichnet ein Koordinatensystem, die Achsen werden mit x_text bzw. y_text beschriftet.
Der Koordinatenursprung liegt bei xO,yO}
var i:integer;
	x_txt,y_txt:string[5];
begin
	Gerade(x_xp(-x0),y_yp(0),x_xp(x_max-x0),y_yp(0));
	Gerade(x_xp(x_max-x0)-5,y_yp(0)-2,x_xp(x_max-x0),y_yp(0));
	Gerade(x_xp(x_max-x0)-5,y_yp(0)+2,x_xp(x_max-x0),y_yp(0));
	Gerade(x_xp(0),y_yp(-y0),x_xp(0),y_yp(y_max-y0));
	Gerade(x_xp(0)+2,y_yp(y_max-y0)+5,x_xp(0),y_yp(y_max-y0));
	Gerade(x_xp(0)-2,y_yp(y_max-y0)+5,x_xp(0),y_yp(y_max-y0));
	outtextxy(x_xp(0)+5,y_yp(y_max-y0),y_text); {Textausgabe im Grafik-Schirm}
	outtextxy(x_xp(x_max-x0)-
	textwidth(x_text),y_yp(0)+textheight('0123456789'),x_text);
	for i:=1-x0 to x_max-1-x0 do       {x_Achse skalieren}
	begin
		str(i,x_txt);gerade(x_xp(i),y_yp(0)+5,x_xp(i),y_yp(0));
		outtextxy(x_xp(i)-textwidth(x_txt),y_yp(0)+textheight('0123456789'),x_txt);
	end;
	for i:=1-y0 to y_max-1-y0 do       {y_Achse ska1ieren}
	begin
		str(i,y_txt);gerade(x_xp(0)-5,y_yp(i),x_xp(0),y_yp(i));
		outtextxy(x_xp(0)-5-textwidth(y_txt),y_yp(i),y_txt);
	end;
end;

procedure Tabelle;	                {mit t,s-Variablen "Der Aufzug", S. 10}
var t,dt,s,v,x,y: real;
	weiter:boolean;
	i:integer;
begin
	dt:=0.01;	                {Schrittweite}
	t:=0; s:=0; v:=5;               {Startwerte}
	weiter:=true;	                {Tabelle ausgeben, solange welter = true ist}
	while weiter do
	begin
		ClrScr;gotoXY(10,1);write(x_text);gotoXY(30,1);write(y_text);
		for i:=3 to 20 do
		begin
			t:=t+dt;		{Zeit in Sekunden}
			if t>10 then v:=0;	{nach 10 s Geschwindigkeit y = O m/s}
			if t>15 then v:=-2.5;	{nach 15 s Geschwindigkeit y = —2,5 m/s}
			s:=s+v*dt;              {zuruckgelegter Weg s in Meter}
			if s<0 then s:=0;
			gotoXY(5,i);write(t);gotoXY(25,i);write(s); {Tabellenwerte ausgeben}
		end;
		gotoXY(10,24);write('Fortsetzung (j/n)');weiter:=(UpCase(ReadKey)='J');
	end;
end;

procedure GrafikEinstellungen;
begin
	Grafiktreiber:=Detect;InitGraph(Grafiktreiber,Grafikmodus,BGI_Pfad);
	Fehlercode:=GraphResult;
	if FehlerCode <> grOK
	then begin writeln('Grafik-Fehler: ',GraphErrorMsg(FehlerCode));
	readln;halt;end;{Startwerte fur die Koordinaten xp.. yp..= Pixelkoordinaten}
	x_max:=15; y_max:=Round(x_max/GetMaxX*GetMaxy);
	xp0_abs:=40; yp0_abs:=GetMaxY-40; {absoluter Ursprung}
	xp_max:=GetMaxX-xp0_abs-20; yp_max:=yp0_abs-20; {max. x-y-Achse}
	Koordinaten_Achsen(x_text,y_text,x0,y0);
end;

procedure Schaubild;	                        { mit t,s-Variablen "Der Aufzug", S. 10}
var t,dt,s,v,x,y: real;
begin
Eingabe_Achsen(x_text,y_text,x_LE,y_LE); <<<=== C'est ici que cela bloque !
GrafikEinstellungen;
	dt:=0. 01;	                        {Schrittweite}
	t:=0; s:=0; v:=5;                       {Startwerte }
	X:=t/x_LE;
	while (x<x_max) and (s>=0) do
	begin
		x:=t/x_LE; y:=s/y_LE;           {Langeneinheiten berechnen }
		PutPixel(x_xp(x),y_yp(y),15);   {Punkt zeichnen}
		t:=t+dt; 		        {Zeit in Sekunden}
		if t>10 then v:=0;	        {nach 10 s Geschwindigkelt v = O m/s}
		if t>15 then v:=-2.5;	        {nach 15 s Geschwindigkeit v = -2,5 m/s}
		s:=s+v*dt;		        {zuruckgelegter Weg s in Meter}
	end;
	readln;				        {warten auf RETURN}
	CloseGraph;
end;
begin					        {Hauptprogramm}
	ClrScr;				        {Bildschirm loschen}
	gotoXY(10,15);write('T=Wertetabelle S=Schaubild');
	if UpCase(ReadKey)='T' then Tabelle else Schaubild;
end.
Si vous pouviez m'aider...

Merci d'avance !