{*************************************************************

               Le CyberZo‹de Qui Fr‚tille

  http://www.multimania.com/cyberzoide/info/turbo/turbo.htm
               cyberzoide@multimania.com

***************************************************************}


program tp3;

uses crt,graph;

const n=639;
      deltat=1E-07;

type tableau=array[1..n] of real;

function di(l,r,c,q,i:real):real;
begin
di:=q/(l*c)-r*i/l;
end;

procedure resolution(var q,i:real; l,r,c:real);
begin
i:=i+di(l,r,c,q,i)*deltat;
q:=q-i*deltat;
end;

procedure creertab(var tq:tableau; var i,q:real; l,r,c:real);
var k:integer;
begin
for k:=1 to n do
    begin
    resolution(q,i,l,r,c);
    tq[k]:=q;
    end;
end;

procedure affiche(tq:tableau);
var k:integer;
    t:real;
begin
t:=0;
for k:=1 to n do
    begin
    writeln('A t=',t:0:8,' q vaut =',tq[k]:0:9);
    t:=t+deltat;
    if (k mod 20)=0 then
       begin
       readln;
       clrscr;
       end;
    end;
end;

procedure courbe(tq:tableau; r,l,c:real);
var mode,VGAHi,xmax,ymax,xorig,yorig,k:integer;
    ech:real;
    ch:string[10];
    commentaire:string[40];
begin
clrscr;
mode:=detect;
initgraph(mode,VGAHi,'c:\bp\bgi');
xmax:=getmaxx;
ymax:=getmaxy;
xorig:=0;
yorig:=ymax div 2;
ech:=ymax/(2*tq[1]);
setcolor(1);
line(xorig,yorig,xmax,yorig);
line(xorig,0,xorig,ymax);
setcolor(14);
for k:=1 to n-1 do line(k,round(yorig-tq[k]*ech),k+1,round(yorig-tq[k+1]*ech));
setcolor(15);
str(r:10,ch);
commentaire:='R='+ch;
str(l:10,ch);
commentaire:=commentaire+' L='+ch;
str(c:10,ch);
commentaire:=commentaire+' C='+ch;
settextstyle(defaultfont, horizdir, 1);
outtextxy(xmax div 2, ymax-20, commentaire);
readln;
closegraph;
end;

procedure saisie(var r,l,c:real);
begin
repeat
writeln('Valeur utilis‚e pour la premiŠre courbe : R=100 Ohms.');
write('Entrez la nouvelle valeur de la r‚sistance (positive) : ');
readln(r);
until r>0;
repeat
writeln('Valeur utilis‚e pour la premiŠre courbe : L=1E-3 Henrys.');
write('Entrez la nouvelle valeur de l''inductance (positive) : ');
readln(l);
until l>0;
repeat
writeln('Valeur utilis‚e pour la premiŠre courbe : C=1E-9 Farads.');
write('Entrez la nouvelle valeur de la capacit‚ (positive) :');
readln(c);
until c>0;
end;

var tq:tableau;
    l,r,c,v0,q0,i0:real;
    reponse:char;

BEGIN
l:=1E-03; r:=100; c:=1E-09; v0:=100; q0:=c*v0; i0:=0;

repeat
creertab(tq,i0,q0,l,r,c);

writeln('D‚sirez-vous afficher … l''‚cran le contenu du tableau [O/N] ?');
readln(reponse);
reponse:=upcase(reponse);
if reponse='O' then affiche(tq);

courbe(tq,r,l,c);

writeln('D‚sirez-vous faire une autre ‚tude avec des valeurs diff‚rentes de R, L et C [O/N] ?');
readln(reponse);
reponse:=upcase(reponse);
if reponse='O' then saisie(r,l,c);
until reponse<>'O';

END.