Algorithe en pascal

Bonjour,
j'ai un probleme de resoudre un exercice de programmation et je suis debutante en cette matiere, alors je demande l'aide de resoudre cet exercice
l'exercice:
on se propose de saisir un entier N de trois chiffres non nuls , de determiner et d'afficher tous les nombres qui peuvent etre formés par les chiffres de N , ainsi que le plus petit et le plus grand de ces nombres.
exp:
pour N=427
les nombres formés par les chiffres de N sont: 427,472,247,274,742,724.
le plus petit nombre est : 247
le plus grand nombre est 742
je deja essayer de faire
l'algorithme de programme principal
0) debut exercice
1)proc saisir (N)
2)proc recherche (n)[integre la permitation des chiffres (proc permit) et l'affichage (proc affiche)]
3)fin exercie.

algorithme de la procedure saisir ;
0)procedure saisir (var n :entier)
1)repeter
ecrire("n=") , lire (n)
jusqu'a n dans [100..999]
2)fin saisir .
et j'ai stopper là
merci d'avance de m'aider svp
Configuration: Windows XP
Firefox 3.5.7

2 réponses

  1. Modérateur
    Salut,

    on peut aussi créer le plus petit nombre en rangeant de gauche à droite les chiffres dans l'ordre croissant et inversement pour le plus grand nombre, ça évite le parcours du tableau...
    0
    1. voila une traduction en pascal pour l'exercice :

      program possibilites;
      uses wincrt;
      type tab= array [0..6] of integer;
      var n,i,x,y,z,min,max:integer;
      T:tab;
      procedure saisir(var n:integer);
      begin
      repeat
      write('n='); readln(n);
      until (n>=100) and (n<=999);
      end;

      procedure nombres(var x,y,z:integer;var T:tab);
      begin
      x:= (n div 100);
      y:= ((n mod 100)div 10);
      z:= ((n mod 100) mod 10);

      T[1]:=(x*100)+(y*10)+z;
      T[2]:=(x*100)+(z*10)+y;
      T[3]:=(y*100)+(x*10)+z;
      T[4]:=(y*100)+(z*10)+x;
      T[5]:=(z*100)+(x*10)+y;
      T[6]:=(z*100)+(y*10)+x;

      writeln('les nombres qu on peut former sont ');
      for i:=1 to 6 do
      begin
      writeln('T[',i,']=',T[i]);
      end;
      end;

      procedure min_max(T:tab);
      begin
      min:=T[1];
      for i:= 1 to 6 do
      begin
      if (min>T[i]) then
      min:=T[i];
      end;
      max:=T[1];
      for i:=1 to 6 do
      begin
      if (max<T[i]) then
      max:=T[i];
      end;
      writeln('le max est ',max);
      writeln('le min est ',min);
      end;

      begin
      saisir(n);
      nombres(x,y,z,T);
      min_max(T);
      end.

      j'espere que ça vous aide!!
      0