listati per programmi in turbo pascal
ottica:: specchi, rifrazione
(* conca1.fis immagini specchi concavi *) program concavi; uses crt; var dsorgente,dimmagine,altezzai,ingrandimento:real; altezzas,fuoco:integer; contatore:integer; b:string; begin clrscr; writeln('legge punti coniugati per specchi concavi e lenti convesse'); writeln('notare segmo + - per distanza,altezza immagine '); writeln; b:='------------------------------------------------------'; fuoco:=40; dsorgente:=120; altezzas:=50; for contatore:=1 to 11 do begin if dsorgente=70 then writeln(b); if dsorgente=fuoco then begin dsorgente:=dsorgente-10; writeln('sorgente su fuoco=',fuoco,'..immagine a infinito'); writeln(b); end; dimmagine:=fuoco*dsorgente/(dsorgente-fuoco); ingrandimento:=dimmagine/dsorgente; altezzai:= ingrandimento*altezzas; write('dsorgente=',dsorgente:3:0,'...dimmagine=',dimmagine:3:0); write('..ingrandimento=',ingrandimento:3:1); writeln('..altezzas=',altezzas,'..altezzai=',altezzai:3:0); dsorgente:=dsorgente-10; end; writeln('premi enter per finire'); readln; end.
(* conca1.fis immagini specchi concavi *) program concavi; uses crt; var dsorgente,dimmagine,altezzai:real; altezzas,fuoco:integer; contatore:integer; begin clrscr; fuoco:=40; dsorgente:=120; altezzas:=50; for contatore:=1 to 11 do begin if dsorgente=fuoco then begin dsorgente:=dsorgente-10; writeln('sorgente su fuoco=immagine a infinito'); end; dimmagine:=fuoco*dsorgente/(dsorgente-fuoco); altezzai:= dimmagine*altezzas/dsorgente; write('dsorgente=',dsorgente:3:0,'...dimmagine=',dimmagine:3:0); writeln('...altezzas=',altezzas,'...altezzai=',altezzai:3:0); dsorgente:=dsorgente-10; end; writeln('premi enter per finire'); readln; end.
(* conca2.fis immagini specchi concavi e lenti convesse*) program concavi; uses crt; var p,q,i,g:real; s,f:integer; contatore,passo:integer; b:string; begin clrscr; b:='----------------------------------------------------'; f:=40; p:=120; s:=50; passo:=10; writeln('legge punti coniugati per specchi concavi o lenti convergenti'); writeln('osservare variazione segno per q,g,i '); writeln('fuoco=40..posizione sorgente iniziale=120..sorgente=50 '); writeln; for contatore:=1 to 10 do begin if p=2*f -passo then writeln(b); if p=f then begin writeln('sorgente su fuoco=immagine a infinito'); p:=p-passo; end; q:=f*p/(p-f); g:=q/p; i:= s*g; write('dsorgente=',p:3:0,'...dimmagine=',q:3:0); writeln('...g=',g:3:2,'...altezzas=',s,'...altezzai=',i:3:0); p:=p-10; end; writeln('premi enter per finire'); readln; end.
(* conve1.fis immagini specchi convessi e lenti divergenti *) program concavi; uses crt; var p,q,i,g:real; s,f:integer; contatore,passo:integer; b:string; begin clrscr; b:='----------------------------------------------------'; f:=-40; p:=120; s:=50; passo:=10; writeln('legge punti coniugati per specchi convessi o lenti divergenti'); writeln('osservare variazione segno per q,g,i '); writeln('fuoco=-40..posizione sorgente iniziale=120..sorgente=50 '); writeln; for contatore:=1 to 10 do begin q:=f*p/(p-f); g:=q/p; i:= s*g; write('dsorgente=',p:3:0,'...dimmagine=',q:3:0); writeln('...g=',g:3:2,'...altezzas=',s,'...altezzai=',i:3:0); p:=p-10; end; writeln('premi enter per finire'); readln; end.
(* dive1.fis immagini specchi convessi e lenti concave *) program dive1; uses crt; var dsorgente,dimmagine,altezzai,ingrandimento:real; altezzas,fuoco:integer; contatore:integer; b:string; begin clrscr; writeln('legge punti coniugati per specchi convessi e lenti concave'); writeln('notare segmo + - per distanza,altezza immagine '); writeln; b:='------------------------------------------------------'; fuoco:=-40; dsorgente:=120; altezzas:=50; for contatore:=1 to 11 do begin dimmagine:=fuoco*dsorgente/(dsorgente-fuoco); ingrandimento:=dimmagine/dsorgente; altezzai:= ingrandimento*altezzas; write('dsorgente=',dsorgente:3:0,'...dimmagine=',dimmagine:3:0); write('..ingrandimento=',ingrandimento:3:1); writeln('..altezzas=',altezzas,'..altezzai=',altezzai:3:0); dsorgente:=dsorgente-10; end; writeln('premi enter per finire'); readln; end.
(* rifra1.fis indice di rifrazione *) program rifra1; uses crt; var i,r,n:real; a,seni,senr,cosr,tanr:real; contatore,passo:integer; b:string; begin clrscr; b:='----------------------------------------------------'; i:=10; n:=1.55; (* oppure metti n:=1.33 *) passo:=10; writeln('legge della rifrazione:passaggio da aria ad acqua o vetro '); writeln('n acqua=1.33 n vetro=1.52 '); writeln; for contatore:=1 to 9 do begin seni:=sin(i*3.14/180); senr:=seni/n; cosr:=sqrt(1-sqr(senr)); tanr:=senr/cosr; r:=arctan(tanr)*180/3.14; write('angolo i=',i:2:0,'....sin(i)=',seni:2:2); writeln('....sin(r)=',senr:3:2,'....r=',r:2:0,'...n=',seni/senr:2:2); i:=i+passo; end; writeln('premi enter per finire'); readln; end.
(* rifra1a.fis indice di rifrazione *) program rifra1a; uses crt; var i,r,n:real; a,seni,senr,cosr,tanr:real; contatore,passo,fine:integer; b:string; begin clrscr; b:='----------------------------------------------------'; i:=10; n:=1.55; (* oppure metti n:=1.33 *) passo:=10; fine:=9; writeln('legge della rifrazione:passaggio da aria ad acqua o vetro '); writeln('n acqua=1.33 n vetro=1.52 '); writeln; for contatore:=1 to fine do begin seni:=sin(i*3.14/180); senr:=seni/n; cosr:=sqrt(1-sqr(senr)); tanr:=senr/cosr; r:=arctan(tanr)*180/3.14; write('angolo i=',i:2:0,'....sin(i)=',seni:2:2); writeln('....sin(r)=',senr:3:2,'....r=',r:2:2,'...n=',seni/senr:2:2); i:=i+passo; end; writeln('premi enter per finire'); readln; end.
(* rifra2.fis indice di rifrazione e angolo limite *) program rifra2; uses crt; var i,r,n:real; a,seni,senr,cosr,tanr:real; contatore,passo:integer; b:string; begin clrscr; b:='----------------------------------------------------'; i:=1; n:=1/1.55; (* oppure metti n:=1.33 *) passo:=1; writeln('legge della rifrazione:passaggio da acqua o vetro ad aria '); writeln('n acqua=1.33 n vetro=1.55 '); writeln; for contatore:=1 to 40 do begin if (contatore=10) or (contatore=20) or(contatore=30) then begin writeln('------premi enter--------'); readln; end; seni:=sin(i*3.14/180); senr:=seni/n; cosr:=sqrt(1-sqr(senr)); tanr:=senr/cosr; r:=arctan(tanr)*180/3.14; write('angolo i=',i:2:0,'....sin(i)=',seni:2:2); writeln('....sin(r)=',senr:3:2,'....r=',r:2:0,'...n=',seni/senr:2:2); i:=i+passo; end; writeln('premi enter per finire'); readln; end.
(* rifra3.fis indice di rifrazione e angolo limite *) program rifra3; uses crt; var i,r,n:real; a,seni,senr,cosr,tanr:real; contatore,passo:integer; b:string; procedure riflessione; begin writeln('angolo incidenza=',i:2:2,'...angolo riflessione=',i:2:2); end; procedure rifrazione; begin clrscr; b:='----------------------------------------------------'; i:=5; n:=1/1.55; passo:=5; writeln('legge della rifrazione:passaggio da acqua o vetro ad aria '); writeln(' n vetro=1/1.55 '); writeln; for contatore:=1 to 17 do begin if i<=40 then begin seni:=sin(i*3.14/180); senr:=seni/n; cosr:=sqrt(1-sqr(senr)); tanr:=senr/cosr; r:=arctan(tanr)*180/3.14; write('angolo i=',i:2:0,'....sin(i)=',seni:2:2); writeln('....sin(r)=',senr:3:2,'....r=',r:2:0,'...n=',seni/senr:2:2); i:=i+passo; end else begin i:=i+passo; riflessione; end; end; writeln('angolo limite tra 40 e 50:riflessione totale'); writeln('premi enter per finire'); end; begin rifrazione; readln; end.