Recherche Séquentielle Tableau deux dimensions

Résolu/Fermé
faresk93 Messages postés 18 Date d'inscription mardi 12 février 2013 Statut Membre Dernière intervention 10 février 2014 - 23 mai 2013 à 15:33
faresk93 Messages postés 18 Date d'inscription mardi 12 février 2013 Statut Membre Dernière intervention 10 février 2014 - 23 mai 2013 à 23:54
Bonjour,

J'ai codé ce programme ci, il fonctionne parfaitement sauf que la recherche ne se fait que sur la première ligne.
Aidez moi svp !

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

int i,j,l,c={0,0,0,0};

void SaisirTab1(int *l,int *c)
{
 do
    {
        printf("\n  Lignes : ");
        scanf("%d",l);
        printf("\n  Colonnes : ");
        scanf("%d",c);
    }
    while ((l<=0)&&(c<=0));
}


void SaisirTab2(int tab[l][c])
{


printf("\n");

    for(i=0;i<l;i++)
    {
        for(j=0;j<c;j++)
        {
        printf("T[%d][%d] = ",i,j);
        scanf("%d",&tab[i][j]);
        printf("\n");
        }

    }
}

void RemplirTab(int tab[l][c])
{
    for(i=0;i<l;i++)
    {
        for(j=0;j<c;j++)

         printf("%d \t",tab[i][j]);
         printf("\n");
    }
}

float SommeTab(int tab[l][c])
{
    float s=0;
    for(i=0;i<l;i++)
    {
        for(j=0;j<c;j++)
        s+=tab[i][j];
    }
    return s;
}

 void main()
{

int tab[l][c],x,pos1,pos2;
float p1,p2;

 printf("\n                                Fares Khiary\n\n");

    SaisirTab1(&l,&c);
    printf("\n");
    SaisirTab2(tab);
    printf("----------\n");
    p1=SommeTab(tab);
    p2=p1/(l*c);
    RemplirTab(tab);
    printf("\nDonner un entier : ");
    scanf("%d",&x);
    pos1=-1;
    pos2=-1;
    for(i=0;(i<l && pos1==-1);i++)
    {
        for(j=0;(j<c && pos2==-1);j++)
        {
            if(tab[i][j]==x)
            {
                pos1=i;
                pos2=j;
            }
        }
    }
    if(pos1==-1 && pos2==-1) printf("\nAucun\n");
    else printf("\nLa position de %d est : %d|%d\n",x,pos1,pos2);
    printf("\n%.2f  %.2f",p1,p2);


getch();
system("exit");
void abort(void);

}


A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
23 mai 2013 à 21:44
J'ai codé ce programme ci, il fonctionne parfaitement sauf que la recherche ne se fait que sur la première ligne.
Ton programme contient plein d'erreurs, qui sont traduites en warning. Voilà pourquoi il est important de corriger tous les warnings ;-).

int i,j,l,c={0,0,0,0};
c est un nombre. Donc tu ne peux pas l'initialiser comme un tableau => c=0;
Si tu veux tout initialiser en même temps : int i,j,l,c; i=j=l=c=0;
Ou tout simplement : int i, j, l, c; (initialiser par défaut à 0).

Enfin, les variables globales sont à éviter. Il vaut mieux que les variables soient locales.

#include<conio.h>
Non standard.

void main()
Non standard. Le prototype de main() sans argument est : int main(void).
Et la fonction retourne un 0 : return 0;

int tab[l][c],x,pos1,pos2;
Dis autrement : int tab[0][0] (puisque l=c=0)...
Attention, donc aux valeurs. De plus, en C (ISO C89/90), tu ne peux mettre des variables pour définir les dimensions d'un tableau : int tab[LIGNE][COLONNE]; avec #define LIGNE 5 et #define COLONNE 6 (par exemple).
Dans ton cas, tu souhaites faire de l'allocation dynamique. Il faut donc passer par malloc(). Par exemple : int **tab;
tab=malloc(l*sizeof(int*));
for(i=0;i<l;i++) tab[i]=malloc(c*sizeof(int));
Ne pas oublier de faire les free (en sens inverse).

getch();
system("exit");

A remplacer par : system("pause"); return 0;

void abort(void);
A enlever du main().

Cdlt,
1
faresk93 Messages postés 18 Date d'inscription mardi 12 février 2013 Statut Membre Dernière intervention 10 février 2014
23 mai 2013 à 22:59
J'ai suivi vos conseils, alors maintenant quand à l'affichage du tableau c'est devenu corrompu, il m'affiche des adresses non pas les valeurs que j'ai saisi !
0
faresk93 Messages postés 18 Date d'inscription mardi 12 février 2013 Statut Membre Dernière intervention 10 février 2014
23 mai 2013 à 23:54
Mon Programme fonctionne parfaitement maitenant !
Merci fiddy !
???? ???? ???

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>



void SaisirTab1(int *l,int *c)
{
 do
    {
        printf("\n  Lignes : ");
        scanf("%d",l);
        printf("\n  Colonnes : ");
        scanf("%d",c);
    }
    while ((l<=0)&&(c<=0));
}


void SaisirTab2(int tab[50][50],int l,int c)
{
int i,j;

printf("\n");

    for(i=0;i<l;i++)
    {
        for(j=0;j<c;j++)
        {
        printf("T[%d][%d] = ",i,j);
        scanf("%d",&tab[i][j]);
        printf("\n");
        }

    }
}

void RemplirTab(int tab[50][50],int l,int c)
{
    int i,j;
    for(i=0;i<l;i++)
    {
        for(j=0;j<c;j++)

         printf("%d \t",tab[i][j]);
         printf("\n");
    }
}

float SommeTab(int tab[50][50],int l, int c)
{
    int i,j;
    float s=0;
    for(i=0;i<l;i++)
    {
        for(j=0;j<c;j++)
        s+=tab[i][j];
    }
    return s;
}

void recherche(int tab[50][50],int n,int m,int a)
{
    int pos1,pos2;
    int i,j;

    pos1=-1;
    pos2=-1;
    for(i=0;(i<n && pos1==-1);i++)
    {
        for(j=0;(j<m && pos2==-1);j++)
        {
            if(tab[i][j]==a)
            {
                pos1=i;
                pos2=j;
            }
        }
    }
    if(pos1==-1 && pos2==-1) printf("\nAucun\n");
    else printf("\nLa position de %d est : |%d|%d|\n",a,pos1,pos2);

}

 int main(void)
{

int t[50][50],x;
float p1,p2;
int l,c;

 printf("\n                                Fares Khiary\n\n");

    SaisirTab1(&l,&c);
    printf("\n");
    SaisirTab2(t,l,c);
    printf("----------\n");
    p1=SommeTab(t,l,c);
    p2=p1/(l*c);
    RemplirTab(t,l,c);
    printf("\nLa somme est %.2f || La moyenne est %.2f\n",p1,p2);
    printf("\nChercher un entier : ");
    scanf("%d",&x);
    recherche(t,l,c,x);

getch();
system("pause");return 0;

}
0
faresk93 Messages postés 18 Date d'inscription mardi 12 février 2013 Statut Membre Dernière intervention 10 février 2014
Modifié par faresk93 le 23/05/2013 à 20:05
J'ai transformé le travail de la recherche (main) en une procedure et voilà le programme fonctionne parfaitement !
C'est quoi le problème exactement si l'on écrit en main ?
0