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. 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.
    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.