0/5 (7 avis)
Vue 5 649 fois - Téléchargée 259 fois
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <windows.h> int main() { FILE* fichier = NULL; fichier = fopen("nombres_premiers.txt", "w+"); if (fichier == NULL) { printf("impossible d'ouvrir/initialiser le fichier.\n"); Sleep(100); while(1) { if (GetKeyState(0x0D)<-1) break; Sleep(10); } return 0; } int nombre=3,test=2,limite=0,premier=1,compteur=0; printf("Veuillez entrer une limite : "); scanf("%d",&limite); if (limite>=2) printf("2 ce nombre a pris 0 iterations.\n",nombre,compteur); if (limite<=0) { printf("je demandais un chiffre hein... ? et plus grand que 0 ^^'\n"); Sleep(100); while(1) { if (GetKeyState(0x0D)<-1) break; Sleep(10); } fclose(fichier); return 0; } for(nombre=3;nombre<=limite;nombre+=2) { for(test=3,compteur=1;test<=(sqrt(nombre)) && premier;test+=2,compteur+=1) { premier=(nombre%test!=0); } if (premier) { printf("%d ce nombre a pris %d iterations.\n",nombre,compteur); fprintf(fichier,"%d ce nombre a pris %d iterations.\n",nombre,compteur); } premier=1; } printf("\n"); Sleep(100); while(1) { if (GetKeyState(0x0D)<-1) break; Sleep(10); } fclose(fichier); return 0; }
13 août 2011 à 03:56
la fonction "Sleep(temps_en_ms)" donne l'ordre au programme d'attendre x millisecondes avant d'exécuter la suite
Pour la fonction "GetKeyState(__in int nVirtKey)" Je te conseille ce lien http://tcharles.developpez.com/simul/
Sinon pour faire simple cette boucle s'exécute tant que l'utilisateur n'appuie pas sur la touche Entrée.
10 août 2011 à 17:23
peut-tu m'expliquer de plus le fonctionement de
while(1)
{
if (GetKeyState(0x0D)<-1)
break;
Sleep(10);
}
j'ai remplacer system("pause"); par cette boucle mais ce n'est pas la meme chose ,et pourquoi des fois tu ecrit Sleep(10) et d'autres fois Sleep(100)?
j'ai remarqué aussi que ton programme fait les claculs plus vite que le mien mais quand je supprime ces boucles leurs rapidité(je veux dire par rapidité que ton programme prend moins du temps que le mien pour trouve les nombre premiers à partire du meme limite) deviennent presque la meme y a t'il une relation entre la rapidité du programme et ces boucles?
merci d'avance et pardonne moi pour le dérangement je suis un grand debutant
6 août 2011 à 21:24
juste pour éviter le message de la commande dos "pause"
Après ça revient au même de faire :
while(1)
{
if (GetKeyState(0x0D)<-1)
break;
Sleep(10);
}
et
system("pause);
Chacun son truc ^^
30 juil. 2011 à 17:19
je suis un debutant en programmation ,j'ai ecrit un programme qui fait la meme chose mais d'un code source plus simple et je veux connaitre à quoi sert l'expression GetKeyState(0x0D)<-1 il me semble inutile
voici mon code source
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
double reinit(double* point);//la fonction qui reinitiale m à la fin de la 1e boucle
int main(int argc,char*argv[])
{
double n=47.0,p=1.0,i=0, m=2.0;/*meme si on a pas declaré m à l'interieur de la 1e boucle(va voir dietamain dans le dossier calculateur de nombre primaire) m est reinitialé
à 2 a la fin la 1e boucle à l'aide de la fonction reinit qui prend
comme paramaitre un pointeur(ces pointeur sont vraiment utile)je crois que l'utilisation de la fonct reinit et mieux car au lieu de declarer et reinitialer
m chaque fois de nouveau (ce qui prendre plus de temps) on fais just la reinitialisation de m*/
//pour que la 2e boucle commence a marche il faut que m=2 car si m=1 la 1e condition de la 2e boucle ne sera pas verifiée(eh oui)
double *pnt=NULL;
pnt=&m;
/*boucle 0*/ // cette boucle est toujours à marche car la condition est toujors vrai (1=vrai et 0=faux)
{
printf("entrer un nombre : ");
scanf("%lf",&n);
/*1e boucle*/ while(n-i>1)//1e boucle
{
// double m=2; c'est ici qu'on a declaré m dans la version precedante
/*2e boucle*/ while((n-i)/m != floor((n-i)/m) && m<=(n-i))/*la 1e condetion est pour verifier que n-i n'est devisible par aucun nombre
on sait que n-i ne peut etre devisible que par un nombre inferieur à lui alors on a ajouté la 2e condetion(il ne faut pas etre un génie en math pour comprendre ça,non'heheheheh)*/
{
m++;
}
if(m==(n-i))// si a la fin de la 2e boucle m=n-i c'est a dire que tout les valeurs de m < à n-i ont pas pu devisés n-i alors n-i est primaire
/*Rmq:pourquoi m=n-i et pas m=n-i+2 quand sa valeur initiale est 2?la repense c'est qu'on incrimente m que n-i-2 fois un exemple est mieux que mille explications
on prend n-i=7 on a(7/2==>m+1=3, 7/3==>m+1=4, 7/4==>m+1=5, 7/5==>m+1=6, 7/6==>m+1=7) donc à la fin m=7=n-i*/
{
printf("le %3.0fe nombre primaire est %6.0f\n",p,n-i);
p++;
}
reinit(pnt);
i++;
}
}
system("pause");
return 0;
}
double reinit(double *pnt1)
{
return*pnt1=2;
}
21 juin 2011 à 23:39
#include <stdio.h>
#include <conio.h>
main(x,y) {printf("2\n");for(;x++&&x<1000;)
for(y=2;x%y;)++y/x&&printf("%d\n",x);getch();}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.