Algorithme pour définir une fonction

Bonjour,
est-ce qu'on peut incrémenter une boucle par un réel?
Par exemple, on souhaite écrire un algorithme pour définir la fonction suivante: étant donné $a$, $h=0.01$ et $x \in [-4,4]$, on écrit un algorithme pour définir la fonction $y$ donnée par:
$$ y= \begin{cases} 3 x^2 + a, \ \mathrm{si} x < 0, \\ 2 \sqrt{x}, \ \mathrm{si} 0 \leq x \leq 3, \\ x^3+a^3, \ \mathrm{si} x \geq 3. \end{cases}$$
Esr-ce que peut écrire comme suit:

-Début
- Lire $a$
-$h=0.01$
-De x=-4 à $x=4$ avec incrément $h$  Faire
                                                                      Tant que $(x < 0)$ faire
                                                                                                       $y=3 x^2 + a$
                                                                                               Fin de Faire
                                                                      Fin de Tant que
                                                                      Tant que $(x<3)$ Faire
                                                                                                       $y=2 \sqrt{x}$
                                                                                                Fin de faire
                                                                       Tant que $(x \leq 4)$ Faire
                                                                                                      $y=x^3+a^3$
                                                                                                Fin de Faire
                                                                       Fin de Tant que
Fin

Merci d'avance.

Réponses

  • Bonjour,
    Oui, tu peux, cela revient à faire une boucle avec $i$ entier et faire l'opération $x \leftarrow x+h$.
    Attention toutefois car, en l'état, ton algorithme ne fait rien d'autre que calculer la dernière valeur de $y$...
  • Bonsoir Heuristiquier
    comment on écrit cette boucle sur $i$? Svp.
    Aussi, comment on fait pour afficher toutes les valeurs de $y$ et pas uniquement la dernière?
    Merci d'avance.
  • lourrran
    Modifié (2 Nov)
    Tu sais faire des boucles 'TANT QUE' 

    Donc plutôt que  
    De x=-4 à x=4 avec incrément h
     ..
    fin
    Tu peux faire :
    x=-4
    tant que x <= 4 
      ...
      x = x+h
    fin

    Un des avantages, c'est que si $h$ vaut $\frac{\pi}{2}$ par exemple, ta première boucle ne s'arrêterait jamais... à aucun moment on n'arrive à x=4, on passe directement de x=3.853... à x=4.639... x saute par dessus 4, sans jamais être égal à 4.
    Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin
    L'hypocrisie est pire qu'une vérité qui fait mal. Franck Ntasamara.
  • Bonsoir Lourran,
    je suis un peu perdue. Qu'est ce qu'on écrit à la place des pointillés? Svp.
    Si on met tant que x <= 4, il faut distinguer les trois cas. Mais là, je ne vois pas comment.
    Je ne comprends pas non plus les avantage.
    Merci d'avance pour votre aide.
  • Si je comprends bien, tu veux un échantillonnage de pas 1e-3 de la fonction à paramètre $f_a$. Je pense qu’il serait plus simple en python de définir cette fonction à paramètre puis de construire la liste d’échantillons.
  • Pour faire les choses proprement, oublie d'abord ce $h$ et définie dans un premier temps uniquement la fonction à laquelle tu t'intéresses avec des instructions conditionnelles.
    Ensuite, dans une deuxième partie, tu crées un autre programme avec ton balayage et le $h$. Il n'y aucun intérêt à tout faire d'un bloc. C'est moche et peu pratique.

    C'est une bonne habitude à prendre est de décomposer ce que tu veux faire en plusieurs tâches. Imagine, que maintenant tu veuilles faire autre chose avec ta fonction, en procédant comme je te le propose, tu réutilises ta fonction déjà définies pour faire un autre truc. Ou si tu veux faire un balayage avec une autre fonction, tu as juste à définir une autre fonction et appliquer ton programme à ce balayage. Avec ton gros "bloc" qui veut faire deux trucs en un, tu repars de zéro, ce n'est pas très élégant. Ce n'est pas une bonne pratique.
    Comme me l'a appris ma maîtresse de CE2, tata Suzanne, dite Susu, $\{l,é,o\} \cap \{t,o,t,o\}=\{o\}$
  • Décomposer... c'est le bon terme.

    Par exemple, tu as ceci dans ton algorithme : 
    Tant que $(x<0)$ faire
                 $y=3x^2+a$
                 Fin de Faire
    Fin de Tant que

    C'est comme une boite noire , un élément unitaire. 
    Chaque morceau de ce type (isolé par un TANTQUE  et un FIN associé, ou  SI   ... ALORS   FIN SI ou .... .... ) chaque morceau de ce type doit être testé. C'est un élément unitaire, qu'on peut vérifier, indépendamment du reste de l'algorithme.
    Et ici, il se passe quoi. Si avant d'arriver à ce bloc, $x$ est positif, alors hop... on ne fait rien. Et si $x$ est négatif, on calcule $y$, et on remonte à la ligne 'Tantque', donc on recalcule $y$... On réexécute indéfiniment la même chose. Il n'y a rien qui fait changer la valeur de $x$. Donc si $x$ est négatif au début, il reste négatif à vie, et donc on ne sort plus jamais de cette boucle.
    Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin
    L'hypocrisie est pire qu'une vérité qui fait mal. Franck Ntasamara.
  • Bonjour Lourran,
    j'essaye de comprendre l'erreur dans mon code.
    Si on écrit:
    De x=-4 à x=4 avec incrément h Faire
                                                                 Tant que (x < 0) faire
                                                                                                   $y=3 x^2+ a$
                                                                                           Fin de Faire
                                                                  Fin de Tant que
                                                                 Tant que (x < 3) faire
                                                                                                   $y=2 \sqrt{x}$
                                                                                           Fin de Faire
                                                                  Fin de Tant que
                                                                 Tant que (x < = 4) faire
                                                                                                   $y=x^3 + a^3$
                                                                                           Fin de Faire
                                                                  Fin de Tant que

    là, qu'est ce que va faire ce code? Il va commencer par x=-4. Il va exécuter la première boîte noire puis il n'exécutera pas les deux autres boites noires.
    Puis il va faire $x= -4 +h$ et il va refaire le test.
    Ce n'est pas comme ça qu'il va procéder? Je m'excuse, je n'arrive pas à comprendre votre dernière explication et où est l'erreur dans ma proposition. 
    Je vous remercie d'avance pour votre aide.

  • Commençons par des choses simples.
    Imaginons cet algorithme : 
    x=5
    y=10
    tantque x < 500 et y < 50
      afficher x
      x = x * 3
      y = y * 2
    fin tantque
    afficher «  Terminé »

    Il faut être capable de faire à la main ce que cet algorithme fait, étape par étape. On appelle ça dérouler l'algorithme.
    Ici, ça va donner ceci : 


    Lis précisément ce que j'ai fait ici. J'ai passé 10 min à le faire, j'aimerais que tu passes 10min à le lire.

    Fais ensuite le même exercice avec ton algorithme. LENTEMENT, pas à pas. Les 10 première lignes, c'est suffisant.
    Poste l'image de ce que tu obtiens.
    Si tu le fais correctement, sans erreur, tu vas voir ce qui ne va pas dans ton algorithme.
    Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin
    L'hypocrisie est pire qu'une vérité qui fait mal. Franck Ntasamara.
  • Bonjour Lourran,
    j'ai bien étudié l'exemple que vous m'avez donné. Dans votre exemple, il n y a une bloc "Tant que... Fin de Tant que".
    Comme j'ai trois bloc "Tant que " dans mon code, je n'ai pas su les arranger dans un tableau.
    Si vous le permettez, je fais faire ça par étape:
    On vérifie les trois bloc pour toutes les valeurs de $x$ de $-4$ à $4$ avec incrément $h=0.1$
    On commence par $x=-4$
    On fait le test avec le bloc 1: On voit que $x$ est strictement inférieur à zéro. Dans ce cas, on affiche $y= 3x^2+a$.
    étape 2: $x$ ne satisfait pas la condition du second bloc. Donc on passe au troisième bloc.
    étape 3: $x$ ne satisfait pas la condition du troisième bloc.
    Mais comme on a commencé le code par une boucle sur $x$ de $x=-4$ à $x=4$ avec incrément $h=0.1$, alors on passe à la valeur $-4.1$ et on recommence à vérifier les trois bloc.
    Jusqu'à ce qu'on arrive à la valeur $x=0.$ Dans ce cas, le premier bloc n'est pas satisfait et on passe directement au bloc 2. Dans ce cas, on affiche $y=x^3+a^3.$  Et on incrémente par $h=0.1$ jusqu'à arriver à $x=3.$ Dans ce cas, les bloc 1 et 2 ne sont pas exécuté et on éxécute unquement le bloc 3.
    Non?

    Je vous remercie d'avance pour votre aide.



  • Dans l'algorithme que tu as proposé, si on remplace les mots clés 'Tant Que' par 'Si' , oui, c'est ce qui se passe.

    Est-ce que tu vois la différence entre ces 2 blocs : 

    Tant que x<0
       $y=3x^2+a$
    Fin TantQue

    et :
    Si x<0
       $y=3x^2+a$
    Fin Si

    PS : si on commence à $-4$, avec un incrément de $0.1$, la valeur suivante est $-3.9$ et pas $-4.1$
    Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin
    L'hypocrisie est pire qu'une vérité qui fait mal. Franck Ntasamara.
  • Pour la deuxième je sais.
    Pour chaque $x$ on fait le test: Si $x < 0$ alors on affiche $y=3 x^2+2$ et on continue la suite du programme. Sinon, "on n'affiche pas $y$ et on continue la suite du programme.

    Par contre pour TantQue, c'est encore flou. Je pense que tant que les valeurs de $x$ sont strictement inférieures à 0, alors on affiche $y=3 x^2+ 2.$ Si $x \geq 0$, je ne sais pas très bien ce qui se passe. Est-ce qu'il essaye de vérifier le bloc qui vient après? Svp.
    Je vous remercie pour votre aide.
  • Bonsoir.

    Tant qu'il fait beau, je vais me promener. Il fait mauvais, que fais-je ?

    Cordialement.
  • Dans l'expression 'Tant que', dans la langue française, on entend bien le fait qu'il y a une répétition. J'ai 10 €, je joue au casino des mises de 1€, et je joue tant qu'il me reste de l'argent. 

    En fait, le bloc : 
    Tant que x<0
       $y=3x^2+a$ 
    Fin TantQue

    pourrait aussi s'écrire à peu près :
    Si x<0
       $y=3x^2+a$
       Remonter à la ligne Si x<0
    Fin TantQue

    Et problème, il n'y a aucune instruction qui modifie la valeur de $x$ dans ce bloc de 3 ou 4 lignes. Une fois qu'on est entré dans la boucle en question, on n'en sort plus jamais. Le programme exécute indéfiniment l'instruction $y=3x^2+a$, il boucle.
    Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin
    L'hypocrisie est pire qu'une vérité qui fait mal. Franck Ntasamara.
  • Bonjour,
    1- si je comprends bien, même si on fait une boucle sur $x$, dès la première valeur de $x$, une fois que $x$ ne sera plus négatif, le code ne fera plus rien?
    Pour le code:
    De x=-4 à x=4 avec un pas h=0.1
    Tant que (x<0) Faire $3x^2+a$ Fin de Faire Fin Tant que
    Tant que (x<3) Faire $2 \sqrt{x}$ Fin de Faire Fin Tant Que
    Tant que (x>= 3) Faire $y=x^3+a^3$ Fin de Faire Fin Tant Que

    Que fait ce programme? 1- Il commence à $x =-4$ et exécute le premier bloc: $y=3 x^2 + a$ puis il s'arrête même s'il s'agit d'une boucle sur $x$ il ne va pas faire $x=x+h$ et s'assurer encore une fois de chaque boucle?

    Je comprends alors que Tant Que.... Fin De Tant Que ne tient compte d'aucune boucle sur $x$. Si on prend une valeur de x et qu'une boucle Tant Que est exécuté, une fois la boucle exécutée, le programme est fini et on ne peut pas prendre une autre valeur de x malgré la présence d'une boucle au début. Par contre si on met $x=x+h$ à l'intérieur du bloc, une fois que x ne satisfait plus la condition du bloc, on sort du bloc et on exécute le bloc qui vient après. C'est bien ça? Svp

    2- Voici donc l'algorithme que je propose, en utilisant les éléments de réponse que vous m'avez donné.
    Proposition 1:
     -Début
    -Réels a, x, y, h
    -Lire a
    -h=0.1
    De x=-4 à x=4 avec un pas h=0.1
    Faire
    Si (x < 0) alors $y= 3x^2+a$
     Sinon, si x< 3 alors $y=2 \sqrt{x}$     
    Sinon, si x>=3 alors $y=x^3+a^3$
    Fin de Si
    Fin de Faire

    Question 1: par contre là, je me perds sur le nombre de "Fin de  Si" qu'il faut mettre vu qu'il y a deux Sinon.
    Question 2: Esr-ce que c'est bon ici de faire une boucle sur $x$ avec un incrément réel?


    Proposition 2:
    -Début
    -Réels a, x, y, h
    -Lire a
    -h=0.1
    -x=-4
    Tant que (x<0) Faire
                                   $y= 3x^2+a$
                                   écrire $y$
                                  $x=x+h$
                           Fin de Faire
    Fin de Tant Que
    Tant que (x<3) Faire
                                   $y= 2\sqrt{x}$
                                   écrire $y$
                                  $x=x+h$
                           Fin de Faire
    Fin de Tant Que
    Tant que (x >=3) Faire
                                   $y= x^3+a^3$
                                   écrire $y$
                                  $x=x+h$
                           Fin de Faire
    Fin de Tant Que

    Fin du Programme


    Je vous remercie d'avance pour votre aide.
  • Tu poses cette question : 

    Pour le code:
    De x=-4 à x=4 avec un pas h=0.1
      Tant que (x<0) répéter Afficher  $3x^2+a$ Fin de répéter Fin Tant que
      Tant que (x<3) répéter Afficher  $2\sqrt{x}$ Fin de répéter Fin Tant Que
      Tant que (x>= 3) répéter Afficher  $y=x^3+a^3$ Fin de répéter Fin Tant Que
    Que fait ce programme?

    J'ai ajouté le mot Afficher sur chaque ligne. 
    Et j'ai remplacé le mot Faire par le mot Répéter, pour que ce soit plus explicite.

    Ce programme va durer des heures et des heures ... et répéter des millions de fois la même chose, sans jamais s'arrêter.

    Il faut regarder le niveau le plus bas, le plus fin de ton programme, chaque 'boite noire', chaque boucle, la plus fine.
    Tu as cette boucle : 
       Tant que (x<0) Répéter Afficher $3x^2+a$ Fin de Répéter Fin Tant que
    (et les 2 autres sont similaires, même bug).
    Cette boucle est comme un trou noir. Si on y entre, on n'en sort jamais. 
    Tu as des trucs 'autour' de cette boite noire, mais peu importe. Tu peux mettre tout ce que tu veux autour de cette boite noire, ça n'y changera rien. Cette ligne est un trou sans fond. Quand on arrive à cette instruction, on tombe dans le trou et on n'en sort plus jamais.

    Pourquoi ?
    Dans cette ligne, on demande d'afficher un certain truc, aussi longtemps que x est négatif. 
    Mais dans cette ligne, il n'y a rien qui va modifier la valeur de x. 
    Donc on va afficher le truc à l'identique, indéfiniment.
    Quand on met une instruction TANTQUE x<0  ... FIN TANTQUE, il faut absolument qu'il y ait un truc qui fait changer la valeur de x entre les instructions 'TANTQUE x<0' et FIN TANTQUE'.
    MAIS

    Comme déjà dit, si on remplace TANTQUE par SI, tout va bien, ton algorithme devient correct.
     
    De x=-4 à x=4 avec un pas h=0.1
      Si (x< 0)  Afficher  $3x^2+a$   Fin Si
      Si (x>=0 et x< 3)  Afficher  $2\sqrt{x}$ Fin Si
      Si (x>=3)  Afficher  $x^3+a^3$ Fin Si




    Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin
    L'hypocrisie est pire qu'une vérité qui fait mal. Franck Ntasamara.
  • Merci beaucoup pour votre aide et pour votre patience.
    C'est enfin bien compris!
Connectez-vous ou Inscrivez-vous pour répondre.