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 :

Tester un carré magique


Sujet :

C

  1. #1
    Membre très actif
    Inscrit en
    Novembre 2010
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 126
    Par défaut Tester un carré magique
    je veut faire un programme que l utilsateur entre la taille du magic carré aprés il entre les numero de la magic carré et aprés le programme affiche le rsultas (est ce qu il est magic carré ou non) le programme fait seulemnt la recherche aprés le remplissage
    voila le code et je sais pas ou la faute
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    #include<stdio.h>
     
    #include<stdlib.h>
     
    #include<conio.h>
     
    main()
     
    {
     
          int t[50][50],a=0,s[50],n,test=1,i,j;
     
          printf("Donner la taille du carre  \t");
     
          scanf("%d",&n);
     
          printf("Remplissez le tableau \t");
     
          for(i=0;i<n;i++)
     
          {
     
                          for(j=0;j<n;j++)
     
                          {
     
                                          printf("Tapez la case T[%d][%d]\n",i+1,j+1);
     
                                          scanf("%d",&t[i][j]);
     
                          }
     
          }
     
     
     
          for(j=0;j<n;j++)
     
                          {
     
                                          s[j]=0;
     
                          }
     
          for(j=0;j<n;j++)
     
          {a=0;
     
                          for(i=0;i<n;i++)
     
                          a=t[i][j]+a;
     
          s[j]=a;}
     
          for(j=0;j<n;j++)
     
          {
     
                            if(s[j]!=s[j+1])
     
                            test=1;
     
          }
     
     
     
          if(test==0)
     
          {for(i=1;i<n;i++)
     
          {a=0;
     
                          for(j=1;j<n;j++)
     
                          a=t[i][j]+a;
     
          s[i]=a;}}
     
     
     
          for(i=0;i<n-1;i++)
     
          {
     
                            if(s[i]!=s[i+1])
     
                            test=1;
     
          }
     
     
     
          if(test==0)
     
          {a=0;
     
                     for(i=0;i<n;i++)
     
                     a=t[i][n-i]+a;
     
                     if(s[j]!=a)
     
                     test=1;
     
                     }
     
     
     
          if(test==0)
     
          {a=0;
     
                     for(i=0;i<n;i++)
     
                     a=t[n-i][i]+a;
     
                     if(s[j]!=a)
     
                     test=1;
     
                     }
     
     
     
          if(test==1)
     
          printf("le carre n'est pas magique \n");
     
          else
     
          {
     
              printf("le carre est pas magique \n");
     
                for(i=0;i<n;i++)
     
          {
     
                          for(j=0;j<n;j++)
     
     
     
                                          printf("%d \t",t[i][j]);
     
                                          printf("\n");
     
     
     
          }
     
          }
     
              getche ();          }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 166
    Billets dans le blog
    154
    Par défaut
    Bonjour,

    Je vous pris de reformuler le problème car là, je n'ai rien compris du tout de ce qui était en place et de ce qui ne fonctionner pas.
    Par explication du problème, j'entends:
    - Votre réflexion sur la résolution du programme (algorithme)
    - La description du bug:
    - - Le résultat attendu
    - - Le résultat que vous avez actuellement (et en quoi il est faut)


    Je tiens aussi à ajouter que si vous avez des problèmes dans votre code vous pouvez utiliser un debuggueur qui vous permettra de suivre l'exécution du programme pas à pas tout en regardant les valeurs des variables.

    J'ai reformé le programme (je n'ai pas touché les 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
     
    main()
    {
        int t[50][50],a=0,s[50],n,test=1,i,j;
     
        printf("Donner la taille du carre  \t");
        scanf("%d",&n);
     
        printf("Remplissez le tableau \t");
     
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                printf("Tapez la case T[%d][%d]\n",i+1,j+1);
                scanf("%d",&t[i][j]);
            }
        }
     
        for(j=0;j<n;j++)
        {
            s[j]=0;
        }
     
        for(j=0;j<n;j++)
        {
            a=0;
     
            for(i=0;i<n;i++)
     
            a=t[i][j]+a;
            s[j]=a;
        }
     
        for(j=0;j<n;j++)
        {
            if(s[j]!=s[j+1])
                test=1;
        }
     
        if(test==0)
        {
            for(i=1;i<n;i++)
            {
                a=0;
                for(j=1;j<n;j++)
                    a=t[i][j]+a;
     
                s[i]=a;
            }
        }
     
        for(i=0;i<n-1;i++)
        {
            if(s[i]!=s[i+1])
                test=1;
        }
     
        if(test==0)
        {
            a=0;
     
            for(i=0;i<n;i++)
                a=t[i][n-i]+a;
     
            if(s[j]!=a)
                test=1;
        }
     
        if(test==0)
        {
            a=0;
     
            for(i=0;i<n;i++)
                a=t[n-i][i]+a;
     
            if(s[j]!=a)
                test=1;
        }
     
        if(test==1)
            printf("le carre n'est pas magique \n");
        else
        {
            printf("le carre est pas magique \n");
            for(i=0;i<n;i++)
            {
                for(j=0;j<n;j++)
                    printf("%d \t",t[i][j]);
                printf("\n");
            }
        }
        getche ();          
    }
    Note1: Le prototype de la fonction main() doit être un des suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int main()
    int main(int argc, char** argv)
    int main(int argc, char** argv, char** arge)
    Note2: la bibliothèque Conio est très désagréable car elle ne permet pas d'avoir du code qui fonctionne sous Linux. Surtout pour l'utilisation qui en est fait, je ne vois pas l'intérêt. Ainsi je vous conseillerai de remplacer toute référence à celle-ci par du code C classique.
    (Oui oui, même getch() peut être fait dans le langage C, sans grande dificulté (voir la FAQ C)
    Note3: Ce n'est pas getche() mais getch()
    Note4: Depuis que j'ai réindenter le code, des erreurs (boucles :p) sont très visibles.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre très actif
    Inscrit en
    Novembre 2010
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 126
    Par défaut
    merci pour tous ça mais est ce que tu as compris ce que je veut réaliser
    si tu as compris bien le but de se programme de magic carré tu peut me dire ou se trouve la faute est ce que je doit faire exactement sil vous plait ne travailler pas avec les pointeur je lé conné pas

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 166
    Billets dans le blog
    154
    Par défaut
    Citation Envoyé par komat Voir le message
    merci pour tous ça mais est ce que tu as compris ce que je veut réaliser
    si tu as compris bien le but de se programme de magic carré tu peut me dire ou se trouve la faute est ce que je doit faire exactement sil vous plait ne travailler pas avec les pointeur je lé conné pas
    Et bah, le truc c'est que je n'ai pas compris la question, ni meme le probleme.
    Je veux la reponse aux choses suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Je vous pris de reformuler le problème car là, je n'ai rien compris du tout de ce qui était en place et de ce qui ne fonctionner pas.
    Par explication du problème, j'entends:
    - Votre réflexion sur la résolution du programme (algorithme)
    - La description du bug:
    - - Le résultat attendu
    - - Le résultat que vous avez actuellement (et en quoi il est faut)
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre très actif
    Inscrit en
    Novembre 2010
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 126
    Par défaut
    et bien tous simplement je veut faire un programme que le l utilisateur donne la taille du magic carré et aprés l utilisateur remplie le tableau a 2 dimension et aprés le programme affiche le resultas suivant: si les nombre qui ont eté saisie par l utisateur represente un magic carré le programme va afficher que c est un magic carré si le contraire il va affichier que c est pas une magic carré.
    c est simple le programme fait seulement la recherche et affiche le resultas.
    pour ma reflexion sur le code je l ai donné déja, mon code il n 'est pas complet je sait pas ou se trouve l erreur (pas erreur de compilation)
    si vous avez une idé pour m aider a realiser mon programme ta qu a l dire
    et merci d avance.

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 166
    Billets dans le blog
    154
    Par défaut
    Pour les prochaines (effectif à partir d'ici) commentez votre code !

    J'ai remarqué un bug:
    - La variable de test n'est pas remise à zero avant chaque nouveau test.

    Si vous pouviez me donner un carré magique de test, j'en serai heureux
    Sinon, vous pouviez voir le problème avec un debuggueur, donc cela me ferai très plaisir que vous cherchiez à en utiliser un
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre émérite Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Par défaut
    Bonjour,
    1.
    Etant donnée la longueur de votre code et que vous ne donnez aucune précision sur votre erreur, personne ne sera en mesure de vous aider.
    Je simplement survolé le code et a première vu, je dirai qu'il y a un problème dans la variable "test", celle-ci est initialisé à 1 est aucune affection test=0 n'est faite (à moins que je l'ai loupé ), de cette manière la matrice ne pourra jamais être détectée comme matrice magique dans votre programme.

    2.
    +1 pour ce qu'a dit LittleWhite concernant le debogage : (Je suis 100% d'accord pour le reste aussi)
    Essayer par exemple d'afficher la variable "test" aprés chaque étape de votre programme (Calcul de somme des lignes, des colonnes, puis des diagonales). Ceci vous aidera à repérer plus facilement ou est ce que l'erreur se situe.

    Edit : Désolé pour la répétition je n'avais pas vu le précédent post

  8. #8
    Membre très actif
    Inscrit en
    Novembre 2010
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 126
    Par défaut
    merci pour tous ça je vais vous donné un code qui fait le contraire l utilisateur entre la taille de la magic carré et le programme donne le resultas a partir de ce code je crois que vous pouver m aider a réaliser le contraire du programme que je veut realiser:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    #include <stdio.h>
    #include <stdlib.h>
    #define N  100
     
    int     a[N][N];// declarer un tableau de deux dimentions 
    int     n;    //  declarer un entier n
     
    void Init (int n) // Fonction qui initialise les cases du tableau a 0
    {
        int i, j;
     
        for (i = 0 ; i < n; i++)
            for (j = 0; j < n; j++)
                a[i][j] = 0;  //Chaque case a 0
    }
     
    void Magique (int n)// Algorithme d'un carre magique
    {
        int i, j, k;
     
        i = n - 1; j = n / 2;
        for (k = 1; k <=  n * n; k++) {
            a[i][j] = k;
            if ((k % n) == 0)
                i = i - 1;
            else {
                i = (i + 1) % n; 
                j = (j + 1) % n;
            }
        }
    }
     
    void Erreur (char s[])//Fonction qui affiche le message passer a la foncion
    {
        printf ("Erreur fatale: %s\n", s);
        return;
    }
     
    void Lire (int *n) //fonction qui lit la taille du carre
    {
        printf ("Taille du carre magique svp?:");
        scanf ("%d", n);
        if ((*n <= 0) || (*n > N) || (*n % 2 == 0)) 
            Erreur ("Taille impossible.");
    }
     
    void Imprimer (int n)//fonction qui affiche les diferentes cases du carre
    {
        int i, j;
     
        for (i = 0; i < n; i++) {
            for (j = 0; j < n; j++) 
                printf ("%4d ", a[i][j]);
            printf ("\n");
        }
    }
     
    int main ()//Appele des differentes fonctions
    {
        Lire(&n);
        Init(n);       /* - */
        Magique(n);
        Imprimer(n);
        system("pause");
        return 0;
    }

  9. #9
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 166
    Billets dans le blog
    154
    Par défaut
    Dites moi ? il est a vous ce code ?
    De plus, je n'ai pas compris le principe de faire l'inverse à partir d'un code qui fait autre chose.

    Et troisièmement, on vous a aidé sur le premier code ... pourquoi ne continuons pas sur votre premier code ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  10. #10
    Membre très actif
    Inscrit en
    Novembre 2010
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 126
    Par défaut
    ragarde le code. d abord le remplissage du tableau et aprés une boucle pour demander a lutisaleur de saisir des nombre essay de ragerder dans les boucles des traitement et la derniére condition je crois que la faute existe dans cet endroit si ta une idéé de changer quelque chose ta qua le faire
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    #include<stdio.h>
     
    #include<stdlib.h>
     
    #include<conio.h>
     
    main()
     
    {
     
          int t[50][50],a=0,s[50],n,test=1,i,j;
     
          printf("Donner la taille du carre  \t");
     
          scanf("%d",&n);
     
          printf("Remplissez le tableau \t");// remplissage des 2 tableaux
     
          for(i=0;i<n;i++)
     
          {
     
                          for(j=0;j<n;j++)
     
                          {
     
                                          printf("Tapez la case T[%d][%d]\n",i+1,j+1);// l utilisateur entre les nombres 
     
                                          scanf("%d",&t[i][j]);
     
                          }
     
          }
     
     
     
          for(j=0;j<n;j++)
     
                          {
     
                                          s[j]=0;
     
                          }
     
          for(j=0;j<n;j++)
     
          {a=0;
     
                          for(i=0;i<n;i++)
     
                          a=t[i][j]+a;
     
          s[j]=a;}
     
          for(j=0;j<n;j++)
     
          {
     
                            if(s[j]!=s[j+1])
     
                            test=1;
     
          }
     
     
     
          if(test==0)
     
          {for(i=1;i<n;i++)
     
          {a=0;
     
                          for(j=1;j<n;j++)
     
                          a=t[i][j]+a;
     
          s[i]=a;}}
     
     
     
          for(i=0;i<n-1;i++)
     
          {
     
                            if(s[i]!=s[i+1])
     
                            test=1;
     
          }
     
     
     
          if(test==0)
     
          {a=0;
     
                     for(i=0;i<n;i++)
     
                     a=t[i][n-i]+a;
     
                     if(s[j]!=a)
     
                     test=1;
     
                     }
     
     
     
          if(test==0)
     
          {a=0;
     
                     for(i=0;i<n;i++)
     
                     a=t[n-i][i]+a;
     
                     if(s[j]!=a)
     
                     test=1;
     
                     }
     
     
     
          if(test==1)
     
          printf("le carre n'est pas magique \n");
     
          else
     
          {
     
              printf("le carre est magique \n");
     
                for(i=0;i<n;i++)
     
          {
     
                          for(j=0;j<n;j++)
     
     
     
                                          printf("%d \t",t[i][j]);
     
                                          printf("\n");
     
     
     
          }
     
          }
     
              getch();          
              }

  11. #11
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 166
    Billets dans le blog
    154
    Par défaut
    Non mais j'ai compris (et j'ai même commenté le code chez moi).
    Ce que je demande c'est:
    • Commentez votre code, dans le code en lui-même et non dans le message sur le forum (vous verrez c'est bénéfique pour tous)
    • Écoutez-moi lorsque je vous dis que je suspecte une erreur avec la variable test (nous sommes deux à le dire)
    • Comme je prétends avoir une solution, j'aimerai avoir un carré magique valide. Pour faire un essai. Merci.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 865
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par komat Voir le message
    ragarde le code. d abord le remplissage du tableau et aprés une boucle pour demander a lutisaleur de saisir des nombre essay de ragerder dans les boucles des traitement et la derniére condition je crois que la faute existe dans cet endroit si ta une idéé de changer quelque chose ta qua le faire
    Moi je changerais bien l'auteur de ce topic (qui a réussi quand-même l'exploit d'avoir -16 pts en 42 posts) mais bon, je sens que ça ne va pas être possible donc...

    Citation Envoyé par komat Voir le message
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    #include<stdio.h>
     
    #include<stdlib.h>
     
    #include<conio.h>
     
    main()
     
    {
     
          int t[50][50],a=0,s[50],n,test=1,i,j;
     
          printf("Donner la taille du carre  \t");
     
          scanf("%d",&n);
     
          printf("Remplissez le tableau \t");// remplissage des 2 tableaux
     
          for(i=0;i<n;i++)
     
          {
     
                          for(j=0;j<n;j++)
     
                          {
     
                                          printf("Tapez la case T[%d][%d]\n",i+1,j+1);// l utilisateur entre les nombres 
     
                                          scanf("%d",&t[i][j]);
     
                          }
     
          }
     
     
     
          for(j=0;j<n;j++)
     
                          {
     
                                          s[j]=0;
     
                          }
     
          for(j=0;j<n;j++)
     
          {a=0;
     
                          for(i=0;i<n;i++)
     
                          a=t[i][j]+a;
     
          s[j]=a;}
     
          for(j=0;j<n;j++)
     
          {
     
                            if(s[j]!=s[j+1])
     
                            test=1;
     
          }
     
     
     
          if(test==0)
     
          {for(i=1;i<n;i++)
     
          {a=0;
     
                          for(j=1;j<n;j++)
     
                          a=t[i][j]+a;
     
          s[i]=a;}}
     
     
     
          for(i=0;i<n-1;i++)
     
          {
     
                            if(s[i]!=s[i+1])
     
                            test=1;
     
          }
     
     
     
          if(test==0)
     
          {a=0;
     
                     for(i=0;i<n;i++)
     
                     a=t[i][n-i]+a;
     
                     if(s[j]!=a)
     
                     test=1;
     
                     }
     
     
     
          if(test==0)
     
          {a=0;
     
                     for(i=0;i<n;i++)
     
                     a=t[n-i][i]+a;
     
                     if(s[j]!=a)
     
                     test=1;
     
                     }
     
     
     
          if(test==1)
     
          printf("le carre n'est pas magique \n");
     
          else
     
          {
     
              printf("le carre est magique \n");
     
                for(i=0;i<n;i++)
     
          {
     
                          for(j=0;j<n;j++)
     
     
     
                                          printf("%d \t",t[i][j]);
     
                                          printf("\n");
     
     
     
          }
     
          }
     
              getch();          
              }
    Bon, donc comme tout le monde l'a déjà dit
    1) main est de type int
    2) test est initialisé à 1 et jamais mis à 0 alors que son évaluation sur 0 est faite plusieurs fois
    3) a mon avis, ce code a beaucoup trop de commentaires

    Voici en sus deux remarques inédites:
    1) laisser une ligne vide entre 2 lignes de code a sûrement beaucoup de style mais cela n'aide pas à la relecture
    2) essaye de découper ton code en tâches précises. Par exemple une fonction pour saisir, une pour vérifier, une pour afficher serait une super, mais alors vraiment super idée. Comme ça, si un truc ne fonctionne pas, tu peux mieux détecter où cela se passe...


    Citation Envoyé par LittleWhite Voir le message
    Non mais j'ai compris (et j'ai même commenté le code chez moi).
    Tu voudrais pas le commenter pour nous STP ? Allez, pour la bonne cause, pense à tous les intervenants de qualité qui voient cette horreur et qui doivent faire avec alors qu'ils ne l'ont pas mérité. Tu veux pas le faire pour eux ? C'est toute la communauté developpez.net qui parle par ma bouche...

    Citation Envoyé par LittleWhite Voir le message
    Comme je prétends avoir une solution, j'aimerai avoir un carré magique valide. Pour faire un essai. Merci.
    Pour ça, pas de problème. Il existe une méthode très facile pour créer un carré magique d'ordre impair
    1) on pose le nombre 1 dans la case du haut de la colonne milieu
    2) on écrit ensuite les autres nombres (2; 3; ...) dans les cases suivantes en établissant le schéma suivant: si la case située au dessus et à droite est libre, alors le nombre va dans cette case sinon on le place juste en dessous de là où on se trouve
    Bien entendu, quand on dépasse du carré on reprend de l'autre coté (comme si le carré était en fait un globe). Donc si on est en première ligne, la case au dessus sera alors en dernière ligne. De même si on est tout à droite, la case encore à droite sera alors en colonne de gauche.

    Ce qui donne le carré suivant (pour 5)
    Ligne 1: 17; 24; 1; 8; 15
    Ligne 2: 23; 5; 7; 14; 16
    Ligne 3: 4; 6; 13; 20; 22
    Ligne 4: 10; 12; 19; 21; 3
    Ligne 5: 11; 18; 25; 2; 9
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  13. #13
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 166
    Billets dans le blog
    154
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    1) laisser une ligne vide entre 2 lignes de code a sûrement beaucoup de style mais cela n'aide pas à la relecture
    Je pensais à un problème d'editeur 2 DVP ... mais bon ... je suis entièrement d'accord avec vous.

    Tu voudrais pas le commenter pour nous STP ? Allez, pour la bonne cause, pense à tous les intervenants de qualité qui voient cette horreur et qui doivent faire avec alors qu'ils ne l'ont pas mérité. Tu veux pas le faire pour eux ? C'est toute la communauté developpez.net qui parle par ma bouche...
    Voilà:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    #include <stdio.h>
    #include <stdlib.h>
     
    main()
    {
        int t[50][50],a=0,s[50],n,test=1,i,j;
     
        printf("Donner la taille du carre  \t");
        scanf("%d",&n);
     
        printf("Remplissez le tableau \t");
     
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                printf("Tapez la case T[%d][%d]\n",i+1,j+1);
                scanf("%d",&t[i][j]);
            }
        }
     
         // Initialisation tableau de solution
        for(j=0;j<n;j++)
        {
            s[j]=0;
        }
     
     
        // Somme des cases en lignes
        for(j=0;j<n;j++)
        {
            a=0;
     
            for(i=0;i<n;i++)
            {
                a=t[i][j]+a;
            }
     
            s[j]=a;
        }
     
        // On regarde si tout les lignes sont équivalents
        for(j=0;j<n;j++)
        {
            if(s[j]!=s[j+1])
                test=1;
        }
     
        if(test==0)
        {
            // Tests des colonnes
            for(i=1;i<n;i++)
            {
                a=0;
                for(j=1;j<n;j++)
                {
                    a=t[i][j]+a;
                }
     
                s[i]=a;
            }
        }
     
     
        // On regarde les solutions (faut remettre le test à zero, sinon il sera toujours à 1)
        test = 0;
        for(i=0;i<n-1;i++)
        {
            if(s[i]!=s[i+1])
                test=1;
        }
     
        if(test==0)
        {
            test=0;
            a=0;
     
            for(i=0;i<n;i++)
                a=t[i][n-i]+a;
     
            if(s[j]!=a)
                test=1;
        }
     
        if(test==0)
        {
            test=0;
            a=0;
     
            for(i=0;i<n;i++)
                a=t[n-i][i]+a;
     
            if(s[j]!=a)
                test=1;
        }
     
        if(test==1)
            printf("le carre n'est pas magique \n");
        else
        {
            printf("le carre est pas magique \n");
            for(i=0;i<n;i++)
            {
                for(j=0;j<n;j++)
                    printf("%d \t",t[i][j]);
                printf("\n");
            }
        }
    }
    Ce qui donne le carré suivant (pour 5)
    Ligne 1: 17; 24; 1; 8; 15
    Ligne 2: 23; 5; 7; 14; 16
    Ligne 3: 4; 6; 13; 20; 22
    Ligne 4: 10; 12; 19; 21; 3
    Ligne 5: 11; 18; 25; 2; 9
    Merci beaucoup ... mais bon ... vous faites un peu comme moi ... vous travaillez pour l'ouvreur de la discussion.

    ---

    En faisant les tests, j'ai remarqué que la problème avec test était vraiment beaucoup plus profond que cela.
    Je propose de faire une incrémentation à chaque fois qu'un test est réussi.

    Je pense même qu'il faut arrêter tout ces if sur test afin de faciliter le programme.
    J'ai enfin une solution (réelle) je pense ... vu que je perd la tête dans cette multitude de test (ma concentration est complètement partie en voyage)

    EDIT: Ah non ... je me suis vraiment perdu dans le programme
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  14. #14
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    Je pense qu'une partie du problème peut-être résolue en initialisant test à 0.
    En effet ici on l'initialise à 1.
    Puis on fait:
    for(j=0;j<n;j++)
    {
    if(s[j]!=s[j+1])
    test=1;
    }

    if(test==0)
    C'est la première utilisation de la variable test, donc étant donné qu'on l'a initialisé à 1, aucune chance qu'elle passe le test.

  15. #15
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 865
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Merci beaucoup ... mais bon ... vous faites un peu comme moi ... vous travaillez pour l'ouvreur de la discussion.
    Ben oui. Ca fait tellement mal au bide de voir un truc aussi horrible qu'on a forcément envie de réécrire un code élégant à la place de cette horreur rien que pour ne plus nous faire saigner les yeux. Par exemple déjà en créant une fonction "sommeLigne()" permettant d'avoir la somme d'une ligne x et une fonction "sommeCol()" permettant l'équivalent pour une colonne y (voire même une seule fonction à laquelle on passe le sens lig/col) ça donnerait déjà un premier point de départ. Mais bon, l'ouvreur ayant disparu de la scène, suis pas certain de revenir ici bien souvent. Pas grave. L'important c'est que moi (et toi et la majorité des intervenants habituels de la cat. C) nous nous sachions tous capables de réussir cet exo et en plus de le réussir avec style quoi...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Problème de vitesse lors de recherche de carré magique
    Par niniwizard dans le forum Prolog
    Réponses: 22
    Dernier message: 16/01/2009, 14h11
  2. Carré magique mauvais affichage
    Par bdptaki dans le forum Delphi
    Réponses: 8
    Dernier message: 14/05/2007, 17h43
  3. [TP] Programme carré magique
    Par Henry22 dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 31/03/2007, 15h40
  4. probléme carré magique
    Par pipip dans le forum C
    Réponses: 4
    Dernier message: 29/11/2006, 19h23
  5. le carré magique
    Par mahis_ dans le forum C
    Réponses: 29
    Dernier message: 15/11/2006, 18h28

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