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 :

GMP Première tentative C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2021
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2021
    Messages : 28
    Par défaut GMP Première tentative C
    Bonsoir,

    Je me permets de poster un message dans ce forum car je débute tout juste C (mais ai lu de la docu sur internet).
    J'ai essayé de faire un programme en utilisant la bibliothèque gmp tel que l'utilisateur entre k, un nombre de bit, et le programme génère des nombres aléatoires d'au plus kbits et continue jusqu'à temps d'en trouver un multiple de 20 (i.e. reste de la div euclidienne de n par 20 vaut 0).
    Mon code ressemble à ça pour le moment :

    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
     
    #include <stdio.h>
    #include "gmp.h"
    #include <math.h>
    #include <stdlib.h>
    #include <time.h>
     
    int main(int argc, char* argv[])
    {
    	unsigned long int k;
    	scanf("k bits avec k= %d", &k);
    	mpz_t z_n;
    	gmp_randstate_t mon_gen; \\Déclaration_gen
    	gmp_randinit_default(mon_gen);\\Init_gen
    	gmp_randseed_ui(mon_gen, time(NULL)); \\seed
    	mpz_urandomb (mpz_t z_n, gmp_randstate_t state, mp_bitcnt_t k);
    	while ( gmp_div_r(mpz_t z_n, 20) != 0)
    	{
    		mpz_urandomb (mpz_t z_n, gmp_randstate_t state, mp_bitcnt_t k);
    	}
    	gmp_printf(z_n);
    	gmp_randclear(mon_gen);
    }
    Pouvez-vous commenter mon code et/ou le corriger ?

    Merci par avance de vos retours.
    Bonne soirée,

    Chaka_Sobek

  2. #2
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 788
    Par défaut
    Hello,

    Je ne comprends pas très bien ce qe tu veux faire, mais ligne 11, le format pour un unsigned long int c'est %lu, pas %d.

    Les commentaires en ligne commencent par //, pas \\

    Lignes 16 et 19, puisqu'il s'agit d'un appel de fonction et non d'une déclaration, tu ne dois pas mettre le type des variables.

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2021
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2021
    Messages : 28
    Par défaut
    Citation Envoyé par edgarjacobs Voir le message
    Hello,

    Je ne comprends pas très bien ce qe tu veux faire, mais ligne 11, le format pour un unsigned long int c'est %lu, pas %d.

    Les commentaires en ligne commencent par //, pas \\

    Lignes 16 et 19, puisqu'il s'agit d'un appel de fonction et non d'une déclaration, tu ne dois pas mettre le type des variables.
    Merci pour ce premier retour ! Je vais corriger de suite.

    En fait je veux générer un nombre aléatoire tenant sur k bits (d'où le mpz_urandomb) et tant que le nombre généré n'est pas un multiple de 20, j'en génère un nouveau.

    En espérant avoir été plus clair cette fois-ci !

  4. #4
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 788
    Par défaut
    Citation Envoyé par Chaka_Sobek Voir le message
    En fait je veux générer un nombre aléatoire tenant sur k bits (d'où le mpz_urandomb) et tant que le nombre généré n'est pas un multiple de 20, j'en génère un nouveau.
    Ben, t'es pas rendu ! Ton programme pourrait tourner indéfiniment: entre 0 et 99 (inclus) par exemple, il n'y a que 4 nombres éligibles. Tu aurais intérêt à te trouver un autre algorithme.

  5. #5
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2021
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2021
    Messages : 28
    Par défaut
    Citation Envoyé par edgarjacobs Voir le message
    Ben, t'es pas rendu ! Ton programme pourrait tourner indéfiniment: entre 0 et 99 (inclus) par exemple, il n'y a que 4 nombres éligibles. Tu aurais intérêt à te trouver un autre algorithme.
    Comment ça ? :/

    Si je donne k= 10, mon générateur va générer des nombres entre 0 et 2^10 -1 et donc il y a quand même pas mal de candidats.

    Et a vrai dire que ce soit des multiples de 20, de 7 ou de 156 je m'en fiche je veux juste arriver à générer des nombres sur kbits.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 839
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Chaka_Sobek Voir le message
    Si je donne k= 10, mon générateur va générer des nombres entre 0 et 2^10 -1 et donc il y a quand même pas mal de candidats.
    Il y en a très exactement 52. Or 52 pour 1024 nombres ça fait 5%. Ca veut dire que tu as une chance sur 20 de sortir de la boucle. Ok edgarjacobs a peut-être un peu exagéré car tu sortiras probablement mais ça peut prendre du temps.

    Citation Envoyé par Chaka_Sobek Voir le message
    Et a vrai dire que ce soit des multiples de 20, de 7 ou de 156 je m'en fiche je veux juste arriver à générer des nombres sur kbits.
    Ben pourquoi tu ne dis pas "je vais en générer 10/15/20" et tu génères sans chercher des nombres particuliers?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur dans la compilation d'un programme
    Par ludovic787 dans le forum C++
    Réponses: 5
    Dernier message: 08/02/2019, 10h49
  2. erreur dans l'éxécution d'un programme
    Par chlab dans le forum Caml
    Réponses: 1
    Dernier message: 07/06/2010, 22h09
  3. Réponses: 5
    Dernier message: 10/06/2009, 19h47
  4. Réponses: 1
    Dernier message: 27/04/2009, 18h06
  5. une erreur dans l'exécution d'un programme
    Par viou25 dans le forum Langage
    Réponses: 4
    Dernier message: 15/11/2008, 22h52

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