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 :

Inverser les éléments d'un tableau


Sujet :

Algorithmes et structures de données

  1. #1
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Inverser les éléments d'un tableau
    Bonjour à tous, je dois inverser les éléments d'un tableau sans passer par un tableau intermédiaire

    voici les valeurs de mon tabeau

    10 20 30 40 50 60 70 80 90 100

    et je dois avoir ceci apres la permutation des éléments

    100 90 80 70 60 50 40 30 20 10

    je ne demande pas la réponse mais juste me mettre sur le bon chemin car je ne vois pas bien comment faire, merci d'avance

    Mike

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Tu n'as même pas une petite idée ?

    Cherche la formule qui donne l'élement en position i après avoir inversé le tableau (par rapport au tableau non inversé).

    Il faut ensuite parcourir tous les éléments et utiliser cette formule (en faisant attention de ne pas écraser n'importe quoi).

  3. #3
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Suite
    Non je ne vois pas bien, je dois utiliser combien de boucle ici ?, merci pour ta réponse

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par IDE
    voici les valeurs de mon tabeau

    10 20 30 40 50 60 70 80 90 100

    et je dois avoir ceci apres la permutation des éléments

    100 90 80 70 60 50 40 30 20 10

    je ne demande pas la réponse mais juste me mettre sur le bon chemin car je ne vois pas bien comment faire, merci d'avance
    Le fait que tableau soit ordonné, c'est un hasard ? Parce que c'est un cas très particulier qui autorise une astuce comme retrier dans l'ordre inverse (qsort() est ton ami).

    Sinon, et pour un petit tableau comme ça, une fonction récursive fait la farce... Pour un gros tableau, il faut un tableau d'index que l'on retrie. Il y a peut être d'autres solutions que j'ignore. Voir le forum Algorithmes

  5. #5
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Suite
    Merci je vais aller voir sur se forum, à bientôt

    Merci

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Je reposte ce que j'ai déjà dit dans le forum C :

    Cherche la formule qui donne l'élement en position i après avoir inversé le tableau (par rapport au tableau non inversé).

    Il faut ensuite parcourir tous les éléments et utiliser cette formule (en faisant attention de ne pas écraser n'importe quoi).

    Non je ne vois pas bien, je dois utiliser combien de boucle ici ?, merci pour ta réponse
    Une seule

  7. #7
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    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
     
    const n = ...;
    var m     : integer;
         data : array[0..n-1] of T;  // T integer, real, ...
       begin   
       m:= n div 2 ;  { partie entiere de n/2 }
       for i:= 0 to m do swap(Data[i], Data[n-1-i] );
       end; 
    procedure swap( var i, j : T );
      var H : T;
       begin
       H:=Data[i];
       Data[i] := Data[j];
       Data[j] := H;
       end;

  8. #8
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Suite
    Donc je peux faire ceci iTableau[iI+9] <- iTableau[iI]

    en faisant ceci la position 9 prendra la valeur 10

    ?

    Merci

  9. #9
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Si tu considère que ton indice de tableau commence à 1.

    Alors T[9] <- T[1] permet effectivement de mettre 10 dans le 9ém élément du tableau.

  10. #10
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Suite
    Mais comment je peux faire avec une seul boucle pour faire diminuter le T[9] et faire augmenter le T[1]

  11. #11
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    commence par ecrire une fonction "swap" qui echange 2 element d'indicie i et j. pour cela, il suffit de passer par une variable intermediaire...

    ensuite, tu parcourt ton tableau en appliquant cette fonction, et en t'arretant quand il faut.. (pas trop loin du mileu )

  12. #12
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    Sauf erreur, c'est exactement ce que fait le tout petit code que j'ai proposé un peu plus haut!

  13. #13
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Trouve d'abord à la main une méthode simple. Une fois que tu l'as trouvée, essaie de trouver une/des formules mathématiques donnant les index dans le tableau.
    Essaie de raisonner de façon logique et ordonnée.

  14. #14
    Membre régulier Avatar de elghadi_mohamed
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 227
    Points : 89
    Points
    89
    Par défaut
    bonjour

    utilise une variable intermediaire pour stocker la valeur à changer et procede comme suit pour le premier elemnt je le permute avec le dernier , le deuxieme je le permute avec celui qui precede le dernier ainsi de suite , n'oublie pas la variable intermediare pour ne pas ecraser tes valeurs !!!

  15. #15
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Suite
    Mais tu passes par une boucle pour faire cela, car je ne vois pas comment je peux incrementer ma boucle d'un coté et la décrinmenter de l'autre coté, merci pour ta réponse

  16. #16
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    quand tu dois parcourrir la totalité d'un ensemble structuré (un tableau, ...) une boucle est obligatoire.
    Regarde bien le problème que tu souhaites résoudre; tu veux inverser :
    - le premier et le dernier élément.
    - le deuxième et l'avant dernier
    - ...

    PS: Emmanuel, je ne pense pas qu'utiliser un qsort en inversant le test soit la méthode la plus rapide...

  17. #17
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 887
    Points : 1 531
    Points
    1 531
    Par défaut
    Citation Envoyé par elghadi_mohamed
    utilise une variable intermediaire pour stocker la valeur à changer
    On peut même faire pareil sans variable intermédiaire (puisque apparemment l'exercice est axé sur l'économie de place mémoire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (i = 0; i < n / 2; i++) {
      t[i] ^= t[n - i - 1];
      t[n - i - 1] ^= t[i];
      t[i] ^= t[n - i - 1];
    }

  18. #18
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Suite
    Merci pour toutes ces réponses, je ne comprend pas le n/2, pourriez vous me l'expliquez, un grand merci

  19. #19
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Suite
    Je vais vous montrez toutes les bétises que j'ai écrites :

    /* je déclare mes variables */

    Tableau entiers iTableau taille 10 /* Déclaration du tableau */
    <* = {10,20,30,40,50,60,70,80,90,100} *>
    Variable indice iI
    Variable entiere iEchange

    Début de traitement

    Initialisation

    iI <- 0

    Compter avec iI de 0 à 4

    iEchange <- iTableau[iI]
    iTableau[iI] <- iTableau[iI+9]
    iTableau[iI+9] <- iEchange

    Fin de compter /* je sais que c'est pas juste mais je ne sais que faire */

    Fin de traitement

  20. #20
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par IDE
    Compter avec iI de 0 à 4

    iEchange <- iTableau[iI]
    iTableau[iI] <- iTableau[iI+9]
    Te rends tu compte que ton tableau n'est que de taille 10. Ton il peut aller jusqu'a 4, donc ton indice iI+9 peut aller jusqu'a 13. Tu essayes donc de lire la 13eme case d'un tableau de 10 elements.

    (desole pour les accents, qwerty...)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. algorithme pour inverser les éléments d'un tableau
    Par nitch01 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 19/11/2009, 18h37
  2. Lister les éléments d'un tableau
    Par uado dans le forum ASP
    Réponses: 8
    Dernier message: 22/05/2006, 12h02
  3. Réponses: 10
    Dernier message: 27/03/2006, 18h38
  4. Réponses: 4
    Dernier message: 11/01/2006, 09h22
  5. "inverser" les valeurs d'un tableau
    Par Clad3 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 12/12/2005, 12h13

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