Partage
  • Partager sur Facebook
  • Partager sur Twitter

algorithme de recherche

    15 janvier 2018 à 23:42:24

    Commentaire supprimé

    -
    Edité par KiriCouille1 1 septembre 2018 à 0:45:23

    • Partager sur Facebook
    • Partager sur Twitter
      16 janvier 2018 à 0:23:15

      Ta variable nombre_chiffre est égale à 0, aucun for n'est effectué.

      De plus ligle 75 tu passes l'adresse de i alors que tu dois envoyer un int.

      • Partager sur Facebook
      • Partager sur Twitter
        16 janvier 2018 à 1:50:51

        ta variable nombre_chiffre est toujours égale à 0.

        Ta fonction demander_nombre retourne uniquement le tableau 

        • Partager sur Facebook
        • Partager sur Twitter
          16 janvier 2018 à 7:57:44

          Commentaire supprimé

          -
          Edité par KiriCouille1 1 septembre 2018 à 0:45:43

          • Partager sur Facebook
          • Partager sur Twitter
            16 janvier 2018 à 8:41:52

            KiriCouille1 a écrit:

            Bonjour, pourtant je suis obligé d'initialiser " nombre-chiffre ", non ?

            Oui, mais avec une valeur qui a un rapport avec le nombre de chiffres dans ton tableau, sinon c'est pas très cohérent.

            • Partager sur Facebook
            • Partager sur Twitter

            Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

              16 janvier 2018 à 10:11:31

              Salut,

              Pourquoi la fonction demander_nombre se charge-t-elle d’allouer un tableau, son rôle devrait être de demander un nombre et c’est tout (on pourrait rajouter vérifier qu’il est bien positif, mais même ça je trouve que c’est de trop). Fais toi une fonction qui alloue le tableau et une qui le remplit, et fais ta fonction demander_nombre faire ce que son nom dit qu’elle fait.

              • Partager sur Facebook
              • Partager sur Twitter
              Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                16 janvier 2018 à 16:40:52

                Commentaire supprimé

                -
                Edité par KiriCouille1 1 septembre 2018 à 0:45:52

                • Partager sur Facebook
                • Partager sur Twitter
                  16 janvier 2018 à 16:44:58

                  Non, ce n'est pas cette partie qui fait n'imp. Encore une fois, ta variable "nombre_chiffre" n'est pas en accord avec la taille de ton tableau.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                    16 janvier 2018 à 16:50:25

                    Bonjour,

                    Alors je n'ai honnêtement rien lu, mais pourquoi veux-tu passer l'adresse de i ? Tu ne cherches pas à le modifier dans test, et de toute manière test ne prend pas un pointeur, donc tu ne peux pas lui envoyer d'adresse.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 janvier 2018 à 17:13:32

                      Commentaire supprimé

                      -
                      Edité par KiriCouille1 1 septembre 2018 à 0:46:02

                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 janvier 2018 à 17:48:58

                        et  resultat test : le programme va sortir de la boucle for des la 1ere iteration à cause de break

                        -
                        Edité par wirafane 16 janvier 2018 à 18:07:21

                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 janvier 2018 à 17:57:25

                          Hello,

                          wirafane a écrit:

                          le resultat test :

                          Il va sortir de la boucle for des la 1ere iteration à cause de break

                          De toute façon, resultat_test() est mal ficelé: test() fait exactement la même boucle.

                          @KiriCouille1: faudrait que tu apprennes à passer des pointeurs  quand c'est nécessaire....

                          • 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

                            16 janvier 2018 à 21:07:52

                            Commentaire supprimé

                            -
                            Edité par KiriCouille1 1 septembre 2018 à 0:46:15

                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 janvier 2018 à 21:53:57

                              Re,-

                              Reprenons.

                              Imaginons que tableau[4] vaille {1,3,5,7}, et que valeur_recherche vaille 6. Que va-t-il se passer ? Dans test, la comparaison *vr (et tu es casse-bonbon avec tes pointeurs qui ne servent à rien) avec tableau[0] va donner quoi, à ton avis ?

                              De même, si valeur_recherche vaut 3 ? Reponse ?

                              -
                              Edité par edgarjacobs 16 janvier 2018 à 21:54:20

                              • 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

                                16 janvier 2018 à 22:51:07

                                Ce serait quand même cool de lire les réponses que les gens prennent le temps de poster, et de les prendre en compte (en particulier au niveau de ton utilisation des pointeurs). Voici une des manières dont je vois ton truc.

                                int main(void)
                                {
                                    int taille = saisir_entier("Combien de chiffre voulez vous dans ce tableau ?\n");
                                    int *tableau = allouer(10 * sizeof(int));
                                    if(NULL == tableau)
                                        return -1;
                                    remplir_tableau(tableau, taille);
                                    int valeur = saisir_entier("Quelle valeur voulez-vous chercher ?\n");
                                    if(chercher(valeur, tableau, taille))
                                        printf("OK\n");
                                    else
                                        printf("KO");
                                    return 0;    
                                }
                                
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                                  16 janvier 2018 à 22:56:04

                                  Commentaire supprimé

                                  -
                                  Edité par KiriCouille1 1 septembre 2018 à 0:46:33

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    16 janvier 2018 à 23:06:57

                                    Re,-

                                    Ton raisonnement est tout faux (et encore une fois: pas besoin que nc soit un pointeur)

                                    int test(int tableau[], int *nc)
                                    {
                                        int i;
                                        int valeur_recherche = 0;
                                     
                                        printf("\nQuelle valeur voulez - vous chercher ?\n");
                                        scanf("%d", &valeur_recherche);
                                     
                                        for( i = 0 ; i < *nc ; i++)
                                        {
                                            if(valeur_recherche == tableau[i])
                                            {
                                                return vrai;
                                            }
                                            else
                                            {
                                                return faux;
                                            }
                                        }
                                    }

                                    Si je reprends l'exemple du tableau[4]={1,3,5,7},

                                    rechercher 3: i=0, valeur_recherche (3)  est-elle égale à tableau[0]: non, return false, et pourtant 3 est bien dans le tableau

                                    Idem si tu recherches 5, 7 ou 98....

                                    Testes-tu ton programme avant de poster ?

                                    Et ce n'est pas le compilateur qui teste, lui ne fait que traduire le code.

                                    KiriCouille1 a écrit:

                                    Jamais yo@n97one , tu n'as posté un truc sur les pointeurs dans ton premier message

                                    Exact, c'est moi. Mais yo@n97one lit tous les messages d'une discussion.



                                    -
                                    Edité par edgarjacobs 16 janvier 2018 à 23:23:00

                                    • 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

                                      16 janvier 2018 à 23:25:51

                                      Commentaire supprimé

                                      -
                                      Edité par KiriCouille1 1 septembre 2018 à 0:46:43

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        16 janvier 2018 à 23:27:42

                                        Concernant la fonction (et non le programme) d’allocation, cela ne va pas donner de difficultés supplémentaires, mais au contraire simplifier les choses.

                                        • Le programme sera plus simple à lire.
                                        • Tu pourras tester chaque fonction plus facilement, parce qu’elle ne feront qu’une seule chose à la fois.
                                        • Comme tes fonctions ne font qu’une seule chose, c’est plus facile de trouver dans laquelle il y a une erreur et donc de la corriger.

                                        Avant de coder, réfléchis à comment tu rechercherais une valeur dans un tableau (avec un papier et un crayon si nécessaire, et généralement, ben ça l’est). Peux-tu savoir qu’elle n’y est pas avant d’avoir tout parcouru ? Je pense que tu es d’accord avec moi que non, et pourtant, c’est ce que ton code fait ; à chaque tour de boucle, si la valeur n’est pas bonne tu renvoie faux.

                                        PS : les booléens existent dans la bibliothèque standard (regarde stdbool.h).

                                        PS 2 : non, utiliser un pointeur pour utiliser une valeur dans d’autres programmes ne te simplifient pas la vie, passe la valeur de ta variable directement, et son adresse, si la fonction va modifier cette valeur. Et si la fonction peut retourner une valeur, c’est encore mieux, pas besoin de pointeurs. Non, ce n’est pas que ça heurte notre sensibilité, c’est qu’on sait que ça rend le code plus difficile à lire, donc ça rend les erreurs plus faciles à écrire et plus difficile à trouver. Après si tu veux faire la course en reculons à cloche-pied alors que tu peux la faire en courant normalement...

                                        -
                                        Edité par yo@n97one 16 janvier 2018 à 23:31:59

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                                          16 janvier 2018 à 23:43:24

                                          Faut savoir:

                                          KiriCouille1 a écrit:

                                          Si *vr = 6, le compilateur va tester si la valeur du tableau à l'indice concerné est égale à *vr ( == ). Dans ce cas : return faux, donc 0.

                                          Si *vr = 3, le compilateur va tester si la valeur du tableau à l'indice concerné est égale à *vr ( == ). Dans ce cas : return vrai, donc 0.


                                          return vrai, donc 0 et return faux, donc 0 ????

                                          Bon, zut, voilà la bonne fonction, mais je ne te rends pas service:

                                          int isValueInArray(int array[],int array_size,int search_value) {
                                          	for(--array_size;array_size>=0;array_size--)
                                          		if(array[array_size]==search_value)
                                          			return(true);
                                          	return(false);
                                          }
                                          

                                          -
                                          Edité par edgarjacobs 17 janvier 2018 à 0:11:38

                                          • 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

                                            17 janvier 2018 à 16:18:37

                                            Commentaire supprimé

                                            -
                                            Edité par KiriCouille1 1 septembre 2018 à 0:46:55

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              17 janvier 2018 à 16:28:32

                                              KiriCouille1 a écrit:

                                              Désolé edgarjacobs, ça ne marche pas ton code.

                                              Son code est correct.

                                              En déplaçant juste l'instruction de départ, on peut même le prouver :

                                              /*@
                                                requires array_size >= 0 ;
                                                requires \valid(array + (0 .. array_size)) ;
                                                
                                                assigns \nothing ;
                                                
                                                ensures \result <==> \exists integer i ; 
                                                          0 <= i < \at(array_size, Pre) && array[i] == search_value ;
                                              */
                                              int isValueInArray(int array[],int array_size,int search_value) {
                                                --array_size ;
                                                /*@
                                                  loop invariant -1 <= array_size < \at(array_size, Pre) ;
                                                  loop invariant 
                                                    \forall integer i ; array_size < i < \at(array_size, Pre) ==>
                                                      array[i] != search_value ;
                                                  loop assigns array_size ;
                                                  loop variant array_size ;
                                                */
                                                for(;array_size>=0;array_size--)
                                                  if(array[array_size]==search_value)
                                                    return(1);
                                              
                                                return(0);
                                              }



                                              -
                                              Edité par Ksass`Peuk 17 janvier 2018 à 16:42:19

                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                                                17 janvier 2018 à 16:49:42

                                                Commentaire supprimé

                                                -
                                                Edité par KiriCouille1 1 septembre 2018 à 0:47:14

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  17 janvier 2018 à 16:54:26

                                                  C'est très compliqué par rapport à ce que tu as besoin, et le code contient deux warnings dont une bombe à retardement :

                                                  $ gcc -Wall -Wextra main.c 
                                                  main.c: In function ‘main’:
                                                  main.c:60:9: warning: unused variable ‘i’ [-Wunused-variable]
                                                       int i;
                                                           ^
                                                  main.c: In function ‘test’:
                                                  main.c:54:1: warning: control reaches end of non-void function [-Wreturn-type]
                                                   }
                                                   ^

                                                  Et tes fonctions exécutent toutes plus qu'une tâche, ce qui contredit le principe qui dit qu'une fonction ne doit réaliser qu'une tâche bien définie. Par exemple, si demain on veut que la valeur à chercher soit récupérée dans un fichier, on doit modifier la fonction de recherche, ce qui n'a pas de sens.

                                                  Il y a également une fuite de mémoire.

                                                  -
                                                  Edité par Ksass`Peuk 17 janvier 2018 à 16:59:26

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                                                    17 janvier 2018 à 17:26:51

                                                    La fonction isValueInArray qui t'as été donnée, est aussi simple que possible...
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      17 janvier 2018 à 21:08:07

                                                      KiriCouille1 a écrit:

                                                      Désolé edgarjacobs, ça ne marche pas ton code.

                                                      Je parie ma selle et mes bottes que tu ne l'as pas essayé.... sinon tu aurais constaté qu'il fonctionne (et je ne suis pas le seul à le dire, merci à Ksass`Peuk et à Ertyw)

                                                      -
                                                      Edité par edgarjacobs 17 janvier 2018 à 21:12:55

                                                      • 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

                                                        17 janvier 2018 à 22:50:39

                                                        Non, non il a raison, ton code ne marche pas. Il manque une fonction main correcte et tout... Non mais franchement, quel amateur à mettre un code sans main ! Quoi ? En fait il voulait juste donner la fonction correcte, il ne voulait pas cracher un code tout cuit ! Ah, ceci explique cela. Nous avons levé la part d’ombre sur ce mystère. Mais le mystère principal, lui reste toujours entier : pourquoi ne pas suivre les conseils des différents intervenants ?

                                                        @edgarjacobs : ça y est, tu as sûrement perdu ta selle et tes bottes, tu n’est plus un cow-boy...

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                                                          17 janvier 2018 à 23:50:57

                                                          yo@n97one a écrit:

                                                          Non, non il a raison, ton code ne marche pas. Il manque une fonction main correcte et tout... Non mais franchement, quel amateur à mettre un code sans main ! Quoi ? En fait il voulait juste donner la fonction correcte, il ne voulait pas cracher un code tout cuit ! Ah, ceci explique cela. Nous avons levé la part d’ombre sur ce mystère. Mais le mystère principal, lui reste toujours entier : pourquoi ne pas suivre les conseils des différents intervenants ?

                                                          @edgarjacobs : ça y est, tu as sûrement perdu ta selle et tes bottes, tu n’est plus un cow-boy...


                                                          -
                                                          Edité par edgarjacobs 18 janvier 2018 à 13:50:21

                                                          • 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

                                                            18 janvier 2018 à 6:02:48

                                                            KiriCouille1 a écrit:

                                                            C'est pas plus compliqué.

                                                            "Tout devrait être rendu aussi simple que possible, mais pas plus." Einstein.

                                                            Je crois que tu confonds simple et court. Dans ce cas-ci autant appliquer le principe jusqu'au bout:

                                                            n,x;main(){puts("x=");scanf("%d",&n);puts("n=");scanf("%d",&x);puts(x%3||x/3>=n?"Absent.":"Present.");}

                                                            La logique de ton programme. n étant ton nombre de valeurs et x ta valeur à chercher.

                                                            Oui, le code est volontairement non conforme au standard C11. :-°

                                                            -
                                                            Edité par Mad scientist 18 janvier 2018 à 9:20:53

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Un vrai cours de: (C | C++ | Haskell débutant | Haskell intermédiaire | Rust).

                                                            algorithme de recherche

                                                            × 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