Incrémenter un nombre décimale ? en C

Fermé
brocolivache21 - 25 déc. 2008 à 10:38
 brocolivache21 - 27 déc. 2008 à 11:55
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

7 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 déc. 2008 à 11:03
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
25 déc. 2008 à 11:20
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 déc. 2008 à 11:51
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
25 déc. 2008 à 13:03
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
25 déc. 2008 à 14:58
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
25 déc. 2008 à 15:32
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
27 déc. 2008 à 10:32
et un autre question comment additionner un nombre decimal a un nombre entier ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
27 déc. 2008 à 10:33
Avec l'opérateur + ^^.
double a = 5.0 + 12;
0
brocolivache21
27 déc. 2008 à 11:20
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
27 déc. 2008 à 11:35
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
27 déc. 2008 à 11:55
merci je vais reflechir a tout ca
!!
0