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

  1. #1
    Membre régulier
    Inscrit en
    mai 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 101
    Points : 83
    Points
    83

    Par défaut Problème avec le dernier élément du tableau

    il faut afficher les séries dans T (tableau de 14 entier) en précisant l’élément qui se répète et la longueur de la série
    exemple:
    T : 2 2 4 4 4 3 9 9 9 9 9 1 1 3
    alors l'algo affiche
    {2,2}, {4,3}, {3}, {9,5}, {1,2}, {3}
    j'ai écrit l'algo suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    long = 1
    Pour i de 2 a 14 faire
      si t[i] = t[i-1] alors 
        long = long +1
      sinon
          si long=1 alors ecrire('{', t[i-1], '}')
          sinon  ecrire('{', t[i-1],long, '}')
          fin si
         long = 1
      fin si
    Fin pour
    j'ai un problème avec le dernier élément et je suis obligé d'ajouter ce bloc répétitif après la boucle pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          si long=1 alors ecrire('{', t[14], '}')
          sinon  ecrire('{', t[14],long, '}')
          fin si
    y'a t'il un autre moyen pour éviter le bloc répétitif ?
    merci.

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2013
    Messages
    2 110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : décembre 2013
    Messages : 2 110
    Points : 4 412
    Points
    4 412

    Par défaut

    Les boucles POUR sont mal adaptées pour des problèmes comme celui-ci.
    Deux boucles TANTQUE imbriquées marchent très bien :
    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
    i = 1 ; valeur = t[i] ; old_valeur = valeur ;  
    tantque i <= 14
      // init du bloc
      nbre=1
      tantque i<=14 et valeur=old_valeur
        nbre++
        i++ ; valeur = t[i]
      fin
      // traitement de fin de bloc
      si nbre=1 alors 
         ecrire('{',old_valeur, '}')
      sinon  
         ecrire('{', old_valeur, nbre , '}'
      fin si
    fin
    Cette structure de programme est très courante. Ici on a seulement 2 boucles TANTQUE imbriquées, mais ça peut être plus de blocs.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Membre régulier
    Inscrit en
    mai 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 101
    Points : 83
    Points
    83

    Par défaut

    Bonsoir,
    je vous remercie pour votre réponse.
    Votre idée semble excellente mais j'ai 2 questions:
    - ne faut il pas une affectation qui change la valeur de old_valeur
    - le compteur i s’incrémente à l’intérieur de la deuxième boucle tant que, or si la condition d'entée n'est pas valide (i<=14 et valeur=old_valeur) i ne s’incrémente pas !?
    je vais explorer cette piste et je vous communiquerais mon code.
    Merci.

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2013
    Messages
    2 110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : décembre 2013
    Messages : 2 110
    Points : 4 412
    Points
    4 412

    Par défaut

    Il y a effectivement une erreur sur old_valeur, que je vous laisse corriger.
    Par contre, sur i, c'est bon.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Membre régulier
    Inscrit en
    mai 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 101
    Points : 83
    Points
    83

    Par défaut

    Bonjour, merci pour votre réponse,effectivement pour i c'est bon mais en traduisant l'algo en pascal, tout est ok sauf pour le dernier élément, j'ai une erreur "valeur non admissible". voici mon code
    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
    valeur := t[1] ;
    nbre:= 0 ;
    i:= 1 ;
    while (i <= 14) do
    begin
    old_valeur := valeur ;
    while ( (i<=14) and (old_valeur = valeur) ) do
    begin
          nbre:= nbre+ 1 ;
          i:= i+ 1 ;
          valeur:= t[i] ;
    end;
    if nbre = 1 then
          write ('{',valeur,'},' )
    else
          write('{',valeur,',',nbre,'},');
    nbre: = 0 ;
    end;
    ou en algo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      tantque i<=14 et valeur=old_valeur
       nbre++;
        i++ ; valeur = t[i]
      fin
    en effet, lorsque i = 14 , on incrémente i, du coup valeur=t[15] n'a pas de sens (t est un tableau de 14 entier).

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : mai 2002
    Messages : 2 729
    Points : 4 408
    Points
    4 408

    Par défaut

    Salut

    comment est declaré ton tableau
    si ton tableau est de 0..13 c'est normal que le 14 element n'est pas bon
    si par contre il est déclaré 1..14 alors ton indice 14 fonctionne ... c'est une erreur classique de traduction des tableau de C en pascal
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  7. #7
    Membre régulier
    Inscrit en
    mai 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 101
    Points : 83
    Points
    83

    Par défaut

    Bonjour,
    Le tableau est déclaré 1..14

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // i= 14 
      tantque ((i<=14) et (valeur=old_valeur)) Faire //14<=14 et valeur=old_valeur
       nbre++;
        i++ ; // i = 15
        valeur = t[i]    //    valeur = t[15] et t est un tableau de 14 entier
      fin
    d’où l'erreur "valeur non admissible"

  8. #8
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2013
    Messages
    2 110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : décembre 2013
    Messages : 2 110
    Points : 4 412
    Points
    4 412

    Par défaut

    Ceci :

    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
    i:= 1 ;
    valeur := t[i] ;
    while (i <= 14) do
      begin
      // Init Nouvelle Valeur
      nbre: = 0 ;
      old_valeur := valeur ;
      while ( (i<=14) and (old_valeur = valeur) ) do
      begin
          nbre:= nbre+ 1 ;
          i:= i+ 1 ;
          if i<= 14 then valeur:= t[i] ;
      end;
      // Ecriture Récapitulatif Valeur en cours 
      if nbre = 1 then
          write ('{',old_valeur,'},' )
      else
          write('{',old_valeur,',',nbre,'},');
    end;
    1. J'ai simplement ajouté la condition if i<=14 avant d'affecter valeur i:= t[i]
    2. La commande nbre := 0 , c'est plus logique de la mettre dans la partie 'INITIALISATION d'un nouveau BLOC plutôt que dans la partie ECRITURE DU RECAPITULATIF.
    3. Dans le récapitulatif, c'est OLD_VALEUR, et non VALEUR.
    4. Au tout début du programme, j'ai supprimé le nbre=0 qui devenait redondant, et j'ai permuté les 2 instructions i=... et valeur=... , pour garder la même structure que dans la boucle.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  9. #9
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : mai 2002
    Messages : 2 729
    Points : 4 408
    Points
    4 408

    Par défaut

    salut

    sinon on aurais pu faire comme ceci

    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
      
       i:= 1 ;
      valeur := t[i] ; 
      while (i <= 14) do
      begin
        // Init Nouvelle Valeur
        nbre: = 0 ;
        old_valeur := valeur ;
        while ( (i+1<=14) and (old_valeur = valeur) ) do
        begin
    	  i:= i+ 1 ;
          nbre:= nbre+ 1 ;
    	valeur:= t[i] ;
        end;
        // Ecriture Récapitulatif Valeur en cours 
        if nbre = 1 then
          write ('{',old_valeur,'},' )
        else
          write('{',old_valeur,',',nbre,'},');
      end;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  10. #10
    Membre régulier
    Inscrit en
    mai 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 101
    Points : 83
    Points
    83

    Par défaut

    Merci beaucoup

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/04/2009, 12h11
  2. Réponses: 10
    Dernier message: 24/05/2007, 10h27
  3. Réponses: 2
    Dernier message: 10/12/2006, 10h57
  4. Problème avec les espaces dans un tableau !
    Par remixtech dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 10/07/2006, 20h30
  5. Problème avec les styles d'un tableau
    Par psychoBob dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 20/05/2006, 04h13

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