Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1083 connectés 

  FORUM HardWare.fr
  Programmation
  C

  prob avec mon code

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

prob avec mon code

n°2243091
sk nesrine
Posté le 16-11-2014 à 10:26:40  profilanswer
 

c'est le code d'un carré magique . j'ai un probleme quand avec la fonction verifMagique partie aprés else car meme quand j'introduit une matrice magique exp de carré magique  2 7 6 9 5 1 4 3 8

Code :
  1. #include<stdio.h>
  2. #include<conio.h>
  3. void saisieMat(int T[50][50],int n)
  4. {int i,j;
  5. printf("saisir\n" );
  6. for(i=0;i<n;i++)
  7. for(j=0;j<n;j++)
  8. {
  9. printf("T[%d][%d]=\t",i,j);
  10. scanf("%d",&T[i][j]);
  11. }
  12. }
  13. void afficher(int T[50][50],int n)
  14. {
  15. int i,j;
  16.  printf("les elements du tab\n" );
  17. for(i=0;i<n;i++)
  18.  for(j=0;j<n;j++)
  19. printf("%d\t",T[i][j]);
  20. }
  21. int verifMagique(int T[50][50],int n)
  22. {
  23. int verif,i,j,d1,d2,s1,s2;
  24. d1=0;
  25. d2=0;
  26. s1=0;
  27.  s2=0;
  28.    verif=1;
  29. for(i=0;i<n;i++)
  30. {
  31.  d1=d1+T[i][i];
  32.  d2=d2+T[i][n-1-i];
  33. }
  34. if(d1!=d2)
  35.     verif=0;
  36. else
  37. { j=0;
  38. do
  39. {
  40.  for(i=0;i<n;i++)
  41.  {
  42.   s1+=T[j][i];
  43.   s2+=T[i][j];
  44.  }        j++;
  45.  if(s1!=d1||s2!=d1)
  46.  verif=0;
  47. }while(j<=n&&verif==1);}
  48. return(verif);}
  49. int main()
  50. {int n,verif;
  51. int T[50][50];
  52. do
  53. {printf("saisir taille de la matrice n=" );
  54. scanf("%d",&n);
  55. }while(0>=n);
  56. saisieMat(T,n);
  57. afficher(T,n);
  58. verif=verifMagique(T,n);
  59. printf("\ncarre magique si verif = 1 sinon verif=0\nverif=%d",verif);
  60. }


merci :)


Message édité par gilou le 16-11-2014 à 11:20:08
mood
Publicité
Posté le 16-11-2014 à 10:26:40  profilanswer
 

n°2243094
gilou
Modérateur
Modzilla
Posté le 16-11-2014 à 14:05:44  profilanswer
 

J'ai tapé à vue (donc sans tester), mais j'aurais fait qque chose comme ceci:
 

Code :
  1. int verifMagique(int T[50][50],int n)
  2. {
  3.     int i, j;
  4.     int sum = 0, dia = 0;
  5.     // calcul de la valeur pour la diagonale principale
  6.     for( i = 0; i < n; i++) {
  7.         dia += T[i][i];
  8.     }
  9.     // calcul de la valeur pour la diagonale secondaire
  10.     for( i = 0; i < n; i++) {
  11.         sum += T[i][n-(i+1)];
  12.     }
  13.     // test
  14.     if ( sum - dia) {
  15.         return 0;
  16.     }
  17.     // calcul pour chaque ligne
  18.     for( i = 0; i < n; i++) {
  19.         // RAZ
  20.         sum = 0;
  21.         // calcul de la ligne
  22.         for( j = 0; j < n; j++) {
  23.             sum += T[i][j];
  24.         }
  25.         // test
  26.         if ( sum - dia) {
  27.             return 0;
  28.         }
  29.     }
  30.     // calcul pour chaque colonne
  31.     for( i = 0; i < n; i++) {
  32.         // RAZ
  33.         sum = 0;
  34.         // calcul de la colonne
  35.         for( j = 0; j < n; j++) {
  36.             sum += T[j][i];
  37.         }
  38.         // test
  39.         if ( sum - dia) {
  40.             return 0;
  41.         }
  42.     }
  43.     // les deux diagonales, chaque ligne et chaque colonne égale à la valeur de dia
  44.     // we've got a winner
  45.     return 1;
  46. }


 
et on peut regrouper pour gagner en concision:
 

Code :
  1. int verifMagique(int T[50][50],int n)
  2. {
  3.     int i, j;
  4.     int sum1 = 0, sum2 = 0, dia = 0;
  5.     for( i = 0; i < n; i++) {
  6.         dia += T[i][i];
  7.         sum1 += T[i][n-(i+1)];
  8.     }
  9.     if ( sum1 - dia) {
  10.         return 0;
  11.     }
  12.     for( i = 0; i < n; i++) {
  13.         // RAZ
  14.         sum1 = 0;
  15.         sum2 = 0;
  16.         for( j = 0; j < n; j++) {
  17.             sum1 += T[i][j];
  18.             sum2 += T[j][i];
  19.         }
  20.         if ((sum1 - dia) || (sum2 - dia)) {
  21.             return 0;
  22.         }
  23.     }
  24.     return 1;
  25. }


C'est plus ou moins ton code, mais c'est plus clair avec des boucles for que des do IMHO. Et tu oublies de réinitialiser tes sommes dans ton code.
Et avoir des returns un peu partout dans cette fonction n'est pas un pb, vu qu'elle n'alloue aucune ressource.
A+,


Message édité par gilou le 16-11-2014 à 14:28:34

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  prob avec mon code

 

Sujets relatifs
Par défaut C++ : appeler un .exe depuis le code[PHP] Ou placer ce bout de code ?
undefined reference to (code block)[RESOLU] [VBA] - EXCEL 2010 - Optimisation de code
Trouver le code BIC (swift) à partir d'un RIB ou IBAN[Windows Sokets] {résolu} un prob de compilation avec code::blocks
Mon code ne fionctionne pas, prob instanciation de class??Prob dans code d'upload php
Code C compilé sous Visual c++ 6 : prob de perfs...Prob important ! Mon code ne s'exécute plus !
Plus de sujets relatifs à : prob avec mon code


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR