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 :

programme nombre premier


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    502
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 502
    Points : 227
    Points
    227
    Par défaut programme nombre premier
    j'ai fait un programme sur les nombres premiers ,
    mais le programme ne fonctionne pas , je pense qu'il y a un bug informatique !

    un peu vite fait :

    voici le programme :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
     
    #include <iostream>
    #include <stdio.h>
     
     
     
     
     
     
     
    int main (int argc, char**argv){
     
     
     
    	int resultat=0;
    	int tab_np[20];
    	int tab_verif[20];
    	int nombre=2;
    	int index=0;
     
    	int counter=0;
    	int booel=0;
     
    	int tour=0;
     
     
    	for (int i=0;i<20;i++){
     
    		tab_np[i]=0;
     
    	}
     
     
     
    	tab_np[0]=nombre;
     
     
    	do{
     
    		int t=0;
    		nombre++;
     
    		for(int i=0;i<=index;i++){
     
    				t++;
     
    				resultat=tab_np[i];
    				if(tab_np[i]%nombre!=0){ //Bug informatique le résultat est toujours vrai 
     
    				std::cout<<"nombre : "<<nombre<<" index : "<<index<<" i : "<<i<<" t : "<<t<<"tour : "<<tour<<std::endl;
    				tour++;
    			}
    			std::cout<<" t: "<<t<<std::endl;
    		}
     
     
    		std::cout<<" tour sortie : "<<tour<<std::endl;
    			booel=tour;
    			for(int i=0;i<=index;i++){
     
     
     
     
    				counter++;
     
    				std::cout<<"booel : "<<booel<<" counter : "<<counter<<std::endl;
     
    			}
     
    			if(counter==booel){
     
    				booel=0;
    				counter=0;
    				tour=0;
     
     
    				tab_np[++index]=nombre;
     
    				std::cout<<"nombre entre"<<" nombre : "<<nombre<<std::endl;
     
    			}
     
     
     
     
     
    		}while(nombre!=10);
     
     
    		for(int i=0;i<20;i++){
     
    			std::cout<<tab_np[i]<<"\t";
    		}
     
     
     
     
     
     
     
     
     
     
    		getchar();
     
    	return 0;
    }

    voici le probleme de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(tab_np[i]%nombre!=0){ //Bug informatique le résultat est toujours vrai
    le resultat est toujours vrai quelque soit le nombre !

    peut être que j'ai fait une erreur mais je ne vois ou est l'erreur .

    merci !

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Bonsoir,

    Je n'ai que survolé ton programme mais à première vue, ça a l'air de fonctionner normalement. Dans les cas où ta condition est nulle, le contenu du bloc « if » n'est pas exécuté, ce qui est normal. Tu ne vois donc rien s'afficher.

    Si tu ajoutes « résultat » à ton cout, tu t'apercevras que tu n'obtiens jamais une ligne où « résultat » est égal à « nombre ».

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Août 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    En exécutant ton programme je me suis rendu compte que le problème est que nombre est strictement supérieur à tab_np[i] donc le modulo est toujours égale à tab_np[i]. Tu dois avoir faits une petite erreur quelque part.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Merci de supprimer les lignes vides superflues...

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Deux petits conseils HS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <iostream>
    #include <stdio.h>
    #include <cstdio>
    
    On inclus une bibliothèque C++ de préférence. Une grande partie des bibliothèque standard du C nom.h sont disponible en C++ : cnom

    Sinon, quand tu veux faire une incrémentation, prend l'habitude d'utiliser ++i que i++ car i++ enregistre la valeur de i, incrémente i puis retourne la valeur enregistrée.
    Quand tu va vouloir faire tab[++i] tu risque d'écrire tab[i++] par habitude ce qui est fondamentalement différent.
    De plus ++i est toujours aussi voir plus rapide que i++

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int tab_np[20];
    for (int i=0;i<20;i++)
    	tab_np[i]=0;
    Pourquoi ne pas directement faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int tab_np[20] = {0};
    Sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tab_np[++index]=nombre;
    tab_np est initialisé à 0 et index à 0.

    tab_np[0] = 2; (nombre)

    tu commence ta boucle et tu incrémente nombre.

    Ensuite, tu regarde de tab[0] à tab[index] si le tab[x]%nombre != 0.
    Tu incrémente index.
    Tu met dans tab[index + 1] = nombre;

    Tu est d'accord que de tab[0] à tab[index] tu auras toujours les anciennes valeurs de nombre.
    Anciennes valeurs qui sont strictement positive et inférieur à la valeur actuelle de nombre.

    donc tab[x] avec x € [[ 0, index ]], sera toujours compris entre 2 et nombre - 1;
    Donc tab[x]%nombre ne pourra jamais être égal à 0.

Discussions similaires

  1. Programmes : Nombre premier
    Par Nir3x dans le forum Débuter
    Réponses: 11
    Dernier message: 10/02/2013, 00h26
  2. Réponses: 5
    Dernier message: 13/03/2012, 10h32
  3. Programme détectant les nombres premiers
    Par frankthechamp dans le forum Windows Forms
    Réponses: 8
    Dernier message: 04/12/2008, 22h41
  4. Réponses: 2
    Dernier message: 20/02/2008, 22h44

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