Inscription / Connexion Nouveau Sujet
Niveau terminale
Partager :

Problème de compréhension d'algorithmes (suites)

Posté par
ChrisLop
06-01-14 à 23:35

Bonsoir,
J'ai un exercice me présentant 3 algorithmes différents que j'ai mit sous forme d'image dans un soucis de mise en forme

J'ai une suite (uₙ) définie sur l'ensemble des entiers de N par u₀=20 et la relation de récurrence uₙ₊₁ = 5-(1/2)uₙ


La question qui m'est posée est la suivante : "On désire afficher à l'aide d'un algorithme la valeur de uₙ pour tout entier n donné en entrée. Parmi les algorithmes, lesquels répondent à la question ?"

Et ensuite : "On désire afficher maintenant tous les termes de la suite jusqu'à un entier n donné. Modifier les algorithmes répondant à la première question pour obtenir le résultat."


Avant de pouvoir répondre à ces questions (et les suivantes), j'aimerais comprendre ces algorithmes (je n'ai jamais été très à l'aise dans la matière)

Pourriez-vous m'expliquer leur fonctions et leurs différences ? On m'a dit que les algorithmes A et C répondaient à la question 1), je ne suis pas du genre à copier bêtement alors je tente de savoir pourquoi ici.

Merci de votre potentielle aide

Problème de compréhension d\'algorithmes (suites)

Posté par
EmileSabatier
re : Problème de compréhension d'algorithmes (suites) 06-01-14 à 23:58

Bonsoir,

Pour répondre à la première question, on va commencer déjà par éliminer le C car on cherche à ce que la boucle de l'algorithme continue jusqu'à arriver à n, or on a "While i<n Do". On a strictement inférieur donc on arrive pas jusqu'à la valeur n.. Donc le C est à éliminer.

Il faut savoir qu'en Algorithmique, il y a deux possibilités de boucles, celle avec "Pour" qui continuera la boucle jusqu'à une certaine valeur et celle avec "Tant que" qui, tant que la condition spécifiée n'a pas été réalisée, continue de fonctionner.

Donc du coup tu as tes deux algorithmes restant; il faut bien les comprendre pour pouvoir continuer.

Dans le premier, on attribut au réel u la valeur U0 qui est 20.
On utilise donc "Pour" afin de dire à l'algorithme de fonctionner de U1 à Un et à chaque boucle on attribut à u la valeur 5-u/2 et on demande à écrire u à la toute fin.

Dans le deuxième, on définit U0 ainsi que i qu'on démarre au 0 (initial). Tant que i inférieurà n, la boucle continuera, mais à chaque boucle, on augmente la valeur de i de 1 pour arriver jusqu'à i=n; et là l'algorithme finira et affichera u pour i=n.

Et pour la deuxième question, je dirais juste qu'il faut intégrer le "Write u" à la boucle.

Posté par
ChrisLop
re : Problème de compréhension d'algorithmes (suites) 07-01-14 à 00:27

Bonsoir et merci beaucoup pour ta réponse.

Je pense avoir compris assimilé tes explications pour la première question, les programmes sont déjà plus clairs pour moi.


Concernant la seconde question c'est la réflexion que j'ai eu, mais je ne suis pas sûr de moi concernant son emplacement.
Pour moi il faudrait l'intégrer à la fin de chaque boucle afin d'écrire chaque terme, est-ce correct ou fais-je fausse route ?

Par la suite on me demande, en m'aidant des questions précédentes de conjecturer la limite de la suite (un)
Là aussi je ne trouve pas le raisonnement, pourrais-je avoir une piste qui me guiderais pour avancer ?

Posté par
mathafou Moderateur
re : Problème de compréhension d'algorithmes (suites) 07-01-14 à 08:21

Bonjour,

Citation :
On m'a dit que les algorithmes A et C répondaient à la question 1)
....Donc le C est à éliminer
contradiction entre ces deux réponses ?

en fait c'est bien A et C

prenons comme exemple n = 1

Algorithme A :
il effectue la boucle pour i = 1 et c'est tout (de i = 1 à i = 1 inclus)
et affiche donc U1, OK

Algorithme B :
il effectue la boucle pour i = 0 et pour i = 1
il affiche donc U2, faux

Algorithme C :
il effectue la boucle pour i = 0 et comme 1 n'est pas stricterment < 1, c'est tout
donc il affiche U1, OK

ceci n'est pas une preuve (car un exemple sur un cas n'est jamais une preuve de quoi que ce soit) mais on peut le rendre valable pour tout n et en faire une preuve.
Il montre juste quel(s) algorithmes il faut éliminer de suite.

pour afficher tous les termes de la suite en intégrant le "write U" dans la boucle il faut se poser la quesion :
faut-il afficher U0 ?
que se passe-t-il si on entre 0 comme valeur de n ?

les algorithmes A et B, non modifiés, donnent bien la valeur de U0 quand on entre n = 0, car la boucle n'est pas effectuée du tout :
L'algorithme A pour "i de 1 à 0" ne fait aucune boucle (moins "évident" mais c'est comme ça)
l'algorithme C est lui parfaitement clair, 0 n'étant pas strictement < 0, la boucle n'est pas effectuée non plus.

donc si on intègre le write u dans la boucle, il ne sortira plus la valeur de U0
bof on la connait, il faut juste savoir et être conscient de ce qu'on veut afficher :
la suite de U0 à Un inclus, ou bien la suite de U1 à Un inclus et rien du tout si n = 0

une façon d'afficher tous les termes de la suite de U0 à Un inclus quel que soit n, y compris n = 0, est de dupliquer le write U : une fois dans la boucle et une fois à l'extérieur

Je te laisse chercher où exactement dans la boucle il faut mettre celui qui est dans la boucle, et où exactement il faut mettre celui qui est à l'extérieur

il y a deux solutions.

Posté par
plumemeteore
re : Problème de compréhension d'algorithmes (suites) 07-01-14 à 11:40

Bonjour.
L'algorithme B affiche les termes de U(1) à U(n+1); il n'affiche pas U(0).
Les algorithmes A et C affichent les termes de U(1) à U(n).
Quand n = 0, le programme B affiche U(1), le programme C n'affiche rien, le programme A affiche U(1) ou rien selon la machine.

Pour afficher les termes de U(0) à U(n), y compris quand n = 0, l'affichage doit être la première instruction de la boucle, avant l'incrémentation de I :
Var : n, i : Integer
u : real
Begin
Read n
U = 20
While i <= n
Write U
i = i+1
U = 5-U/2
EndWhile 'délimite la boucle
End
Au moment ou i égalera n, U(n) sera affiché, les instructions i = i+1 et U = 5-U/2 seront exécutées "à vide".

Posté par
mathafou Moderateur
re : Problème de compréhension d'algorithmes (suites) 07-01-14 à 12:03

Bonjour plumemeteore,

Citation :
L'algorithme B affiche les termes de U(1) à U(n+1)
Si tu parles de l'algorithme d'origine, non.
la délimitation de la boucle est faite ici par l'indentation (c'est du pseudo code)
le write est en dehors de la boucle.
Le "End" n'est pas le End de la boucle mais du programme.
je sais c'est "pas propre" car prête à confusion : la preuve

Citation :
le programme C n'affiche rien
idem, quelle que soit l'exécution des boucles, le programme (d'origine) affiche toujours quelque chose !
la seule question (question 1) est : affiche-t-il ce qu'on attend ?
à savoir Un et uniquement Un, et ce quel que soit n.

Après si tu mets le write à l'intérieur de la boucle, c'est pour répondre à la question 2 : afficher tous les termes de la suite.
et effectivement tu peux alors modifier l'algorithme B pour ça avec un seul write (et un calcul de trop pas affiché)
ou bien les algorithmes A ou C avec deux write, qui affichent tout ce qu'ils calculent.



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1741 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !