turbo pascal e legge di boyle
program isoterma; (* legge isoterma dei gas boyle *) (* disco 65 dispensa 49 \tu53\ con turbo pascal v.5 *)
uses crt,graph; type string15=string[20]; type vet=array[1..800] of byte;
var sosta,codice,y:integer; varia,volume,pressione,volume1:string15; stantu,mano:vet;
procedure presenta; begin writeln('legge dei gas:isoterma o di boyle'); writeln('premi return,prego');readln;clrscr; end;
procedure leggi; begin writeln('leggi ricavate dalla osservazione'); writeln; writeln('premi return,prego'); readln;clrscr; end;
procedure grafica(f:integer); (* attiva pagina grafica*) (* coordinate finestra,colore sfondo e disegno *) var sc,tp:integer; stringa:string;
begin sc:=0; (* valore risoluzione 0,1,2,3,4,5,8,9 *) tp:=0; (* valore valido 1 - 0 palette *) stringa:='c:\'; (* indica ove cercare GRAPH *) initgraph(sc,tp,stringa); (* attiva scheda grafica *) setbkcolor(f); (* colore sfondo *) end;
procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); setcolor(14); end;
procedure pausa; (* premere return per proseguire *) var ch:char; begin testo(10,430,'premi return,prego'); ch:=readkey; setcolor(1); testo(10,430,'premi return,prego'); setcolor(14); end;
procedure stantuffo; begin setfillstyle(1,14); bar(20,20,117,30); getimage(20,20,117,30,stantu); setfillstyle(1,2); bar(200,20,217,30); getimage(200,20,217,30,mano); setfillstyle(1,1); bar(20,20,117,30); setfillstyle(1,1); bar(200,20,217,30); end;
procedure cella; begin setlinestyle(0,0,3); testo(10,10,'cilindro con stantuffo mobile'); testo(10,30,'gas sottoposto a compressione'); testo(300,10,'manometro e variazione pressione'); testo(300,30,'del gas in condizioni isoterme'); testo(10,80,'volume iniziale'); testo(10,420,'volume finale'); testo(300,80,'pressione finale'); testo(300,420,'pressione iniziale'); setcolor(5); testo(450,80,'volume*pressione=K'); setcolor(4); rectangle(100,90,200,410); rectangle(238,90,260,410); rectangle(200,400,238,410); settextstyle(0,1,1); testo(80,150,'volume in diminuzione'); testo(280,150,'pressione in aumento'); settextstyle(0,0,0); end;
procedure muove; var n:integer; begin for n:=90 to 390 do (* volume totale 300*) begin putimage(103,n,stantu,1); putimage(240,480-n,mano,0); delay(sosta); putimage(103,n,stantu,1); end; putimage(103,n,stantu,1); end;
procedure gradua; var n:integer; p:real; begin setcolor(2); p:=30; for n:=100 to 390 do begin str(400-n,volume); str(300-(390-n),volume1); str(p,pressione); line(220,100,220,410); if (n/10=trunc(n/10)) then line (210,n,230,n); if (n/5=trunc(n/5)) then line (215,n,225,n); if (n/10=trunc(n/10)) then testo (10,n,volume); if (n/10=trunc(n/10)) then testo (470,n,volume1); if (n/10=trunc(n/10)) then testo (300,n,pressione); if (n/10=trunc(n/10)) then testo (500,n,pressione); if (n/10=trunc(n/10)) then p:=p-1; end; end;
procedure spiega; begin writeln('interpretazione del fenomeno e delle sue leggi '); writeln('secondo la teoria cinetica'); writeln; writeln('arrivederci:premi return,prego'); pausa; end;
begin (* programma principale *) clrscr; grafica(1); (* attiva pagina grafica *) cella; sosta:=100; gradua; stantuffo; muove; pausa; end.