Matrice aleatroire
naruto2333
Messages postés
51
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
je veut remplir une matrice de taille 3*4 (ce qui fait 12 case) avec des entiers entre 0 et 9 et chaque numero si il existe il doit etre present a 3 fois dans la matrice donc on a 12/3=4
4 numero different pour cela j ai ecrit le code si dessous mais le probleme c que la compilation est toujours avec succés mais au niveau d execution une fois sa donne de bonne resultat et par fois la fenetre n affiche rien et je reste en attente meme pour des minute et toujours pas de resultat
merci ;
4 numero different pour cela j ai ecrit le code si dessous mais le probleme c que la compilation est toujours avec succés mais au niveau d execution une fois sa donne de bonne resultat et par fois la fenetre n affiche rien et je reste en attente meme pour des minute et toujours pas de resultat
/*code*/ #include<stdio.h> #include<time.h> #include<stdlib.h> void alea(int m[8][9],int *l,int *c) { do{ *l=rand()%8 ; *c=rand()%9; }while (m[*l][*c]!=10) ; } int numero(int m[8][9]) { int r,i,j,t=1; do{ r = rand()%10; for(i=0;i<8;i++) {for(j=0;j<9;j++) { if (m[i][j]==r) t=0; } } }while (t==0); return(r); } void repetition(int m[8][9]) { int a,cmp1=0,l,c; a=numero(m); do { alea(m,&l,&c); m[l][c]=a; cmp1++; }while(cmp1!=3); } void remp(int m[8][9],int nv) { int i; for(i=0;i<24;i++) repetition(m); } main() { srand(time(NULL)); int m[8][9], nv,i,j; printf("donner nv"); scanf("%d",&nv); for(i=0;i<8;i++) { for(j=0;j<9;j++) m[i][j]=10; } remp(m,nv); for(i=0;i<8;i++) {for(j=0;j<9;j++) { printf("%d\t",m[i][j]); } printf("\n"); } system("PAUSE"); } /*fin de programme*/</code>
merci ;
2 réponses
Bonjour,
Pourquoi enlever le "Bonjour" mis automatiquement ? S'il est là, ce n'est pas pour rien...
main()
Le bon prototype est : int main(void)
Et il ne faut pas oublier le return 0; final.
printf("donner nv");
A quoi sert nv ? Tu ne t'en sers pas...
Dans ta fonction numero(),
Il faut que tu mettes t=1; en début de la boucle do while. Sinon boucle infini si t change de valeur.
De plus, tu parles de tableau de taille 3*4, mais dans ton code c'est un tableau de taille 8 par 9. Donc si tu mets r = rand()%10; il ne pourra pas remplir le tableau puisque tu pourras remplir au maximum 30 cases du tableau. Il faut que tu mettes plutôt r=rand()%25; pour remplir les 72 cases.
Et enfin, l'indentation à revoir. Ce n'est pas régulier. Du coup, ça nuit à la lisibilité.
Cdlt,
Pourquoi enlever le "Bonjour" mis automatiquement ? S'il est là, ce n'est pas pour rien...
main()
Le bon prototype est : int main(void)
Et il ne faut pas oublier le return 0; final.
printf("donner nv");
A quoi sert nv ? Tu ne t'en sers pas...
Dans ta fonction numero(),
Il faut que tu mettes t=1; en début de la boucle do while. Sinon boucle infini si t change de valeur.
De plus, tu parles de tableau de taille 3*4, mais dans ton code c'est un tableau de taille 8 par 9. Donc si tu mets r = rand()%10; il ne pourra pas remplir le tableau puisque tu pourras remplir au maximum 30 cases du tableau. Il faut que tu mettes plutôt r=rand()%25; pour remplir les 72 cases.
Et enfin, l'indentation à revoir. Ce n'est pas régulier. Du coup, ça nuit à la lisibilité.
Cdlt,
en fait c une partie de mon taf donc g fait des erreurs quand j ai copie le code . voila le code correcte
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void alea(int m[3][4],int *l,int *c)
{
do{
*l=rand()%3 ;
*c=rand()%4;
}while (m[*l][*c]!=10) ;
}
int numero(int m[3][4])
{ int r,i,j,t=1;
do{
r = rand()%10;
for(i=0;i<3;i++)
{for(j=0;j<4;j++)
{
if (m[i][j]==r) t=0;
}
}
}while (t==0);
return(r);
}
void repetition(int m[3][4])
{ int a,cmp1=0,l,c;
a=numero(m);
do {
alea(m,&l,&c);
m[l][c]=a;
cmp1++;
}while(cmp1!=3);
}
void remp(int m[3][4])
{ int i;
for(i=0;i<4;i++)
repetition(m);
}
main()
{ srand(time(NULL));
int m[3][4],i,j;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++) m[i][j]=10;
}
remp(m);
for(i=0;i<3;i++)
{for(j=0;j<4;j++)
{
printf("%d\t",m[i][j]);
}
printf("\n");
}
system("PAUSE");
}
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void alea(int m[3][4],int *l,int *c)
{
do{
*l=rand()%3 ;
*c=rand()%4;
}while (m[*l][*c]!=10) ;
}
int numero(int m[3][4])
{ int r,i,j,t=1;
do{
r = rand()%10;
for(i=0;i<3;i++)
{for(j=0;j<4;j++)
{
if (m[i][j]==r) t=0;
}
}
}while (t==0);
return(r);
}
void repetition(int m[3][4])
{ int a,cmp1=0,l,c;
a=numero(m);
do {
alea(m,&l,&c);
m[l][c]=a;
cmp1++;
}while(cmp1!=3);
}
void remp(int m[3][4])
{ int i;
for(i=0;i<4;i++)
repetition(m);
}
main()
{ srand(time(NULL));
int m[3][4],i,j;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++) m[i][j]=10;
}
remp(m);
for(i=0;i<3;i++)
{for(j=0;j<4;j++)
{
printf("%d\t",m[i][j]);
}
printf("\n");
}
system("PAUSE");
}
le code est correcte
Ben cela dépend si tu as tenu compte de mes remarques et si tu les as bien intégrées. De plus, je n'ai pas relu ton code en détail puisque j'attends que tu le montres entre 2 balises "code" en tenant compte des corrections.
Pour le compilateur, je te conseille "Code::Block". Mais, si ça ne fonctionne pas, ce n'est sûrement pas le compilateur...
Ben cela dépend si tu as tenu compte de mes remarques et si tu les as bien intégrées. De plus, je n'ai pas relu ton code en détail puisque j'attends que tu le montres entre 2 balises "code" en tenant compte des corrections.
Pour le compilateur, je te conseille "Code::Block". Mais, si ça ne fonctionne pas, ce n'est sûrement pas le compilateur...