Discussion:Structure de contrôle

Le contenu de la page n’est pas pris en charge dans d’autres langues.
Une page de Wikipédia, l'encyclopédie libre.
Autres discussions [liste]
  • Admissibilité
  • Neutralité
  • Droit d'auteur
  • Article de qualité
  • Bon article
  • Lumière sur
  • À faire
  • Archives
  • Commons

des oublis, ou compléments possibles :

Ensemble de formes de structures de contrôles minimaux[modifier le code]

En laissant de coté la question du parallélisme, il y a eu (au cours du temps des concepts mathématiques ? des machines ? des langages de programmations ?) plusieurs ensembles de formes de structures de contrôles minimaux (équivalents à une machine de Turing) :

  • langage machine :
    • instruction de calcul
    • séquence d'instructions (opérateur implicite)
    • instructions de branchement conditionnel
  • programmation structurée :
    • instruction de calcul
    • séquence d'instructions (opérateur implicite)
    • conditionnelle
    • boucle

De plus, on peut prouver que tout programme peut se réduire à programme ne comportant qu'une boucle.

Programmation logique, logique avec contrainte, déclarative et Récursivité[modifier le code]

En programmation logique Prolog, les structures de contrôles, classiques (conditionnelle, boucle) sont délaissées au profit de :

  • énonciation de tous les cas (à la place de la conditionnelle)
  • utilisation de la récursivité (à la place de la boucle)

Sur un exemple, le calcul du pgcd en pseudo C (à vérifier), avec les structures de contrôles classiques :

int pgcd(int a, int b)
{   while (a!=b) do {
      if (a>b) {a=a-b;}
      else {b=b-a;}
    }
    return a;
}

donne en pseudo Prolog (à vérifier), avec les formes récursives et logiques de ses structures :

pgcd(a,a,a).
pgcd(a,b,resultat):- a>b, pgcd(a-b,b,resultat).
pgcd(a,b,resultat):- b>a, pgcd(a,b-a,resultat).
Voici le programme C correspondant au pseudo-code C ci-dessus :
int pgcd(int a, int b) {
    while (a != b) {
        if (a > b) a = a - b;
        else b = b - a;
    }
    return a;
}
 
Voici le programme Prolog correspondant au pseudo-code Prolog ci-dessus (soit dit en passant : la distinction entre les atomes et les variables est très importante en Prolog) :
pgcd(X, X, X) :- !.
pgcd(X, Y, Z) :- X > Y, !, W is X - Y, pgcd(W, Y, Z).
pgcd(X, Y, Z) :- X < Y, !, W is Y - X, pgcd(X, W, Z).
 
L'on pardonnera volontiers l'inefficacité des deux programmes proposés mais pas le fait qu'aucun des deux ne correspond à un algorithme pour calculer le PGCD, même en se restreignant aux entiers naturels, faute de s'arrêter après un nombre fini d'étapes, dans le cas où l'un des arguments est nul et l'autre non-nul. L'on se convainc aisément qu'il s'agit du seul cas (si l'on travaille avec des entiers naturels) en observant que a+b (resp. X+Y) décroît strictement à chaque itération (resp. récursion) dès lors que a (resp. X) et b (resp. Y) ne sont pas nulles. Ni a (resp. X) ni b (resp. Y) ne peuvent s'annuler pendant le calcul, puisque cela nécessiterait que le calcul de a-b (resp. X-Y) ou de b-a (resp. Y-X) ait donné zéro à l'itération précédente, ce qui signifierait que a (resp. X) était égale à b (resp. Y) lors de cette itération précédente, ce qui contredirait la condition de continuation de la boucle (resp. la condition de garde de la clause).
 
Pour revenir au sujet qui nous intéresse, le Prolog ne possède pas de structures de contrôle, y compris non-classiques, puisqu'il ne s'agit pas d'un langage impératif.
77.194.54.41 (discuter) 16 août 2016 à 04:59 (CEST)[répondre]

do while et reapeat until[modifier le code]

il existe une nuance algorithmique

 la boucle algorithmique
 répéter                   
                           
 tant que( cond ) %en fait cond:une variable booléenne représentant une condition d'exécution               
                                
  en C on obtient cette boucle:  
 do{ 
   
   }while(cond)  //while :en français tant que, alors cond est une condition d'exécution
 


  en PASCAL 
   repeat


   until(cond)    //until:signifie en français jusqu'à alors et c'est ici toute la confusion 
                  //est une condition de sortie

afin d'adapter la dernière boucle (en pascal)à la boucle algorithmique

   repeat


   until(!cond)//le point d'interrogation inverse la valeur booléenne de cond 

exemple.si cond=true alors !cond=faux ,si cond=false alors !cond=true

Klinkcha (d) 11 janvier 2008 à 21:48 (CET)[répondre]

✔️ nuance précisée dans le paragraphe concerné ske (d)
sur un terrain proche (cela répond peut-être à la même question), voir les ajouts 'condition de continuation' vs 'condition de rupture'

Condition[modifier le code]

j'ajouterais bien qlq part une discussion sur la notion de condition, avec en particulier :

  • 'condition de continuation' vs 'condition de rupture'
  • un point délicat (pour la compréhension intellectuelle) dans le passage 'langage de haut niveau' <-> 'langage machine', c'est le passage en général équivalent à 'condition de continuation' <-> 'condition de rupture'. Les langages de hauts niveaux utilisent surtout des condition de continuation, et les langages machines surtout des conditions de continuations (et pourtant ils parlent de la même chose : alternative/boucle)

Algorithm=Logic+Control[modifier le code]

  • Kowalski, Robert (1979). "Algorithm=Logic+Control". Communications of the ACM 22 (7): 424–436. doi:10.1145/359131.359136. ISSN 0001-0782

Bonjour,

J'ai remarqué que la sous-sous-section #Alternatives (les if, if–else, …) est présentement placée dans la section Structures de contrôle itératives. J'avoue que cela m'étonne un peu : si l'on peut raisonnablement considérée qu'une alternative simple (un if) n'est rien d'autre qu'une boucle qui itère au plus une fois, il me semblait que l'adjectif itérative était réservée aux boucles stricto sensu (les while, do–while, for, …) et aucun écrit ne m'avait — jusqu'à présent — détrompé. Par ailleurs, la norme du C — et je doute que ce soit la seule — séparent les instructions sélectives (Selection statements : les if, if–else et switch) des instructions itératives (Iteration statements : while, do–while, for) dans deux sections distinctes de même niveau, ce qui contribue à la confusion.

S'il s'agissait en intitulant la section #Structures de contrôle itératives ainsi de pendre le contre-pied de la section précédente, #Structures de contrôle séquentielles, peut-être aurait-il été préférable d'écrire Structures de contrôle non-séquentielles ? ou de suivre l'exemple du pendant anglophone de cet article qui dédie une section de premier niveau aux alternatives et une autre section de premier niveau aux boucles au lieu d'en faire des sous-sous-sections ?

N'étant pas suffisamment éclairé, je m'en remets à votre sagesse. 77.194.54.41 (discuter) 12 août 2016 à 02:50 (CEST)[répondre]

Bonjour IP,
Voir ta page de discussion, pour un radio-guidage en cas de silence prolongé sur cette page.
Cordialement et Hop ! Kikuyu3 Sous l'Arbre à palabres 13 août 2016 à 11:09 (CEST)[répondre]