IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

petit aide pour un tableau en c


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut petit aide pour un tableau en c
    bonjour
    je suis debutante en c ,et je voulais m'entrainner en codant ce probléme qui consiste a declarer un tableau de 50 elements, et de determiner la valeur maximal de ce tableau ainsi que sa position;et voila le code que jai pu faire mais celui la ne semble pas marcher car a chaque compilation il me donne (sous la fenétre de dos) le tableau(bien sur)suivie de
    la valeur maximal est 0 et occupe la position 5 (5 ou selon le nombre d'elements existant dans le tableau)voila mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #include<stdio.h>
    #include<conio.h>
     
    main()
    {
       int n,i,j,tab[50],max=tab[0],pos=0;
     
       printf("saisir un entier n<=50:");
       scanf("%d",&n);
       for(i=0;i<n;i++)
       {
          printf("element %d:",i);
          scanf("%d",&tab[i]);
       }
     
       for(i=0;i<n;i++)
       {
          printf("tab[%d]=%d\n",i,tab[i]);
       }
     
       for(i=0;i<n;i++)
       {
          for(j=i+1;j<n;j++)
             if(tab[j]>max)
          max=tab[i];
          pos=i;
          printf("la valeur maximale est %d elle occupe la position %d\n",tab[i],i);
          system("pause");
       }
    merci pour votre aide

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    bonjour
    je suis debutante en c
    Bienvenue à toi, effectivement tu as l'air débutante en C !

    Voici les problèmes que j'ai pu identifier :

    - La fonction main n'a pas le bon prototype, c'est soit :
    soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int main (int argc, char **argv)
    Ensuite, comme la fonction main à une valeur de retour (un entier), il faut dire laquelle, pour ceci après ton appel à la fonction system, tu mets ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return EXIT_SUCCESS;
    Ceci veut dire que le programme s'est correctement déroulé, la constante EXIT_SUCCESS est définie dans le fichier d'en-tête stdlib.h

    Ensuite, ceci :

    Ce fichier d'en-tête n'est pas portable du tout, de plus à bien y regarder tu n'en a pas besoin, enlève le

    Ensuite, je vois que tu utilises la fonction scanf(), elle n'est pas conseillée, surtout quand tu débutes, utilises à la place le couple de fonction fgets() et strtol(). Elles sont plus sûres.

    Concernant ton problème de recherche du plus grand élément, c'est ton algorithme qui ne fonctionne pas, en fait je ne comprend pas du tout ta deuxième boucle imbriquée.

    Pour trouver le plus grand élément d'un tableau T[0;n] je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    max = T[0];
    indice = 0;
    pour i allant de 1 à N faire
         si ( T[i] > max ) alors
              max = T[i]
              indice = i
         fin si
    fin pour
    Bref, j'ai l'impression que tu t'es compliqué la vie pour rien.

    Enfin, pour finir, quelques choses :

    - Met ton code dans une balise de code, ça garde l'indentation et ça facilite la lecture.
    - Il manquait une accolade fermante, je suppose qu'il s'agit d'une erreur de copié coller.
    - tu utilises la fonction system avec l'argument pause, je me doute donc que tu utilises windows, saches que ce genre d'appel n'est pas portable, sur mon os par exemple ça ne fonctionne pas.

  3. #3
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut
    et bien! j'avais entamé une réponse mais je me suis fait prendre de vitesse.

    J'ajoute quand même une chose:

    Je te conseille vivement de toujours utiliser des accolades, memes pour une boucle for qui ne contient qu'une seule instruction.

    d'une part ça rend le code plus lisible (selon moi mais c'est une question de gout)
    d'autre part si tu modifes ton code, ça t'arriveras souvent d'ajouter une instruction sans remarquer que tu n'as pas mis d'accolades, et cette instruction sera en dehors de te boucle. ça compile mais ça s'execute pas comme on veut et c'est énervant

    ainsi quand tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     if(tab[j]>max)
    max=tab[i];
    pos=i;
    pos=i sera toujours executé car il est en dehors du if(tab[j]>max)
    ça me semble etre faux mais j'ai peut-etre mal compris ce que tu voulais faire


    (evidemment c'est valable pour les boucles while et les if aussi...)

    bon courage pour la suite

  4. #4
    Membre habitué Avatar de ccensam
    Inscrit en
    Juillet 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2005
    Messages : 128
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par PRomu@ld
    - La fonction main n'a pas le bon prototype, c'est soit :
    soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main (int argc, char **argv)
    Si tu n'utilise pas argc et **argv pourquoi les mettre. Tu peut ne pas mettre int car toute fonction qui n'est pas précédée par son type est intérprétée comme de type int.
    Citation Envoyé par PRomu@ld
    Ensuite, je vois que tu utilises la fonction scanf(), elle n'est pas conseillée, surtout quand tu débutes, utilises à la place le couple de fonction fgets() et strtol(). Elles sont plus sûres.
    Je vois pas le raport entre l'utilisation de scanf() et les deux fonctions fgets() et strtol().
    - char * fgets (char * string , int num , FILE * stream) permet de lire 'num' caractère d'aprés le fichier stream.
    - long strtol(const char *nptr, char **endptr, int base) permet la convertion d'une chaine de caractère en long int.
    Faux pas dire n'importe quoi surtout à une femme, car....

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    merci pour le coup daide,mais je me suis fait mal comprendre en effet; ce qui me géne c'est de ne pas savoir coment afficher car moi j'ai un probléme d'exéécution (la compilation se passe sans problléme) donc aprés le if{} je dois mettre la fonction printf pour avoir mes resultats c la que je me perds!!! coments ecrire cette pprintf(.......................)pour visualiser mes resultats de valeur max et sa pos........merci pour tt

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par ccensam
    Tu peut ne pas mettre int car toute fonction qui n'est pas précédée par son type est intérprétée comme de type int.
    En C90 uniquement.

    Citation Envoyé par ccensam
    Je vois pas le raport entre l'utilisation de scanf() et les deux fonctions fgets() et strtol().
    - char * fgets (char * string , int num , FILE * stream) permet de lire 'num' caractère d'aprés le fichier stream.
    - long strtol(const char *nptr, char **endptr, int base) permet la convertion d'une chaine de caractère en long int.
    Tout simplement remplacer scanf, qui n'est pas facile à utiliser, par des fonctions sécurisées

  7. #7
    Membre habitué Avatar de ccensam
    Inscrit en
    Juillet 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2005
    Messages : 128
    Points : 162
    Points
    162
    Par défaut est ce
    Pour visualiser les resultats vous peuvez (!!!!!! Comme vous avez inclue conio.h qui n'est pas standard !!!!!!) ajouter à la fin de votre programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ----------
    printf("la valeur maximale est %d elle occupe la position %d\n",tab[i],i); 
    getch();
    return 0
    }
    Ou bien comme je vois sur votre code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    -------
    printf("la valeur maximale est %d elle occupe la position %d\n",tab[i],i); 
    system("PAUSE"); // PAUSE en maj
    return 0;
    }
    Et n'oublie pas de mettre si ça marche!!

  8. #8
    Membre habitué Avatar de ccensam
    Inscrit en
    Juillet 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2005
    Messages : 128
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par gege2061
    Citation Envoyé par ccensam
    Tout simplement remplacer scanf, qui n'est pas facile à utiliser, par des fonctions sécurisées
    La question que je vais poser, est-ce dans le cas présent ces deux fonctions peuvent servir!!!!!! Dans un autre cas peut étre.

  9. #9
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par ccensam
    Tu peut ne pas mettre int car toute fonction qui n'est pas précédée par son type est intérprétée comme de type int.
    C'est vrai en C pre-ansi et en C90 (ou la presence du type de retour explicite est licite et a, a mon avis, au moin un avantage documentaire) mais c n'est plus vrai en C99.
    Donc pour etre portable il faut bien int main(void)



    Citation Envoyé par ccensam
    Je vois pas le raport entre l'utilisation de scanf() et les deux fonctions fgets() et strtol().
    - char * fgets (char * string , int num , FILE * stream) permet de lire 'num' caractère d'aprés le fichier stream.
    - long strtol(const char *nptr, char **endptr, int base) permet la convertion d'une chaine de caractère en long int.
    Faux pas dire n'importe quoi surtout à une femme, car....
    PRomu@ld conseille tout simplement de remplacer le scanf utilise pour lire une entree formattee (adjectif qui ne correspond pas vraiment a une saisie humaine) sur l'entree standard par la lecture de la saisie utilisateur vue comme une chaine de caractere (utilisation de fgets()) suivi d'une analyse de la chaine lue et de la conversion en entier (utilisation de strtol()).
    Dans le cas present, la lecture par scanf n'est pas vraiment dangeureuse (pas de boucle infinie ni de depassement de buffer), par contre elle est incorrecte (ques se passe-t-il si l'utilisateur saisie une lettre et non un chiffre).
    Generalement scanf() est mal utilise (car plutot complexe a utiliser) et entraine enormement de faille et de comportement indefini. Danger d'autant plus grand si c'est utilise pour realiser des entrees dont on ne peut garantir le respect d'un format precis (comme dans le cas des saisie d'utilisateurs humains).
    La combinaison de fgets() et de fonctions de conversion comme strtol, strtod, etc. permette une gestion d'erreur beaucoup plus simple a mettre en oeuvre qu'avec scanf (quoique c'est discutable dans l'exemple present).

  10. #10
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    le probléme n'est pas encore resolu,,lors de lexécution j'obtient des valeurs bien différentes que celes que j'ai entrée au debut!!!je sais pas pourtant ça parait pas si compliqué que ça!!!
    veuillez juste prendre le méme programe que j'ai fait et compilait le et exécutait et regardais ce que ça donne!!!car mnt je suis vraimen hors moi..!!!!
    merci pour tt :

  11. #11
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par hayam_kin
    veuillez juste prendre le méme programe que j'ai fait et compilait le et exécutait et regardais ce que ça donne!!!
    Tout sauf ce que tu souhaite.

    Citation Envoyé par hayam_kin
    car mnt je suis vraimen hors moi..!!!!
    Faut pas s'ennerver dés les premières difficultés, ce sont les joies du C

    Voilà un code qui fait ce que tu souhaite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void)
    {
       int n;
       int i;
       int j;
       int tab[50];
       int max = 0;
       int pos = 0;
       char s[BUFSIZ];
     
       printf ("saisir un entier n <= 50 :\n");
       fgets (s, BUFSIZ, stdin);
       n = (int)strtol (s, NULL, 10);
       for (i = 0; i < n; i++)
       {
          printf ("element %d :\n", i);
          fgets (s, BUFSIZ, stdin);
          tab[i] = (int)strtol (s, NULL, 10);
       }
     
       for (i = 0; i < n; i++)
       {
          printf ("tab[%d] = %d\n", i, tab[i]);
       }
     
       for (i = 0; i < n; i++)
       {
          if (tab[i] > max)
          {
             max = tab[i];
             pos = i;
          }
       }
       printf ("la valeur maximale est %d elle occupe la position %d\n", tab[pos], pos);
       printf ("\nPress [Enter] to continue...\n");
       getchar ();
       return EXIT_SUCCESS;
    }
    Dans le désordre :
    • Remplacement de scanf
    • Inclusion de conio.h inutile
    • La fonction de recherche du maximum est plus que bizar, il peut être pratique de prendre deux minutes, un papier et un crayon histoire de réflechir au problème (c'est purement de l'algo)
    • max est initialisé avec tab[0], mais ce dernier n'étant pas initialisé comporte n'importe quoi et surement une valeur très grande
    • Il ne faut pas hésiter à aérer ton code, c'est plus simple pour la relecture.


    S'il y a des choses que tu ne comprends pas, n'hésite à demander

  12. #12
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Si tu n'utilise pas argc et **argv pourquoi les mettre. Tu peut ne pas mettre int car toute fonction qui n'est pas précédée par son type est intérprétée comme de type int.
    J'indiquait seulement les deux méthodes possibles pour la fonction main, je n'ai pas dis qu'il fallait utiliser la deuxième.

    Je vois pas le raport entre l'utilisation de scanf() et les deux fonctions fgets() et strtol().
    Je ne vais pas te répéter ce que t'ont dis les autres, il est vrai qu'ici ce n'est pas totalement justifié, mais étant donné que hayam_kin est débutante je pensais que lui donner de bon conseils pourrait servir...

    Faux pas dire n'importe quoi surtout à une femme, car....
    Je ne suis pas un expert mais il ne me semble pas avoir dis n'importe quoi ...

    system("PAUSE"); // PAUSE en maj
    Je n'utilise pas trop souvent windows et surtout la commande pause, mais il me semble, dis moi si je me trompe que windows ne fait pas la distinction majuscule, minuscule, alors PAUSE ou PaUsE, pour lui ça doit être la même chose, néanmoins, je peux me tromper.

    De plus, même si cela est possible en C99, les commentaires à la C++ n'existent pas dans les autres normes du langage et comme elle n'est pas intégrée à tous les compilateurs, mieux vaut les éviter, question de portabilité.

    Faut pas s'ennerver dés les premières difficultés, ce sont les joies du C
    Avec l'exprérience, les problèmes s'envolent et le C devient rapidement un très bon companion.

    n = (int)strtol (s, NULL, 10);
    Pourquoi ne pas passer tout en long ?, vu le programme, la consommation de mémoire n'est peut être pas une priorité. Mais je donne peut être un mauvais conseil ... .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    n = (int)strtol (s, NULL, 10);
    Personnellement je teste la valeur de retour pour savoir s'il n'y a pas eu de débordement vers le haut ou vers le bas, mais je suis peut être parano !

  13. #13
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    hi guys
    revoila mon code (euuuuh qui marche!! ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    #include<stdio.h>
    #include<conio.h>
    main()
    {
       int n, i, tab[50], max = 0, pos = 0;
     
       printf("saisir un entier n<=50:");
       scanf("%d", &n);
       for( i = 0; i < n; i++)
       {
          printf("element %d:", i);
          scanf("%d", &tab[i]);
       }
     
       for( i = 0; i < n; i++)
       {
          printf("tab[%d] = %d\n", i, tab[i]);
       }
     
       for(i = 0; i < n; i++)
       {
          if ( tab[i] > max )
          {
             max = tab[i];
             pos = i;
          } 
       }
       printf("la valeur maximale est: %d elle occupe la position %d\n", tab[pos], pos);
     
       system("PAUSE");
       return 0;
    }
    en fin de compte c'etait le méme de tt a lheure ou presque,il avait juste besoin de s'aerer!!lol
    merci pour tout les gars,vous avez fait du bon travail!!
    ps:la prochaine fois n'hesitez pas a me demander d'aerer mon code!!!

  14. #14
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    euuuuuuh aufait l'erreur qui m'a couté tt ce temps d'angoisse est :
    jai fait ça pour initialiser: max=tab(0];
    je devais faire max=0;
    merci

  15. #15
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Non, tu te trompes, admettons que l'on ait que des valeurs négatives dans ton tableau, tu trouverais que le maximum est 0 or ce ne serait pas le cas.

    En algo, on prend généralement max = - infini, ici tu ne peux pas (quoique), on ruse donc en se servant du premier element de ton tableau.

    Tu peux prendre max = tab[0], mais dans ce cas, ta boucle devrait commencer à 1 (c'est l'algo que je t'ai mis dans ma première réponse.)

    As tu testé le code de gege2061 ?

    ps:la prochaine fois n'hesitez pas a me demander d'aerer mon code!!!
    Ici ce que je te demande (mais je ne suis pas le seul), c'est ça :


  16. #16
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    ben navrée de dire non!! méme si change ma boucle de i=0 en i=1,et je met max=tab[0]; ca ne marche pas ca me fait revenir au cauchemar que j'ai vecu ce mat,sin!on je laisse pour le max=0;sinon tu connais une autre methode?????
    jai fait lautre code kil mont donné et ça bien marché mais le seul probléme c ke jarrive pas a coprendre la totalité du code,,des ecritures bien trop bizzares pour moi!!moi qui suit tré simple.au fait je pense mnt au truc que t'as dit sur les nombres negatifs et je realise que ça va bien poser un probléme!!alors des suggestions

  17. #17
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    En fait, je n'avais pas fais attention, mais ton problème est normal, en fait il faut que tu fasses max=tab[0] après avoir rempli ton tableau et pas au début ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include<stdio.h> 
    #include<conio.h> 
    main() 
    { 
       int n, i, tab[50], max = 0, pos = 0; 
     
       printf("saisir un entier n<=50:"); 
       scanf("%d", &n); 
       for( i = 0; i < n; i++) 
       { 
          printf("element %d:", i); 
          scanf("%d", &tab[i]); 
       } 
     
    /* C'est ici qu'il faut mettre max = tab[0] */
     
       for( i = 0; i < n; i++) 
       { 
          printf("tab[%d] = %d\n", i, tab[i]); 
       } 
     
       for(i = 0; i < n; i++) 
       { 
          if ( tab[i] > max ) 
          { 
             max = tab[i]; 
             pos = i; 
          } 
       } 
       printf("la valeur maximale est: %d elle occupe la position %d\n", tab[pos], pos); 
     
       system("PAUSE"); 
       return 0; 
    }
    J'ai indiqué où devait se trouver la bonne instruction. De plus, tu n'as pas à changer tes indices de boucle pour calculer le maximum du tableau (en effet, tab[0] > tab[0] n'est pas vrai, et heureusement !) ça te fais une itération de plus mais le résultat est juste.

    mais le seul probléme c ke jarrive pas a coprendre la totalité du code,,des ecritures bien trop bizzares pour moi!!moi qui suit tré simple
    Tu es ici sur le bon forum, poses tes questions, le code de gege2061 n'est pas dur du tout.

  18. #18
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    hummmm wé dans ce cas ça marche!!mais dans le cas d'un tableau a deux dimensions!!!alors juste pour info voila le code dun tab a deux dim :

    #include<stdio.h>
    #include<conio.h>
    main()
    {
    int tab[50][50];
    int i, j, l, c;
    int vmin, vmax ;
    int imin =0, imax =0, jmin =0, jmax =0;

    printf("donnez l et c:");
    scanf("%d %d", &l,&c);
    for(i=0; i<l; i++)
    for(j=0 ;j<c; j++)
    {
    printf("tab[%d][%d]=",i,j);
    scanf("%d", &tab[i][j]);
    }
    vmin = vmax = tab[0][0];

    for(i=0; i<l;i++)
    {
    for(j=0; j<c; j++)
    {
    printf("%d\t",tab[i][j]);}
    printf("\n");
    }
    for(i=0; i<l; i++)
    {
    for(j=0 ;j<c; j++)
    if(tab[i][j] > vmax)
    {
    vmax = tab[i][j];
    imax = i;
    jmax = j;
    }
    else
    if(tab[i][j] < vmin)
    {
    vmin = tab[i][j];
    imin = i;
    jmin = j;
    }
    }
    printf("la valeur maximal est %d elle occupe la position (%d,%d)\n",vmax,imax,jmax);
    printf("la valeur minimal est %d elle occupe la position (%d,%d)\n",vmin,imin,jmin);

    system("PAUSE");
    return 0;

    }

    et bonnuit!!

  19. #19
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Tu veux quoi au juste ?

    Alors une fois de plus :



    Aussi :

    Encore :

    Tu le fais exprès ?

    ummmm wé dans ce cas ça marche!!
    Tu as l'air sceptique, un papier un crayon et tu verras que ça fonctionne tout le temps (sauf si ton tableau est vide bien entendu)

    Sinon, ton problème est où avec ton code?

  20. #20
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Biosox
    eJe te conseille vivement de toujours utiliser des accolades, memes pour une boucle for qui ne contient qu'une seule instruction.
    Oui !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Besoin d'aide pour un Tableau
    Par PatBateman dans le forum Struts 1
    Réponses: 3
    Dernier message: 08/02/2007, 15h57
  2. une toute petits aide pour finaliser tout sa
    Par yoan_111 dans le forum ASP
    Réponses: 6
    Dernier message: 16/12/2005, 16h04
  3. Petite aide pour gros problème : libstdc++
    Par Info-Rital dans le forum Linux
    Réponses: 5
    Dernier message: 30/08/2004, 19h17
  4. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo