Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affichage 0 en mode Run

    27 janvier 2020 à 16:14:43

    Bonjour,

    Je n'arrive pa à résoudre cet exercice.

    #include <stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    /**
    Enoncé : le script affiche le nombre maximum et le nombre minimum d'un tableau.
    */
    
    int i,j, LEN,nbmax, nbmin;
    int * liste ={1,2,3,4,5,6,7,8,9};
    
    /** prototypes*/
    int MAX (int *liste);
    int MIN (int *liste);
    
    int main()
    {
        /**int * liste={1,2,3,4,5,6,7,8,9,10};*/
        MAX(*liste);
        MIN(*liste);
        printf ("Le nombre maximum est : %d\n", MAX(*liste));
        printf ("Le nombre minimum est : %d\n", MIN (*liste));
        return 0;
    }
    
    /**fonctions*/
    int MAX(int * liste)
    {
        LEN=strlen(liste);
        for(i=0; i<LEN;i++)
        {
            if (i==0)
            {
                nbmax=liste[i];
                continue;
            }
            else
            {
                if  (liste[i]>nbmax)
                {
                    nbmax=liste[i];
                }
            }
            return nbmax;
        }
    }
    
    int MIN(int * liste)
    {
        LEN=strlen(liste);
        for (i=0; i<LEN, i++;)
        {
            if (i==0)
            {
                liste[i]=nbmin;
                continue;
            }
            else
            {
                if(liste[i]>nbmin)
                {
                    nbmin=liste[i];
                }
            }
            return nbmin;
        }
     }
    


    Je souhaite afficher les nombres maximum et minimum du tableau. A la place, il n'affiche rien.

    Process returned -1073741819 (0xC0000005)   execution time : 1.910 s
    Press any key to continue.
    
    


    Un petit coup de pouce? Merci

    -
    Edité par StefanoRomeo1 27 janvier 2020 à 16:16:30

    • Partager sur Facebook
    • Partager sur Twitter
      27 janvier 2020 à 16:21:41

      0xC0000005 représente : Access Violation error

      La raison est strlen. (tu as peut-être des warnings à la compilation, si ce n'est pas le cas, il va falloire changer ça)

      Pour une chaine de caractère , strlen est capable de calculer ta taille de la chaine car il se trouve qu'en C , il y a un caractère de fin de chaine '\0'.


      strlen va interpréter l'adresse de ton tableau de int comme si c'était un tableau de caractère ... et là c'est le drame.
      Dans ta liste d'entier, il n'y a pas de caractère ou de valeur pour indiquer la fin, on ne peut donc pas savoir combien il y a d'élément dans le tableau !

      Astuce : Passe un second paramètre à tes fonction pour indiquer la taille du tableau ;)

      -
      Edité par neuneutrinos 27 janvier 2020 à 16:22:40

      • Partager sur Facebook
      • Partager sur Twitter
        27 janvier 2020 à 21:07:11

        -

        -
        Edité par edgarjacobs 27 janvier 2020 à 21:07:53

        • Partager sur Facebook
        • Partager sur Twitter

        On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

          28 janvier 2020 à 2:09:14

          Salut,
          En plus du strlen qui n'est pas fait pour les tableaux d'entiers comme l'a mentionné neuneutrinos,
          Que fais-tu si ton tableau ne contient aucun élément?
          Ce n'est pas un mauvais truc que de tester si i==0 pour trouver le minimum ou le maximum de départ.
          Si tu sais que la longueur est au moins un, tu assignes le min/max à l'élément 0 et tu fais ton 'for' à partir de 1 au lieu de 0.
          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            28 janvier 2020 à 9:50:58

            J'ai un peu refait le code et vous le soumets.

            #include <stdio.h>
            #include<stdlib.h>
            #include<string.h>
            
            #define LEN 10
            
            /**
            Enoncé : le script affiche le nombre maximum et le nombre minimum d'un tableau.
            */
            
            int i,j, nbmax, nbmin;
            int nbmax=0;
            int nbmin=0;
            int * liste ={1,2,3,4,5,6,7,8,9};
            
            /** prototypes*/
            int MAX (int *liste);
            int MIN (int *liste);
            
            /** Programme principal*/
            int main()
            {
                MAX(*liste);
                MIN(*liste);
                printf ("Le nombre maximum est : %d\n", MAX(*liste));
                printf ("Le nombre minimum est : %d\n", MIN (*liste));
                return 0;
            }
            
            /**fonctions*/
            int MAX(int * liste)
            {
                for(i=0; i<10;i++)
                {
                    if  (liste[i]>nbmax)
                    {
                        nbmax=liste[i];
                    }
                    return nbmax;
                }
            }
            
            int MIN(int * liste)
            {
                for (i=0; i<10 , i++;)
                {
                    if(liste[i]>nbmin)
                    {
                        nbmin=liste[i];
                    }
                    return nbmin;
                }
            }
            

            Mais l'affichage est toujours proche du nul (RUN)

            Process returned -1073741819 (0xC0000005)   execution time : 3.161 s
            Press any key to continue.
            

            Donc une question me vient à l'esprit. Le paramètre d'une fonction dans int main () peut être une chaîne? (ici, "MAX(*liste)" ligne 25 et  "MIN (*liste)"ligne 26). Merci


            -
            Edité par StefanoRomeo1 28 janvier 2020 à 9:52:44

            • Partager sur Facebook
            • Partager sur Twitter
              28 janvier 2020 à 10:13:47

              Voici le prototype que l'on s'attendrait à utiliser pour les fonctions min/max

              //const car on ne fait que lire
              //liste[] ou *liste , c'est la même chose mais liste[] indiquera que la fonction souhaite un tableau; C'est plus lisible.
              
              int min(const int liste[],int nbElem);
              
              int max(const int liste[],int nbElem);

              Et pour faire simple , on pourra supposer que le tableau ne sera jamais NULL et possédera toujours (au moins) un élément.

              -
              Edité par neuneutrinos 28 janvier 2020 à 13:59:26

              • Partager sur Facebook
              • Partager sur Twitter
                28 janvier 2020 à 11:55:38

                Merci, Neuneutrinos. nbElem fait référence à quoi?

                • Partager sur Facebook
                • Partager sur Twitter
                  28 janvier 2020 à 12:51:56

                  Il fait référence au tout premier message de neuneutrinos : « Astuce : Passe un second paramètre à tes fonction pour indiquer la taille du tableau »
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 janvier 2020 à 15:06:53

                    J'ai mal lu ou tu cherches un maximum dans MIN    éégalement?
                    Comme on te l'a suggéré, passe la longueur de ta liste (tableau) en paramètre.
                    Vérifie que cette longueur est supérieure à 0.
                    Ensuite fait par exemple:
                    nbmax = liste[0];
                    for(i = 1; i < longueur; i++) ...
                    Ça marche même si longueur est égal à 1.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Le Tout est souvent plus grand que la somme de ses parties.

                    Affichage 0 en mode Run

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown