Programme en C

Résolu/Fermé
adama36 Messages postés 12 Date d'inscription vendredi 23 novembre 2007 Statut Membre Dernière intervention 20 octobre 2011 - 6 janv. 2009 à 21:35
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 6 janv. 2009 à 22:46
Bonjour,
j'ai le projet suivant:
soit une matrice carre d'organisation 3X3, ecrire les sous programmes suivantes.
Saisie: Permettant de saisir les element de la matrice.
Afficher: Fournissant une vue matricielle de la matrice a l'ecran.
Somme: Effectue la somme des element situe sur la diagonal principale
Maximum: Affichant le maximum de chaque ligne de la matrice
j'ai taper le programme suivant mais il bug et je voudrais savoir ou se situe ce bug.
voici le programme

#include <stdio.h>
#include <stdlib.h>
#define nl 3
#define nc 3

void saisi(int mat[nl][nc])
{
int i,j;
for(i=0;i<nl;i++)
{
for(j=0;j<nc;j++)
{
printf("Entrer l\'element en indice %d et %d \n",i,j);
scanf("%d",&mat[i][j]);
}
}
}

void affiche(int mat[nl][nc])
{
int i,j;
for(i=0;i<nl;i++)
{
for(j=0;j<nc;j++)
{
printf(" %d",mat[i][j]);
}
printf("\n");
}

}

int somme(int mat[nl][nc])
{
int i,j,s=0;
for(i=0;i<nl;i++)
{
for(j=0;j<nc;j++)
{
if(i==j)
s=+mat[i][j];
}
}
return s;
}

void maximum(int mat[nl][nc],int *max)
{
int i,j;
for(i=0;i<nl;i++)
{
max=mat[i][0];
for(j=0;j<nc;j++)
{
if(mat[i][j]>max)
max=mat[i][j];
}
printf("le maximum sur la ligne %d est %d",i,max);
}

}

int main()
{
int mat[nl][nc];
int i,j,s,*max;
puts("Saisi des donnee");
saisi(mat[nl][nc]);
puts("Affichage de la matrice");
affiche(mat[nl][nc]);
s=somme(mat[nl][nc]);
printf("Somme des elements de la diagonal principal est %d\n",s);
puts("Le maximum de chaque ligne");
maximum(mat[nl][nc],&max);
return 0;
}


merci d'avance !

3 réponses

salut,
essyes avec ce pgm:
#include <stdio.h>
#include <stdlib.h>
#define nl 3
#define nc 3

void saisi(int mat[nl][nc])
{
 int i,j;
   for(i=0;i<nl;i++)
   {
     for(j=0;j<nc;j++)
     {
       printf("Entrer l\'element en indice %d et %d \n",i,j);
       scanf("%d",&mat[i][j]);
     }
   }
}

void affiche(int mat[nl][nc])
{
int i,j;
   for(i=0;i<nl;i++)
   {
      for(j=0;j<nc;j++)
      {
	printf(" %d",mat[i][j]);
      }
	printf("\n");
   }

}

int somme(int mat[nl][nc])
{
int i,j,s=0;
   for(i=0;i<nl;i++)
   {
	s=s+mat[i][i];
   }
   return s;
}

void maximum(int mat[nl][nc],int max)
{
int i,j;
   for(i=0;i<nl;i++)
   {
     max=mat[i][0];
      for(j=0;j<nc;j++)
      {
	if(mat[i][j]>max)
	max=mat[i][j];
      }
	printf("le maximum sur la ligne %d est %d\n",i,max);
   }

}

int main()
{
int i,j,s,max;
int mat[nl][nc];

 puts("Saisi des donnee");
 saisi(mat);
 puts("Affichage de la matrice");
 affiche(mat);
 printf("Somme des elements de la diagonal principal est %d\n",somme(mat));
 puts("Le maximum de chaque ligne");
 maximum(mat,max);
return 0;
}

cordialement
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
6 janv. 2009 à 22:12
Salut,
T'as plusieurs erreurs. Lorsque tu envoies un tableau, il ne faut pas envoyer la dimension (puisque c'est un pointeur que tu envoies).
Et tu as fait s=+tab[i][j] au lieu de s+=tab[i][j].
Je t'ai également simplifié la méthode somme. Tu n'as pas besoin de parcourir tout le tableau pour faire les sommes de la diagonale.
#include <stdio.h>

#define nl 3
#define nc 3

void saisi(int mat[nl][nc])
{
    int i,j;
    for(i=0;i<nl;i++)
    {
        for(j=0;j<nc;j++)
        {
            printf("Entrer l\'element en indice %d et %d \n",i,j);
            scanf("%d",&mat[i][j]);
        }
    }
}

void affiche(int mat[nl][nc])
{
    int i,j;
    for(i=0;i<nl;i++)
    {
        for(j=0;j<nc;j++)
        {
            printf("%d ",mat[i][j]);
        }
        putchar('\n');
    }

}

int somme(int mat[nl][nc])
{
    int i,s=0;
    for(i=0;i<(nl<nc?nl:nc);i++)
        s+=mat[i][i];
    return s;
}

void maximum(int mat[nl][nc],int *max)
{
    int i,j;
    for(i=0;i<nl;i++)
    {
        *max=mat[i][0];
        for(j=0;j<nc;j++)
        {
            if(mat[i][j]>*max)
                *max=mat[i][j];
        }
        printf("le maximum sur la ligne %d est %d\n",i,*max);
    }

}

int main(void)
{
    int mat[nl][nc];
    int s,max;
    puts("Saisi des donnee");
    saisi(mat);
    puts("Affichage de la matrice");
    affiche(mat);
    s=somme(mat);
    printf("Somme des elements de la diagonal principal est %d\n",s);
    puts("Le maximum de chaque ligne");
    maximum(mat,&max);
    return 0;
} 

Cdlt
1
salut fiddy,
t'as écris :

           maximum(mat,&max);
   
 

on peut ne pas passer le parametre max par valeur puisque l'affichage est dans la procedure elle même .n'est ce pas?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844 > amie_ccm
6 janv. 2009 à 22:26
on peut ne pas passer le parametre max par valeur puisque l'affichage est dans la procedure elle même .n'est ce pas?
Oui. Il faut passer l'adresse pour pouvoir modifier la variable max se situant dans la fonction appelante (ici main).
Soit par : int *max; maximum(mat,max); soit par int max; maximum(mat,&max);
0
amie_ccm > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
6 janv. 2009 à 22:38
t'as raison ;
mais ce que je veux dire c qu'on a pas besoin de la valeur de max modifiée dans la procedure appellée dans ce programme en précise
cdlt
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844 > amie_ccm
6 janv. 2009 à 22:46
Ah, je comprends ta question.
En fait, j'ai gardé l'utilisation du pointeur qu'il avait utilisé.

Mais, t'as tout à fait raison, on aurait pu tout simplement faire :
void max(int tab[][nl) ;) comme dans ta version.
0
adama36 Messages postés 12 Date d'inscription vendredi 23 novembre 2007 Statut Membre Dernière intervention 20 octobre 2011
6 janv. 2009 à 22:17
merci vous etes tres gentil ;-)
0