Enregestrement et pascal

Fermé
hajemido Messages postés 1 Date d'inscription jeudi 24 juillet 2008 Statut Membre Dernière intervention 24 juillet 2008 - 24 juil. 2008 à 10:37
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 - 24 juil. 2008 à 12:33
Bonjour,
salut je veut chercher l'exucution d'exercice pascal d'enregestrement :
program ex ;
uses wincrt ;

type livre =record
nom_livre,nom_auteur :string;
isbn:integer;
end;

tab =array [1..50] of livre;
var
t:tab;

n:integer;

procedure saisie (var n:integer; var t:tab );
var
i:integer;
begin
repeat
writeln('enter le nombre de case');
readln(n);
until n in [2..26];
for i:= 1 to n do
begin
with t[i]do
begin
writeln('nom de livre');
readln(nom_livre);
writeln('nom d auteur');
readln(nom_auteur);
writeln ('enter le isbn');
readln(isbn);
end;
end;
end;

procedure permut(var x,y:livre);
var
z:livre;
begin
z:=x;
x:=y;
y:=x;
end;

procedure maximum (i:integer;t:tab ;var indice :integer);
var
j,max:integer;
begin
indice :=i;
max:=t[i].isbn;
for j :=i+1 to n do
begin
indice:=j;
max:=t[j].isbn;
end;
end;


procedure tri(n:integer;var t:tab);
var
i,max,indice:integer;
begin
for i:=1 to n-1 do
begin
maximum (i,t,indice);
if t[indice].isbn>t[i].isbn then
permut(t[i],t[indice]);
end;
end;

procedure affiche (n:integer;t:tab);
var
i:integer;
begin
for i:= 1 to n do
with t[i]do
begin
write(nom_livre);
write(nom_auteur);
write(isbn);
end ;
end;

{programme principale}
begin
saisie (n,t);
tri(n,t);
affiche(n,t);
end.
A voir également:

1 réponse

KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
24 juil. 2008 à 12:33
Bonjour,

Grosse erreur sur la procedure Permut, qui prend (x,y) et renvoie (y,y) au lieu de (y,x) !
Grosse erreur sur la procedure maximum, qui calcule toujours indice=n !
Sinon quelques défauts ici ou là...

Remarques :

L'unité wincrt est inutile ici !
Il est inutile de déclarer t et n en variables globales puisque tu les passes à chaque fois en paramètres !
Pourquoi mettre n entre 2 et 26 et en même temps configurer tab pour aller jusqu'à 50 ?
De la façon dont est fait le tri, l'ordre est décroissant (voir ma note dans affiche)

Je me suis permis quelques amélioration de présentation...
program ex;

type
    livre=record
          nom_livre,nom_auteur :string;
          isbn:integer;
          end;

    tab=array[1..50] of livre;

procedure saisie(var n:integer;var t:tab);
var i:integer;
begin
     repeat
     write('Entrer le nombre de cases : ');
     readln(n); writeln;
     until n in [2..26];

     for i:=1 to n do
     begin
          with t[i] do
          begin
               write('Nom du livre....... ');
               readln(nom_livre);
               write('Nom de l''auteur.... ');
               readln(nom_auteur);
               write('Code ISBN.......... ');
               readln(isbn);
               writeln;
          end;
     end;
end;

procedure permut(var x,y:livre);
var z:livre;
begin
     z:=x;
     x:=y;
     y:=z;
end;

procedure maximum(i,n:integer;t:tab;var indice:integer);
var j,max:integer;
begin
     indice:=i;
     max:=t[i].isbn;
     for j:=i+1 to n do
         if t[j].isbn>max then begin
                                    indice:=j;
                                    max:=t[j].isbn;
                               end;
end;

procedure tri(n:integer;var t:tab);
var i,indice:integer;
begin
     for i:=1 to n-1 do
     begin
          maximum(i,n,t,indice);
          if t[indice].isbn>t[i].isbn then permut(t[i],t[indice]);
    end;
end;

procedure affiche(n:integer;t:tab);
var i:integer;
begin
     for i:=1 to n do      // affiche dans l'ordre décroissant
     {for i:=n downto 1 do} // affiche dans l'ordre croissant
         with t[i]do
              writeln(isbn,' ',nom_livre,' (',nom_auteur,')');
end;

{programme principal}
var n:integer; t:tab;
begin
saisie (n,t);
tri(n,t);
affiche(n,t);

writeln; write('Fin du programme. Appuyer sur Entree'); readln;
end.
Bonne continuation...
0