Enregestrement et pascal

hajemido Messages postés 1 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
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.
Configuration: Windows XP
Internet Explorer 6.0

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    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