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 :

pointeur et tableau ouvert


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 20
    Points : 20
    Points
    20
    Par défaut pointeur et tableau ouvert
    Bonjour,

    J'ai un programme pour calculer le N ième nombre premier et afficher les N - 1 nombres premiers.

    j'ai voulu utiliser un pointeur pour faire un tableau ouvert et voici mon code :

    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
    #include<iostream>
    using namespace std;
     
    bool premier(int i)
    {
    	int d = 2;
    	bool est_premier = true;
    	 // un nombre premier n'est divisible que par un et par lui même
    	 while(est_premier && d*d<=i)
                if(i%d==0)est_premier=false; else d++;
     
    	 return est_premier;
    }
     
    int npremier(int N, int* tab)
    {
    	int nb = 0, i = 2; 
    	// parcourir tous les nb nombres premier de 2 jusqu'a N premier
    	while(nb != N)
        {
    		if ( premier( i ) )
    		{
    			tab[nb] =  i;
    			nb++;			
    		}
            i++;
        }
     
    	return i - 1;
    }
     
    int main()
    {
    	int i,N;
    	int* premiers = new int;
    	cout << "Tapez N :"; cin >> N;
    	int niemepremier = npremier(N, premiers);
    	cout << "le "<< N <<" ieme nombre premier est :" << niemepremier << endl;
     
    	cout << "les premiers anterieurs a "<< niemepremier <<" sont : " << endl;
     
    	for ( i = 0 ; i < N - 1 ; i++ )
    	{
    		//afficher 10 colonnes
    		if ( i > 9 ) cout << endl;
     
    		cout << premiers[i] << " ";
    	}
     
    	cout << endl;
     
    	return 0;
    }
    ça marche en déboguage avec visual cpp 2008 express mais quand je fait executer sans déboguage (CTRL+F5) il y a des bugs à partir de N = 4.

    S'il vous plait, pouvez vous me dire :
    1- si ce code est correct ?
    2- quel est cette histoire de bug avec mon programme dans visual ?
    3- comment ensuite chronométrer le temps d'exécution du code (car je souhaiterai voir si mon compilateur c++ est plus rapide que mes autres compilateurs pour autres langages pour calculer de longues suites de nombres premiers) ?

    merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	int i,N;
    	int* premiers = new int;
    	cout << "Tapez N :"; cin >> N;
    	int niemepremier = npremier(N, premiers);
    C'est pas bon non.
    Comment tu veux stocker N entiers dans un seul ?
    Boost ftw

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par edbuffer Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	int* premiers = new int;
    Bonjour,
    L'allocation d'un tableau ne fonctionne pas comme ça. Il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int* premiers = new int[NbrElements];
    et ensuite sa libération:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delete [] premiers;
    Cordialement,

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 20
    Points : 20
    Points
    20
    Par défaut
    Merci!

    J'ai fait cette correction :
    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
    	int N;
    	int* premiers;
    	int niemepremier;
     
    	cout << "Tapez N :"; cin >> N;
     
    	premiers = new int[N];
     
    	niemepremier = npremier(N, premiers);
     
    	cout << "le "<< N <<" ieme nombre premier est :" << niemepremier << endl;
     
    	cout << "les premiers anterieurs a "<< niemepremier <<" sont : " << endl;
     
    	afficher(N, premiers);
     
    	delete [] premiers;
    et plus de bug maintenant.

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

Discussions similaires

  1. [VB.NET] Pointeur vers tableau
    Par b_lob dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/08/2006, 16h06
  2. convertion pointeur vers tableau
    Par gdpasmini dans le forum C++
    Réponses: 2
    Dernier message: 30/03/2006, 00h34
  3. Tableau Ouvert
    Par petitcoucou31 dans le forum Langage
    Réponses: 2
    Dernier message: 27/11/2005, 17h24
  4. Pointeur et TAbleau
    Par melmouj dans le forum C
    Réponses: 20
    Dernier message: 25/09/2005, 16h13
  5. Tableau ouvert / dynamique ?
    Par Dry dans le forum Langage
    Réponses: 2
    Dernier message: 24/06/2004, 11h54

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