Matrice
Fermé
sweetwink
Messages postés
77
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
13 janvier 2009
-
16 nov. 2008 à 17:57
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 16 nov. 2008 à 20:40
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 16 nov. 2008 à 20:40
8 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
16 nov. 2008 à 18:12
16 nov. 2008 à 18:12
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
sweetwink
Messages postés
77
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
13 janvier 2009
6
16 nov. 2008 à 18:29
16 nov. 2008 à 18:29
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
16 nov. 2008 à 18:37
16 nov. 2008 à 18:37
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
sweetwink
Messages postés
77
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
13 janvier 2009
6
16 nov. 2008 à 18:35
16 nov. 2008 à 18:35
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
16 nov. 2008 à 18:40
16 nov. 2008 à 18:40
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.
sweetwink
Messages postés
77
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
13 janvier 2009
6
16 nov. 2008 à 18:45
16 nov. 2008 à 18:45
ok je vais le faire maintenenten
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
sweetwink
Messages postés
77
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
13 janvier 2009
6
16 nov. 2008 à 19:27
16 nov. 2008 à 19:27
#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*//
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
16 nov. 2008 à 20:18
16 nov. 2008 à 20:18
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
sweetwink
Messages postés
77
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
13 janvier 2009
6
16 nov. 2008 à 20:34
16 nov. 2008 à 20:34
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?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
16 nov. 2008 à 20:40
16 nov. 2008 à 20:40
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