8 réponses
Salut
Attention, je t'ai juste rempli les diagonales avec des zéros. A toi de remplir les autres à ton gré.
Cdlt
#include <stdio.h> int main(void){ int tab[3][3]; for(int i=0;i<3;i++){ tab[i][i]=0; tab[2-i][i]=0; } for(int i=0;i<3;i++){ for(int j=0;j<3;j++) printf("%d ",tab[i][j]); puts(""); } return 0; }
Attention, je t'ai juste rempli les diagonales avec des zéros. A toi de remplir les autres à ton gré.
Cdlt
merci d'étre tjr là pour m'aider
mais tu penses pas que il faut faire condition (si le nombre de colonne est différent du nombre de lignes là on peu pasmettre méme les diagonales en 0 )n'est ce pas
mais tu penses pas que il faut faire condition (si le nombre de colonne est différent du nombre de lignes là on peu pasmettre méme les diagonales en 0 )n'est ce pas
Tout dépend de ton programme. Je t'ai juste donné l'algorithme pour remplir les diagonales.
Dans mon exemple, la taille de la matrice est codée en dure, donc il n'y a pas de souci. Mais, si tu dois récupérer la taille de la matrice à l'exécution du programme. Tu devras vérifier que la matrice est carrée. Ou alors tout simplement, tu pars du principe que ta matrice est carrée et donc tu ne demandes à l'utilisateur que la taille d'un côté ;)
Cdlt
Dans mon exemple, la taille de la matrice est codée en dure, donc il n'y a pas de souci. Mais, si tu dois récupérer la taille de la matrice à l'exécution du programme. Tu devras vérifier que la matrice est carrée. Ou alors tout simplement, tu pars du principe que ta matrice est carrée et donc tu ne demandes à l'utilisateur que la taille d'un côté ;)
Cdlt
est ce que on peu faire comme ça si on veu remplir le diagonale qui commence de la derniere colonne :
t[i++][i--]=0
t[i++][i--]=0
Faut tester par toi même, c'est comme ça qu'on progresse rapidement ;).
Mais sinon pour répondre à la question, non. Tu peux pas, tu risques surtout de faire une boucle récursive si tu mets ça dans un while. Incrémenter i puis le décrémenter revient au point de départ. Donc i restera constant à la fin de l'instruction.
Mais sinon pour répondre à la question, non. Tu peux pas, tu risques surtout de faire une boucle récursive si tu mets ça dans un while. Incrémenter i puis le décrémenter revient au point de départ. Donc i restera constant à la fin de l'instruction.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
#include <stdio.h>
void main ()
{
int tab[100][50]; ///* là j'en suis pa sur comment faire tab [100][50]et pui dire si nc=nl*///
int i,j,nl,nc;
for (j=0;j<nc;j++)
{printf ("saisir le nombre de colonnes",nc);}
for (i=0;i<nl;i++)
{printf("saisirle nombre delignes",nl);}
for ( i=0;i<nl;i++)
{ if (nl==nc)
{t[i][i]=0
t[2-i][i]=0}}
for(i=0;i<nl;i++)
{for (j=0;j<nc;j++)
{printf("%i",t[i][j]);}
puts("")} //*les autres cases sont vides*//
}
void main ()
{
int tab[100][50]; ///* là j'en suis pa sur comment faire tab [100][50]et pui dire si nc=nl*///
int i,j,nl,nc;
for (j=0;j<nc;j++)
{printf ("saisir le nombre de colonnes",nc);}
for (i=0;i<nl;i++)
{printf("saisirle nombre delignes",nl);}
for ( i=0;i<nl;i++)
{ if (nl==nc)
{t[i][i]=0
t[2-i][i]=0}}
for(i=0;i<nl;i++)
{for (j=0;j<nc;j++)
{printf("%i",t[i][j]);}
puts("")} //*les autres cases sont vides*//
}
Salut.
Quand tu postes sur le forum, utilise la balise "code" à droite de souligner. Sinon c'est illisible et ça donne pas envie de lire.
Sinon, comment faire ? Allocation dynamique ;).
Ce qui donnerait :
Cdlt
Quand tu postes sur le forum, utilise la balise "code" à droite de souligner. Sinon c'est illisible et ça donne pas envie de lire.
Sinon, comment faire ? Allocation dynamique ;).
Ce qui donnerait :
#include <stdio.h> #include <stdlib.h> int main(void){ int **tab; int lin,col; printf("nombre de lignes: "); scanf("%d",&lin); printf("nombre de colonnes : "); scanf("%d",&col); if(lin<=0 || col<=0) exit(-1); if( (tab=malloc(lin*sizeof(*tab)) )==0) exit(-1); for(int i=0;i<lin;i++) if( (tab[i]=malloc(col*sizeof(**tab)) )==0) exit(-1); //remplissage de la matrice //... //... //mise à zéro des diagonales si matrice carrée if(lin==col){ for(int i=0;i<lin;i++){ tab[i][i]=0; tab[lin-i-1][i]=0; } } for(int i=0;i<lin;i++){ for(int j=0;j<col;j++) printf("%d\t",tab[i][j]); puts(""); } return 0; }
Cdlt
if(lin<=0 || col<=0) exit(-1);
if( (tab=malloc(lin*sizeof(*tab)) )==0) exit(-1);
for(int i=0;i<lin;i++)
if( (tab[i]=malloc(col*sizeof(**tab)) )==0) exit(-1);
je doi avoir honte, mais on peu pas faire autre chose plus simple que ça,pourquoi cette instruction?
if( (tab=malloc(lin*sizeof(*tab)) )==0) exit(-1);
for(int i=0;i<lin;i++)
if( (tab[i]=malloc(col*sizeof(**tab)) )==0) exit(-1);
je doi avoir honte, mais on peu pas faire autre chose plus simple que ça,pourquoi cette instruction?
Je répète encore. Quand tu postes, utilise la balise code (à droite du bouton souligner).
Et oui, c'est obligatoire et il n'y a pas plus simple. Il s'agit d'allocations dynamiques conformes.
malloc permet d'allouer en mémoire un tableau d'une taille obtenue à l'exécution (bien sûr la dimension doit être positive, d'où mon if). Et il faut tester également la valeur du retour du malloc pour vérifier que l'allocation a bien réussi.
Cdlt
Et oui, c'est obligatoire et il n'y a pas plus simple. Il s'agit d'allocations dynamiques conformes.
malloc permet d'allouer en mémoire un tableau d'une taille obtenue à l'exécution (bien sûr la dimension doit être positive, d'où mon if). Et il faut tester également la valeur du retour du malloc pour vérifier que l'allocation a bien réussi.
Cdlt