Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5123 connectés 

 


Dernière réponse
Sujet : [C++] Tres Grands Débutants - Recherche nombres premiers
Xavier_OM pour les algos de tri, je vais essayer de me renseigner la dessus.
 
pour davidmarli, je te rassure je sais tout ca (je suis pas mauvais en maths) mais en étant à mon 2eme prog (ben oui 2 c tout) j'ai préféré tout tester plutot que d'éliminer les cas improbables, par peur de compliquer mon prog en m'avançant dans un truc mal maitrisé (dans ma tête j'aurai optimiser après, bien que la puissance des pc actuels soit enorme, mais ce cher tgrx s'en est occupé tres gentillement)

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Xavier_OM pour les algos de tri, je vais essayer de me renseigner la dessus.
 
pour davidmarli, je te rassure je sais tout ca (je suis pas mauvais en maths) mais en étant à mon 2eme prog (ben oui 2 c tout) j'ai préféré tout tester plutot que d'éliminer les cas improbables, par peur de compliquer mon prog en m'avançant dans un truc mal maitrisé (dans ma tête j'aurai optimiser après, bien que la puissance des pc actuels soit enorme, mais ce cher tgrx s'en est occupé tres gentillement)
myblood

Xavier_OM a écrit a écrit :

vous avez des idées de progs relativement simple pour débuter ?




Bonjour juste pour dire que pour commencer en progrmmation faire de l'openGl c'est pas terrible mais ca le devient apres.
Pour commencer il y a les algos de tri qui sont pas mal à faire  
(tri bulle, quick sort et compagnies). Je pense que l'openGL vient par la suite quand on commence a bien maitriser le c/c++.

tgrx je pense que le programme que j'ai ecrit plus haut correspond a toutes tes remarques...
davidmarli resalut,
 
oups j'avais sauté une ligne de code  : t'as déjà éliminé les nombres pairs, autant pour moi!!!
davidmarli Salut,
 
moi je ne réponds pas du point de vue info, le C++ c'est pas mon truc.
En revanche il me semble que t'as pas fait beaucoup de maths !!!
En effet pour tester si un nombre est premier il est INUTILE de tester ses diviseurs de 1 à lui-même !!!
1) tu testes s'il est pair ou pas  : s'il est pair il est pas premier!! (sauf 2 évidemment)
 
2) il suffit de tester jusqu'à racine carrée de n (où n est le nombre que tu testes) : je ne vais pas  rentrer dans les explications mais si n est ton nombre un nombre plus grand que racine carrée de n ne  pourra jamais diviser n.
 
3) Dès que tu as un diviseur, ce n'est pas la peine de continuer à tester les divisibilités : de toute façon il est pas premier, puisque divisible au moins par un nombre.
 
Voilà rien qu'avec ces deux tests, ton algo va être optimisé!!!!
 
PS : pour plus de détail, voir un cours d'ALGEBRE sur les nombres premiers.
Xavier_OM pour le coup du c / c++ je te rassure je suis au courant, j'ai un ami qui a bossé sur du RSA en C et je sais ce que c'est :)
 
disons que le c++ facilite un peu la syntaxe, mais les classes je vais y venir, tout doucement...
XuTi Je tiens a te preciser que la programmation en C++ que tu dis avoir commencer... ce n est pas de la programmation C++
C est juste de la programmation en C au quelle tu t aides des facilites du C++, utilisation de cin et de cout
 
La vrai programmation C++ fait intervenir les classes... tu dois encore apprendre avant de dire que tu programmes en C++
Xavier_OM si tu penses que c'est abordable je te crois, mais c'est assez impressionant (voire intimidant)
tgrx Je pense que tu pourrais faire des trucs tout simple en OpenGL, y a des tutoriaux un peu partout sur le net... et puis c moins rebarbatif que de faire un programme de gestion de bibliotheque ou autre...
 
Genre faire tourner un cube, se deplacer dans un monde en 3D, et en plus ca t'obligera a utiliser des structures de donnees pour gerer des donnees geometriques :hello:
Xavier_OM vous avez des idées de progs relativement simple pour débuter ?
Xavier_OM merci beaucoup pour votre aide, j'avais pas du tout penser au booleen, et pourtant ca apparait clairement comme la meilleure solution...
 
encore merci :)
tgrx #include <iostream>
#include <math.h>
 
// Retourne 'true' si nombre_a est premier, 'false' sinon
bool est_premier(int nombre_a)  
{  
  if (nombre_a < 4) return true;       // 1,2,3 sont premiers
  if (nombre_a % 2 == 0) return false; // Cas des nombres pairs
 
  int b, limite= 1+ (int) sqrt(nombre_a);  
  for (b=3; b<limite; b+=2)  // On ne teste que les nombres impairs
    if (nombre_a % b == 0) return false;  
   
  return true;
}  
 
void main()  
{  
  int limite;  
  cout << "Ce programme va chercher les nombres premiers compris entre 1 et le nombre que vous allez entrer."<<endl;  
  cin >> limite;  
   
  for (int nombre=1; nombre<= limite; nombre++)
    if (est_premier(nombre))
      cout << nombre << " est premier\n";
}
BlackWolf bah voila je crois avoir trouvé (je débute aussi en c++).
de tes fonctions comme par exemple : void test(int nombre_a)  
sont de types void, c à dire qu'elles ne retournent pas de valeurs.  
Par contre int compare(int nombre_y, int z)  
elle est censée retourner un entier (int ...) et pour retourner cet entier tu dois justement mettre return [valeur ou variable](mais apparemment t'en a pas besoin donc a la place de int ... met void ...)
 
bon je sais c pas très clair mais en espérant avoir pu t'aider...
 
@+
tgrx Le probleme de return que t'annonce le compilateur, c'est que tu definis tes fonctions comme des int fonction(), donc elles doivent retourner un int.
 
Si tu ne veux rien retourner, il faut les definir en void, comme la fonction test ou main.
D'autre part y avait pas mal de trucs inextricables dans ton programme, donc je l'ai relativement modifie. La fonction compare renvoie desormais un booleen (vrai ou faux), suivant que nombre_a est divisible par b ou non.
 
La fonction test fonctionne ainsi : elle teste un a un les potentiels diviseurs, si jamais compare compare renvoie 'true', le break indique que l'on sort de la boucle for sans la terminer.
 
Le test suivant est alors tout bete : si b==limite, ca veut dire que toute la boucle for a ete parcourue, et donc que le nombre est premier.
 
J'espere que ces maigres explications pourront t'aider :hello:
 
 
Et pour augmenter la rapidite du programme, tu peux fixer limite a sqrt(nombre_a)+1. Dans ce cas il faudra include la librairie 'math.h'.
Ou encore dans la boucle for, ne tester que les nombres impairs, apres avoir fait un cas particulier pour 2 (qui n'est pas reconnu comme un nombre premier par le programme actuel).
 avec un for (b=3; b<limite; b=b+2);
tgrx Voici une version qui fonctionne, j'ai legerement retouche ton programme.
 
#include <iostream>  
 
//partie comparaison  
bool compare(int nombre_y, int z)  
{  
  if (nombre_y % z == 0)
    return true;
  else
    return false;    
}  
 
//partie test  
void test(int nombre_a)  
{  
  int limite= nombre_a-1;
   
  int b;
  for (b=2; b<limite ; b++)  
    if (compare(nombre_a,b)==true) break;  
 
  if (b==limite) // Tous les tests ont echoue, on est alle jusqu'a la fin de la boucle
    cout << nombre_a << " est premier" << endl;
}  
 
// partie principale  
void main()  
{  
  int limite;  
  cout << "Ce programme va chercher les nombres premiers compris entre 1 et le nombre que vous allez entrer."<<endl;  
  cin >> limite;  
   
  for (int nombre=1; nombre <= limite; nombre ++)  
    test (nombre);  
}
Xavier_OM Bonjour messieurs du forum prog.
Alors voila avant toute chose sachez que je me suis mis à la prog hier, et que je commence par le c++ (bah autant faire les choses bien)
Alors ce matin j'ai fais un prog ou on entre des notes et si on tape -1 il affiche la moyenne, la note la plus haute et la plus basse.
Apres ce difficile succès, j'ai voulu tester un peu les boucles, alors je me suis dis on va faire un prog de calcul de nombres premiers...
Voila mon idée :
 
 
on prend un nombre limite
on cherche les nombres premiers entre 1 et cette limite
1 nb:
-on teste
-si il est premier on l'affiche et on passe au suivant
-sinon on passe au suivant sans afficher
pour tester :
on compare le nombre avec tout ceux compris entre 1 et lui
si il est divisible par 1 et par lui et par un autre il est pas premier
sinon il l'est
pour tester la divisibilité :
je prend le module des 2 nombres, si il est egal a 0 le nb est divisible, sinon non.
 
pour le moment ca donne ca :
 
 
#include <iostream.h>
 
//partie comparaison
int compare(int nombre_y, int z)
{
 int mod;
 mod = nombre_y % z;
 if (mod==0)  
  {
  cout<<"Le nombre est divisible par "<<z<<" et donc pas premier"<<endl;
 }
 else cout<<nombre_y<<" est premier"<<endl; // on ne peut pas diviser pas ce chiffre, test avec la valeur suivante.
 
}
 
 
 
 
//partie test
int test(int nombre_a)
{
 int b;
 for (b==2; b==(nombre_a-1); b++)
 {
  compare (nombre_a,b);
   
 }
 
}
 
 
 
 
 
// partie principale
void main()
{
 int nombre;
 int limite;
 cout<<"Ce programme va chercher les nombres premiers compris entre 1 et le nombre que vous allez entrer."<<endl;
 cin>>limite;
 for (nombre==1; nombre==limite; nombre ++)
 {
  test (nombre);
 cout<<nombre<<"est premier"<<endl;}
}
 
 
qu'en pensez-vous ? je sais pas trop comme débloquer mon prog, il me dit a la compilation que g un pb de return.
 
Merci d'avance.

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)