|
|
|
|
Bonjour,
Je souhaite créer un programme qui crée des carrés magiques. Entre autres, un carré magique, comporte n² cases. On rentre n au départ, ca nous donne un carrée de n cases sur n cases donc. Je dois crée le programme qui initilalise le carré, ca je pense avoir réusssit, mais cest dans la structure de mon programme.
Jutilise un tableau 2D, et je crois ne pas avoir bien compris comment cela marchait, au niveau des pointeurs etc etc... Quand on lapelle par référence dans une fonction par exemple, ou encore au niveau de sa déclaration...
Si qqn pouvait méclairer la dessus et eventuellement me montrer ou son mes erreurs, je lui en serait très reconnaissant.
#include <iostream>
#include <iomanip>
using namespace std;
int carre_magique(int n, int *tab[]) // se charge de remplir le tableau
{
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) // si la case ui suit nest pas remplie, je me déplace, et je remplie ma nouvelle case
{
i++; j++;
tab[(i%n)][(j%n)]=++z;
i=i%n; j=j%n;
}
else if(tab[((i+1)%n)][((j+1)%n)]!=0) // si la case suivante est remplie, je me déplace vers le bas, et pas besoin de retester, la case sera obligatoirement vierge.
{
i+=2;
tab[(i%n)][(j%n)]=++z;
i=i%n;
}
}
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 ? ";
cin >> n;
int ** tableau [n][n]; // création de mon tableau en deux dimensions
carre_magique(n,tableau[n][n]); // appel de ma fonction qui initialise mon carré magique
for(int i=0;i<n;i++) // cette boucle est sencée afficher a lécran mon carré, avec setw(), ca doit me faire qqch de bien présenté
{
for(int j=0;j<n;j++) cout << setw(4) << tableau[i][j];
cout << endl;
}
system("PAUSE");
return 0;
}
Configuration: Windows Vista Firefox 2.0.0.11
Houla !
|
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 ;)
#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;
}
|
ça compile ???
|
Moi aussi je vois pas mon programme sur le carre magique svp est ce que vous pouvez m'aider voila mon programme
|
Salut.
|
Tu entoure ton source par les balises <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 ! Salutation ! Quand on sait pas, on touche pas !JBT Char Snipeur |