[C-JAVA]Vérifier qu'un nombre est un entier
Résolu
Onde2Choc
-
Kermitt31 Messages postés 3679 Date d'inscription Statut Contributeur Dernière intervention -
Kermitt31 Messages postés 3679 Date d'inscription Statut Contributeur Dernière intervention -
A voir également:
- Tester si une variable est un entier en c
- Flash drive tester - Télécharger - Divers Utilitaires
- Tester son pc - Guide
- Tester composant pc - Guide
- Tester disque dur - Télécharger - Informations & Diagnostic
- Tester compatibilité windows 11 - Guide
18 réponses
Salut,
En java, je ferais comme ceci :
Michael.
Ne vous souciez pas de n'être pas remarqué ; cherchez
plutôt à faire quelque chose de remarquable [Confucius]
En java, je ferais comme ceci :
int i; double d = 16.7; i = (int)d; if (i == d) // entier else // décimal
Michael.
Ne vous souciez pas de n'être pas remarqué ; cherchez
plutôt à faire quelque chose de remarquable [Confucius]
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.
A mon avis vaut mieux utiliser, par exemple, la fonction floor dans math.h (toujours pour le C. java je connais pas bien)
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.
A mon avis vaut mieux utiliser, par exemple, la fonction floor dans math.h (toujours pour le C. java je connais pas bien)
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.
Un cast, hein ? Je retiendrais. Mais peut on forcer une variable de type char à devenir une variable de type int ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
On pourrait imaginer aussi :
try{
//Opérations sur les nombres entiers
}catch(NumberFormatException){
//Si les nombres ne sont pas entier
}
try{
//Opérations sur les nombres entiers
}catch(NumberFormatException){
//Si les nombres ne sont pas entier
}
oui
en java (ou c d'ailleur c'est la même syntax)
int test;
char chaine='a';
test= (int)chaine;
dans test tu aura la valeur en ascii du caractere
COIN!
en java (ou c d'ailleur c'est la même syntax)
int test;
char chaine='a';
test= (int)chaine;
dans test tu aura la valeur en ascii du caractere
COIN!
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 :
Mais j'ai un bug : la fenêtre DOS ne fait qu'afficher une suite infinie de 1001. Vous voyez l'erreur ?
#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 (debut;tanque condition vrai;action)
toi tu veux le faire tant que nombreEntier=1001 enfin ca part en vrille.
fait ca plutot ca marchera mieux
tu fait ta boucle tant que le nombre est inferieiur a 1001
idem pour la seconde
COIN!
for (debut;tanque condition vrai;action)
toi tu veux le faire tant que nombreEntier=1001 enfin ca part en vrille.
fait ca plutot ca marchera mieux
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 !!!!
essaye de faire ton algo autrement
cast ton diviseur en double
ou declare le en double la division merde quand ya du int dedans
COIN!
cast ton diviseur en double
nombreVerif = nombreEntier / (double)diviseur;
ou declare le en double la division merde quand ya du int dedans
COIN!
Bien sûr le voila :
Note : depuis mon dernier post j'ai réussi à faire fonctionner le scanf.
#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.
ps: par rapport à mon dernier poste , si tu veux afficher les nb premier le scanf n'affichepas le resultat voulu, puis c'est un peu difficile à l'affichage
COIN!
COIN!
Purquoi ta boucle diviseur commence a 1 ??? tous les nombres sont divisibles par 1, nan ? ce serait pas mieux deja de commencer a 2 ?
Qu'est ce que tu as comme probleme exactement ?
Proverbe Thaïlandais:Pingouins dans les champs,
hiver très méchant.
Qu'est ce que tu as comme probleme exactement ?
Proverbe Thaïlandais:Pingouins dans les champs,
hiver très méchant.
Le scanf ne sert qu'à "causer" la fermeture du programme, c'est une sorte de pause.
En gros, je voudrais que le programme fasse ça :
1) nombreEntier = 2
2) diviser nombreEntier par tous les nombres de 1 à (nombreEntier - 1)
3) si tous les résultats sont des nombres décimaux, afficher nombreEntier, car il est, par déduction, entier
4) nombreEntier = 3
5) etc....
note : en écrivant ce post je viens de me rendre compte que mon code ne veut rien dire, tel quel. La seconde boucle for ne sert qu'à écrire tous les diviseurs de nombreEntier, et non pas à vérifier si nombreEntier est un nombre premier... Je vais réécrire tout ça.
En gros, je voudrais que le programme fasse ça :
1) nombreEntier = 2
2) diviser nombreEntier par tous les nombres de 1 à (nombreEntier - 1)
3) si tous les résultats sont des nombres décimaux, afficher nombreEntier, car il est, par déduction, entier
4) nombreEntier = 3
5) etc....
note : en écrivant ce post je viens de me rendre compte que mon code ne veut rien dire, tel quel. La seconde boucle for ne sert qu'à écrire tous les diviseurs de nombreEntier, et non pas à vérifier si nombreEntier est un nombre premier... Je vais réécrire tout ça.
ah oui j l'avais corriger dans mon visual mais j ai oublié de l'indiquer
tiens voila le code squi affiche tous les entier premier compris entre 1 et 100
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!
tiens voila le code squi affiche tous les entier premier compris entre 1 et 100
#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 !
D'ailleurs dans la catégorie "je parle mais je ferais mieux de me taire", il y a un sujet de Calvin, qui s'intitule : "[C]Où est le problème", qui est très drôle.
Merci quand même pour votre aide !
D'ailleurs dans la catégorie "je parle mais je ferais mieux de me taire", il y a un sujet de Calvin, qui s'intitule : "[C]Où est le problème", qui est très drôle.
Merci quand même pour votre aide !