isoterma

esci turbofisica.htm

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.