Program pascal qui ne fonctionne pas !! svp

bonsoir

voila l'exercice

je suis proche du solution mais il y'a une faute que je ne le trouve pas , svp aider moi

soit un tableau T de n lettres majuscules (de A à Z ) , n étant un entier cmpris entre 5 et 25
on désire trier en ordre croissant les élements de T et les ranger dans un tableau V en utilisant le principe suivant :

1) chercher la plus petite lettre dans T
2)ranger cette lettre dans V
3) répéter n fois les étapes 1 et 2

on desire creer un programme pascal qui permet de saisir les elements du T , trier les elements de T
et d'afficher les element de V .
Configuration: Windows XP
Firefox 2.0.0.12

4 réponses

  1. Bonjour,

    J'ai regardé ton programme

    voici ce que j'ai relevé:
    Les variables passées aux procédures sont locales, elles n'existent que dans la procédure, donc le taableau que tu passe en paramètre cesse d'exister quand tu sort des procédures. Les tableaux T,V et la variable n sont globales donc connues de tout le programme, pas besoins de les passer aux procédures.

    program exercice;
    uses wincrt;
    
    type
    tab=array[1..25]of char;
    var
    n:integer;
    v,t:tab;
    
    procedure remplir;{variables globales communes à tout le programme}
    var
    i:integer;
    begin
      repeat
         writeln('donner n ');
         readln(n);
      until n in [5..25] ;
    
    {ici la boucle for doit englober l la boucle repeat}
    {la boucle for compte les elements de T}
    {la boucle repeat verifie les elements avant de passer au suivant}
      for i :=1 to n do
      begin
         repeat
           writeln('donner l''elment n',i);
           readln (t[i]);
         until (t[i] in ['A'..'Z']);
       end;
    end;
    
    procedure tri;
    var
    min:char;
    pos,k,i:integer;
    begin
       for k:=1 to n do
       begin
         min:=t[1];{On commence toujours à 1}
         pos:=1;
         for i:=1 to n do
         begin
           if t[i] < min then
           begin
             min:=t[i];
             pos:=i;
           end;
         end;
         v[k]:=min;
         t[pos] :='a';
       end;
    end;
    
    procedure affiche;
    var
    k:integer;
    begin
      for k:=1 to n do
        write(v[k] ,' / ');{ici il faut afficher V et non pas T}
    end;
    
    begin
    remplir;
    tri;
    affiche;
    end.
    
    1. voila mon essai

      program exercice;
      uses wincrt;
      type
      tab=array[1..25]of char;
      var
      n:integer;
      v,t:tab;
      procedure remplir (var n:integer;var t,v:tab);
      var
      i:integer;
      begin
      repeat
      writeln('donner n ');
      readln(n);
      until n in [5..25] ;
      repeat
      for i :=1 to n do
      begin
      writeln('donner l''elment n',i);
      readln (t[i]);
      end;
      until (t[i] in ['A'..'Z']);
      end;

      procedure tri (n:integer; t:tab; var v:tab);
      var
      min:char;
      pos,k,i:integer;
      begin
      for k:=1 to n do
      begin
      min:=t[k];
      pos:=1;
      for i:=2 to n do
      if t[i] <min then
      begin
      min:=t[i];
      pos:=i;
      end;

      v[k]:=min ;
      t[pos] :='a'

      end;
      end;
      procedure affiche (n:integer;v:tab);
      var
      k:integer;
      begin
      for k:=1 to n do
      write(t[k] ,' / ');
      end;

      begin
      remplir(n,t,v);
      tri(n,t,v);
      affiche(n,v);
      end.