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

  FORUM HardWare.fr
  Programmation
  C++

  Mon premier programme c++... deja une erreur bisarre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mon premier programme c++... deja une erreur bisarre

n°1432652
smam
Posté le 28-08-2006 à 17:18:28  profilanswer
 

Bonjour j ai souvent programmé en php et en maple (pour ceux qui connaissent)...  
Je tente la de créer un programme qui permettra de resoudre un sudoku.
le code de celui ci est le suivant:

Code :
  1. // sudoku.cpp : fichier projet principal.
  2. #include "stdafx.h"
  3. #include <iostream>
  4. using namespace std;
  5. int verifier(int mat[9][9])
  6. {int temp1[10],temp2[10],temp3[10],l,c,ok=1,i,h=0,v=0;
  7. for (l=0;l<9;l++)
  8. {
  9.  for (c=0;c<9;c++)
  10.  {
  11.   if (temp1[mat[l][c]]==1) ok=0;
  12.   if (temp1[mat[l][c]]!=1 && mat[l][c]!=0)temp1[mat[l][c]]=1;
  13.   if (temp2[mat[c][l]]==1) ok=0;
  14.   if (temp2[mat[c][l]]!=1 && mat[c][l]!=0)temp2[mat[c][l]]=1;
  15.  }
  16.  for (i=0;i<10;i++)
  17.  {
  18.   temp1[i]=0;
  19.   temp2[i]=0;
  20.  }
  21. }
  22. for (h=0;h<7;h=h+3)
  23. {for (v=0;v<7;v=v+3)
  24. {
  25.  for (l=0;l<3;l++)
  26. {
  27.  for (c=0;c<3;c++)
  28.  {
  29.   if (temp3[mat[l+v][c+h]]==1) ok=0;
  30.   if (temp3[mat[l+v][c+h]]!=1 && mat[l+v][c+h]!=0)temp3[mat[l+v][c+h]]=1;
  31.  }
  32. }
  33. for (i=0;i<10;i++)
  34.  temp3[i]=0;
  35. }}
  36. return ok;
  37. }
  38. void afficher(int mat[9][9])
  39. {
  40. int ligne,colonne;
  41. for (ligne=0;ligne<9;ligne++)
  42. {
  43. for (colonne=0;colonne<9;colonne++)
  44. cout<<mat[ligne][colonne];
  45. cout<<endl;
  46. }
  47. }
  48. int main()
  49. {
  50. int mat[9][9],free[9][9],ligne=0,colonne=0;
  51. for (ligne=0;ligne<9;ligne++)
  52. {
  53. for (colonne=0;colonne<9;colonne++)
  54.  mat[ligne][colonne]=0;
  55. }
  56. for (ligne=0;ligne<9;ligne++)
  57. {
  58. for (colonne=0;colonne<9;colonne++)
  59. {
  60.  if (mat[ligne][colonne]==0)free[ligne][colonne]=1;
  61.  if (free[ligne][colonne]==1)
  62.  {
  63.   mat[ligne][colonne]=mat[ligne][colonne]++;
  64.   if(verifier(mat)==0 && mat[ligne][colonne]<9)colonne=colonne-1;
  65.   else if(verifier(mat)==0 && mat[ligne][colonne]==9)
  66.   {
  67.    mat[ligne][colonne]=0;
  68.    colonne=colonne-2;
  69.    if(colonne==-2 && ligne!=0)
  70.     {
  71.     colonne=7;ligne=ligne-1;
  72.     }
  73.    while (free[ligne][colonne+1]!=1)
  74.    {
  75.     colonne=colonne-1;
  76.     if(colonne==-2 && ligne!=0)
  77.     {
  78.     colonne=7;ligne=ligne-1;
  79.     }
  80.    }
  81.   }
  82.   system("cls" );
  83.   afficher(mat);
  84.  }
  85. }
  86. }
  87. system("PAUSE" );
  88. }


 
Lorsque je le lance j obtient une erreur/L'Assistant Débogage managé 'FatalExecutionEngineError' a détecté un problème dans 'f:\Mes documents\Visual Studio 2005\Projects\sudoku\debug\sudoku.exe'.
Informations supplémentaires : Le runtime a rencontré une erreur irrécupérable. L'adresse de l'erreur était 0x79e75f3e sur le thread 0xc34. Le code d'erreur est 0xc0000005.
 
Je ne sais pas d ou peut provenir cette erreur. dans la fenetre du programme on obtient
123456789
456129000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
 
Si vous arrivez a demeller tout ca, merci de votre aide

mood
Publicité
Posté le 28-08-2006 à 17:18:28  profilanswer
 

n°1432678
smam
Posté le 28-08-2006 à 17:43:12  profilanswer
 

Il y a peut etre un soucis dans la mémoire car lorsque je met une pause entre chaque boucle pour verifier ce qui se passe, j obtiens pas le meme resultat

n°1432691
jagstang
Pa Capona ಠ_ಠ
Posté le 28-08-2006 à 17:59:29  profilanswer
 

Code :
  1. free[9][9]


 
free n'est-il pas un mot réservé ?


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1432698
smam
Posté le 28-08-2006 à 18:29:15  profilanswer
 

free non... j ai trouvé mon soucis: il arrivait que sur un retour arriere, un nombre passe au dessus de 9 et donc sortait du tableau temp1 ou temp2..
 
je crois que c est ce qu on apelle un dépassement de pile.

n°1432797
haazheel
Posté le 28-08-2006 à 23:25:25  profilanswer
 

Pour éviter ce genre de désagréments, je te conseille d'utiliser un std::vector<std::vector<int> >

n°1432799
jagstang
Pa Capona ಠ_ಠ
Posté le 28-08-2006 à 23:26:52  profilanswer
 

haazheel a écrit :

Pour éviter ce genre de désagréments, je te conseille d'utiliser un std::vector<std::vector<int> >


déjà des constantes, et des commentaires...


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1432800
_darkalt3_
Proctopathe
Posté le 28-08-2006 à 23:27:55  profilanswer
 

jagstang a écrit :

Code :
  1. free[9][9]


 
free n'est-il pas un mot réservé ?


 
"free" non, mais "delete"oui, en c++.


---------------
Töp of the plöp
n°1432801
jagstang
Pa Capona ಠ_ಠ
Posté le 28-08-2006 à 23:29:17  profilanswer
 

_darkalt3_ a écrit :

"free" non, mais "delete"oui, en c++.


je m'en étais rendu compte nerci


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1432819
el muchach​o
Comfortably Numb
Posté le 29-08-2006 à 00:34:07  profilanswer
 

smam a écrit :

Il y a peut etre un soucis dans la mémoire car lorsque je met une pause entre chaque boucle pour verifier ce qui se passe, j obtiens pas le meme resultat


Faut dire que tu fais du "sans filet", là. Du C++ de débutant pour sûr.
Au minimum, vire tous les chiffres et travaille avec des constantes.
Juste un truc, ça ne sert à rien de passer la taille des tableaux dans les définitions de fonctions, comme #
int verifier(int mat[9][9]), ce que tu passes, ce sont des pointeurs, donc le compilo ne connait pas la taille des tableaux. Au mieux la 2e taille.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1432823
smam
Posté le 29-08-2006 à 01:35:41  profilanswer
 

donc je garde juste verifier(int mat)?

mood
Publicité
Posté le 29-08-2006 à 01:35:41  profilanswer
 

n°1434045
el muchach​o
Comfortably Numb
Posté le 30-08-2006 à 23:26:56  profilanswer
 

Non, au contraire, il faut passer les 2 dimensions.
Enfin, ton truc, ça marche uniquement avec les tableaux statiques, mais c'est tout (et encore, j'en suis pas sûr).
En fait, je crains que ton programme ne soit entièrement faux...
 

Code :
  1. void print (int m, int n, float *t)
  2. {
  3. for (int i = 0; i < m; ++i) {
  4.  cout << "[ ";
  5.  for (int j = 0; j < n; ++j) {
  6.   cout << t[i*n+j] << '\t';
  7.  }
  8.  cout << " ]" << endl;
  9. }
  10. }
  11. #define L = 2
  12. #define C = 3
  13. float[L][C] f = {{1,2,3},{4,5,6}}; // ou l'inverse, me souviens jamais
  14. print(L, C, &f[0][0]);


 
et lis bien cette page, qui t'explique (entre autres) étape par étape comment coder avec des tableaux 2D.
http://www.parashift.com/c++-faq-l [...] -mgmt.html


Message édité par el muchacho le 30-08-2006 à 23:32:28

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1439702
slash33
Posté le 10-09-2006 à 14:05:44  profilanswer
 

Au pire tu peux ajouter des assertions au code pour détecter des sorties d'indice.
 
Mais bon, ça fait longtemps que j'essaie d'éviter les tableaux. Trop risqué sans un système de contrôle.


Message édité par slash33 le 10-09-2006 à 14:08:36

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

  Mon premier programme c++... deja une erreur bisarre

 

Sujets relatifs
Erreur de syntaxe pour un update de base accesscss / message d'erreur
Win api : programme qui plante à cause des imagesProgramme pour trie sur Excel...HELP!!!
Erreur de Handle lors de la création de Memoerreur mysql dans phpmyadmin
[VC++] Problème de distibution avec un programme MFCprogramme bloqué quand j'utilise beep() (faire bipper le hp interne)
[php] Erreur boolean : MySQL en cause ?[Perl][emacs] Liste des fonctions du programme dans le menu
Plus de sujets relatifs à : Mon premier programme c++... deja une erreur bisarre


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