Exercice du TD10

program calculatrice_tp10;
type
liste = ^maillon;
type_elts = integer;
{ ici mettre real a la place de integer, comme demander dans l'enonce ! }
maillon = record
suivant: liste;
val: type_elts;
end;
pile = liste;

var
p: pile;
n: longint;
i: integer;
test: boolean;
choix: str255;
{ Sur PC mettre string a la place de str255 }

{ On reutilise les fonctions et procedure du TP9 :-) }
procedure init_liste (var l: liste);
begin
l := nil;
end;
{ Fin de 'init' }

function vide_liste (l: liste): boolean;
begin
vide_liste := (l = nil); { renvoie true si la liste est vide }
end;
{ Fin de 'vide_liste' }

procedure insere_tete_liste (elt: type_elts; var l: liste);
var
p: liste;
begin
p := l;
new(l);
l^.val := elt;
l^.suivant := p;
end;
{ Fin de 'insere_tete_liste' }

procedure parcours_liste (l: liste);
begin
if not vide_liste(l) then
begin
parcours_liste(l^.suivant);
writeln(l^.val : 3);
end;
end;
{ Fin de 'parcours_liste' }

procedure super_tete (var l: liste);
var
p: liste;
begin
if l = nil then
writeln('Votre liste est vide, impossible de supprimer la tete')
else
begin
p := l;
l := l^.suivant;
dispose(p);
end;
end;
{ Fin de 'super_tete' }

procedure supprime_liste (var l: liste);
begin
if l^.suivant = nil then
{ On doit donc remonter jusqu'au premier }
begin
supprime_liste(l^.suivant);
dispose(l);
end;
end;
{ Fin de 'supprime_liste' }

function longueur_liste (l: liste): integer;
begin
{ On considere la liste non-nulle }
if vide_liste(l) then
longueur_liste := 0
else
begin
if l <> nil then
begin
if l = nil then
longueur_liste := 0
else
longueur_liste := 1 + longueur_liste(l^.suivant);
end;
end;
end;
{ Fin de 'longueur_liste' }

function dernier_liste (l: liste): liste;
begin
if vide_liste(l) then
dernier_liste := nil
else
begin
if l^.suivant <> nil then
dernier_liste := dernier_liste(l^.suivant)
else
dernier_liste := l;
end;
end;
{ Fin de 'dernier_liste' }

procedure inser_classe_elt_liste (i: type_elts; var l: liste);
{ Ex2/a (insertion) }
var
p, r: liste;
begin
if vide_liste(l) then
begin
insere_tete_liste(i, l);
end
else if (l^.val > i) then
inser_classe_elt_liste(i, l^.suivant)
else
begin
new(p);
p^.val := l^.val;
l^.val := i;
p^.suivant := l^.suivant;
l^.suivant := p;
end;
end;
{ Fin de 'inser_classe_elt_liste' }

procedure supper_elt_liste (i: type_elts; var l: liste);
{ Ex2/c }
var
p, q: liste;
begin
if vide_liste(l) then
begin
writeln('Votre liste est vide.');
readln;
{ pause }
end
else if (l^.val > i) then
{ Rappel: la liste est triee }
begin
if l^.suivant <> nil then
supper_elt_liste(i, l^.suivant)
else
writeln('La valeur ', i : 2, ' n''est pas dans la liste');
end
else if (l^.val = i) then
begin
p := l^.suivant;
q := l;
l := p;
p := q;
dispose(p);
end;
end;
{ Fin de 'supper_elt_liste' }
{ Fin des rappels des fonctions et procedure du TP9 }


{ Debut de la resolution de la question a }
procedure pile_init (var p: pile);
begin
init_liste(p);
end;
{ Fin de 'pile_init' }

function est_vide (p: pile): boolean;
begin
est_vide := vide_liste(p);
end;
{ Fin de 'est_vide' }

function depile (var p: pile): type_elts;
begin
depile := p^.val;
super_tete(p);
end;
{ Fin de 'depile' }

procedure empile (var p: pile; i: type_elts);
begin
insere_tete_liste(i, p);
end;
{ Fin de 'empile' }

function longueur_pile (p: pile): integer;
begin
longueur_pile := longueur_liste(p);
end;
{ Fin de 'longueur_pile' }

procedure parcours_pile (p: pile);
begin
parcours_liste(p);
end;
{ Fin de 'parcours_pile' }

procedure supprime_pile (p: pile);
begin
supprime_liste(p);
end;
{ Fin de 'parcours_pile' }
{ Fin de la resolution de la question a }

{ Debut de la resolution de la question b }
function operation (op: char; y, x: type_elts): type_elts;
begin
case op of
'+':
x := x + y;
'*':
x := x * y;
'-':
x := x - y;
'/':
begin
if y <> 0 then
x := x div y
{ Sur PC mettre le symbole / a la place de div }
else
begin
writeln(' * Erreur Fatale : OVERFLOW *');
writeln('La division par zéro est impossible');
supprime_pile(p);
end;
end;
otherwise
{ inutile, mais il vaut mieux prévenir que guérir }
begin
writeln('Opération non-supportee dans cette version');
writeln('Contacter l''auteur a http://www.Software-DS.com');
end;
end;
writeln(x : 0);
operation := x;
end;
{ Fin de 'operation' }

function operation2 (op: char; y: type_elts): type_elts;
begin
case op of
's':
writeln('La fonction sinus n''existe pas en Pascal a ma connaissance !');
'r':
y := sqr(y);
{ Pour PC mettre sqrt a la place de sqr }
otherwise { inutile, mais il vaut mieux prévenir que guérir }
begin
writeln('Opération non-supportée dans cette version');
writeln('Contacter l''auteur à www.Software-DS.com');
end;
end;
writeln(y : 0);
operation2 := y;
end;
{ Fin de 'operation2' }


begin
{ Corps du programme }
pile_init(p);
test := true;
writeln('Calculatrice TI-DS de Software-DS.com v1.0');
writeln('Entrer une valeur ou une opération : + - * / s r');
writeln('s: sinus r: racine carré');
writeln(' Q pour quitter.');
{ chaine vide=Q }
writeln;

while test do
begin
readln(choix);
if (choix = 'Q') or (choix = 'q') then
{ Pour quitter le programme }
test := false
else
begin
if (choix = '+') or (choix = '-') or (choix = '*') or (choix = '/') then
begin
if longueur_pile(p) >= 2 then
empile(p, operation(choix, depile(p), depile(p)))
else
begin
writeln('Fatal Error: Sortie du programme www.Software-DS.com');
writeln('il manque un argument !');
supprime_pile(p);
end;
end
else if (choix = 'r') or (choix = 's') then
begin
if longueur_pile(p) >= 1 then
empile(p, operation2(choix, depile(p)))
else
begin
writeln('Fatal Error: Sortie du programme www.Software-DS.com');
writeln('il manque un argument');
supprime_pile(p);
end;
end
else
begin
StringToNum(choix, n);
{ Sur PC utilisez l'instruction val(…) pour convertir une chaine de caractere en nombre }
i := n;
empile(p, i);
end;

end;
end;
{ while }

supprime_pile(p);
{ désallocation ! }
writeln;
writeln('©2001 All Rights Reserved to Software-DS.com');
{ ©2001 All Rights Reserved to http://www.Software-DS.com 10/12/01 }
end.





Haut de la page - Page générée en 0.00175 sec.
 

1845837 visiteurs.   ©2001-2024 All Rights Reserved to Software-DS.com
Made with a mac  
Confidentialité