simple code

Page 1 sur 2 1, 2  Suivante

Voir le sujet précédent Voir le sujet suivant Aller en bas

simple code

Message par mosa le Mer 9 Jan - 8:14

salut les infomathistes,
j'ai rencontré un code simple mais j'ai pas réussi à trouver la signification du résultat

Code:

#include

void main ()
{
    float x;
    float min=0.0, max=1.0;
    const int N=30;
    int i=0;
    while (i < N)
    {
        x=(min+max)/2.0;
        if (1.0 + x > 1.0)
            max=x;
        else
            min=x;
        i=i+1;
    }
    printf ("On a trouvé %g comme valeur finale\n",x);
}


en plus, pourquoi %g et non pas %f au niveau de l'affichage du résultat

mosa
Modérateur
Modérateur

Sexe:MasculinScorpionBuffle
Messages : 636
Inscrit le : 11 Nov 2007
Age : 22
Localisation : los angeles

Feuille de personnage
Capacité linguistique:
995/1000  (995/1000)

Revenir en haut Aller en bas

Re: simple code

Message par lamia le Mer 9 Jan - 8:50

Le resultat n'est qu'une mise en evidence des structures itératives( la boucle while qui manque apparemment d'un "i<N"), des structures conditionnelles ( if ), c'est surement un exercice d'application, où ils demandent ces etapes à faire, un exercice d'application. Mais le resultat n'a pas vraiment un sens, je le crois en tout cas.
Mais pour le %g je ne vois pas de quoi il s'agit confused
¤´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´ (¸.·`¤... Lamia

lamia
Admin
Admin

Sexe:FémininViergeTigre
Messages : 1429
Inscrit le : 04 Nov 2007
Age : 22
Localisation : Tunis

Feuille de personnage
Capacité linguistique:
996/1000  (996/1000)

Revenir en haut Aller en bas

Re: simple code

Message par mosa le Mer 9 Jan - 9:03

désolé oui il manque un (i<N) après while
je pense que le résultat a un sens

mosa
Modérateur
Modérateur

Sexe:MasculinScorpionBuffle
Messages : 636
Inscrit le : 11 Nov 2007
Age : 22
Localisation : los angeles

Feuille de personnage
Capacité linguistique:
995/1000  (995/1000)

Revenir en haut Aller en bas

Re: simple code

Message par lamia le Mer 9 Jan - 9:03

Voilà j'ai fait une petite recherche et voilà ce qu'elle a donné:
g ou G (réel en f si possible, e sinon)
avec : [f (réel en virgule fixe)] et [e ou E (réel en notation exponentielle)]
¤´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´ (¸.·`¤... Lamia

lamia
Admin
Admin

Sexe:FémininViergeTigre
Messages : 1429
Inscrit le : 04 Nov 2007
Age : 22
Localisation : Tunis

Feuille de personnage
Capacité linguistique:
996/1000  (996/1000)

Revenir en haut Aller en bas

Re: simple code

Message par manianis le Mer 9 Jan - 11:18

première itération :
min = 0
max = 1
x =(min+max)/2=0.5
(x > 0) => max = 0.5
deuxième itération : i = 1
min = 0
max = 0.5
x =(min+max)/2=0.25
(x > 0) ==> max = 0.25

à ce qu'il parait, sauf erreur dans votre code, x=2^(-i)=1/(2^i).

manianis
Admin
Admin

Sexe:Masculin
Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: simple code

Message par mosa le Mer 9 Jan - 11:39

non car au niveau de la 1ère itération
i=0
min = 0
max = 1
x =(min+max)/2=0.5

0.5 <> 1/(2^i) = 1/(2^0) = 1

mosa
Modérateur
Modérateur

Sexe:MasculinScorpionBuffle
Messages : 636
Inscrit le : 11 Nov 2007
Age : 22
Localisation : los angeles

Feuille de personnage
Capacité linguistique:
995/1000  (995/1000)

Revenir en haut Aller en bas

Re: simple code

Message par methodiX le Mer 9 Jan - 13:21

Ce programme calcule d'une façon "tirée par les cheveux" 0.5^n
Manianis aurait dû dire 0.5^n au lieu de 0.5^i.

Il faut noter que:
- min ne change jamais de valeur, min=0
- max est toujours égal à x.
- x = (max+min)/2 est équivalente selon ce qu'ai j'ai dit, à x = x/2;

Prenez N=1, et le programme retourn 1/2, .....

Commentaires? scratch
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)

methodiX
Admin
Admin

Sexe:Masculin
Messages : 811
Inscrit le : 22 Mar 2007
Localisation : marsa - IPEST

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: simple code

Message par manianis le Mer 9 Jan - 13:44

methodiX a écrit:Ce programme calcule d'une façon "tirée par les cheveux" 0.5^n
Manianis aurait dû dire 0.5^n au lieu de 0.5^i.

Il faut noter que:
- min ne change jamais de valeur, min=0
- max est toujours égal à x.
- x = (max+min)/2 est équivalente selon ce qu'ai j'ai dit, à x = x/2;

Prenez N=1, et le programme retourn 1/2, .....

Commentaires? scratch


Voilà, je crois que methodiX (merci mon frère) a bien expliqué le résultat du programme. Mais je crois qu'il y'a une faute car min ne change pas.

manianis
Admin
Admin

Sexe:Masculin
Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: simple code

Message par nabiL le Mer 9 Jan - 16:31

bravo methodiX. Très méthodique Wink
Nabil - tunis
خير الناس أنفعهم للناس

nabiL
Admin
Admin

Sexe:Masculin
Messages : 1908
Inscrit le : 19 Mar 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: simple code

Message par mosa le Mer 9 Jan - 16:45

0.5/(2^n) au lieu de 0.5^n, non?

mosa
Modérateur
Modérateur

Sexe:MasculinScorpionBuffle
Messages : 636
Inscrit le : 11 Nov 2007
Age : 22
Localisation : los angeles

Feuille de personnage
Capacité linguistique:
995/1000  (995/1000)

Revenir en haut Aller en bas

Re: simple code

Message par nabiL le Mer 9 Jan - 16:46

NON, 0.5^N = 1/2^N.
0.5/2^N = 0.5^(N+1)
Nabil - tunis
خير الناس أنفعهم للناس

nabiL
Admin
Admin

Sexe:Masculin
Messages : 1908
Inscrit le : 19 Mar 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: simple code

Message par manianis le Mer 9 Jan - 17:00

nabiL a écrit:NON, 0.5^N = 1/2^N.
0.5/2^N = 0.5^(N+1)


SVP les gars pas de panique : 1/(2^n) ou 1/(2^(n+1))

Ce n'est pas çà le problème. Le problème est que je oupconne qu'il existe une faute quelconque dans ce programme. L'utilisation du min/max ne me plais point. Si le programme cherchait 1/2^(n+1) ou 1/2^n on aurait du faire comme suit :

Code:
x = 1;
for (i = 0 ; i < n ; i++) x = x * 1/2;


Ce sera plus simple et plus court et plus efficace. Il y'a aussi l'utilisation non justifiée du if.
Code:
if (x + 1.0 > 1.0) {}


Je vous recommande mosa de vérifier votre code.

manianis
Admin
Admin

Sexe:Masculin
Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: simple code

Message par nabiL le Mer 9 Jan - 17:25

manianis: rien n'empeche d'ecrire ce qu'on veut dans un programme. De plus l'exercice demande de vérifier ce que fait le programme, et non pas d'implémenter une routine qui fait telle ou telle chose... ça diffère.

Il a été mentionné par methodix que c'est tiré par les cheveux comme algo.
Nabil - tunis
خير الناس أنفعهم للناس

nabiL
Admin
Admin

Sexe:Masculin
Messages : 1908
Inscrit le : 19 Mar 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: simple code

Message par manianis le Mer 9 Jan - 21:55

nabiL a écrit:manianis: rien n'empeche d'ecrire ce qu'on veut dans un programme. De plus l'exercice demande de vérifier ce que fait le programme, et non pas d'implémenter une routine qui fait telle ou telle chose... ça diffère.

Il a été mentionné par methodix que c'est tiré par les cheveux comme algo.


Oui, c'est tout à fait clair nabiL. Mais, je n'imagine pas que cet "algo tiré par les cheveux" ait été donné comme exemple dans un livre d'apprentissage de c/c++.

manianis
Admin
Admin

Sexe:Masculin
Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: simple code

Message par methodiX le Mer 9 Jan - 22:31

On ignore l'origine de ce code. Mais à mon avis, c'est un exercice orienté algorithmique plus que C/C++.
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)

methodiX
Admin
Admin

Sexe:Masculin
Messages : 811
Inscrit le : 22 Mar 2007
Localisation : marsa - IPEST

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Page 1 sur 2 1, 2  Suivante

Voir le sujet précédent Voir le sujet suivant Revenir en haut


Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum