listati per programmi in turbo pascal
gas
iso.pto , isoterma.pro
program iso; (* 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 k,v1,v2,p1,sosta,codice,y:integer; varia,volume,pressione,volume1,vs1,vs2,ps1,ps2,ps3,ks:string15; stantu,mano:vet; p2,px:real; procedure presenta; begin writeln('legge dei gas:isoterma o di boyle'); writeln; writeln('per una determinata massa gassosa,di qualsiasi natura'); writeln('se si mantiene la temperatura costante'); writeln('e si varia la pressione del gas o il volume a disposizione'); writeln('il prodotto tra la pressione e il volume rimane costante'); writeln; writeln('la costante varia in funzione dei valori iniziali'); writeln('PRESSIONE * VOLUME = COSTANTE '); writeln('pressione e volume sono inversamente proporzionali P=K/V '); writeln; writeln('premi return,prego');readln;clrscr; writeln('provare prima con valori indicati,per maggiore evidenziazione:'); writeln('per valori fuori del campo si assume volume=400..pressione=1'); writeln; writeln('volume...310..400..600.800...900 pressione..1..10..20..50..100'); writeln('indica volume iniziale da comprimere:'); writeln('volume >= 310 e <=900,intero,multiplo di 10 ');readln(v1); if (v1<310) then v1:=400; if (v1>900) then v1:=400; writeln('indica pressione iniziale del gas da comprimere:valori interi'); readln(px); p1:=trunc(px); if (p1<1) or (p1>100) then p1:=1; p1:=trunc(p1); writeln('indica velocita simulazione:10=veloce..500=lento..');readln(sosta); writeln('premi return,prego');readln;clrscr; end; procedure leggi; begin writeln('leggi ricavate dalla osservazione'); writeln('a temperatura costante,per una determinata massa gassosa'); writeln('indipendentemente dalla sua natura,'); writeln('il prodotto tra la pressione e il volume rimane costante'); 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 str(v1,vs1); str(v2,vs2); str(p1,ps1); str(p2,ps2); 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,60,'volume iniziale='+vs1); testo(10,420,'volume finale='+vs2); testo(300,60,'pressione finale='+ps2); testo(270,420,'pressione iniziale='+ps1); setcolor(5); testo(300,80,'pressione*volume=K:'+ks); 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,u:integer; begin for n:=0 to 290 do (* volume totale 300*) begin u:=100+n; putimage(103,u,stantu,1); putimage(240,490-u,mano,0); if (n=50) or (n=100) or (n=150) or (n=200) or (n=250) then delay(3000); delay(sosta); putimage(103,u,stantu,1); end; putimage(103,u,stantu,1); end; procedure gradua; var n,u:integer; begin setcolor(2); n:=100; for u:=0 to 300 do begin str(v1-u,volume); str(k/(v2+u),ps2); str(v2+u,volume1); line(220,100,220,410); setcolor(2); if (u/10=trunc(u/10)) then testo (470,n,volume); setcolor(14); if (u/10=trunc(u/10)) then line (210,n,230,n); if (u/5=trunc(u/5)) then line (215,n,225,n); if (u/10=trunc(u/10)) then testo (10,n,volume); setcolor(4); if (u/10=trunc(u/10)) then testo (440,n,volume1); setcolor(4); if (u/10=trunc(u/10)) then testo (290,n,ps2); if (u/10=trunc(u/10)) then n:=n+10; end; end; procedure grafico; var a,v:integer; begin setcolor(2); line(500,410,500,80); line(500,410,620,410); testo(510,80,'v.i.='+vs1); setcolor(2); testo(450,420,'p.f.='+ps3); v:=1; line(521,400,521,100); for a:=1 to 100 do begin putpixel(520+a,400-trunc(100/v),14); line(520+a,400,520+a,400-trunc(100/v)); v:=v+1; end; end; procedure spiega; begin writeln('interpretazione del fenomeno e delle sue leggi '); writeln('secondo la teoria cinetica'); writeln; writeln('la pressione del gas dipende dalla frequenza e dalla energia'); writeln('degli urti delle parricelle presenti nel contenitore:'); writeln('la energia rimane costante se rimane costante la temperatura'); writeln('la frequenza degli urti aumenta se aumenta la densita'); writeln('mediante riduzione del volume a disposizione'); writeln; writeln('arrivederci:premi return,prego'); pausa; end; begin (* programma principale *) clrscr; presenta;leggi; (* eliminabile *) v2:=v1-300; k:=v1*p1; p2:=(k/v2); str(p2,ps3); str(k,ks); grafica(1); (* attiva pagina grafica *) cella; gradua;stantuffo;muove;grafico; pausa; textmode(2); spiega; (* eliminabile *) end.
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.