IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Boucle infinie


Sujet :

Pascal

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Décembre 2007
    Messages : 24
    Points : 21
    Points
    21
    Par défaut Boucle infinie
    slt, tt le monde j'ai un test en informatique et voici un programme en pascal1.5
    je crois qu'il est juste mais mon ordinateur se bloque en temps d'exécution de mon petite application voici l'énoncé :
    Ecrire une analyse et un programme pascal permettant de trier un tableau T de N entiers distincts (5<=N<=20) selon le principe suivant:
    - Déterminer le nombre d'éléments qui lui sont inférieurs.
    -En déduire sa position au sein d'un autre tableau résultat appelé R.
    NB: le candidat n'est pas appeler a vérifier que les élements du tableau T sont distincts.


    et Voici ma résolution j'espére que m'aider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    program ex1SR3;
    uses wincrt;
    type tab= array[2..100] of integer; 
    var
    n:integer;
    R,t:tab;
    function taille : integer;
    var x:integer;
    begin
    repeat
          writeln('Entrer la taille du tableau SVP [2..50]');
          read(x);
    until x in [2..50] ;
    taille := x;
    end;
    procedure autocharge (n:integer;var t :tab);
    var
    i:integer;
    begin
    randomize; 
         for i:= 1 to n do
         begin
         t[i] := random(100);
         end;
    end;
    procedure affiche (n:integer; t:tab);
    var
    i:integer;
    begin
         for i:= 1 to n do
         begin 
         writeln('La case N°',i,'= ',t[i]);
         end;
    end;
    procedure compter (n:integer; var t:tab);
    var
    i,j,cpt:integer;
    begin
         for i:=1 to n do
         begin
         cpt:= 0 ; j:=i+1;
         repeat
               if t[j]<t[i] then
               cpt := cpt+1;
         until t[j]>t[i];
         R[cpt]:=t[j];
         end;
    end;
    {Programme principale}
    BEGIN
    n:=taille ;
    autocharge(n,t);
    affiche(n,t);
    compter(n,t);
    affiche(n,R);
    end.

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Bonjour,
    Je vais te dire pourquoi ton programme "bloque". Enfin, ça ne bloque pas mais c' est la boucle repeat qui ne s' arrete pas. Regarde le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure compter (n:integer; var t:tab);
    var
    i,j,cpt:integer;
    begin
         for i:=1 to n do
         begin
         cpt:= 0 ; j:=i+1;
         repeat
               if t[j]<t[i] then
               cpt := cpt+1;
         until t[j]>t[i];
         R[cpt]:=t[j];
         end;
    repeat ... until t[j]>t[i];
    Si t[j] est inferieur à t[i] alors la boucle continue puisque la valeur de t[i] et t[j] restent les meme:t[j]>t[i] est donc egale à false.

    Meme en reglant ce probleme ton programme ne marchera pas.
    je te propose un algorithme :
    • pour chaque valeur du tableau, tu compte le nombre des valeurs qui lui est inferieur, soit v. Et son aussi son occurence dans le tableau (combien de fois il est repeter dans le tableau) soit n.

    • placer ce nombre dans l' autre tableau n fois le nombre à partir de la position v+1 (si l' indice du tableau commence à 1).

    Et je crois le tour sera jouer. Essaie d' y reflechir.

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Décembre 2007
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Je croix qu'il ya une condition pour terminer ce boucle infinie c'est quand le compteur (j) est egale à la taille du tableau. Merci darrylsite pour vos conseils c'est vraiment inpécable.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Boucle Infinie] pour un menu
    Par NhyMbuS dans le forum C++
    Réponses: 5
    Dernier message: 20/07/2005, 09h14
  2. symptome de la boucle infinie dans une requete
    Par ouam81 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 27/05/2005, 12h10
  3. Réponses: 15
    Dernier message: 24/05/2005, 08h34
  4. [Socket] Pb de boucle infinie
    Par Myogtha dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 10/06/2004, 14h10
  5. [C#] Comment eviter les boucles infinies ?
    Par Thomas Lebrun dans le forum C#
    Réponses: 12
    Dernier message: 09/06/2004, 00h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo