Programme en langage C

Résolu/Fermé
Hanan - 23 janv. 2011 à 13:49
 Hanan - 23 janv. 2011 à 16:37
Bonjour,



J'ai un programme en langage C demande de remplir une matrice
(3 lignes,4colonnes),compter et afficher à la fin le nombre de zéro saisie et la position de chaque zéro .

J'ai écris le programme mais il ne fonctionne pas ,qlq peut m'aider pr le corrigé svp
voilà le code :



#include <stdio.h>
void main ()
{int t1[100];
int t2[100];
int tab[3][4];
int i,c,j,k=0,posl,posc;
c=0;
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
{
printf("saisie une notes \n");
scanf("%d",&tab[i][j]);}
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
{
if(tab[i][j]==0)
{
c=c+1;
t1[i]=i;
t2[i]=j;
}
}
printf("\n le nombre de 0 est %d\n",c);
for(i=0;i<=11;i++)

printf("l'élément dans la ligne %d et le colonne %d est nul \n",t1[i],t2[i]);

}

****************
Merci d'avance

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
23 janv. 2011 à 14:22
bonjour,

La prochaine fois, n'oublie pas de mettre ton code entre tes balises "code" (à droite du bouton souligné) sinon c'est illisible.
Sinon remarque sur ton code :
if(tab[i][j]==0) 
{ 
c=c+1; 
t1[i]=i; 
t2[i]=j; 
} 

Ok, tu comptes le nombre de 0. Par contre pour la position, la méthode est fausse. Imagine que la ligne i de tab ne contienne que des 0. Tu récrirais sur t1[i] et t2[i] puisque i serait le même.
Il faut que tu revois ce point.

Cdlt,
0
wé exactement le prb dans la partie ou on détermine la position de zéro,j'arrive pas à le résoudre,si t'a une idée pr le faire svp dis moi.

*********
Merci pr ta réponse
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
23 janv. 2011 à 15:03
T'as grosso modo de façon de faire.
Soit tu fais un tableau de structure. Ce qui donnera : t[c].ligne=i; et t[c].colonne=j;
avec c le c-ème zéro analysé.
Soit tu peux faire t[c]=i*4+j; Avec i*4+j tu pourras retrouver i et j avec t[c]/4 et t[c]%4
Cdlt,
0
C=0?,prkoi cette formule i*4+j exacte ??
J'ai pas compris ce que tu dis ,est ce que tu peux m'expliquer avec un autre méthode??
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
23 janv. 2011 à 15:55
A priori, tu préfères la méthode du tableau simple.
Exemple :
if(tab[i][j]==0) {
   tab[c]=4*i+j;
   c++;
}

Pourquoi 4*i+j ? Car tab est un tableau qui contient 4 colonnes. Chacune vont de 0 à 3. Donc tous les multiples de 4, on va à la ligne suivante.
Autrement, ton tableau tab[i][j]=... pourrait très bien s'écrire tab[0][4*i+j];
Et pour retrouver ligne et colonne à partir de l'expression 4*i+j, tu utilises le modulo (%) et la division entière (/) comme expliqué dans le précédent post.
0
Un grand merci pr toi Fiddy, j'ai résoudre le prb =)
0