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;
}
