Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur Bus que je ne trouve pas

    12 septembre 2020 à 13:02:00

    Essayant de créer un tableau de taille N puis l'utilisateur doit rentrer une valeur X et le programme lui dit combien de fois ce X existe.

    La compilation se passe bien puis "erreur bus", voici mon code : quelqu'un saurait m'aider ?

    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    int main()
    
    {
    
    int n,X,i;
    int tableau[n];
    
    srand(time(NULL));
    
    for(i=0;i<n;i++)
    {
    
    n=rand()%n;
    tableau[i]=n+1;
    
    printf("%d ", tableau[i]);
    
    }
    int nbredefois(int tableau[n], int X)
    {
    int i;
    int nb = 0;
    for(i = 0 ; i < n ; i++)
    {
    if (tableau[i] == X)
    {
    nb ++ ;
    }
    }
    return nb;
    }
    
    printf("Quelle valeur voulez vous associer à X?");
    scanf("%d", &X);
    printf("La valeur %d dans le tableau apparait ; %d\n", X, nbredefois(tableau,X));
    
    return 0;
    }



    -
    Edité par Camille12345 12 septembre 2020 à 14:18:48

    • Partager sur Facebook
    • Partager sur Twitter
      12 septembre 2020 à 14:15:26

      Utilises le bouton code </> du forum pour poster ton code ! (tu peux modifier ton post, lien modifier en haut à droite du post).

      -
      Edité par rouloude 12 septembre 2020 à 14:19:32

      • Partager sur Facebook
      • Partager sur Twitter
        12 septembre 2020 à 14:19:05

        rouloude a écrit:

        Utilises le bouton code </> du forum pour poster ton code ! (tu peux modifier ton post, lien modifier en haut à droite du post).


        Merci!! c'est fait
        • Partager sur Facebook
        • Partager sur Twitter
          12 septembre 2020 à 14:19:36

          Il a quel taille ton tableau nommé tableau ?

          PS : On ne défini pas de fonctions à l’intérieur de fonctions !

          • Partager sur Facebook
          • Partager sur Twitter
            12 septembre 2020 à 14:27:43

            rouloude a écrit:

            Il a quel taille ton tableau nommé tableau ?

            PS : On ne défini pas de fonctions à l’intérieur de fonctions !


            Soit T[1 ... n] un tableau non ordonné de n réels, et X un réel donné.

            1. 1)  Ecrivez dans le langage C une fonction récursive de nom OCCU qui retourne le

              nombre de fois où X apparaît dans le tableau T[1 ... n].

            2. 2)  Complétez la fonction main.




              Voilà mon ennoncé, je pensais qu'en mettant tableau[n] cela me ferait mon tableau de taille n

            • Partager sur Facebook
            • Partager sur Twitter
              12 septembre 2020 à 14:33:08

              Camille12345 a écrit:

              Voilà mon ennoncé, je pensais qu'en mettant tableau[n] cela me ferait mon tableau de taille n

              Oui, mais combien vaut n ?

              (Pour créer un tableau on doit lui fournir une taille !)

              -
              Edité par rouloude 12 septembre 2020 à 14:38:13

              • Partager sur Facebook
              • Partager sur Twitter
                12 septembre 2020 à 14:56:04

                rouloude a écrit:

                Camille12345 a écrit:

                Voilà mon ennoncé, je pensais qu'en mettant tableau[n] cela me ferait mon tableau de taille n

                Oui, mais combien vaut n ?

                (Pour créer un tableau on doit lui fournir une taille !)

                -
                Edité par rouloude il y a 16 minutes

                Je comprend oui !! mais comme d'après mon ennnoncé je ne n'ai pas de valeur exacte je ne peux pas mettre n= un chiffre

                • Partager sur Facebook
                • Partager sur Twitter
                  12 septembre 2020 à 15:02:50

                  Tu n'as pas le choix ! On ne peut pas créer un tableau sans taille !

                  Après, tu peux la demander en saisie avant la création du tableau. Mais je ne pense pas que c'est ce qui est demandé.

                  Tu pensera a sortir la fonction nbredefois de la fonction main !

                  Votre prof, n'est pas sympa :

                  de n réels "   int = entiers.

                  et aussi "Fonction récursive".

                  -
                  Edité par rouloude 12 septembre 2020 à 15:14:35

                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 septembre 2020 à 17:01:44

                    Hello,

                    Petit conseil, quand tu fais une fonction fais la en dehors du main, et quand tu as besoin de l'appeler tu le fais ca rend le code beaucoup plus lisible que ce soit pour toi que pour nous et n'hesite pas a indenter (je sais pas si c'est francais mdr) pour que ce soit plus simple de lecture

                    Ensuite si tu veux des réels ne met pas de int mais des float. Les int sont des entiers, ensuite, un tableau sans taille est un peu bizarre même si ça marche (en théorie) :)

                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 septembre 2020 à 17:27:24

                      rouloude a écrit:

                      Tu n'as pas le choix ! On ne peut pas créer un tableau sans taille !

                      Après, tu peux la demander en saisie avant la création du tableau. Mais je ne pense pas que c'est ce qui est demandé.

                      Tu pensera a sortir la fonction nbredefois de la fonction main !

                      Votre prof, n'est pas sympa :

                      de n réels "   int = entiers.

                      et aussi "Fonction récursive".

                      -
                      Edité par rouloude il y a environ 1 heure

                      J'ai fait ce que tu m'as dis maintenant quand je lance le code, il me retourne la valeur de nb donc 0 
                      #include <stdio.h>
                      #include <time.h>
                      #include <stdlib.h>
                      
                      
                      int nbredefois(int tableau[100], int X)
                      {
                      int i;
                      int nb=0;
                      for(i = 0 ; i < 100 ; i++)
                      {
                      if (tableau[i] == X)
                      {
                      
                        nb++;
                      }
                      }
                      return nb;
                      }
                      int main()
                      
                      {
                      int n,X,i;
                      int tableau[100];
                      {
                      srand(time(NULL));
                      
                      for(i=0;i<100;i++)
                      {
                      
                      n=rand()%19875;
                      tableau[i]=n+1;
                      
                      printf("%d ", tableau[i]);
                      
                      }
                      }
                      
                      printf("Quelle valeur voulez vous associer à X?");
                      scanf("%d", &X);
                      printf("La valeur %d dans le tableau apparait :%d\n", X, nbredefois(tableau,X));
                      
                      return 0;



                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 septembre 2020 à 17:27:54

                        Hello,

                        Tant que tu n'auras pas donné une valeur à n, ton tableau peut avoir un nombre négatif d'élements, ou zéro élement, ou un nombre trop élévé pour pouvoir utiliser une VLA, ou encore avoir par hasard une taille "acceptable".

                        Autre problème, à part ceux déjà soulevés,  dans ta boucle ligne 13, tu modifies n, qui est la seule variable à connaitre la taille du tableau.

                        Edit: ma réponse traitait du 1er code. Les post on été fait en même temps.

                        -
                        Edité par edgarjacobs 12 septembre 2020 à 17:31:03

                        • 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

                          12 septembre 2020 à 17:28:15

                          Hera_dit_Cation a écrit:

                          Hello,

                          Petit conseil, quand tu fais une fonction fais la en dehors du main, et quand tu as besoin de l'appeler tu le fais ca rend le code beaucoup plus lisible que ce soit pour toi que pour nous et n'hesite pas a indenter (je sais pas si c'est francais mdr) pour que ce soit plus simple de lecture

                          Ensuite si tu veux des réels ne met pas de int mais des float. Les int sont des entiers, ensuite, un tableau sans taille est un peu bizarre même si ça marche (en théorie) :)


                          Merci!! j' vais mettre des float mais maintenant je rencontre un nouveau problème (plus haut), et sans taille mon tableau ne marche pas...
                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 septembre 2020 à 18:10:38

                            Indente ton code, il sera plus agréable à lire !

                            Il semblerait que ton code est opérationnel ! Mais il ne répond pas tout à fait à l’énoncé !

                            • Partager sur Facebook
                            • Partager sur Twitter
                              12 septembre 2020 à 18:21:33

                              rouloude a écrit:

                              Indente ton code, il sera plus agréable à lire !

                              Il semblerait que ton code est opérationnel ! Mais il ne répond pas tout à fait à l’énoncé !


                              Je vais le faire merci! pourtant il ne me dit pas le nombre de par ex 6 dans le tableau affiché mais ne me donne que 0...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 septembre 2020 à 18:42:04

                                Camille12345 a écrit:

                                pourtant il ne me dit pas le nombre de par ex 6 dans le tableau affiché mais ne me donne que 0...

                                Je ne comprend pas cette phrase !

                                J'ai testé, il m'indique bien le bon nombre ! (fait un modulo 10 ou 20 tu auras plus de nombre identique).

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  13 septembre 2020 à 10:00:27

                                  rouloude a écrit:

                                  Camille12345 a écrit:

                                  pourtant il ne me dit pas le nombre de par ex 6 dans le tableau affiché mais ne me donne que 0...

                                  Je ne comprend pas cette phrase !

                                  J'ai testé, il m'indique bien le bon nombre ! (fait un modulo 10 ou 20 tu auras plus de nombre identique).


                                  J'ai essayé de nouveau et il marche! merci beaucoup de ton aide
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    13 septembre 2020 à 10:51:26

                                    Bien, mais, c'est pas tout à fait ce qui est demandé :

                                    Camille12345 a écrit:

                                    Soit T[1 ... n] un tableau non ordonné de n réels, et X un réel donné.

                                    1. 1)  Ecrivez dans le langage C une fonction récursive de nom OCCU qui retourne le

                                      nombre de fois où X apparaît dans le tableau T[1 ... n].

                                    -
                                    Edité par rouloude 13 septembre 2020 à 10:52:51

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      13 septembre 2020 à 16:26:11

                                      Camille12345 a écrit:

                                      Voilà mon ennoncé, je pensais qu'en mettant tableau[n] cela me ferait mon tableau de taille n

                                      Comme dit si bien mon père:

                                      Il faut laisser croire les béguines, elles sont spécialistes et payées pour

                                      Donc, non: si n est sensé représenter la taille d'un tableau, il faut que la valeur de n soit clairement définie pour indiquer le nombre exact d'éléments que le tableau doit contenir.

                                      De plus, lorsque l'on écrit un code proche de

                                      int tableau[N]; // j'ai choisi le type int, mais cela fonctione
                                                      // avec tous les types

                                      ce que l'on fait en réalité, c'est demander au compilateur de prévoir un espace suffisant dans le programme que pour représenter N éléments du type indiqués de manière contigüe en mémoire.

                                      Il faut  donc que le compilateur connaisse la valeur de N, ce qui n'est pas impossible, mais qui nous empêche d'écrire un code proche de

                                      int N; // le nombre d'éléments requis
                                      
                                      fprintf(stdout, "Combiens d'elements souhaitez-vous?");
                                      fscanf(stdin,"%d",&N);
                                      
                                      int tab[N]; 

                                      car la valeur de N ne sera pas connue à la compilation, vu qu'elle ne sera fournie par l'utilisateur que lors de l'exécution.

                                      (bon, C a, pendant "quelques temps" accepté la notion de VLA -- pour Variable Length Array -- qui nous autorisaient ce genre de pratique, mais sauf erreur de ma part, cette possibilité a été supprimée très rapidement).

                                      Si bien que, si l'on veut pouvoir représenter un tableau d'élément dont on ne connait pas la taille au moment de la compilation, il faut impérativement passer par l'allocation dynamique de la mémoire au travers des fonctions malloc et autres.  Le tout sans oublier de libérer la mémoire allouée (avec free) lorsqu'elle n'est plus nécessaire, ce qui nous amène à un code proche de

                                      int N; // le nombre d'éléments requis
                                      
                                      fprintf(stdout, "Combiens d'elements souhaitez-vous?");
                                      fscanf(stdin,"%d",&N);
                                      assert(N >0 && "la taille doit être exclusivement positive!");
                                      int * tab = malloc(sizeof(int) * N);
                                      if(!tab){
                                          printf("erreur lors de l'allocation de memoire!");
                                          abord();
                                      }
                                      /* on travaille avec le tableau */
                                      
                                      free(tab);



                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                                        13 septembre 2020 à 16:45:53

                                        Il ne faudrait effectivement plus utiliser les VLA, il n'est plus qu'en option sur la norme C11 où il peut être non valide si la macro __STDC_NO_VLA__. est défini !
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Erreur Bus que je ne trouve pas

                                        × 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