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

Algorithmes et structures de données Discussion :

Problème avec le dernier élément du tableau


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    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
    4 227
    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 : 4 227
    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.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    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
    4 227
    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 : 4 227
    Par défaut
    Il y a effectivement une erreur sur old_valeur, que je vous laisse corriger.
    Par contre, sur i, c'est bon.

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    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
    3 491
    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 : 3 491
    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

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

Discussions similaires

  1. [FPDF] problème avec les images dans un tableau dynamique
    Par GADSN dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 08/04/2009, 11h11
  2. Réponses: 10
    Dernier message: 24/05/2007, 09h27
  3. Réponses: 2
    Dernier message: 10/12/2006, 09h57
  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, 19h30
  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, 03h13

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