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.