Incrémenter un nombre décimale ? en C

brocolivache21 -  
 brocolivache21 -
Bonjour,
voila pour m'amuser j'ai fait ce code :

#include <stdio.h>
#include <stdlib.h>

int main()
{
double nombre = 0;
double codeSecret = 0;

printf("entrer votre code secret decimal\n");
scanf("%lf", &codeSecret);


while (nombre != codeSecret)
{
printf("%lf", nombre);

nombre ++;

if (nombre == codeSecret)
{
printf("le code secret est %lf\n\n", nombre);
}


}

return 0;
}

mais vu que c'est un nombre décimale cela prend beaucoup trop de temps et donc je voudrais savoir si l'on peut incrémenter un nombre décimal de cette manière :

pour codeSecret = 5.11

la partie "entière" d'un côté jusqu'à trouver le bon nombre : 1, 2 , 3 , 4, 5 garde le nombre entier en mémoire

puis de l'autre côté la partie "décimale"
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 la garder en mémoire

puis assembler les deux partie pour avoir la valeur de codeSecret qui est = 5.11
et donc normalement gagné du temps

merci de vos réponses ! et Joyeux Noël !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ps : je suis novice
A voir également:

7 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Tu peux incrémenter la partie entière et la partie décimale
lami20j@debian:~/trash$ cat ccm18_incrementerfloat.c
#include<stdio.h>

int main()
{
        int PartieEntiere;
        int PartieDecimale;
        double N;
        int i;

        printf("entrer votre code secret decimal\n");
        scanf("%lf", &N);
        PartieEntiere = N;
        PartieDecimale = (N - PartieEntiere) * 100;
        printf("Nombre : %.2lf\nPartie entière : %d\nPartie decimale : %d\n",
                        N,PartieEntiere,PartieDecimale);

        for(i=1;i<=PartieEntiere;++i)
                printf("%d ",i);
        printf("\n");
        for(i=1;i<=PartieDecimale;++i)
                printf("%d ",i);
        printf("\n");
        return 0;
}
lami20j@debian:~/trash$ gcc ccm18_incrementerfloat.c
lami20j@debian:~/trash$ ./a.out
entrer votre code secret decimal
5.11
Nombre : 5.11
Partie entière : 5
Partie decimale : 11
1 2 3 4 5
1 2 3 4 5 6 7 8 9 10 11
0
brocolivache21
 
oui mais en fait le but du programme on va dire ca sera de chercher un nombre decimale par exemple 12345.1234567
et je n'ai pas tres bien compris ce qu'il se passait dans ton code car en plus si je marque le nombre 12343.456342 il ne me donne pas la bonne reponse
et par exemple en console est-ce que ca serait possible de separer celle-ci en deux colones et que ca fasse cela :

1 1
2 2
3 4
. .
... ...
12343 456342

//apres assembler c'est deux nombre pour former le nombre decimal 12343.456342

je ne sais pas si je suis tres claire mais bon

et ps : comment faire pour que l'ordi puisse generer un nombre aleatoire decimale

merci
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Mon code n'était qu'un exemple pour 2 décimales et pour te montrer peut être une piste.
A toi d'adapter.

Voici un autre exemples, mais tu devrais préciser le nombre de decimales
#include<stdio.h>

int main()
{
        int PartieEntiere;
        int PartieDecimale;
        double N;
        int i;
        int NbrDecimales;
        int coef = 1;

        printf("entrer le nombre de decimales : ");
        scanf("%d", &NbrDecimales);
        printf("entrer votre code secret decimal :");
        scanf("%lf", &N);

        for(i=0;i<NbrDecimales;++i)
                coef = 10 * coef;
        PartieEntiere = N;
        PartieDecimale = (N - PartieEntiere) * coef;
        printf("Nombre : %.lf\nPartie entière : %d\nPartie decimale : %d\n",
                        N,PartieEntiere,PartieDecimale);

        for(i=1;i<=PartieEntiere;++i)
                printf("%d ",i);
        printf("\n");
        for(i=1;i<=PartieDecimale;++i)
                printf("%d ",i);
        printf("\n");
        return 0;
}
0
brocolivache21
 
et si l'on ne connait pas le nombre de decimales ???
et comment generer un nombre decimale aleatoire ?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
rand() te renvoie un nombre "aléatoire" entre 0 et RAND_MAX. Donc :
(double)rand()/RAND_MAX
te renvoie entre 0 et 1.
Un petit coup de multiplication par une puissance de 10 et hop, voilà ton nombre décimal.
Pour connaître le nombre de chiffres d'un nombre, une petite boucle while marche très bien.
Par exemple:
int a=12345;
while(a>0){
        a/=10;
        i++;
}
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
Salut,

Ou pour abréger ;-)
        int i=0;
        int a=12345;
        while(++i && (a/=10));

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
brocolivache21
 
et un autre question comment additionner un nombre decimal a un nombre entier ?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Avec l'opérateur + ^^.
double a = 5.0 + 12;
0
brocolivache21
 
j'ai encore quelques question j'ai compris comment incrementer un nombre decimal le probleme c'est que au lieu de proceder comme ca (admettons qu'il y a deux decimals):
0.99
0.98
0.97
0.96
...........
jusqu'au code par exemple 0.22

et donc comment faire comme cela

0.1
0.2
0.3
0.4
..............................
0.9
0.10
0.11
0.22 le code secret

et completement a par auriez vous juste un exemple de code qui permette de recuperer un saisie numerique et avec des lettres ^^

merci
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Je ne vois vraiment pas où est ton problème.
Les nombres décimaux ne sont pas des bêtes à part en C. Il y a juste quelques précautions à prendre en cas de comparaison.
Une simple boucle while (nb < 0.22) nb++; devrait faire l'affaire.

Un code pour une saisie numérique : double nb; scanf("%lf",&nb);
Un code pour une saisie avec des lettres : char buf[16]; fgets(buf, sizeof buf, stdin)
Cdlt
0
brocolivache21
 
merci je vais reflechir a tout ca
!!
0