diff --git a/algorithmique/cours/apercu.txt b/algorithmique/cours/apercu.txt index 6a3aaec..ea09668 100644 --- a/algorithmique/cours/apercu.txt +++ b/algorithmique/cours/apercu.txt @@ -42,9 +42,9 @@ Le problème du voyageur de commerce, consiste en la recherche d’un trajet min voyageur de visiter n villes. En règle générale on cherche à minimiser le temps de parcours total ou la distance totale parcourue. -Il suffit de construire tous les chemins possibles et de cal- -culer leurs longueurs. Avec ``n`` villes il y a ``(n − 1)!/2 chemins`` -possibles. Avec 36 villes on trouve : 5166573983193072464833325668761600000000, +Il suffit de construire tous les chemins possibles et de calculer leurs longueurs. +Avec ``n`` villes il y a ``(n-1)!/2`` chemins possibles. +Avec 36 villes on trouve : 5166573983193072464833325668761600000000, si le nombre de villes augmente, ça devient vite rédibitoire. Résolution par diff --git a/algorithmique/cours/donnees.txt b/algorithmique/cours/donnees.txt index 500488e..193de58 100644 --- a/algorithmique/cours/donnees.txt +++ b/algorithmique/cours/donnees.txt @@ -3,7 +3,128 @@ Structures de données simples Algorithmes sur les structures de données simples -.. FIXME +Variables +~~~~~~~~~ + +.. ifconfig:: exercice + + **Exercice** : Calculs d'affectation:: + + Variables A, B, C en Entier + Début + A <- 3 + B <- 10 + C <- A + B + B <- A + B + A <- C + Fin + +.. ifconfig:: correction + + **Correction**:: + + Après La valeur des variables est : + A <- 5 A = 5 B = ? + B <- 2 A = 5 B = 2 + A <- B A = 2 B = 2 + B <- A A = 2 B = 2 + +.. ifconfig:: exercice + + **Exercice** : Calculs d'affectation + Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ? + :: + + Variables A, B en Entier + Début + A <- 5 + B <- 2 + A <- B + B <- A + Fin + +.. ifconfig:: correction + + **Correction**:: + + Après La valeur des variables est : + A <- 5 A = 5 B = ? + B <- 2 A = 5 B = 2 + A <- B A = 2 B = 2 + B <- A A = 2 B = 2 + +.. ifconfig:: exercice + + **Exercice** : écrire un algorithme permettant d’échanger les valeurs + de deux variables A et B, et ce quel que soit leur contenu préalable. + +.. ifconfig:: correction + + **Correction**:: + + Début + A <- n + B <- p + C <- A + A <- B + B <- C + Fin + + Il faut passer par une variable dite temporaire (la variable C) + + +.. ifconfig:: exercice + + **Exercice** : + Que produit l’algorithme suivant ? + + :: + + Variables A, B, C de type entier + Début + A <- 423 + B <- 12 + C <- A + B + Fin + +.. ifconfig:: correction + + **Correction** : dans un prompt python + + .. code-block:: python + + >>> a = 423 + >>> b = 12 + >>> c = a + b + >>> c + 435 + +.. ifconfig:: exercice + + **Exercice** : + Que produit l’algorithme suivant ? + + :: + + Variables A, B, C de type texte + Début + A <- "423" + B <- "12" + C <- A + B + Fin + +.. ifconfig:: correction + + **Correction** : dans un prompt python + + .. code-block:: python + + >>> a = '423' + >>> b = '12' + >>> c = a + b + >>> c + '42312' + - tableaux - listes (les tris) diff --git a/algorithmique/cours/fonctions.txt b/algorithmique/cours/fonctions.txt index dd54e4f..763c996 100644 --- a/algorithmique/cours/fonctions.txt +++ b/algorithmique/cours/fonctions.txt @@ -397,3 +397,74 @@ Définitions par cas let rec puissance x n = match n with 0 -> 1 | -> x * puissance x (n-1) + + + +.. ifconfig:: exercice + + **Portée locale dans une fonction** + Quelles sera la valeur de la variable `a` ? + + .. code-block:: python + + >>> a = 1 + >>> def myfunc(): + ... a = 2 + ... return a + 1 + ... + >>> a = myfunc() + a + + +.. ifconfig:: correction + + Correction: + + .. code-block:: python + + >>> a = 1 + >>> def myfunc(): + ... a = 2 + ... return a + 1 + ... + >>> a = myfunc() + a + >>> a + 4 + >>> + + +.. ifconfig:: exercice + + **Exercice** : Portée locale dans une fonction avec variable globale + Quelles sera la valeur de la variable `a` ? + + .. code-block:: python + + >>> a = 1 + >>> def myfunc(): + ... global a + ... a = 2 + ... return a + 1 + ... + >>> a = myfunc() + 3 + >>> + +.. ifconfig:: correction + + **Correction** : + + .. code-block:: python + + >>> a = 1 + >>> def myfunc(): + ... global a + ... a = 2 + ... return a + 1 + ... + >>> myfunc() + 3 + >>> a + 2 + >>> a = myfunc() + 3 + >>> a + 6 + >>> diff --git a/algorithmique/cours/fondement.txt b/algorithmique/cours/fondement.txt index d55bfb2..4015ad4 100644 --- a/algorithmique/cours/fondement.txt +++ b/algorithmique/cours/fondement.txt @@ -188,7 +188,7 @@ le code interprété Typiquement, le travail d’un compilateur se compose d’une phase d’analyse -- reconnaı̂t le programme à traduire et sa signification +- reconnaît le programme à traduire et sa signification - signale les erreurs et peut donc échouer (erreurs de syntaxe, de portée, de typage, etc.) Puis d’une phase de synthèse diff --git a/algorithmique/cours/modularite.txt b/algorithmique/cours/modularite.txt index 9891893..93dc803 100644 --- a/algorithmique/cours/modularite.txt +++ b/algorithmique/cours/modularite.txt @@ -14,6 +14,13 @@ développement à se poser des questions d'organisation et de structuration. Aujourd'hui, on dispose de deux grands modèles d'organisation dont les avantages et les particularités sont distincts. +L'écriture des vrais programmes consiste à les structurer pour les présenter +comme un assemblage de briques qui s'emboîtent naturellement. +Ce problème se révèle fondamental dès que la taille des programmes devient conséquente. +Si on ne prend pas garde au bon découpage des programmes en modules indépendants, +on se retrouve rapidement débordé par un grand nombre de variables, +et il devient quasiment impossible de réaliser un programme correct. + La modularité ~~~~~~~~~~~~~