1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
| PROGRAM principal;
//-----------------------------------------------STRUCTURE VOITURE-------------------------------------------------------------------------------------//
TYPE t_voiture = record
marque : string[30];
modele : string[20];
carb : char;
annee : integer;
prix : integer;
end;
//----------------------------------------------------------------LISTE CHAINEE POUR MANIPULER LES INFOS DU FICHIER VOITURES.DAT-------------------------------------------//
type
Liste = ^Cellule;
Cellule = record
contenu: t_voiture;
suivant: Liste;
end;
//----------------------------------------------------------------PROCEDURE QUI CHARGE EN MEMOIRE LES VOITURES (DANS LA LISTE CHAINEE)-------------------------------------//
PROCEDURE charge_infos (VAR liste_voit: Liste); {sous programme de la question 1}
VAR
fichVoit : file of t_voiture;
infos : t_voiture;
ptr : Liste;
BEGIN
Assign (fichVoit, 'voitures.dat');
Reset (fichVoit);
new(ptr);
ptr := liste_voit;
while not Eof(fichVoit) do
begin
Read(fichVoit,infos);
ptr^.contenu.marque := infos.marque;
ptr^.contenu.modele := infos.modele;
ptr^.contenu.carb := infos.carb;
ptr^.contenu.annee := infos.annee;
ptr^.contenu.prix := infos.prix;
ptr := ptr^.suivant;
end;
END;
//----------------------------------------------------------------PROCEDURE AFFICHANT A L'ECRAN LES VOITURES DISPO A LA VENTE-----------------------------------------------//
{sous programme de la question 2}
PROCEDURE affiche_voitures (VAR liste_voit: Liste);
VAR
ptr : Liste;
BEGIN
new(ptr);
ptr := liste_voit;
while (ptr <> nil) do
begin
writeln(ptr^.contenu.marque);
writeln(ptr^.contenu.modele);
writeln(ptr^.contenu.carb);
writeln(ptr^.contenu.annee);
writeln(ptr^.contenu.prix);
ptr := ptr^.suivant;
end
END;
//--------------------------------------------------------PROCEDURE AFFICHANT LE NOMBRE DE VOITURES EN FONCTION DU CARBURANT---------------------------------------------//
{sous programme de la question 3}
FUNCTION nombre_carb_recur (carb: char; liste_voit: Liste): integer;
BEGIN
if (liste_voit = nil) then
nombre_carb_recur:=0
else
if (liste_voit^.contenu.carb = carb) then
nombre_carb_recur := 1 + nombre_carb_recur(carb, liste_voit^.suivant)
else
nombre_carb_recur := nombre_carb_recur(carb, liste_voit^.suivant);
END;
//----------------------------------------------------------FONCTION AFFICHANT L'ANNEE ET RENVOIT L'ADRESSE MEMOIRE D'UN VEHICULE-----------------------------------------//
{sous programme de la question 4}
FUNCTION annee_adresse(liste_voit: Liste): word;
VAR
adr : word;
annee : integer;
BEGIN
annee:=liste_voit^.contenu.annee;
while(liste_voit <> nil) do
begin
if(liste_voit^.contenu.annee < (liste_voit^.suivant)^.contenu.annee) then
begin
annee := (liste_voit^.suivant)^.contenu.annee;
adr := liste_voit;
end
else
liste_voit := liste_voit^.suivant;
end;
annee_adresse:= adr;
writeln('L''année de fabrication du vehicule le plus recent : ', annee);
END;
//----------------------------------------------------------PROCEDURE QUI SUPRIMME L'ADRESSE DONNEE EN PARAMETRES -------------------------------------------------------//
{sous programme de la question 5}
PROCEDURE supprime_case_recur(adr: Liste; VAR liste_voit: Liste);
VAR
ptr: Liste;
BEGIN
if (liste_voit <> nil) then
if (liste_voit^.suivant = adr) then
begin
ptr := liste_voit;
liste_voit := liste_voit^.suivant;
dispose(ptr)
end
else
supprime_case_recur(adr, liste_voit^.suivant);
END;
//-------------------------------------------------------------------PROGRAMME PRINCIPAL----------------------------------------------------------------------------------//
VAR
liste_voit : Liste;
exe : integer;
E : char;
adr : word;
BEGIN
charge_infos (liste_voit);
writeln('Que voulez-vous faire ?');
writeln('1) Quittez le logiciel');
writeln('2) Afficher les véhicules disponible a la vente');
writeln('3) Afficher le nombre de vhéicules fonctionant à une énérgie donnée');
writeln('4) Supprimer le véhicule le plus récent de la liste chainée');
readln (exe);
If exe=1 then
exit;
if exe=2 then
affiche_voitures (liste_voit);
if exe=3 then
begin
writeln('Donner le carburant, (E,D ou Z)');
readln(E);
nombre_carb_recur (E, liste_voit);
end;
if exe=4 then
begin
adr := annee_adresse(liste_voit);
supprime_case_recur(adr,liste_voit);
end;
END. |
Partager