Passerelle informatique de Villenave
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le deal à ne pas rater :
Cartes Pokémon 151 : où trouver le coffret Collection Alakazam-ex ?
Voir le deal

L'algorithmie: notions de base.

Aller en bas

L'algorithmie: notions de base. Empty L'algorithmie: notions de base.

Message par Simon Lun 13 Oct - 16:35

Pour pouvoir developper (un script, un logiciel, un jeu, etc...), il faut savoir comment structurer son code. On ne peut pas simplement dire à la machine "vas y fais un script qui fait ça !".

Comment structurer un programme pour arriver au résultat voulu ? La réponse est dans l'aglorithmie.

Voici un petit cours qui va vous expliquer les bases de l'algo: http://fr.openclassrooms.com/informatique/cours/algorithmique-pour-l-apprenti-programmeur/qu-est-ce-qu-un-algorithme


Si vous trouvez que ce cours est trop vague ou qu'il ne vous va pas, je vous propose le mien (que je viens de réaliser^^)

Notez que l'algo ne s'adapte qu'aux langages de manipulation. Le HTML par exemple n'est pas concerné, puisque c'est un langage qui va seulement permettre d'afficher des choses, au même titre que le CSS.
De même, ici nous ne parlerons que d'algorithmie, donc pas de langages.


Comme dit plus haut, l'algorithmie est une manière d'écrire de façon logique et structurée. Pour cela il faudra connaitre quelques éléments.

I/: Les Variables et les Constantes.

Une variable peut être vue comme une boite. Cette boite peut contenir une donnée utlie. Par exemple:

Code:
entier x <- 6

Ici "entier" déterminera le type de données que l'on pourra stocker dans la variable, ici un nombre entier. Mais cela peut aussi être une chaine de caractère, un nombre réel, un booléen ou même un tableau !
"x" est le nom de la variable tout simplement. On aurait pu aussi bien l'appeler "Choucroute" ou "JojoLeClown".
Le 6 est la donnée stockée dans la variable.

Une constante est la même chose qu'une variable, sauf que sa valeur ne peut pas être changé dans le code.

Avant d'être utilisée dans le code, une variable ou une constante doit être déclarée. Cela signifie que l'on dit à la machine que cet élément sera une variable/constante. Ce faisant, nous définirons le nom de la variable ainsi que son type.
Après avoir été déclarée, une variable/constante doit recevoir une valeur initiale. C'est une initialisation.
Notez que dans l'exemple précédant j'ai déclaré et initialisé une variable en même temps.
Donc:
Code:
entier x
et x <- 6 peuvent être écrit en une ligne
entier x <- 6

Plus haut, j'ai dit qu'une constante ne pouvait pas changer de valeur après l'initialisation. Mais une variable le peut.
Quand on change la valeur contenue dans une variable, cela efface l'ancienne valeur.
Donc si mon x prend:
Code:
x <- 145
Sa valeur ne sera plus de 6 mais de 145.

Mais on peut aussi changer la valeur d'une variable en fonction de sa valeur antérieure ou même en fonction de la valeur d'une autre variable.
Code:
x <- x + 5
x <- y
w <- x + y
Sur la 1ère ligne, j'ai stocké dans x l'ancienne valeur de x en y ajoutant 5 (donc 150 si vous suivez^^).
Sur la deuxième ligne, j'ai stocké dans x la valeur actuelle de la variable y.
Sur la troisième ligne, j'ai stocké dans x l'ancienne valeur de x en y ajoutant la valeur actuelle de y.

Si vous avez compris tout ça, je n'ai rien de plus à vous apprendre sur les variables =)




II/: Les Instructions de base.

Nous avons vu les variables et les constantes. Mais comment les afficher à l'utilisateur par exemple ? Nous allons voir voir comment, ainsi que d'autres instructions du même calibre.

L'affichage d'une information se fait sous la forme:
Code:
AFFICHER "message"
Cela affichera le texte entre guillemets. Mais nous pouvons aussi afficher une variable, ou plusieurs, ou même du texte et des variables:
Code:
AFFICHER x
AFFICHER "message" + x
AFFICHER "message" + x + y + "message"
La première ligne affiche la valeur de x à l'utilisateur.
La deuxième valeur affiche le message suivi de la valeur de x.
Le troisième message affiche un message suivi de la valeur de x suivi de la valeur de y suivi d'un autre message.

Attention cependant aux guillemets:
Code:
AFFICHER "J'aime les bananes + x"
Cette ligne n'affichera pas le message suivi de la valeur de x. Ce message affichera tout ce qui est entre guillemets et ne verra pas x comme une variable mais comme une chaine de caractère comme le reste du message.


