Matrice

sweetwink Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
comment faire une matrice en c dont on met à zéro les deux diagonales

8 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut
#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
0
sweetwink Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   6
 
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
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
0
sweetwink Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   6
 
est ce que on peu faire comme ça si on veu remplir le diagonale qui commence de la derniere colonne :
t[i++][i--]=0
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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.
0
sweetwink Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   6
 
ok je vais le faire maintenenten
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sweetwink Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   6
 
#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*//
}
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 :
#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
0
sweetwink Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   6
 
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?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
0