diff --git a/algorithmes/README.md b/algorithmes/README.md new file mode 100644 index 0000000..37a3ed0 --- /dev/null +++ b/algorithmes/README.md @@ -0,0 +1,191 @@ +## Les algorithmes + + + +### Un algorithme ? C’est quoi ? + +Le mot algorithme signifie étymologiquement le nom d’un mathématicien arabe du moyen âge : ***Al-Khawarizm***i, il a été le premier a décrire une méthode claire pour la résolution d’équation en 825. + +Un algorithme est une séquence finie d’instructions faite pour être exécutée dans le but de résoudre *un problème précis*, nous retiendrons qu’un algorithme est une séquence d’instructions exécutées de façon **logique** mais **non intelligente**. + +- Logique parce que la personne (ou la machine) qui exécute les instructions sera capable de facilement comprendre et exécuter sans erreur ni ambigüité chacune des instructions. + +- Non intelligente parce que la personne qui exécute l’algorithme n'aura qu'à suivre toutes les instructions, dans l'ordre pour arriver au résultat sans avoir a comprendre la méthode de solution. + + + +--------- + + + +## Utilisation en informatique + +- L’ordinateur n’est pas intelligent, pour résoudre un problème, vous devez lui donner des successions claires d’instructions à suivre. + +Nous nous intéresserons à la façon de combiner des instructions pour résoudre un problème indépendamment des langages de programmation : + + **Objectif : décomposer des calculs compliqués en successions d’étapes simples.** + + + +---------- + +## Intérêt de l'algorithme + +- Un algorithme sert à transmettre un savoir faire. +- Il décrit clairement les étapes à suivre pour réaliser un travail. +- Il permet d'expliciter clairement les idées de solution d'un problème indépendamment d'un langage de programmation + + + +----------- + +## Quand l'utiliser ? + +**Lorsque l’on doit traiter de l’information**: + +- Tâches humaines (issues d’une interface) +- Tâches automatiques (issues de capteurs) +- Tâches ou traitement par lot (issues d’une base de données) + +**D’un point de vue « professionnel »** : + +- Etablissement d’un cahier des charges +- –Tâches/traitement +- –Acteurs +- Interfaces + +----------- + + + +## Démarche + +**Analyse du cahier des charges (avec le client, les acteurs du futur produit) :** + +- Réflexion des étapes de la programmation: **ce que doit faire le programme** + +- –Pseudo-code + +- –SysML + +– + +**Programmation** + +Réflexions sur l’environnement: + +- –Quel système ? + +- À quelle broche brancher telles ou telles commandes … + +- –Utilisation d’un langage de programmation : + - Interprété ? Compilé ? + - –Fiabilité ? + - –Disponibilité ? + + + +---------------------- + +## Lien avec la programmation ? + +**Ecriture du programme** : + +À partir du cahier charge fonctionnel (CdCf), le programmeur écrit le programme sous forme *d'algorithme*. + +**Le codage** : + +À partir de l’algorithme le codeur va transcoder l’algorithme en + +- un langage littéral (syntaxe) : C, C++, Python, Java, Assembleur, etc… + +- Un langage graphique: Flowcode, mBlock, Scratch, etc… + +*À ce stade le programme peut-être **simulé** afin de vérifier que son exécution est conforme.* + + + +--------- + +## Règles + +Un algorithme est un ensemble de règles à respecter : + +Processus défini par une succession **finie, ordonnée** dans le **temps**, d’opérations d’un **acteur unique** appliquées à un nombre **fini** de données conduisant en un nombre **fini** d’étapes à un résultat défini quelles que soient les valeurs des données dans leurs domaines de définition. + +Représentation: + +- Algorithme + - –Littéral: PseudoCode + - Graphique : Algorigramme + + + +***Règle* *0*** + +- **L’algorithmique est faite pour décrire l’aspect temporel des processus** + - **Un algorithme sans fin ne peut représenter qu’un programme mal fait et planté.** + - **Deux événements représentés sur deux lignes (cellules graphiques) consécutives se succèdent strictement dans le temps.** + + + +***Règle 1*** + +- **Deux événements simultanés doivent être mentionnés dans la même ligne d’algorithme, ou dans le même rectangle d’algorigramme** + + + +***Règle 2*** + +- **Les** **mots clés** **de l’algorithmique (il n’y en n’a même pas 20, un minimum de 12 suffisent) s’emploient toujours soulignés** + + + +**Règle 3** + +**Les couples suivants fonctionnent comme des parenthèses algébriques** **et sont toujours** **reliés par des traits verticaux de validation** **:** + +![couples](assets/couples.png) + + + +**Règle 4** + +- **Le signe « = » a toujours une valeur de test booléen** + +- **l’affectation est toujours représentée** **par son signe «** **prend pour valeur »** <----- + +- **Ce qui n’est plus vrai lors de l’utilisation d’un langage de programmation** + +**Règle 5** + +- **Tout algorithme a un début et une fin** + +- **Un processus « permanent » a toujours une boucle principale qui n’atteint sa fin que sur rupture des conditions normales de fonctionnement.** + +**Règle 6** + +- **Tout algorithme peut se représenter en** **algorigramme** **et réciproquement** + +**Règle 7** + +- **Les deux formes de boucle légitimes ne sont pas équivalentes.** + - Les événements de la boucle **répéter** sont toujours exécutés au **moins une fois** alors que la boucle **tant que** peut très bien **ne jamais avoir lieu**. + +**Règle 8** + +- **Un « si » ne contrôle jamais une boucle ! ! !** + - Ce sont les structures **« tant que »** et **« répéter ...jusqu’à » qui contrôlent les boucles** légitimes + +**Règle 9** + +- **Une boucle** **algorithmique** **est toujours exécutée un nombre entier de fois** + +**Règle 10** : + +**Deux boucles** **peuvent être** **successives** **ou** **imbriquées, jamais enchevêtrées** + +**Règle 11** + +- **Tout état physique mémoire (bascule, charge de condensateur, état d’un commutateur...) se représente par une variable** \ No newline at end of file diff --git a/algorithmes/assets/couples.png b/algorithmes/assets/couples.png new file mode 100644 index 0000000..993834c Binary files /dev/null and b/algorithmes/assets/couples.png differ diff --git a/architecture/von_Neumann/README.md b/architecture/von_Neumann/README.md index a6f7e3c..6027c00 100644 --- a/architecture/von_Neumann/README.md +++ b/architecture/von_Neumann/README.md @@ -20,7 +20,7 @@ Le vrai problème de cette machine de Turing est qu'elle ne peut faire qu'une ch Turing imagine alors écrire sur le ruban la procédure à suivre : c'est le début de la **virtualisation** : les programmes deviennent des données comme les autres et une unique machine peut devenir **universelle** et réaliser n'importe quel calcul. -En 1945, **[Von Neuman](https://fr.wikipedia.org/wiki/John_von_Neumann)**, invente un modèle qui définit un schéma d'ordinateur que l'on utilie toujours aujourd'hui : une structure de stockage unique pour conserver à la fois les instructions et les données demandées ou produites par le calcul. +En 1945, **[Von Neumann](https://fr.wikipedia.org/wiki/John_von_Neumann)**, invente un modèle qui définit un schéma d'ordinateur que l'on utilie toujours aujourd'hui : une structure de stockage unique pour conserver à la fois les instructions et les données demandées ou produites par le calcul. > Avec l'arrivée des odinateurs quantiques, ce modèle est probablement voué à disparaître prochainement. @@ -44,7 +44,7 @@ On peut également citer les [bus](https://fr.wikipedia.org/wiki/Bus_informatiqu ### Spécificités -Les échanges entre la mémoire et les registres du processeur se dont via des bus selon une chronologie décidée par l'horloge et suivant le type d'échange. +Les échanges entre la mémoire et les registres du processeur se font via des bus selon une chronologie décidée par l'horloge et suivant le type d'échange. Tous les programmes sont enregistrés dans la mémoire désormais.