Carré magique en C++ : Tableaux 2D
Fermé
azerty0
Messages postés
1274
Date d'inscription
samedi 27 octobre 2007
Statut
Membre
Dernière intervention
5 septembre 2013
-
17 déc. 2007 à 12:05
azerty0 Messages postés 1274 Date d'inscription samedi 27 octobre 2007 Statut Membre Dernière intervention 5 septembre 2013 - 1 mars 2008 à 13:03
azerty0 Messages postés 1274 Date d'inscription samedi 27 octobre 2007 Statut Membre Dernière intervention 5 septembre 2013 - 1 mars 2008 à 13:03
A voir également:
- Carré magique en C++ : Tableaux 2D
- Éponge magique danger - Guide
- Parenthese carré ✓ - Forum MacOS
- Ou est charlie le livre magique solution - Forum Loisirs / Divertissements
- Parenthèse carré ✓ - Forum MacOS
- Point d'interrogation dans un carré ✓ - Forum Samsung
13 réponses
moi aussi je vois pas mon programme sur le carre magique svp est ce que vous pouvez m'aider voila mon programme
#include<stdio.h>
#include<conio.h>
#include<string.h>
int t[10][10];
int n,i,j;int k[10][10],h[10][10];
int S[10];int S1[10][10],S2[10][10];
int magique(int n, int *tab[]) )
{ for(i=0;i<n;i++)
{for(j=0;j<n;j++)
S[i]+=t[i][j];}
for(j=0;j<n;j++)
{for(i=0;i<n;i++)
S[j]+=t[i][j];}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if((S[i]=S[i+1])&&(S[j]=S[j+1])&&(S[i]=S[j]))
return 0;
else
return 1;
}
int parfaite(int n, int *tab[]))
{k=magique(t[10][10]);
if(k==0)
{
for(i=0;i<n;i++)
S1=t[i][i];
S2+=t[i][n-i-1];
if(S2==S1)
return2;
}
else return 3;
else return 1;
}
void main()
{int t[10][10];
int h;
int J;
printf("entrer l'ordre de la matrice\n");
scanf("%d",&n);
h=magique(t[10][10]);
J=parfaite(t[10][10]);
if((h==0)&&(J==3))
printf("le carre est magique et parfaite\n");
if((h==0)&&(J==3))
printf("le carre est magique non parfait\n");
if(h==1)
printf("le carre n'est magique\n");
}
#include<stdio.h>
#include<conio.h>
#include<string.h>
int t[10][10];
int n,i,j;int k[10][10],h[10][10];
int S[10];int S1[10][10],S2[10][10];
int magique(int n, int *tab[]) )
{ for(i=0;i<n;i++)
{for(j=0;j<n;j++)
S[i]+=t[i][j];}
for(j=0;j<n;j++)
{for(i=0;i<n;i++)
S[j]+=t[i][j];}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if((S[i]=S[i+1])&&(S[j]=S[j+1])&&(S[i]=S[j]))
return 0;
else
return 1;
}
int parfaite(int n, int *tab[]))
{k=magique(t[10][10]);
if(k==0)
{
for(i=0;i<n;i++)
S1=t[i][i];
S2+=t[i][n-i-1];
if(S2==S1)
return2;
}
else return 3;
else return 1;
}
void main()
{int t[10][10];
int h;
int J;
printf("entrer l'ordre de la matrice\n");
scanf("%d",&n);
h=magique(t[10][10]);
J=parfaite(t[10][10]);
if((h==0)&&(J==3))
printf("le carre est magique et parfaite\n");
if((h==0)&&(J==3))
printf("le carre est magique non parfait\n");
if(h==1)
printf("le carre n'est magique\n");
}
azerty0
Messages postés
1274
Date d'inscription
samedi 27 octobre 2007
Statut
Membre
Dernière intervention
5 septembre 2013
75
1 mars 2008 à 13:03
1 mars 2008 à 13:03
Je te propose deja dessayer avant de demander qu'on fasse le travail a ta place...
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
17 déc. 2007 à 14:32
17 déc. 2007 à 14:32
houla !
Encore qqun qui a des problème avec des pointeurs !! l'instruction :
int ** tableau [n][n];
crée une variable tableau de type int**** (poiteur 4 d'un entier) soit un tableau à 4 dimensions !
Soit tu fait int tableau [n][n]; soit tu fait int ** tableau ; , mais pas les deux.
dans un premier temps, évite les [], après ça sera plus claire.
N'oublie pas d'initialister tes tableaux (avec malloc ou new[])
Encore qqun qui a des problème avec des pointeurs !! l'instruction :
int ** tableau [n][n];
crée une variable tableau de type int**** (poiteur 4 d'un entier) soit un tableau à 4 dimensions !
Soit tu fait int tableau [n][n]; soit tu fait int ** tableau ; , mais pas les deux.
dans un premier temps, évite les [], après ça sera plus claire.
N'oublie pas d'initialister tes tableaux (avec malloc ou new[])
azerty0
Messages postés
1274
Date d'inscription
samedi 27 octobre 2007
Statut
Membre
Dernière intervention
5 septembre 2013
75
18 déc. 2007 à 00:11
18 déc. 2007 à 00:11
cest bon, jai réglé ces problèmes, mais le programme ne marche pas... Merci au passage, je viens dapprendre qqch de très important ;)
Tout a l'heure, j'ai essayé en mettant tout dans le main, ca a marché et mntnt, j'ai changé une paire de trucs, le programme passe ne compile, mais il bug :
Tout a l'heure, j'ai essayé en mettant tout dans le main, ca a marché et mntnt, j'ai changé une paire de trucs, le programme passe ne compile, mais il bug :
#include <iostream> #include <iomanip> using namespace std; void init(int n, int ** &tab) // remplit le tableau de 0 { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { tab[i][j]=0; } } } int carre_magique(int n, int ** &tab) // se charge de remplir le tableau avec les nombres { int i=(n+1)/2; int j=(n-1)/2; int z=1; tab[i][j] = z; while (z!=(n*n)) { if(tab[((i+1)%n)][((j+1)%n)]==0) tab[(++i=i%n)][(++j=j%n)]=++z; // si la case qui suit nest pas remplie, jincrémente, et je remplie ma nouvelle case else tab[(i=((i+2)%n))][(j%n)]=++z; // si la case suivante est remplie, je me déplace vers le bas, et pas besoin de retester, la case sera obligatoirement vierge. } return n; } int main() { int n; cout << "Ce programme cree des carres magiques pour vous, de quel ordre voulez-vous que soit votre carre magique ? (Rentrez un entier impair) "; cin >> n; int tableau[n][n] ; // création de mon tableau en deux dimensions init(n, tableau[n][n]); // initialisation de mon beau tableau carre_magique(n, tableau[n][n]); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) cout << setw(5) << tableau[i][j]; cout << endl; } system("PAUSE"); return 0; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
18 déc. 2007 à 08:53
18 déc. 2007 à 08:53
ça compile ???
je suis étonné !
Une chose est sur, tu nas toujours pas compris les pointeurs.
ta fonction 'init' est déclaré ainsi :
initi(int , int**) (je ne voi pas ce que le & viens foutre là dedans d'ailleurs. Qu'est-ce qui ta pris de le mettre ?)
et toi tu lui passe tableau[n][n] soit un int à la place d'un int** comme second argument ! Le compilo aurait du râler !
en passant, l'appel tableau[n][n] te renvera une erreur dans le pire des cas, et n'importe quoi dans le meilleur. En C un tableau de dimension n a des valeur de 0 à n-1 (ce qui fait bien n valeurs), la dernière case du tableau, c'est tableau[n-1].
Pour finir, je n'en ai pas parler, mais normalement, tu ne peux pas dimensioner un tableau avec un int non const. La ligne :
int tableau[n][n];
ne devrais pas compiler.
fait des recherche sur les pointeurs, sur ce forum, il y a plein de type qui ont eu ou ont les même problèmes que toi, et il y a des messages qui font de bon rappel bien complet (Et puis leur auteurs en ont un peu marre de se répété ;) )
je suis étonné !
Une chose est sur, tu nas toujours pas compris les pointeurs.
ta fonction 'init' est déclaré ainsi :
initi(int , int**) (je ne voi pas ce que le & viens foutre là dedans d'ailleurs. Qu'est-ce qui ta pris de le mettre ?)
et toi tu lui passe tableau[n][n] soit un int à la place d'un int** comme second argument ! Le compilo aurait du râler !
en passant, l'appel tableau[n][n] te renvera une erreur dans le pire des cas, et n'importe quoi dans le meilleur. En C un tableau de dimension n a des valeur de 0 à n-1 (ce qui fait bien n valeurs), la dernière case du tableau, c'est tableau[n-1].
Pour finir, je n'en ai pas parler, mais normalement, tu ne peux pas dimensioner un tableau avec un int non const. La ligne :
int tableau[n][n];
ne devrais pas compiler.
fait des recherche sur les pointeurs, sur ce forum, il y a plein de type qui ont eu ou ont les même problèmes que toi, et il y a des messages qui font de bon rappel bien complet (Et puis leur auteurs en ont un peu marre de se répété ;) )
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
7 janv. 2008 à 08:47
7 janv. 2008 à 08:47
Salut.
Quand tu met un bout de programme aussi long, utilise les balises de code qui conserve la mise en forme, parceque là c'est illisible.
Deuxième point, quel est exactement ton problème ? Bien entendu tu peux tombé sur des gens très gentil qui vont reprendre ton bout de code, le compiler et voir ce qui va pas, mais tu diminue grandement tes chances d'avoir une réponse.
Quand tu met un bout de programme aussi long, utilise les balises de code qui conserve la mise en forme, parceque là c'est illisible.
Deuxième point, quel est exactement ton problème ? Bien entendu tu peux tombé sur des gens très gentil qui vont reprendre ton bout de code, le compiler et voir ce qui va pas, mais tu diminue grandement tes chances d'avoir une réponse.
mon pobleme c'est la declaration des fonction et leur call f l main je crois que c'est ca
et pour le faite que c'est pas lisible qu'est ce que t veux dire par balises de codes
merci
et pour le faite que c'est pas lisible qu'est ce que t veux dire par balises de codes
merci
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
9 janv. 2008 à 10:39
9 janv. 2008 à 10:39
tu entoure ton source par les balises
"call f l main" quoi qu'est-ce ? 8-|
pour la déclaration des fonction, je ne voi rien à redire à par une parenthèse fermante en trop qui n'a pas lieu d'être.
par contre, leur appel c'est n'importe quoi, tu as défini deux argument à tes fonctions, et tu n'en passe qu'un.
ensuite, c'est 't' qu'il faut passer et non 't[10][10]'
Houlà ! je viens de voir aussi deux else successif dans ta fonction 'parfaite' à revoir !
<code></code>
"call f l main" quoi qu'est-ce ? 8-|
pour la déclaration des fonction, je ne voi rien à redire à par une parenthèse fermante en trop qui n'a pas lieu d'être.
par contre, leur appel c'est n'importe quoi, tu as défini deux argument à tes fonctions, et tu n'en passe qu'un.
ensuite, c'est 't' qu'il faut passer et non 't[10][10]'
Houlà ! je viens de voir aussi deux else successif dans ta fonction 'parfaite' à revoir !
azerty0
Messages postés
1274
Date d'inscription
samedi 27 octobre 2007
Statut
Membre
Dernière intervention
5 septembre 2013
75
22 févr. 2008 à 15:16
22 févr. 2008 à 15:16
Hum hum...
Cad ?
Cad ?