Demander une saisie a un utilisateur s'écrira comme ceci:
Code:
SAISIR "message"
Ici l'utilisateur sera invité à saisir une valeur dans un champ de saisie et verra le texte entre guillemets qui lui indiquera quoi saisir. Mais là où ça devient interessant c'est que l'on peu demander à l'utilisateur de saisir une valeur que l'on stockera dans une variable pour la réutiliser par la suite.
Code:
x -> SAISIR "Quel est votre nombre préféré ?"
Ici l'utilisateur se verra demander quel est son nombre préféré et sa réponse sera stocké dans x. Pratique, non ?


Résumé:
Code:
x <- SAISIR "Quel est votre nombre préféré ?"
AFFICHER "Votre nombre préféré est " + x + "."
Imaginons que j'entre 42 dans la saisie. Le code m'affichera donc: "Votre nombre préféré est 42."



III/: Les Structures Alternatives.

Une structure alternative c'est tout simplement se dire "Si y a ça alors je fais ça, sinon je fais ceci". C'est aussi simple que ça. La machine n’exécutera que le code répondant à la bonne condition.
Prenons :
Code:
entier x <- 6
entier y <- 6
Nous allons poser une condition simple: si x et y sont égaux alors nous afficheront "Oui, ils sont égaux !", mais s'ils ne le sont pas nous afficherons "Zut, raté, ces nombres sont différents."
Code:
SI x = y
|ALORS AFFICHER "Oui, ils sont égaux !"
|SINON AFFICHER "Zut, raté, ces nombres sont différents."
FIN SI
Au vu des valeurs de x et de y que j'ai initialisé au dessus, le script affichera uniquement "Oui, ils sont égaux !".
Si on change la valeur de y, le script renverra uniquement "Zut, raté, ces nombres sont différents."

Mais que se passerait-il si on devait définir plus de 2 options ? Et bien nous allons imbriquer un ou plusieurs SI dans un SI.

Code:
entier x <- 6
entier y <- 8
entier z <- 157

SI x = y
|ALORS AFFICHER "x et y sont égaux"
|SINON SI x = z
|         |ALORS AFFICHER "x et z sont égaux"
|         |SINON SI y = z
|         |         |ALORS AFFICHER "y et z sont égaux"
|         |         |SINON AFFICHER "Tout ces nombres sont différents."
|         |         FIN SI
|         FIN SI
FIN SI

Dans cet algorithme, on contrôle les égalités possibles entre x, y et z.
Dans ce cas, tout ce que le script renverra comme message sera "Tout ces nombres sont différents."
Mais cet algorithme a un très gros défaut. A vous de le trouver ! =)


Comme vous le voyez, avec des SI, on peut couvrir tout les cas, mais ça deviendra rapidement difficile de s'y retrouver si les possibilité se multiplient. Pour couvrir plus de cas sans se casser la tête, il existe le SELON. Il permet de multiplier les options sans avoir besoin de réfléchir à une imbrication de dizaine de SI. Par exemple:
Code:
entier x <- 168

SELON x
|CAS 166 AFFICHER "166 ? C'est un début !"
|CAS 167 AFFICHER "167, on progresse !"
|CAS 168 AFFICHER "168, bientôt un pro !"
|CAS 169 AFFICHER "169, digne d'un champion !"
|CAS 170 AFFICHER "170 ! Wahou, t'es une légende !"
FIN SELON
Ici si la valeur de x était de 166, l'algorithme n'afficherais que le premier message. Dans notre cas, x contient 168 donc l'algorithme va afficher: "168, bientôt un pro !"

IV/: Les "connecteurs" logiques.

Toute petite partie pour parler des conditions multiples. Que ce soit pour les boucles ou pour les alternatives, il faut parfois vérifier plus d'une variable d'un coup. Par exemple:

Code:
SI x = 3 ET y = 6
ALORS AFFICHER "x représente la moitié de y"
FIN SI

Ici, le message ne s'affichera que si LES DEUX variables respectent les conditions.

On peut également utiliser le OU si nécessaire, comme ici:

Code:
SI x = 0 OU y = 0
ALORS AFFICHER "L"un des deux nombre est nul."
Code:
FIN SI


(PETIT problème de mise en page, je réglerai ça plus tard :p)

PETIT EXERCICE: A ce stade du cours, vous devriez pouvoir créer un jeu de pierre papier ciseaux. 2 joueurs: chacun saisi son choix et l'algorithme affiche qui gagne. Je vous invite à m'envoyer vos algorithmes par message privé. Si vous n'y arrivez pas, un version plus simple est possible où un seul joueur choisi et l'ordinateur choisi le deuxième signe (de façon totalement aléatoire bien sur^^).




III/: Les Structures Itératives/Répétitives.

Une structure répétitive ou simplement une boucle est une structure qui va exécuter une action ou une série d'action un nombre de fois. En fonction du nombre de répétitions on n'utilisera pas les mêmes boucles.

