wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 1

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Inversion d'un tableau
Conversation : Inversion d'un tableau
28-02-2008 22:56:35  Inversion d'un tableau #1
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
Salut,
Voilà dans mon programme il se passe quelque chose de bizarre et je n'arrive pas à en déceler l'origine.
En faite j'ai un fichier texte avec des "matrices" enregistrées à l'intérieure donc je les lit et je stocke les valeurs dans des vectors je les envoie à ma fonction et là quand il doit afficher il inverse tout mais je comprend vraiment pas pourquoi est-ce que ça vient de ma fonction d'affichage, d'enregistrement ou de chargement des images ?
Donc imaginons la matrice comme ceci je l'enregistre:
3 3
2 2 2
1 1 1
1 1 1

A la ré ouverture j'obtiens ça :
3 3
2 2 2
1 1 1
1 1 1

et à l'affichage ceci:
3 3
2 1 1
2 1 1
2 1 1
Si là je la ré enregistre alors elle va s'enregistrer au format de l'affichage etc'est pas normale.



Je vous met les fonctions si vous avez le courage de les lire moi j'ai pas trouver l'erreur.

Fonctions de sauvegarde et d'ouverture :

Code wxWidgets:

 
void EditeurApp::fiOuvrir(wxCommandEvent& WXUNUSED(event))
{
    std::ifstream fichier("map.txt");
    if(fichier)
    {
        VecteurT Couche1;
        VecteurT Couche2;
        std::vector < PosDecors > decors;
        std::string chaine;
        int num,nbX,nbY,nbDec;
 
        fichier >> chaine;
        nbX = atoi(chaine.c_str());
        fichier >> chaine;
        nbY = atoi(chaine.c_str());
        Couche1.resize(nbX,vectY(nbY,-1));
        Couche2.resize(nbX,vectY(nbY,-1));
 
        for(int i=0;i<nbX;i++)
        {
            for(int j=0;j<nbY;j++)
            {
                fichier >> chaine;
                num = atoi(chaine.c_str());
                Couche1[i][j] = num;
            }
        }
        for(int i=0;i<nbX;i++)
        {
            for(int j=0;j<nbY;j++)
            {
                fichier >> chaine;
                num = atoi(chaine.c_str());
                Couche2[i][j] = num;
            }
        }
 
 
        fichier.close();
        x = nbX;
        y = nbY;
        h = nbX*SolX;
        w = nbY*SolY;
        for(int i=0;i<nbX;i++)
        {
            for(int j=0;j<nbY;j++)
            {
                std::cout << Couche1[i][j] << " ";
            }
            std::cout << std::endl;
        }
        OuvrirCarte(h,w,x,y,Couche1,Couche2,decors);
    }
    else
        std::cout << "Impossible d'ouvrir le fichier !" << std::endl;
}
 
void EditeurApp::fiSauver(wxCommandEvent& WXUNUSED(event))
{
    wxString testNum;
    SetStatusText(_T("Sauvegarde en cours ..."),0);
    std::string result;
    Save.Open(_T("map.txt"),wxFile::write);
    VecteurT couche;
 
    testNum << x;
    Save.Write(testNum);
    testNum.Clear();
    Save.Write(_T(" "));
    testNum << y;
    Save.Write(testNum);
    testNum.Clear();
    for(int i=1;i<=2;i++)
    {
        couche = m_affCarte->GetSave(i);
        Save.Write(_T("\r\n"));
        for(int i=0;i<x;i++)
        {
            for(int j=0;j<y;j++)
            {
                testNum << couche[j][i];
                Save.Write(testNum);
                Save.Write(_T(" "));
                testNum.Clear();
            }
            Save.Write(_T("\r\n"));
        }
    }
 
    Save.Close();
 
    SetStatusText(_T("Sauvegarde termin\351e"),0);
}
 


Et la fonction d'affichage :

Code wxWidgets:

 
void RpgScrollFrame::OnPaint(wxPaintEvent& event)
{
    wxPaintDC pDc(this);
    int xT,yT;
    int Tx,Ty;
    int x,y;
    int yInd, xInd;
    int xPos, yPos;
    wxBitmap imgBmp;
 
    GetViewStart(&xT,&yT);
    GetParent()->GetVirtualSize(&Tx,&Ty);
    xT *= SolX;
    yT *= SolY;
 
    for(int i = 0;i < 2;i++)
    {
        y = yT;
        while (y < (yT + Ty))
        {
            x = xT;
            yPos = (y - (y % SolY));
            yInd = yPos / SolY;
            yPos -= yT;
 
            while(x < (xT + Tx))
            {
                xPos = (x - (x % SolX));     //sert à trouver la position 'virtuel'
                xInd = xPos / SolX;          //permet de trouver l'indice dans le vector
                xPos -= xT;                 //position pour l'affichage
                if(xInd >= 0 && xInd < m_nbCaseLar)
                {
                    if(yInd >= 0 && yInd < m_nbCaseHau)
                    {
                        if(i == 0 && (Couche1[xInd][yInd] >= 0))
                            pDc.DrawBitmap(TabTerrains.GetTab(Couche1[xInd][yInd]),xPos,yPos,true);
                        if(i == 1 && (Couche2[xInd][yInd] >= 0))
                            pDc.DrawBitmap(TabTerrains.GetTab(Couche2[xInd][yInd]),xPos,yPos,true);
                    }
                }
                x += SolX;
            }
            y += SolY;
        }
    }
}
 


Merci pour votre aide ++

Dernière modification par Warzer (29-02-2008 17:27:52)

01-03-2008 12:18:15  Re: Inversion d'un tableau #2
xxltux (Membre)
Lieu: Montpellier
Inscrit le : 07-10-2007
Messages: 544
Snippets: 0
Tutoriels: 0
Site web
Hors ligne
Heu par hasard ce que tu utilises n'utilises pas une pile FIFO?

Itérer est humain, récurser est divin
01-03-2008 13:46:37  Re: Inversion d'un tableau #3
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
Euh non mais en faite je vient de trouver à l'instant je parcourait pas le tableau dans le bon sens il fallait que je parcours toute la colonne et ensuite je passait à la suivante j'en ai même profité pour optimiser mon code tellement je l'ai regardé ^^
01-03-2008 15:27:09  Re: Inversion d'un tableau #4
blend (Membre)
Inscrit le : 07-10-2007
Messages: 129
Snippets: 0
Tutoriels: 0
Hors ligne
La meilleure optimisation que tu peux faire à mon avis, si tu as des matrices rectangulaires,  serait surtout d'avoir un vecteur unidimensionnel au lieu de bidimensionnel, le temps d'accès à un élément sera bien amélioré qui n'est pas du tout gratuit contrairement avec les tableaux normaux.

Rien ne vaut la 2D pour éviter les problèmes de profondeur.
01-03-2008 15:34:04  Re: Inversion d'un tableau #5
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
Oui mais je pense que ce serai un peu plus compliqué à gérer.
Enfin faut voir t'aurai une idée de comment faire ?
01-03-2008 15:37:15  Re: Inversion d'un tableau #6
xxltux (Membre)
Lieu: Montpellier
Inscrit le : 07-10-2007
Messages: 544
Snippets: 0
Tutoriels: 0
Site web
Hors ligne
Les coordonnés en une dimension sont faciles a calculer :
x + y * taille_x

Itérer est humain, récurser est divin
01-03-2008 15:39:53  Re: Inversion d'un tableau #7
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
Oui mais imagine tu fait un truc de 100*100 ton vecteur va faire 10,000 case ce qui est assez enorme et quand tu doit afficher il faut trouver le bon indice parce que c'est pas terrible de parcourir les 10000 cases du tableau.

Dernière modification par Warzer (01-03-2008 15:40:11)

01-03-2008 15:58:33  Re: Inversion d'un tableau #8
blend (Membre)
Inscrit le : 07-10-2007
Messages: 129
Snippets: 0
Tutoriels: 0
Hors ligne
Je crois colonne * tailleColonne + offset
Après, tu peux aller voir http:/jeux.developpez.com/faq/matquat/ pour qqch de complet^^
En fait pareil que xxlTux (j'avais pas lu) ^^...

Dernière modification par blend (01-03-2008 16:02:08)


Rien ne vaut la 2D pour éviter les problèmes de profondeur.
01-03-2008 17:09:52  Re: Inversion d'un tableau #9
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
Ok merci je vais allé faire un tour.
Bon ben voilà j'ai tout refait avec des vecteurs à une dimension ça marche tout aussi bien et j'ai plus les 19 Warning à la c** des vecteurs 2D ^^

Dernière modification par Warzer (01-03-2008 18:06:24)

01-03-2008 19:01:56  Re: Inversion d'un tableau #10
xxltux (Membre)
Lieu: Montpellier
Inscrit le : 07-10-2007
Messages: 544
Snippets: 0
Tutoriels: 0
Site web
Hors ligne
Blend pas bien de pas lire les posts precedent XD

Itérer est humain, récurser est divin
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Inversion d'un tableau