salut;
je viens de faire un programme mais sa marche pas bien .l énoncé d éxercice est :
le probleme en général c de saisir un nombre n <5 et saisir un nombre que je vais l appeler : dim
ensuite remplir une matrice qui sera de cette forme A[dim][n^dim]
n^dim=n puissance dim
et cette matrice sera rempli par les chifrres: 0,1,2,..,n
cad si n=4 et dim =18 la matrice sera de la taille A[18][4^18]
ensuite saisir un vecteur par example B[de 1 jusqu à dim][1] en suite saisir le nbre minimal de différence(diff) entre les colonnes et le vecteur saisi
et en résultat : afficher un tableau résultant qui regroupe des colonnes qui ont un nombre de différence supérieur ou égale au nombre saisi(diff)
et voila mon programme mais comme je vous ai dit il y a certain beug comme la taille qui n est pas acceptée car pour un dim= 18 pour une base ternaire n=3 ou quaternaire n=4 sa se bloque
et encore pour la différence je vois qu il y a en résultat certaine colonne qui se répétent ou que la différence est inférieure a la différence demandée
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
int main()
{
int dim,dim2,diff,m,d,di,i;
int i2,i3,n,e,col,jm,j;
int A[10][50000000];
int x,w,k;
cout <<"donner la puissance de la matrice :";
cin >>n;
cout <<"donner la dimension (puissance) de la matrice :";
cin >> dim;
e=3^dim;
cout <<"\n 3 puissance "<<dim<<"est "<< e<<"\n";
// remplissage de la matrice par des 1,2,3...
// de telle sorte que chaque ligne soit differente de l autre
for(m=1;m<dim+1;m++)
{ x=3^(m-1);
w=3^(dim-m);
k=3^(dim-m+1);
for(i=0;i<x;i++)
for(j=1;j<w+1;j++)
for(i3=1;i3<n;i3++)
{
col=j+i*k+(i3-1)*w;
A[m][col]=i3;
}
}
//saisir le vecteur qu on veux comparer
cout<<"\n Entrer le vecteur qu on veux comparer:\n");
for(m=1;m<dim+1;m++)
{ cout<< "A["<<m<<"][0]="; cin>>A[m][0];
}
//saisir le nombre de difference entre les lignes
do { cout <<"\nEntrer le nombre de difference entre les lignes :";
cin >>di;
}
while (di>=dim);
// traitement sur les difference entre les lignes
// je ne retiens que les lignes qui ont une difference >= di
for(i2=1;i2<10;i2++)
{ for(i=0;i<e+1;i++)
{diff=0;jm=i;
for(j=i+1;j<e+1;j++)
{ diff=0;
for(m=1;(m<dim+1)&&(diff<di);m++)
// une fois la difference >= di je sors de la boucle m
{ if(A[m][i]!=A[m][j])
{ diff=diff+1;
if (diff>=di)
{ jm=jm+1;dim2=jm;
for(d=1;d<dim+1;d++)
{ A[d][jm]=A[d][j];
}
}
}
}
}e=jm;dim2=jm;
}
}
cout <<"\n le nombre de lignes resultantes est :"<<dim2;
for(k=1;k<dim2+1;k++)
{cout <<"\n"; // pour voir les resultats
if(k%40==0){ cout<<"\n appuyer sur touche....!\n";
cinb;}
for(m=1;m<dim+1;m++)
{ cout <<A[m][k];}
}
return 0;
}
fin du programme...
s il y ades erreurs c que j ai traduit le programme de c a visual c++