Partage
  • Partager sur Facebook
  • Partager sur Twitter

zTransforme

16 Mai - 31 Mai

    20 mai 2010 à 16:33:17

    Citation : candide


    Y'a pas un blème ?


    Bah si... :-° troisième tentative pour le 1. Le second en découle je pense, donc...

    #include <stdio.h>
    
    #define MAX_SIZE    1000
    
    typedef struct tableau2D
    {
        int tab[MAX_SIZE][MAX_SIZE];
        int nlin, ncol;
    }Tableau2d;
    
    
    void swap ( int *a, int *b )
    {
        int tmp = *a;
        *a = *b;
        *b = tmp;
    }
    
    /* zTranforme. Exercice1 */
    void inverse ( Tableau2d *t )
    {
        int dmax = t->nlin >= t->ncol ? t->nlin : t->ncol;
        int lin, col;
        for ( lin = 0; lin < dmax; lin++ )
            for ( col = lin; col < dmax; col++ )
                swap ( &t->tab[col][lin], &t->tab[lin][col] );
        swap ( &t->nlin, &t->ncol );
    }
    
    void afficher ( Tableau2d *t )
    {
        int lin, col;
        for ( lin = 0; lin < t->nlin; lin++ )
        {
            for ( col = 0; col < t->ncol; col++ )
                printf ( "%d ", t->tab[lin][col] );
            puts ( "" );
        }
        puts ( "" );
    }
    
    void lire ( Tableau2d *t )
    {
        int lin, col;
        scanf ( "%d %d", &t->nlin, &t->ncol );
    
        for ( lin = 0; lin < t->nlin; lin++ )
            for ( col = 0; col < t->ncol; col++ )
                scanf ( "%d", &t->tab[lin][col] );
    }
    
    
    int main ( void )
    {
        static Tableau2d t2d;
    
        lire ( &t2d );
        inverse ( &t2d );
        afficher ( &t2d );
    
        return 0;
    }
    


    Pour le l, c'est vrai que c'est très mauvais. Je ne sais pas à quoi je pensais...
    • Partager sur Facebook
    • Partager sur Twitter
    Zeste de Savoir, le site qui en a dans le citron !
      20 mai 2010 à 23:58:56

      Citation : GurneyH



      /* zTranforme. Exercice1 */
      void inverse ( Tableau2d *t )
      {
          int dmax = t->nlin >= t->ncol ? t->nlin : t->ncol;
          int lin, col;
          for ( lin = 0; lin < dmax; lin++ )
              for ( col = lin; col < dmax; col++ )
                  swap ( &t->tab[col][lin], &t->tab[lin][col] );
          swap ( &t->nlin, &t->ncol );
      }
      




      Je suis pas du tout convaincu par ce genre de bricolage (tu inclus ton tableau dans un grand carré et là tu fais l'échange mais c'est affreux parce que si tu as un tableau de 1 ligne et 500 colonnes, tu vas faire grosso modo 25000 opérations au lieu de 500). Ça vient aussi du fait que le problème 'a pas été clairement posé.
      • Partager sur Facebook
      • Partager sur Twitter
        22 mai 2010 à 10:34:57

        bonjour voici ma tentative pour les exo 1 2 3:
        #include <stdio.h>
        #include <stdlib.h>
        #define Max 999
        
        /* fonction pour la saisie securise */
        void viderBuffer(void)
        {
            int c=0;
            while (c !='\n' && c!=EOF)
            {
                c=getchar();
            }
        }
        
        int lireInt (void)
        {
            int x;
            int erreur=0;
            while (erreur==0)
            {
            erreur=scanf("%d",&x);
            if (erreur==0) {printf("Vous trompez pas saisissez un nombre ! RECOMMENCEZ\n");}
            viderBuffer();// ici vider buffer
            }
            return x;
        }
        
        
        /* fonctions pour les matrices affichage, copie, entrée des valeurs*/
        void affiche(int tableau[Max][Max],int x,int y)
        {
            int i,j;
            for(i=0;i<x;i++)
            {
                for (j=0;j<y;j++)
                {
                    printf("%d ",tableau[i][j]);
                }
                printf("\n");
            }
        }
        
        void recopie (int tableau[Max][Max],int tableauRecopier[Max][Max] ,int x,int y)
        {
            int i,j;
            for(i=0;i<x;i++)
            {
                for (j=0;j<y;j++)
                {
                    tableauRecopier[i][j]=tableau[i][j];
                }
            }
        }
        void lireDimension (int *x, int *y)
        {
            *x=lireInt();
            *y=lireInt();
        }
        
        void lireTableau(int tableau[Max][Max],int x,int y)
        {
            int i,j;
            for(i=0;i<x;i++)
            {
                for (j=0;j<y;j++)
                {
                    tableau[i][j]=lireInt();
                }
                printf("\n");
            }
        }
        
        
        /* fonctions des exo demandés */
        
        void exo1 (int tableau[Max][Max],int x,int y)
        {
            int tableau2[Max][Max];
            int i,j;
            recopie (tableau,tableau2,Max,Max);
            for(i=0;i<x;i++)
            {
                for (j=0;j<y;j++)
                {
                    tableau[i][j]=tableau2[j][i];
                }
            }
            affiche(tableau,x,y);
        }
        
        void exo2 (int tableau[Max][Max],int x,int y)
        {
            int tableau2[Max][Max];
            int i,j;
            recopie (tableau,tableau2,Max,Max);
            for(i=0;i<x;i++)
            {
                for (j=0;j<y;j++)
                {
                    tableau[i][j]=tableau2[x-1-j][i];
                }
            }
            affiche(tableau,x,y);
        }
        
        void exo3(int X)
        {
            int i,j;
            for(i=0;i<X;i++)
            {
                for (j=0;j<X;j++)
                {
                    if ((i==j)|| j == (X - i-1))
        
                    {
                    printf("# ");
                    }
                    else
                    {
                        printf("%d ",j);
                    }
                }
                printf("\n");
            }
        
        }
        
        int main(void)
        {
            int tableau[Max][Max];
            int tableauCopier[Max][Max];
            int X;
            int Y;
        
            printf("Dimensions du tableau :\n");
            lireDimension(&X,&Y);
            lireTableau(tableau,X,Y);
            recopie(tableau,tableauCopier,Max,Max);
            printf("\ntransformation exo 1 :\n");
            affiche (tableau,X,Y);
            printf("\n");
            exo1(tableau,X,Y);
        
        
            printf("\nrotation  a droite de ce meme tableau\n");
        
            recopie(tableau,tableauCopier,Max,Max);
            exo2(tableau,X,Y);
        
            printf("\n exo3 \n");
            printf("Dimension ?:");
            X=lireInt();
            exo3(X);
        
        
            return 0;
        }
        

        l'eternelle question qu'en pensez vous ? :-°
        PS : pas si evident que cela à trouver une solution. Pour ma part j'ai utilise a chaque fois deux tableaux : un pour le resultat l'autre pour garder le tableau originel !Avez vous trouver une autre solution vu que j'ai vachement de mal a decortiquer les codes de chacun (celui androneus , rien compris, j'ai pataugé dans la semoule :p:p )
        merci
        • Partager sur Facebook
        • Partager sur Twitter
          22 mai 2010 à 10:52:55

          Citation : darkipod


          PS : pas si evident que cela à trouver une solution.


          Pour ma part, pour éviter la copie j'échange le contenu du tableau en place, avec les problèmes signalés par candide.
          Meteor2, affiche directement le résultat.

          Pour cet exercice c'était probablement la solution la plus simple, même si l'affichage n'est généralement pas la finalité.

          Citation : darkipod

          celui androneus :p , rien compris,


          moi non plus :-°

          • Partager sur Facebook
          • Partager sur Twitter
          Zeste de Savoir, le site qui en a dans le citron !
            22 mai 2010 à 11:00:29

            Citation : GurneyH

            Citation : darkipod


            PS : pas si evident que cela à trouver une solution.


            Pour ma part, pour éviter la copie j'échange le contenu du tableau en place, avec les problèmes signalés par candide.
            Meteor2, affiche directement le résultat.

            Pour cet exercice c'était probablement la solution la plus simple, même si l'affichage n'est généralement pas la finalité.

            Citation : darkipod

            celui androneus :p , rien compris,


            moi non plus :-°


            disons que l'ennonce ne precisait pas si c'est l'affichage ou avoir un tableau transformé comme resultat!
            • Partager sur Facebook
            • Partager sur Twitter
              22 mai 2010 à 16:20:11

              Citation : darkipod


              l'eternelle question qu'en pensez vous ? :-°




              *) Tu ne respectes pas les conventions de nommage :
              normalement les macros sont à 99% écrites en majuscules complètes, on n'appelle pas une dimension de tableau x ou y.


              *) Le coup des saisies sécurisées, c'est du pipeau, dans la vie réelle c'est infiniment plus subtil et complexe que vider le buffer du clavier et vérifier le retour de scanf. Les saisies sécurisées ne doivent pas être une priorité du programmeur en apprentissage, faut pas confondre la cerise et le gâteau.

              *) Ton code ne supporte que les tableaux carrés alors que l'énoncé n'a pas cette contrainte.

              *) Ta façon de déclarer les paramètres tableaux 2D n'est pas incorrecte mais est assez peu courante (tu places une dimension inutile).

              *) Je trouve le design de ton code (lireInt, liredimension, lireTableau, recopie, exo1) très très confus.


              *) Ton code compile sans Warning (c'est déjà ça) mais, surtout, voici une exécution de ton code chez moi :



              Dimensions du tableau :
              2
              2
              4
              6
              
              1
              3
              
              
              transformation exo 1 :
              4 6 
              1 3 
              
              Erreur de segmentation




              • Partager sur Facebook
              • Partager sur Twitter
                31 mai 2010 à 10:15:42

                aie :colere2: effectivement j'ai merdouillé, je revoie ma copie :-°

                Citation

                *) Ta façon de déclarer les paramètres tableaux 2D n'est pas incorrecte mais est assez peu courante (tu places une dimension inutile).

                ? qu'est qui te choques? si j'ai un tableau a deux dimensions, comment vois tu la chose ?
                merci
                • Partager sur Facebook
                • Partager sur Twitter
                  31 mai 2010 à 13:39:10

                  Citation : candide


                  *) Ta façon de déclarer les paramètres tableaux 2D n'est pas incorrecte mais est assez peu courante (tu places une dimension inutile).



                  par exemple tu as le prototype
                  void affiche(int tableau[Max][Max],int x,int y)
                  

                  La première dimension est inutile.
                  Essye de visualiser comment est représenté un tableau 2d, tu verras que seul la seconde dimension est utile pour pouvoir passer d'une ligne à l'autre. ;)
                  ton prototype devient
                  void affiche(int tableau[][Max],int x,int y)
                  


                  • Partager sur Facebook
                  • Partager sur Twitter
                  Zeste de Savoir, le site qui en a dans le citron !

                  zTransforme

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown