Rechercher : dans
Par :

[C-JAVA]Vérifier qu'un nombre est un entier

Dernière réponse le 4 aoû 2004 à 07:45:02 Onde2Choc, le 3 aoû 2004 à 11:42:02 
 Signaler ce message aux modérateurs

Comment faire, en C/C++ ou Java, pour vérifier si un nombre est un entier ou décimal ? Peut on le faire ?

Meilleures réponses pour « [C JAVA]Vérifier qu'un nombre est un entier » dans :
Vérifier si un nombre entier est un nombre premier en C Voir Définition nombre premier Algorithme 1 : les diviseurs compris entre 2 et N-1 seront testés Algorithme 2 : les diviseurs pairs ne seront pas testés, la recherche se limitant aux diviseurs impairs Algorithme 3 : les diviseurs impairs jusqu'à la...
Représentation des nombres entiers et réels Voir Représentation d'un nombre dans un ordinateur On appelle représentation (ou codification) d'un nombre la façon selon laquelle il est décrit sous forme binaire. La représentation des nombres sur un ordinateur est indispensable pour que celui-ci...
Conversion d'un nombre entier 32 bits en IP VoirConversion d'un nombre entier 32 bits en IP Nombre à convertir : 3265917058 Représentation binaire 11000010 10101001 11110000 10000010 - 3265917058 00000000 00000000 00000000 11000010 - 3265917058 >> 24 ( 194 ) 11000010 10101001 11110000...
Générer des nombres aléatoires efficacement avec rand() VoirGénérer des nombres aléatoires efficacement avec rand() Vous avez peut-être remarqué qu'en C, en utilisant la fonction rand() de la bibliothèque standard, vous obtenez des résultats décevants, trop souvent les mêmes. Prenons un exemple, vous...
Les tableaux en langage C++ VoirType de données complexes Les variables, telles que nous les avons vues, ne permettent de stocker qu'une seule donnée à la fois. Or, pour de nombreuses données, comme cela est souvent le cas, des variables distinctes seraient beaucoup trop lourdes...

1

grofwa, le 3 aoû 2004 à 12:09:59
  • +1

Salut,

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]

Répondre à grofwa

2

Onde2Choc, le 3 aoû 2004 à 12:41:28

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.

Répondre à Onde2Choc

3

Canard007, le 3 aoû 2004 à 12:47:39

"faut dire que je connaissait pas l'instruction int(variable)... "
C'est pas une instruction sa s'appel un cast en fait tu force une variable à etre ce que tu cast, ici en int
COIN!

Répondre à Canard007

4

muppet, le 3 aoû 2004 à 12:48:56

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)

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.

Répondre à muppet

5

Onde2Choc, le 3 aoû 2004 à 16:19:32

Un cast, hein ? Je retiendrais. Mais peut on forcer une variable de type char à devenir une variable de type int ?

Répondre à Onde2Choc

7

Kermitt31, le 3 aoû 2004 à 16:36:22

Oui tu cast un peu comme tu veux... mais attention aux resultats que tu obtiens...

Proverbe Thaïlandais:Pingouins dans les champs,
                                         hiver très méchant.­

Répondre à Kermitt31

9

marvinrouge, le 3 aoû 2004 à 16:37:01

Oui

char* s = "123";
int i = atoi(s);

inversement
char[30] s2; // 30 ou une taille quelcnque SUFFISANTE
// si i vaut 123 la taille doit etre 4 ("123" + le '\0' terminal)

itoa(i, s2);

Répondre à marvinrouge

6

./, le 3 aoû 2004 à 16:29:30
  • +1

On pourrait imaginer aussi :
try{
//Opérations sur les nombres entiers
}catch(NumberFormatException){
//Si les nombres ne sont pas entier
}

Répondre à ./

8

Canard007, le 3 aoû 2004 à 16:36:53

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!

Répondre à Canard007

10

Onde2Choc, le 3 aoû 2004 à 16:46:41

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 ?

Répondre à Onde2Choc

11

Canard007, le 3 aoû 2004 à 17:05:22

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

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!

Répondre à Canard007

12

Onde2Choc, le 3 aoû 2004 à 17:14:21

Ah merci en effet erreur de débutant... :'( marre des erreurs à la c** !

Répondre à Onde2Choc

13

Onde2Choc, le 3 aoû 2004 à 17:23:04

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 !!!!

Répondre à Onde2Choc

14

Kermitt31, le 3 aoû 2004 à 17:28:18
  • +1

Tu peux donner ton code pour voir ?

Proverbe Thaïlandais:Pingouins dans les champs,
                                         hiver très méchant.­

Répondre à Kermitt31

15

Canard007, le 3 aoû 2004 à 17:41:33

Essaye de faire ton algo autrement
cast ton diviseur en double

nombreVerif = nombreEntier / (double)diviseur;


ou declare le en double la division merde quand ya du int dedans

COIN!

Répondre à Canard007

16

Onde2Choc, le 3 aoû 2004 à 17:42:20

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.

Répondre à Onde2Choc

17

Canard007, le 3 aoû 2004 à 17:47:01

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!

Répondre à Canard007

18

Kermitt31, le 3 aoû 2004 à 17:53:34

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.­

Répondre à Kermitt31

19

Onde2Choc, le 3 aoû 2004 à 17:59:19

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.

Répondre à Onde2Choc

21

Kermitt31, le 3 aoû 2004 à 18:07:41

Ca me fait toujours marrer l'auto correction !!!

Proverbe Thaïlandais:Pingouins dans les champs,
                                         hiver très méchant.­

Répondre à Kermitt31

20

Canard007, le 3 aoû 2004 à 18:04:44

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

#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!

Répondre à Canard007

22

Onde2Choc, le 3 aoû 2004 à 18:24:25

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 !

Répondre à Onde2Choc

24

Kermitt31, le 3 aoû 2004 à 18:28:10

C clair... c plus drole quand c les autres ! Ca m'est arrivé pas plus tard que ce matin alors je c de quoi je parle...

Proverbe Thaïlandais:Pingouins dans les champs,
                                         hiver très méchant.­

Répondre à Kermitt31

23

Canard007, le 3 aoû 2004 à 18:26:05

De rien
ca fait toujours plaisir de pouvoir aider
bon courage pour la suite

COIN!

Répondre à Canard007

25

Onde2Choc, le 3 aoû 2004 à 19:57:42

Attention, je m'apprête à vous faire une révélation de la plus grande importance...

...

...

99991 est un nombre premier ! Terrifiant, non ?

Répondre à Onde2Choc