|
|
|
|
Donc dans ton exemple, on compare une variable à tester avec une variable donc on sait que c'est un entier (car c'est la part entière du nobre à tester), et si ils sont égaux c'est que le 2nd aussi est entier ? Astucieux j'y avais pas pensé... faut dire que je connaissait pas l'instruction int(variable)... Merci beaucoup. |
Mouais, au détail près que si d > MAX_INT ça marche plus. Enfin en C c'est sûr, et je suppose que c'est pareil en java.
double d = 16.8; if (d == floor(d)) //entier else //décimal Ceci dit il existe peut-être une fonction qui teste directement, dans le style "IsInterger(d)" qui renvoie vrai ou faux, mais là je me rappelle plus. |
Merci à tous pour vos réponses. Je suis en train de faire un programme de calcul des nombres premiers. Pour l'instant en voila le code :
#include <stdio.h>
int main(int argc, char *argv[])
{
int nombreTest;
double nombreVerif;
long nombreEntier;
long diviseur;
printf("Voici la liste des nombres entiers de 1 à 1001 : ");
for(nombreEntier=2; nombreEntier=1001; nombreEntier++)
{
for(diviseur=1; diviseur=(nombreEntier-1); diviseur++)
{
nombreVerif = nombreEntier / diviseur;
nombreTest = (int)nombreVerif;
if (nombreTest == nombreVerif)
{
printf(" %d \n", nombreEntier);
}
}
}
return 0;
}
Mais j'ai un bug : la fenêtre DOS ne fait qu'afficher une suite infinie de 1001. Vous voyez l'erreur ? |
Ya un probleme dans ta boucle for, le controle du milieu n'est pas bon.
for(nombreEntier=2; nombreEntier<=1001; nombreEntier++) tu fait ta boucle tant que le nombre est inferieiur a 1001 idem pour la seconde for(diviseur=1; diviseur<=(nombreEntier-1); diviseur++) COIN! |
Aaaarg maintenant le programme renvoie la liste des nombres premiers de 1 à 1001 : le seul nombre premier entre un et 10000 est... 0 (première nouvelle). En plus j'ai rajouté un scanf(" &d", &fin); pour simuler une pause dans le programme, mais lorsque j'appuie sur entrée il n'y a aucun effet... DEPRIME TOTALE RIEN NE MARCHE !!!! |
Bien sûr le voila :
#include <stdio.h>
int main(int argc, char *argv[])
{
int nombreTest;
double nombreVerif;
long nombreEntier;
long diviseur;
char fin;
printf("Voici la liste des nombres entiers de 1 a 10000 : ");
for(nombreEntier=2; nombreEntier<=10000; nombreEntier++) /*1ere boucle for, nombreEntier étant le nombre à tester*/
{
for(diviseur=1; diviseur<=nombreEntier-1; diviseur++) //2nde boucle for : divise nombreEntier par tous les nombres de 1
{ //à nombreEntier-1.
nombreVerif = nombreEntier/diviseur;
nombreTest = (int)nombreVerif;
if (nombreTest == nombreVerif)
{
printf(" %d \n", nombreVerif);
}
}
printf("Voila c'est tout. Appuyez sur [Q] puis sur [ENTREE] pour continuer...");
scanf(" %s", &fin);
break;
}
return 0;
}
Note : depuis mon dernier post j'ai réussi à faire fonctionner le scanf. |
Le scanf ne sert qu'à "causer" la fermeture du programme, c'est une sorte de pause.
|
Ah oui j l'avais corriger dans mon visual mais j ai oublié de l'indiquer
#include <stdio.h>
int main(int argc, char *argv[])
{
int nombreTest;
double nombreVerif;
long nombreEntier;
long diviseur;
int controle;
printf("Voici la liste des nombres entiers de 1 à 1001 : ");
for(nombreEntier=1; nombreEntier<=100; nombreEntier++)
{
controle=0;
for(diviseur=2; diviseur<=(nombreEntier-1); diviseur++)
{
nombreVerif = nombreEntier / (double)diviseur;
nombreTest = (int)nombreVerif;
if (nombreTest == nombreVerif)
{
controle=1;
}
}
if(controle==0)
{
printf(" %d \n", nombreEntier);
}
}
return 0;
}
j'ai corrigé les bornes mais tu pourra remettre 1001 ala place de 100 (j ai un vieux pc qui rame donc je le menage^^) COIN! |
Merci Canard007 mais j'ai trouvé un code qui marche avant de lire ton post, lol ! En effet Kermit l'auto-correction c'est marrant quand c'est celle des autres ! Mais quand ça t'arrives tu te trouves c*n mais à un point :-D... enfin bon je suis débutant c normal ! Je suis là pour faire rire le forum de mes problèmes stupides !
|