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

C++ Discussion :

Algorythmie: inverser un tableau c++


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Par défaut Algorythmie: inverser un tableau c++
    Salut!

    J'ai lu d'autres anciens posts, pour inverser ls valeurs d'un tableau...

    Cependant cela me semble bien compliqué et je ne voit pas pourquoi mon code ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int a=0;
    for (i=256,i=0,i--)
    {
    array2[i]=array1[a];
    a++;
    }
    En fait je veux simplement que mon array1[256] change ses valeurs...
    que les pixels en array1[255] deviennebt ceux de array1[1] et les [1] deviennent les 255...


  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,

    As-tu essayé de réfléchir à ce que tu écris dans ton code ?

    Si oui, as-tu essayé de le faire fonctionner "à la main" (en utilisant poins d'élément, évidemment) ?

    Comment peux-tu espérer inverser un tableau en copiant comme tu le fais, c'est à dire copiant de la fin vers le début, sans avoir copié quelque part les données que tu écrases en faisant ça.

    Si les algorithmes habituels te paraissent "compliqués", essaye de comprendre pourquoi ils sont ainsi faits (pour de tels algorithmes d'utilisation très fréquente, figure-toi que bien des programmeurs ont déjà réfléchi au problème).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Par défaut
    Edit:
    non je me creuse la tete, en theorie cela fonctionne!!??


    Salut!
    Et bien...
    Mais l'array2 (le tableau 2) n'ecrase rien? il recopie les valeurs du tableau a dedans...
    disons qu'a la fin il devrait avoir tout les valeaus de tableau 1, inversees?!!!

    Ce n'est pas grave ce quil y avait dans tableau 2!!


  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    i=0 devrait être i>=0, sous reserve que i est de type signé.

    Mais bon, avec les fonctions de la STL qui vont bien, ça se fait en une ligne ou deux.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Par défaut
    Citation Envoyé par Laurent Gomila
    i=0 devrait être i>=0, sous reserve que i est de type signé.

    Mais bon, avec les fonctions de la STL qui vont bien, ça se fait en une ligne ou deux.

    ou ca, ou ca? Je google depuis trois heures pour voir ces fonctions!!

    jai bien vu un article sur les STD mais il y en a enormement!!!

    or la je n'ai pas le temps de jouer a l'apprenti...

    j'ai encore enormement d'operations tordues a realiser genre verifier la moitier des valeus du tableau, les mettre a zero, et mettre lautre moitiee a 255...
    fuii...

    Peut tu me donner le code pour ces STDS?
    Et aussi quelle librairies je devrait inclure!
    Merci!
    Oh mais sinon mon code SEMBLE marcher, non??

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Par défaut
    Citation Envoyé par thewho
    Bonjour,

    As-tu essayé de réfléchir à ce que tu écris dans ton code ?

    Si oui, as-tu essayé de le faire fonctionner "à la main" (en utilisant poins d'élément, évidemment) ?

    Comment peux-tu espérer inverser un tableau en copiant comme tu le fais, c'est à dire copiant de la fin vers le début, sans avoir copié quelque part les données que tu écrases en faisant ça.

    Si les algorithmes habituels te paraissent "compliqués", essaye de comprendre pourquoi ils sont ainsi faits (pour de tels algorithmes d'utilisation très fréquente, figure-toi que bien des programmeurs ont déjà réfléchi au problème).
    Merci de ta reponse, mais je ne comprends pas!

    Cela semble fonctionner (a ma grande surprise), quelle etait ta remarque?


    apres mon code (corrige grave a lautre utilisateur, notament i>=0)
    cela me donne les valeurs inversees!

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par corseb
    ou ca, ou ca? Je google depuis trois heures pour voir ces fonctions!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::vector source;
    // on remplis source
    std::vector aLEnvers(source.rbegin(), source.rend());
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Par défaut
    Citation Envoyé par JolyLoic
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::vector source;
    // on remplis source
    std::vector aLEnvers(source.rbegin(), source.rend());
    Erm je ne sais pas comment declarer la librairie STD!

    Surtout qu'apparement il y en a des milliers...



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    std::vector CopieTableau;
    int CopieTableau[256];
    for (int z=0;z<256; z++)
    {
    CopieTableau[z]=histoArray[z];
    }
    // on remplis source
    std::vector aLEnvers(CopieTableau.rbegin(), CopieTableau.rend());
    for (int y=0;y<256;y++)
    {
    	cout << "tamere: " << y << CopieTableau[y];
    }
    Et puis mon code est minable non?
    remarque ma methode marche, je passerait pas des heures sur celle ca si c'est trop compliquee...
    Les methodes standards, c'est bien, ca evite de reinventer la roue, mais encore faut il savoir les declarer et utiliser!!!

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,
    Citation Envoyé par corseb
    Merci de ta reponse, mais je ne comprends pas!

    Cela semble fonctionner (a ma grande surprise), quelle etait ta remarque?


    apres mon code (corrige grave a lautre utilisateur, notament i>=0)
    cela me donne les valeurs inversees!
    Excuse-moi.

    Décidément, je suis fatigué ces jours ci.

    En fait, j'étais parti sur le fait que tu travaillais sur le même tableau, lecture trop rapide.

    Mais bon, avec les algorithmes habituels, tu n'as pas besoin d'un 2ème tableau, qui, si on utilise ailleurs le 1er tableau en comptant sur le fait qu'il a été inversé, entraîne de devoir recopier le tableau 2 dans le 1.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Par défaut
    je t'en prie, c'etait juste que je croyais faire une belle betise sans voir l'erreur...
    oui, apparement ya plus simple mais mon esprit a formuler cela... je pas trouver plus simple!!!


  11. #11
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par corseb
    Erm je ne sais pas comment declarer la librairie STD!
    Excuse moi de n'avoir pas donné un programme directement compilable, histoire d'habitude, j'ai éludé les entêtes. Revoici une version entière (mais non testée, ya peut-être des fautes de frappe)

    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
    #include <vector>
    #include <iostream>
     
    int main()
    { 
      std::vector<int> source;
      for (int i=0 ; i<256 ; ++i)
      {
        source.push_back(i);
      }
      std::vector<int> aLEnvers(source.rbegin(), source.rend());
      for (int i=0;y<aLEnvers.size();++i)
      {
    	std::cout << aLEnvers[i]<< " ";
      }
    }
    Citation Envoyé par corseb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    std::vector CopieTableau;
    int CopieTableau[256];
    CopieTableau est-il un tableau de 256 entier ou bien un vecteur d'entiers (de taille variable). C'est l'un ou l'autre, pas les deux.
    Citation Envoyé par corseb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (int z=0;z<256; z++)
    {
    CopieTableau[z]=histoArray[z];
    }
    // on remplis source
    std::vector aLEnvers(CopieTableau.rbegin(), CopieTableau.rend());
    for (int y=0;y<256;y++)
    Je n'aime pas trop l'utilisation de 256 ici. C'est source d'erruer si tu décides de changer la taille par la suite.

    Citation Envoyé par corseb
    Les methodes standards, c'est bien, ca evite de reinventer la roue, mais encore faut il savoir les declarer et utiliser!!!
    Mais c'est en général bien plus sur une fois qu'on a franchi le pas. Le plus intéressant dans cette méthode, c'est ce qu'elle permet de ne pas faire. En particulier, la boucle peut aussi s'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      for (std::vector<int>::iterator it = aLEnvers.begin();
        it != aLEnvers.end();
        ++it)
      {
    	std::cout << *it << " ";
      }
    Et avec ce type d'écriture, on a la possibilité d'écrire, sans passer par un tableau intermédiaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      for (std::vector<int>::reverse_iterator it = source.rbegin();
        it != source.rend();
        ++it)
      {
    	std::cout << *it << " ";
      }
    L'idée est qu'en général, pour définir un intervalle, on le fait par ses itérateurs de début et de fin, et là, on a défini des itérateurs qui itèrent à l'envers sur un conteneur.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    C'est bien sûr std::vector<int> et pas std::vector.

  13. #13
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Oups, je corrige mon post, histoire d'avoir un truc pas trop faux...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

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

Discussions similaires

  1. Inverser un tableau (ou table)
    Par jlfprofoto dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 15/02/2014, 15h06
  2. Réponses: 3
    Dernier message: 08/08/2007, 09h47
  3. [Débutant] Inverser un tableau
    Par Zhitoune dans le forum Delphi
    Réponses: 9
    Dernier message: 22/06/2007, 10h56
  4. Inversion de tableau
    Par Florian.L dans le forum Ada
    Réponses: 1
    Dernier message: 21/11/2006, 10h03
  5. [algorythmie] remplir un tableau dont on ne connait pas encore la taille
    Par d_token dans le forum Collection et Stream
    Réponses: 27
    Dernier message: 26/09/2006, 17h36

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