Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problèmes avec les nombre négatifs...

Sujet résolu
Anonyme
    20 novembre 2017 à 22:28:25

    Bonsoir,

    On m'a demandé de faire un petit programme - en C - qui cherche l’élément maximal et minimal d'un tableau saisis au clavier et puis d’inverser leurs positions.

    Le programme marche dans deux cas :

    1- Le cas ou tout les éléments du tableau sont positifs.

    2- Le cas ou il y'a mélange entre des nombres positifs et négatifs

    Il ne marche pas dans le cas :

    1- Tout les nombres du tableau sont négatifs.

    Voilà le code source utilisé :

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int main () {
      float p;
      int n=10;
      float max;
      int id_max;
      int id_min;
      float min;
      int temp;
      float Tab[n];
      int i;
      printf("Veuillez saisir les valeurs du Tableau :\n");
      for(i=0;i<n;i++) {
        scanf("%f",&Tab[i]);
      }
       printf("Les valeurs saisis sont : \n");
    
      for (i=0;i<n;i++) {
       printf("%f\n",Tab[i]);
      }
      for (i=0;i<n;i++) {
        if (Tab[i]>max) {
          max=Tab[i];
          id_max=i;
        }
        if (Tab[i]<min) {
          min=Tab[i];
          id_min=i;
    
      }
    }
      temp=Tab[id_min];
      Tab[id_min]=Tab[id_max];
      Tab[id_max]=temp;
    printf("Le nouveau tableau est :\n");
    for (i=0;i<n;i++) {
       printf("%f\n",Tab[i]);
      }
    


    Merci de bien vouloir m'aider,je n'arrive pas à trouver de solution.

    EDIT : La variable p déclaré au début est pour le calcul de la multiplication des éléments du tableau.

    -
    Edité par Anonyme 20 novembre 2017 à 22:29:27

    • Partager sur Facebook
    • Partager sur Twitter
      20 novembre 2017 à 22:47:27

      Bonsoir ! Je ne sais pas si je vais donner la solution, mais j'ai remarqué des choses anormales :

      ‒ Ligne 24, tu compares Tab[i] avec max, or max n'a pas été initialisé et peut valoir n'importe quoi, du coup la comparaison peut donner n'importe quoi.

      ‒ Ligne 28, même problème avec min.

      Quand le programme ne marche pas comme prévu, n'hésite pas à faire afficher les variables pour voir ce qui se passe. Ici, en faisant afficher max et min, je pense que tu aurais remarqué qu'ils valent n'importe quoi.

      (Elle sert à quoi, la variable p ?)

      (Je viens d'essayer ton programme, même avec des valeurs uniquement positives ça ne marche pas. Maintenant corrigeons les initialisations... Oui, ça marche ! Ce que j'ai fait, c'est que j'ai initialisé max à la plus petite valeur possible du type double, et min à la plus grande valeur possible. On trouve ces valeurs dans <float.h>.)

      -
      Edité par robun 20 novembre 2017 à 22:54:23

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        20 novembre 2017 à 23:11:36

        Merci d'avoir pris le temps de répondre !

        1- En fait,le programme marche dans certains compilateurs et pas dans d'autres,j'ai essayé sur Dev C++ ça ne marche pas mais sur code blocks ça marche parfaitement pour les nombres positifs - J'ai fait plusieurs test avec des >0-.

        2- La variable p c'est pour la multiplication des éléments du tableau que je n'ai pas encore fait,je l'avais précisé dans un EDIT ^^

        3- Euh oui,je savais qu'elle valaient n'importe quoi sans initialisation,mais notre prof de TP n'acceptera probablement pas que j'utilise quelque chose qu'on a pas fais en cours,c'est pour cela que je me tiens au minimum,et je ne connaissais pas la "float.h" de toute façon,je vais lui expliquer demain matin pourquoi je l'ai utilisé en espérant qu'il ne se mets pas dans tout ses états...

        Merci de ton aide en tout cas !

        • Partager sur Facebook
        • Partager sur Twitter
          20 novembre 2017 à 23:22:52

          Hello,

          Pourquoi ne pas initialiser max et min avec tab[0], et commencer la boucle avec l'indice 1 ? (cela sous-entend évidemment que 2 éléments au moins ont été donnés).

          -
          Edité par edgarjacobs 20 novembre 2017 à 23:46:36

          • 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

          Anonyme
            20 novembre 2017 à 23:42:46

            edgarjacobs a écrit:

            Hello,

            Pourquoi ne pas initialiser max et min avec tab[0], et commencer la boucle avec l'indice 1 ? (cela sous-entend évidemment que 2 éléments au moins été donnés).

            Je l'ai fais,cela ne résous toujours pas le problème ...

            • Partager sur Facebook
            • Partager sur Twitter
              20 novembre 2017 à 23:45:12

              Si, si, la méthode d'edgarjacobs est la bonne et la plus simple ! Si ça ne résout pas le problème, c'est que tu t'y prends mal.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                20 novembre 2017 à 23:45:20

                robun a écrit:

                Bonsoir ! Je ne sais pas si je vais donner la solution, mais j'ai remarqué des choses anormales :

                ‒ Ligne 24, tu compares Tab[i] avec max, or max n'a pas été initialisé et peut valoir n'importe quoi, du coup la comparaison peut donner n'importe quoi.

                ‒ Ligne 28, même problème avec min.

                Quand le programme ne marche pas comme prévu, n'hésite pas à faire afficher les variables pour voir ce qui se passe. Ici, en faisant afficher max et min, je pense que tu aurais remarqué qu'ils valent n'importe quoi.

                (Elle sert à quoi, la variable p ?)

                (Je viens d'essayer ton programme, même avec des valeurs uniquement positives ça ne marche pas. Maintenant corrigeons les initialisations... Oui, ça marche ! Ce que j'ai fait, c'est que j'ai initialisé max à la plus petite valeur possible du type double, et min à la plus grande valeur possible. On trouve ces valeurs dans <float.h>.)

                -
                Edité par robun il y a environ 1 heure

                Je viens d'utiliser FLT_MAX et FLT_MIN et ça marche ! merci infiniment vraiment !!!!!!

                • Partager sur Facebook
                • Partager sur Twitter
                  20 novembre 2017 à 23:55:35

                  Mais n'hésite pas à utiliser la méthode d'edgarjacobs !

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    21 novembre 2017 à 0:00:42

                    robun a écrit:

                    Mais n'hésite pas à utiliser la méthode d'edgarjacobs !

                    Je viens juste de le refaire,ça ne marche toujours pas,voilà le nouveau code après modification ! :

                    #include <stdio.h>
                        int main() {
                            float p;
                            int n = 10;
                            float Tab[n];
                            float max=Tab[0];
                            int id_max;
                            int id_min;
                            float min=Tab[0];
                            int temp;
                            int i;
                            printf("Veuillez saisir les valeurs du Tableau :\n");
                            for (i = 0; i < n; i++) {
                                scanf("%f", & Tab[i]);
                            }
                            printf("Les valeurs saisis sont : \n");
                    
                            for (i = 0; i < n; i++) {
                                printf("%f\n", Tab[i]);
                            }
                            for (i = 1; i < n; i++) {
                                if (Tab[i] > max) {
                                    max = Tab[i];
                                    id_max = i;
                                }
                                if (Tab[i] < min) {
                                    min = Tab[i];
                                    id_min = i;
                    
                                }
                            }
                            temp = Tab[id_min];
                            Tab[id_min] = Tab[id_max];
                            Tab[id_max] = temp;
                            printf("Le nouveau tableau est :\n");
                            for (i = 0; i < n; i++) {
                                printf("%f\n", Tab[i]);
                            }
                                        return 0;
                    
                        }





                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 novembre 2017 à 0:19:55

                      C'est parce que tu as initialisé max et min avant même d'avoir saisi le tableau ! Du coup c'est comme avant : max et min ont une valeur indéterminée.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 novembre 2017 à 11:49:13

                        Yahya Sefraoui a écrit:

                        Je viens juste de le refaire,ça ne marche toujours pas,voilà le nouveau code après modification ! :

                        #include <stdio.h>
                            int main() {
                                float p;
                                int n = 10;
                                float Tab[n];
                                float max=Tab[0];
                                int id_max;
                                int id_min;
                                float min=Tab[0];
                                int temp;
                                int i;
                        

                        Bonjour,

                        9 variables locales, c'est beaucoup, pas étonnant que ce soit difficile à déboguer. Tu devrais découper tout cela.

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          23 novembre 2017 à 20:55:39

                          robun a écrit:

                          C'est parce que tu as initialisé max et min avant même d'avoir saisi le tableau ! Du coup c'est comme avant : max et min ont une valeur indéterminée.


                          C'est bon je viens de régler le problème,j'ai réussi à faire avec la méthode de jacobs,merci pour ta patience vraiment !
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Problèmes avec les nombre négatifs...

                          × 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