Commençons avec le POUR. On l'utilise quand on sait combien de fois on veut que l'action soit effectué (Combien de fois la boucle s’exécute en gros).
Par exemple:
Code:
POUR x = 0 A x = 150 PAR PAS DE 1
AFFICHER x
FIN POUR
Ici, la boucle commencera par mettre x à 0 et tournera jusqu'à qu'il atteigne 150, soit 151 tours. Elle affichera donc 151 fois la valeur de x. C'est quand même plus rapide que de modifier puis afficher la valeur de x manuellement, non ? affraid
Examinons en détails cette chose:
- Le "x = 0" initialise la valeur de la variable. Elle marque donc le début de la zone de bouclage (comme une ligne de départ d'une course).
- Le "A x = 150" marque la fin de la zone de bouclage (Comme la ligne d'arrivée de la course).
- Le "PAR PAS DE 1" marque la variation du compteur (On appelle compteur la variable qui sert à délimiter la boucle, ici c'est x). En effet, ici on fait avancer x de 1 en 1, mais on aurait aussi bien pu le faire avancer de 5 en 5 ou de 100 en 100. C'est très important car comme les 2 autres paramètres, cela détermine le nombre de tours effectués mais aussi les résultats affichés.

C'est tout bien compris ? Si ce n'est pas le cas, ce n'est pas grave, vous comprendrez surement en comparant le POUR avec le TANT QUE.
Le TANT QUE est utile lorsqu'on ne sait pas à l'avance combien de fois il va falloir "boucler". Par exemple, si on exécute un petit jeu qui inclut la fonctionnalité de pouvoir recommencer une partie (au choix de l'utilisateur). On ne peut pas savoir combien de fois le joueur va vouloir recommencer.
Code:
TANT QUE y = true
AFFICHER "J'aime le pâté !"
y <- SAISIR "Voulez vous recommencer ? true/false"
FIN TANT QUE
Vous voyez ? C'est facile !

La différence majeure avec le POUR est qu'ici vous devez modifier votre variable "compteur" à l’intérieur de la boucle. Le POUR modifiait cette valeur lui même grâce au "PAR PAS DE", mais pas ici.
Un exemple avec un compteur numérique:
Code:
TANT QUE x < 18965
AFFICHER x
x <- x + 568
FIN TANT QUE
Nous avons du modifier x car sinon sa valeur restait la même tout le temps, créant ainsi une boucle infinie (nous y reviendrons plus bas).

Notez également que le TANT QUE ne s’exécute que si la condition est vraie et tant que la condition est vraie. Si la condition n'est jamais vraie, le contenu de la boucle ne s’exécutera jamais. C'est également une grosse différence avec le POUR qui s’exécutera quoi qu'il arrive.

Une variante du TANT QUE est le FAIRE ... TANT QUE.
Code:
FAIRE
AFFICHER x
TANT QUE x < 5
Ici, même si la condition est fausse, le contenu de la boucle s’exécutera au moins une fois. Contrairement au TANT QUE, dans un FAIRE, on évalue la condition de bouclage APRÈS avoir exécuté le contenu de la boucle.


Plus haut, j'ai parlé des boucles infinies. C'est dangereux, car une boucle qui tourne à l'infini va faire planter votre programme voir même votre ordinateur. Différents exemples de boucles infinies:
Code:
POUR x = 1 A x < 0 PAR PAS DE 1
AFFICHER "message"
FIN POUR

entier x <- 5
TANT QUE x < 10
AFFICHER "message"
FIN TANT QUE
A vous de trouver pourquoi elles sont infinies =)


On peut également imbriquer plusieurs boucles entre elles. Dans ce cas, la boucle extérieure effectuera puis commencera l’exécution de la boucle intérieure. Il faudra attendre que la boucle intérieure ai fini de boucler pour aller vers la 2eme exécution de la boucle extérieure puis de nouveau attendre la boucle intérieure, etc...




PETIT EXERCICE: A ce stade du cours, vous devriez pouvoir créer un jeu de devinette:
- L'ordinateur choisi un nombre au hasard entre 1 et 1000.
- L'utilisateur est invité à deviner le nombre.
- A chaque tentative, l'ordinateur devra indiquer au joueur si le nombre à deviner est supérieur ou inférieur à la proposition du joueur.
- Si le joueur trouve le bon nombre, il gagne.
- A la fin de chaque partie, l'ordinateur devra indiquer au joueur combien de tentative il lui a fallu pour trouver.
- A la fin de chaque partie, le joueur pourra choisir entre arrêter et refaire une partie.
INDICE: il faut imbriquer des structures itératives entre elles ainsi que des structures alternatives dans les boucles. Bonne chance ! cheers
Vous pouvez m'envoyer vos algorithmes par messages privés comme pour le 1er exercice.
Simon
Simon
Admin

Messages : 15
Date d'inscription : 10/10/2014
Age : 32

http://dufau_simon.olympe.in

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum