simple code
+2
lamia
suneddine
6 participants
Forum INFOMATH :: Enseignement de l'informatique :: INFO - Supérieur (Etudiants et Professionnels) :: C/C++
Page 1 sur 1
simple code
salut les infomathistes,
j'ai rencontré un code simple mais j'ai pas réussi à trouver la signification du résultat
en plus, pourquoi %g et non pas %f au niveau de l'affichage du résultat
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
suneddine- Nombre Réel
-
Nombre de messages : 730
Age : 39
Localisation : tunisie
Réputation : 5
Points : 6321
Date d'inscription : 11/11/2007
Feuille de personnage
Capacité linguistique:
(995/1000)
Re: simple code
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
Mais pour le %g je ne vois pas de quoi il s'agit
lamia- Modérateur
-
Nombre de messages : 1936
Age : 38
Localisation : Tunis
Réputation : 53
Points : 6800
Date d'inscription : 04/11/2007
Feuille de personnage
Capacité linguistique:
(996/1000)
Re: simple code
désolé oui il manque un (i<N) après while
je pense que le résultat a un sens
je pense que le résultat a un sens
suneddine- Nombre Réel
-
Nombre de messages : 730
Age : 39
Localisation : tunisie
Réputation : 5
Points : 6321
Date d'inscription : 11/11/2007
Feuille de personnage
Capacité linguistique:
(995/1000)
Re: simple code
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)]
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- Modérateur
-
Nombre de messages : 1936
Age : 38
Localisation : Tunis
Réputation : 53
Points : 6800
Date d'inscription : 04/11/2007
Feuille de personnage
Capacité linguistique:
(996/1000)
Re: simple code
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).
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- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6254
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: simple code
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
i=0
min = 0
max = 1
x =(min+max)/2=0.5
0.5 <> 1/(2^i) = 1/(2^0) = 1
suneddine- Nombre Réel
-
Nombre de messages : 730
Age : 39
Localisation : tunisie
Réputation : 5
Points : 6321
Date d'inscription : 11/11/2007
Feuille de personnage
Capacité linguistique:
(995/1000)
Re: simple code
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?
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?
methodiX- Admin
-
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7253
Date d'inscription : 22/03/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Re: simple code
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?
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- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6254
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: simple code
bravo methodiX. Très méthodique
Napoléon- Admin
-
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7871
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: simple code
0.5/(2^n) au lieu de 0.5^n, non?
suneddine- Nombre Réel
-
Nombre de messages : 730
Age : 39
Localisation : tunisie
Réputation : 5
Points : 6321
Date d'inscription : 11/11/2007
Feuille de personnage
Capacité linguistique:
(995/1000)
Re: simple code
NON, 0.5^N = 1/2^N.
0.5/2^N = 0.5^(N+1)
0.5/2^N = 0.5^(N+1)
Napoléon- Admin
-
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7871
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: simple code
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- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6254
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: simple code
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.
Il a été mentionné par methodix que c'est tiré par les cheveux comme algo.
Napoléon- Admin
-
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7871
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: simple code
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- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6254
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: simple code
On ignore l'origine de ce code. Mais à mon avis, c'est un exercice orienté algorithmique plus que C/C++.
methodiX- Admin
-
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7253
Date d'inscription : 22/03/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Re: simple code
Ce genre d'algorithme sert à brouiller les étudiants et ne donne pas sa valeur ni au langage, ni à l'algorithmique. Tous les deux sont basés normalement sur la logique.
manianis- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6254
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: simple code
enfin j'ai connu le secret de ce code, c'est qu'il calcule une valeur négligeable par la méthode dichotomique étudiée au module analyse numérique.
suneddine- Nombre Réel
-
Nombre de messages : 730
Age : 39
Localisation : tunisie
Réputation : 5
Points : 6321
Date d'inscription : 11/11/2007
Feuille de personnage
Capacité linguistique:
(995/1000)
Re: simple code
SVP. Mosa expliquez nous l'astuce d'une manière plus claire.
manianis- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6254
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: simple code
aucune idée, j'ai pas étudié le module d'analyse numérique, j'ai obtenu cette information auprès d'un professeur
suneddine- Nombre Réel
-
Nombre de messages : 730
Age : 39
Localisation : tunisie
Réputation : 5
Points : 6321
Date d'inscription : 11/11/2007
Feuille de personnage
Capacité linguistique:
(995/1000)
Re: simple code
Si tu as un compilateur C, essaie d'exécuter cet algorithme. Qu'est-ce que ça donne ???
methodiX- Admin
-
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7253
Date d'inscription : 22/03/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Re: simple code
Voilà ce qu'on trouve en exécutant cet algorithme:
- Code:
On a trouvé 9.313226E-10 comme valeur finale
lamia- Modérateur
-
Nombre de messages : 1936
Age : 38
Localisation : Tunis
Réputation : 53
Points : 6800
Date d'inscription : 04/11/2007
Feuille de personnage
Capacité linguistique:
(996/1000)
Re: simple code
Oui, exactement.lamia a écrit:Voilà ce qu'on trouve en exécutant cet algorithme:
- Code:
On a trouvé 9.313226E-10 comme valeur finale
manianis- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6254
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: simple code
donc 1.0 + x > 1.0 n'est pas une expression tirée par les cheveux comme on le croyait (mathématiquement)
methodiX- Admin
-
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7253
Date d'inscription : 22/03/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Re: simple code
Quelle confusion j'ai dans ma tête à cause de ce que tu nous a posté mosa
informix- Nombre Rationnel
- Nombre de messages : 399
Réputation : 4
Points : 6525
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Sujets similaires
» Code source illisible Vs. Code source Optimisé!
» Liste chaînée simple
» salut c'est très simple je crois!!!!
» Exercice corrigé : manipulation simple des tableaux
» Code source .m Matlab
» Liste chaînée simple
» salut c'est très simple je crois!!!!
» Exercice corrigé : manipulation simple des tableaux
» Code source .m Matlab
Forum INFOMATH :: Enseignement de l'informatique :: INFO - Supérieur (Etudiants et Professionnels) :: C/C++
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum