Arrêt d'une boucle WHILE ou autre...

Bonsoir,

Quelqu'un sait-il ce qui provoque l'arrêt d'une boucle WHILE (tant que ou répéter jusqu'à ...) ou plutôt à quel moment le test d'arrêt a lieu ?
Les instructions du corps de la boucle sont-elles exécutées avant l'arrêt ?
(Est-ce clair 8-))

Je suis sur tablette iPad et je ne sais pas comment tester cela.
Y a-t-il des versions "en ligne" de Python ou autre ?
Xcas en ligne n'est pas très "maniable"...

Cordialement

Dom

Réponses

  • "While ... " se traduit par "Tant que condition, faire truc". Le sens est clair, non ? Si condition n'est pas vérifié, on ne fait plus truc.
  • Oui.
    Ainsi, la condition est constamment testée ou bien juste à la fin de "truc" ?
    Si, par exemple, "truc" contient cinq choses, ça peut sortir dès la deuxième ?

    Je sais bien que c'est naïf.
  • do {... } while (...) et while (...) do {...} ce n'est pas bonnet blanc et blanc bonnet.

    Je ne connais pas de python en ligne.

    S
  • Je suis sur tablette iPad et je ne sais pas comment tester cela.

    https://itunes.apple.com/us/app/pythonista-3/id1085978097?ls=1&mt=8 mais ce n'est pas gratuit.
    Y a-t-il des versions "en ligne" de Python ou autre ?

    https://www.pythonanywhere.com/

    Ainsi, la condition est constamment testée ou bien juste à la fin de "truc" ?
    Si, par exemple, "truc" contient cinq choses, ça peut sortir dès la deuxième ?
    while condition:[color=#FF0066]
        première instruction
        deuxième instruction
        ...
        énième instruction[/color]
    [color=#3366FF]suite des instructions[/color]
    

    Si la condition est vraie toutes les instructions sont exécutées dans l'ordre, si la condition devient fausse on quitte la boucle pour exécuter la suite des instructions.

    condition doit être modifiée dans la partie en rose pour qu'il y est sortie de la boucle.
  • En général la condition du while est testée à chaque fin de boucle. Par exemple si tu initialises un paramètre à $p=0$, tu rentres dans un "while $p=0$ do ...", et si dans la boucle, tu as une ligne qui provoque un changement de valeur de $p$ si tel truc est réalisé, alors la boucle s'arrêtera une fois que la condition est réalisée, après avoir exécuté toutes les lignes entre le "if" et la fin de la boucle.
  • En général la condition du while est testée à chaque fin de boucle.

    En python il n'y qu'une boucle while [small](et une for)[/small] le test est fait avant l’exécution du bloc de code.
  • while test do action

    est exécuté comme suit par la machine:

    (1) if non(test) then goto 3 else begin call(action) end;
    (2) goto 1
    (3) ..
    (4) ..

    Mais étais-ce ta question? Initialement j'avais pensé que tu voulais parler des instructions de type "exit" qui forcent le crash et retour quand elles sont appelées. Mais vues les réponses des autres, tu ne parlais peut-être pas de ça.

    Remarque: programmes-tu depuis longtemps? Car quand tu écris:
    dom a écrit:
    Si, par exemple, "truc" contient cinq choses, ça peut sortir dès la deuxième ?

    Ca donne l'impression que tu surestimes les machines :-D et les confonds avec le père Noel: comment veux-tu que le processeur devine qu'il est en train d'exécuter un boucle while et se dise "attention, la mémoire machin et truc venant de se mettre à 0, on perd du temps si on continue l'action entamée qui ne sert plus à rien, donc je vais sortir maintenant"

    Le processeur, qui exécute entre 1 et 5 milliards d'opérations élémentaire chaque seconde est bien plus rudimentaire que ça: ses actions consiste à mettre des mémoires locales (registres) à 0, itérer d'autres mémoires (registre), en voyer le contenu d'un registre dans une mémoire ou l'inverse, additionner deux mémoires et brancher (ie si tel registre est nul mettre l'adresse de l'instruction suivante dans tel registre).

    Au mieux on pourrait imaginer que l'OS fait ce boulot de père Noel que tu évoques, mais ce serait interminable. Aucun consrtucteur d'OS n'a prévu ça. Par contre, tu as des instructions physiques toute faite pour "crasher" de force la boucle au moment de l'appel, mais elle est appelée explicitement par le programme.
    Aide les autres comme toi-même car ils sont toi, ils sont vraiment toi
  • Dom a écrit:
    Y a-t-il des versions "en ligne" de Python ou autre ?

    https://ideone.com ?
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Merci à tous pour vos réponses.

    À bientôt ;-)
  • Dom, quand vous parlez de Xcas en ligne, est-ce Xcas pour Firefox?
    Si oui, merci de m'indiquer ce qui ne vous semble pas tres maniable. Pour la programmation, il y a un bouton prg juste au-dessus de la ligne de commande qui offre des assistants a la saisie pour creer une fonction, un test ou une boucle.
  • Ha non tiens ! J'étais ici : http://www.xcasenligne.fr/giac_online/demoGiacPhp.php

    Je note ce lien, merci ;-)
  • Bon,

    voici un essai avec Algobox :
    1   FONCTIONS_UTILISEES
    2   VARIABLES
    3     p EST_DU_TYPE NOMBRE
    4   DEBUT_ALGORITHME
    5     p PREND_LA_VALEUR 10
    6     TANT_QUE ([color=#FF0000]p>5[/color]) FAIRE
    7       DEBUT_TANT_QUE
    8       [color=#FF0000]p PREND_LA_VALEUR 1[/color]
    9       p PREND_LA_VALEUR 10
    10      FIN_TANT_QUE
    11  FIN_ALGORITHME
    

    Le programme plante (il cycle).
    Ainsi, pour Algobox :
    Il vérifie d'abord la condition et exécute toutes les instructions du bloc TANT_QUE (ici les lignes 8 et 9).
    Puis à la fin de la dernière instruction du bloc, il vérifie à nouveau la condition.


    @cc
    Tu disais : "comment veux-tu que le processeur devine qu'il est en train d'exécuter un boucle while ?".
    Étrange question : on peut très bien lui signifier "teste la condition après chaque instruction de la boucle while", non ? L'homme serait incapable de faire faire cela à un ordinateur ?

    La question de mon fil était bien celle-ci : quand ont lieu les tests ?
    La réponse (pour Algobox) : à la fin du bloc de la boucle et non à la fin de chacune des instructions de la boucle.

    Cela conforte toutes les interventions claires.
  • dom a écrit:
    Tu disais : "comment veux-tu que le processeur devine qu'il est en train d'exécuter un boucle while ?".
    Étrange question : on peut très bien lui signifier "teste la condition après chaque instruction de la boucle while", non ? L'homme serait incapable de faire faire cela à un ordinateur ?

    La question de mon fil était bien celle-ci : quand ont lieu les tests ?

    La réponse à cette question est généralement documentée sur le mode d'emploi du compilateur. Mais à ma connaissance, :-D aucun compilateur n'a encore jamais inversé l'ordre dans lequel les lignes se suivent.

    Par exemple,

    a:=14;
    repeat a:=a+1 until a>5000;
    affiche a

    est traduit par le compilateur en :

    1) a:=14
    2) a:=a+1
    3) if non(a>5000) then goto2;
    4) affiche a;
    5) ..
    6)..

    Pour ce qui est de while, je te l'ai déjà donnée hier, la traduction.

    J'espère que ça ne te gêne pas les traductions en vague basic d'autrefois, c'est la syntaxe quasiment identique à l'assembleur, dont je rappelle que c'est ce qu'exécute REELLEMENT la machine sans traduction (les textes en langage élaborés comme le C, C++, caml, python, etc sont d'abord COMPILES avec un compilateur) en un fichier ".exe" (je résume de nos jours, c'est un peu devenu un jungle et du grand n'importe quoi.

    Le mieux, parce qu'un forum ne te dira jamais les détails des mode d'emploi, c'est de consulter le mode d'emploi du compilateur qui te dit en quelle séquences d'instruction assembleur sont traduits les mots de confort comme for, while, etc.
    Aide les autres comme toi-même car ils sont toi, ils sont vraiment toi
  • Non, non, j'ai commencé il y a bien longtemps à faire de l'Assembleur.

    Mais c'est parti...complètement. Je me souviens de quelques instructions (3 lettres).

    Puis un peu de BASIC.

    Puis du Pascal et C++.

    Un peu de VBA Excel pour le plaisir.

    Mais sans pratiquer on n'oublie beaucoup de choses.

    Je vais me mettre à Scratch X:-(:)o(:P)
    Je plaisante ;-)
  • Depuis la version 1, Algobox sait utiliser de vraies fonctions.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Heu... ?
    C'est-à-dire ? (en fait je ne comprends pas ce message)
  • Avant, Algobox n’acceptait que deux types de fonctions : les fonctions numériques et une fonction où on teste des cas et le premier vrai est appliqué.
    Maintenant, on peut écrire une vraie fonction comme dans un langage normal.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Mais sans pratiquer on n'oublie beaucoup de choses.

    Je pense que ton malaise est purement psychologique (manque de confiance en toi sur cette pratique), car justement, tu avais TOUT COMPRIS. C'est un théorème célèbre que quelques instructions SUFFISENT à faire marcher TOUS LES ORDINATEURS.

    Je peux même être plus précis (j'avais ému, je crois récemment CQ avec cette remarque détournée). Il suffit de disposer*** des actions suivantes:

    1) tester l'égalité à 0 d'une mémoire
    2) ajouter le contenu d'une mémoire à une autre
    3) incrémenter le contenu d'une mémoire

    POINT A LA LIGNE

    Dès lors que tes mémoires peuvent contenir des nombres entiers naturels, tu peux avec ça TOUT PROGRAMMER. Si tu le demandes, je t'en donnerai une preuve. Il y a quelques mois, j'avais montré sur le forum que l'ensemble des parties finies de matrices QUI COMMUTENT 2 à 2 dont il existe un produit qui donne une matrice ayant une ligne nulle est récursivement universel et où je dis que ça avait ému CQ c'est le supplément "qui commutent 2 à 2" (il connaissait le truc mais sans la contrainte "commuter". J'avais exploiter le paragraphe bleu)

    **Donc formellement, dans ton propos, s'il te reste 3 choses, c'est... qu'il ne te manque rien. A 5 fois 10^9 actions/seconde, un ordinateur ne va pas en plus :-D réfléchir à notre place
    Aide les autres comme toi-même car ils sont toi, ils sont vraiment toi
  • Il manque quand même les entrées et sorties sinon, c’est un Brainfuck minimaliste. :-D
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Ok.
    En étudiant un document hier soir, j'ai eu ce doute sur le test d'une boucle WHILE.
    J'étais "à la main" et j'examinais sur papier un code.

    Seulement sur tablette et avec rien que je sache utiliser...

    Comme tu le dis souvent : « d'un PC » c'est mieux ;-)
  • Certains langages ont les mots clé repeat {…} until ou do {…} while (où le bloc est exécuté au moins une fois).
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Je ne sais pas s'il faut se feliciter ou non de l'evolution d'Algobox sur les fonctions (je n'arrive pas a l'installer pour tester, il faut des versions trop recentes de l'os sur mac ou linux, et il manque une dll sous windows 7).
    C'est bien sur positif de pouvoir definir des fonctions, ca permettra aux personnes habituees et motivees de continuer a l'utiliser. Mais a voir la documentation, l'utilisation de fonctions reste quand meme etrangere a la philosophie du logiciel, ca va donner une impression de lourdeur de mise en oeuvre par rapport a un autre interpreteur. Je ne pense pas que ca aura beaucoup de succes ou alors ca risque de denaturer l'evolution des programmes d'algorithmique.
Connectez-vous ou Inscrivez-vous pour répondre.