:: News .:. Documents .:. Forum .:. Downloads .:. Bibliographie .:. Liens .:. Contact  :: 


Home
  :. News
  .: Documents
    .: Notions
    .: Protocoles
    .: Sécurité
    .: Architecture
    .: Prog
    .: Systèmes
  :. Forum
  .: Downloads
  :. Bibliographie
  .: Liens
  :. Contact

Chat

  Nickname:


irc: #guill.net

Forum



 
L'algorithmique : Le langage français  
 

 

Qu'est-ce-qu'un algorithme?

Au lieu de se jeter directement dans un langage, il est préférable d'écrire un algorithme du programme. Un algorithme, c'est simplement un programme écrit de façon simple en français...

Lorsque tout à l'heure je disais "Ouvrir Frigo", c'est une instruction en français.
Si vous reprenez l'exemple des langages structurés, c'est un algorithme...

L'avantage est de pouvoir écrire son programme sans se soucier du langage utilisé... Le passage à un langage se fait très rapidement : c'est un travail de traduction...

Les variables et constantes

La programmation utilise des variables. Qu'est-ce-c'est? Voici un exemple:
Si vous dîtes : a = 5, b = 7, c = a + b...
Vous comprenez rapidement que c = 12, non?
a, b et c sont des variables.

Pour l'ordinateur, il faut le prévenir avant de commencer que a, b et c existent et sont des nombres entiers (cf. cours de CM1)... On appelle ça la déclaration des variables.

Une constante est une "variable" dont la valeur ne change jamais dans le programme. Ici, a et b peuvent être considéré comme constantes.
Le programme ressemblera donc à ça (plusieurs solutions):

La partie déclaration est une partie avant le programme pour définir les variables et les constantes. Dans les programmes 2 et 3, a et b obtiennent leurs valeurs (on dit qu'elles sont initialisées) dans la partie déclaration.

Instructions Lire et Ecrire

L'instruction lire signifie simplement "Lire ce que l'utilisateur tape sur le clavier".
L'instruction écrire signifie écrire à l'écran.
Si vous écrivez l'instruction lire (a) cela revient à dire : la variable "a" est égal à ce que l'utilisateur rentre au clavier.
Voici un exemple de programme :

Il est facile de voir que le résultat sera : "Donner la variable a" s'affichera à l'écran. L'utilisateur donne un entier dont la valeur va dans a. Idem pour b.
Puis, la somme des deux s'affiche à l'écran.

NB : Si on écrit directement Ecrire ( a + b ), ce n'est pas la peine de déclarer "c" comme variable, "c" n'est plus utilisée.
Il est également à noter que si l'utilisateur ne rentre pas un entier mais par exemple une lettre, il y a une erreur...

Instruction Si - Alors - Sinon - Fin Si

C'est une instruction assez simple à comprendre : Exemple...

Dans ce programme, on demande à deux personnes leur nom. On compare les deux noms... L'exemple est assez explicite, non? Il suffit de lire l'algorithme...

Cela renvoie à un autre problème : les conditions. Ici, ( Nom1 = Nom2 ) est une condition... C'est soit Vrai, soit Faux.

Il existe un type de variable qui ne peut prendre que la valeur Vrai ou Faux : le booléen...

Le type Booléen

Un entier est une variable qui peut prendre comme valeurs 1, 2, ... ou 32000, le booléen est une variable qui ne peut prendre que deux valeurs : Vrai ou Faux.
L'intérêt d'une telle variable est par exemple pour l'instruction Si - Fin Si.
Dans l'exemple si dessus, on aurait pu écrire :

NomIdentique est Vrai si Nom1 = Nom2 et Faux si Nom1 est différent de Nom2.

NB : Plutôt que d'écrire

Si ( NomIdentique = Vrai ) Alors, on peut écrire Si NomIdentique Alors. En effet, NomIdentique est Vrai ou Faux, cela revient donc à dire Si Vrai Alors... Sinon!

Tant qu'on en est à perler des conditions dans les programmes, autant voir comment une condition s'écrit...

Les conditions

A égal B : A = B ou A = = B

A différent de B : A ! = B ou A <> B
A supérieur strictement à B : A > B
A supérieur ou égal à B : A > = B
Idem pour Inférieur : A < B ou A < = B
A et B : A & B, A && B, A . B ou A * B
A ou B : A | | B ou  A + B

Voilà, nous pouvons passer à la dernière partie de ce chapitre, les tableaux...

Les tableaux et les vecteurs

Il existe un type de variable particulier, ce sont les tableaux.
Il est souvent utile de définir des tableaux... Imaginons que vous avez 25 élèves dans une classe, il peut être intéressant d'avoir un tableau avec deux colonnes : la première contiendra leur classement, la deuxième leur note.

On peut donc écrire dans les variables :
Eleves : Tableaux [ 1..2 , 1..25 ] d'entiers.
Cela voudra dire qu'il y aura la colonne 1 et la colonne 2 ( 1..2 ) et 25 lignes numérotées de 1 à 25 ( 1..25 ).
Pour avoir accès à la colonne 2 de l'élève numéro 7, il suffira d'écrire Eleves [ 2 , 7 ]...
Un vecteur est simplement un tableau qui n'a qu'une seule colonne. On écrira :
Eleves : Vecteur [ 1..25 ] d'entiers et on aura une colonne et 25 lignes.

Il reste encore une toute petite chose avant de clore ce chapitre...

La définition de type

Il est également très pratique de définir soit même un type de variable. Nous allons créer une variable Eleve. Dans la structure d'un programme, la déclaration d'un type de variable se place avant la déclaration des variables.

On définit le type Eleve de cette façon :

De cette façon, Elève sera un nouveau type de variable.
Si on déclare Elève1 de type Elève et que l'on veut avoir son adresse, il faut écrire : Elève1.Adresse...
D'accord? Non?
Rien ne vaut un petit exemple pour mieux comprendre...

Exemple

On va supposer que quelqu'un a 10 voitures et qu'il veuille savoir si le contrôle technique d'une voiture est bon ou mauvais... Il veut également voir à l'écran les informations concernant sa voiture... On supposera pour cet exemple que le vecteur de voitures est déjà initialisé, c'est-à-dire qu'il est déjà rempli!

On a déjà moyen avec ce qu'on vient de voir, de faire des petits programmes. Il manque pourtant quelque chose de très utile : les boucles...

On appelle boucle une structure où un ensemble d'instructions est exécuté plusieurs fois.

Il y a trois types de boucle, la boucle Pour, la boucle Tant Que, et la boucle Repeter - Jusqu'à.

Commençons pas la plus simple...

La boucle Pour

C'est la structure que l'on utilise lorsqu'on veut répéter plusieurs instructions un nombre connu de fois.
Reprenons l'exemple des voitures... Plutôt que de demander à l'utilisateur de donner un nombre, il serait préférable de lui écrire directement à l'écran toutes les informations sur toutes ses voitures!

On peut le faire avec une boucle Pour : on connait le nombre de voitures, c'est 10...

Dans les variables
compteur : entier

Dans le programme :
Pour compteur de 1 à 10 Répeter
    Ecrire ( " Marque ", Voiture[compteur].Marque )
    Ecrire ( "Modèle"...)

    Si ContôleTechnique Alors
        ...
    FinSi
Fin Pour

Dans ce programme, on rentre dans la boucle, compteur = 1. On écrit donc les informations relatives à la voiture numéro 1. Ensuite, on répète les instructions et compteur = 2. On va donc afficher les informations concernant la voiture numéro 2 et ainsi de suite, 10 fois!

La boucle Tant Que

Le principe est le même, il s'agit de répéter plusieurs instructions mais un nombre inconnu de fois.
Supposons que l'on fasse un programme pour faire des additions, mais on veut pouvoir faire plusieurs additions à la suite. Cela donne :

Tant que l'utilisateur écrira "y", il pourra refaire une autre addition. On ne sais pas combien d'addition il fera : on utilise une boucle Tant Que.

Notons quand-même qu'on n'est pas obligé de rentrer dans la boucle : si l'utilisateur répond autre chose que "y" la première fois, on n'exécute pas ce qu'il y a dans la boucle...

La boucle Répéter - Jusqu'à

C'est le même principe que la boucle Tant Que, c'est à dire qu'on ne sais pas combien de fois on va répéter ce qu'il y a dedans. Pourtant la différence réside dans le fait qu'on exécute au moins une fois.
Cela donne :

Ici, on est obligé de faire au moins une addition...

Et on sort de la boucle si EncoreUneAddition est différent de "y".

La structure Selon

La structure Selon est assez simple à comprendre. Elle permet de faire quelque chose en fonction de la valeur d'une variable.
Imaginons une variable Note comprise entre 0 et 20.
En fonction de la note, on peut écrire un commentaire différent.
Cela donne
Selon Note
    0..6 : Ecrire ( "C'est nul!" )
    7..9 : Ecrire ( "Bof" )
    10 : Ecrire ( "C'est la moyenne" )
    11..15 : Ecrire ( "Bien" )
    16..20 : Ecrire ( "Excellent" )
Default : Ecrire ( "La note n'est pas entre 0 et 20" )
Fin Selon

NB : Default est utilisé si aucune valeur ne correspond à la variable...
Il est maintenant temps de passer à une autre partie : les fonctions et les procédures...

Fonctions et Procédures

Dans l'exemple du langage structuré, on avait définit des actions avant le programme principal.

C'est le but des fonctions et des procédures.

La différence entre une fonction et une procédure est la suivante : une fonction renvoie une valeur alors qu'une procédure est un bout de programme.
    Explication par l'exemple :

Les variables définies dans la fonction ou la procédure sont appelées variables locales.

Elles n'existent que lorsque l'on entre dans la fonction ou procédure et sont détruites losqu'on en sort. On peut évidemment utiliser les variables globales dans les fonctions et procédures...

NB : Les variables globales sont celles qui sont déclarées au début du programme.

Il faut que je vous explique qu'on peut aussi mettre des paramètres à des fonctions ou des procédures...

Exemple : on veut écrire une fonction qui fait la somme de n'importe quel nombre a et b.
On peut définir une fonction comme suit :
fonction Somme (variables a, b : entiers)
    debut
    renvoyer ( a + b )
    fin
fin fonction

Ainsi, dans le programme, la valeur de Somme (5,7) sera 12,la valeur de Somme (Nombre1,Nombre2) sera Nombre1 + Nombre2... et on peut utiliser la fonction Somme autant de fois que l'on veut.

Exemple général sur tout ce qu'on a vu

On va faire un programme pour un professeur qui veut classer ses éleves. Dans le type élève, il y aura le nom de l'élève et sa note.
Le professeur rentrera les élèves et leur note les uns après les autres, et le programme écrira à l'écran la liste des élèves et leur note, mais de la meilleure note à la plus mauvaise.
On sait simplement que le nombre d'élève est inférieur à 100.

Commencez par lire le programme pricipal, et seulement après les fonctions et les procédures.
Allons-y...

Au début, il n'y a pas d'élèves, TotalElèves = 0.

Ensuite, jusqu'à ce qu'il n'y ait plus d'élève, on remplit une ligne du vecteur et on augmente de 1 le total des élèves.
A la fin de la boucle, le vecteur est rempli avec les élèves et leur note, et on sait qu'il y a TotalEleves élèves et donc??????????..????? lignes remplies.

Ensuite, on répète autant de fois qu'il y a d'élève : TrouverElèveSuivant, qui doit être une fonction qui revoit la ligne de l'élève suivant à afficher à l'écran, et on écrit à l'écran le nom et la note de l'élève. Et voilà... pour le programme principal.
Maintenant, on va voir ce qu'il y a dans la procédure MettreElèveDansVecteur

Dans le champ DéjàAffiché d'Elève, on écrit Faux. C'est normal, on n'a encore rien affiché. Cette variable servira plus tard...

Dans le programe principal, on augmente TotalElèves de 1 ( on dit incrémenter ) à chaque passage dans la boucle Jusqu'à. Par conséquent, chaque fois qu'on appelle la procédure, on remplit la ligne qui suit celle qui a été remplie avant.

Ensuite, on demande si il y a encore un élève après celui-là et on met la réponse dans EncoreUnEleve?.

Il ne reste plus que la fonction, c'est sans doute le plus difficile...

Le but de la fonction est de renvoyer l'élève ayant la note la plus haute et n'ayant pas encore été affiché.
On regarde donc à chaque fois tous les élèves. Si l'élè??????????..?????;ve a déjà été affiché, on ne s'en occupe pas et on passe au suivant. Si il n'a pas été affiché, on regarde si sa note est supérieure à la plus grande note qu'on a trouvé jusque là. Si ce n'est pas le cas, on passe à l'élève suivant, sinon, on dit qu'il a la note la plus haute qu'on ait trouvée jusque là et on retient son numéro de ligne.

A la sortie de la boucle, on se retrouve avec le numéro de ligne de celui qui à la note la plus haute : il ne reste plus qu'à marquer qu'il a déjà été affiché et à renvoyer son numéro de ligne!

Lisez bien ce programme... Si vous comprenez tout, alors je n'ai presque plus rien à dire!
Sinon, essayez de prendre un papier et un crayon et de marquer chaque variable et la valeur qu'elle a. Mettez-vous à la place de l'ordinateur et exécutez le programme à la main. Comme ça, vous verrez comment ça marche!
Je vous propose quand même de faire ensemble un autre programme...
D'accord?  Toujours là? Vous avez toujours envie de programmer?
Alors passez à la suite!

Exemple de programme

Qu'est-ce-qu'on peut faire comme programme? Laissez-moi réfléchir... Pourquoi ne pas programmer un agenda... Que fera notre agenda? Il est important de bien spécifier avant tout ce qu'on veut faire et comment on veut le faire. Il faut bien avoir en tête le résultat du programme qu'on veut faire.

Définition du programme Agenda

Quand on ouvrira le programme, il y aura un menu avec plusieurs possibilités :
- Ajouter quelqu'un
- Enlever quelqu'un
- Afficher les informations sur quelqu'un
- Afficher la liste des personnes disponibles dans l'agenda
- Sortir du programme

Programme Principal de Agenda

Commençons par le programme pricipal. Il faut d'abord prévoir qu'il y aura une boucle qui s'éxecutera jusqu'à ce que l'utilisateur choisisse de sortir du programme.
Vous pouvez prendre un bout de papier et faire le programme en même temps que moi...
Donc notre programme principal sera du type :

Bon... C'est un bon début...

Vous avez remarqué que la première chose qu'il faut faire est de dire que Sortir? est Faux... Il faut toujours penser à initialiser les variables, sinon elles peuvent vous jouer des tours! Il faut aussi penser à les déclarer...
Maintenant, il faut demander à l'utilisateur ce qu'il veut faire. Ce sera du style :

Deux choses : la première, c'est que je ne vous ai pas encore parlé des commentaires... C'est quand j'écrit //... Cela veut simplement dire que ce qu'il y a marqué après sur la ligne ne fait pas partie du programme. Quand le programme sera compilé, il ne s'occupera pas de "pour sauter une ligne". Les commentaires sont très pratiques pour expliquer ce qu'on fait dans le programme...

Deuxième chose, il faut déclarer la variable "choix"... Quelle valeur peut-elle prendre? Quelque chose écrit au clavier. Pas seulement un entier puisque "X" est un caractère. On déclare donc "choix" comme caractère.

Pour l'instant, notre programme ressemble à ça :

Maintenant que l'on sait ce que l'utilisateur veut faire, il faut le faire. Allons-y...
En fait, en fonction du résultat de "choix", on va faire quelque chose de totalement différent. Vous vous souvenez de la structure Selon? Elle est parfaitement appropriée ici.
Après avoir lu "choix", il faut rajouter :

Il faut mettre des ' ou des " pour dire que ce sont des caractères et non des entiers.
AjouterQqun, ... seront des procédures ou des fonctions que l'on va définir maintenant.
Comme ça, notre programme principal est terminé!
Pour l'instant, le programme ressemble à ça :

Avant de commencer, il faut définir l'objet où seront stockées les données. On va évidemment prendre un vecteur de personnes et on va définir le type personne comme suit :

Type Personne
    Nom, Prénom, Téléphone, Adresse : Chaînes de caractères
FinType Personne

On peut maintenant s'occuper des procédures et des fonctions...

Fonctions et procédures de Agenda

AjouterQqun : ce sera une procédure qui ajoutera une personne sur la dernière ligne du vecteur. De la même façon que pour les élèves, il y aura une variable TotalPersonnes qu'on incrémentera à chaque fois qu'on ajoute quelqu'un.

Attention : Il ne faut pas oublier d'initialiser TotalPersonnes à 0...

AfficherListe : Cette procédure sera assez facile à mettre en place. Il suffit de prendre toutes les lignes du vecteur et de les afficher...

AfficherQqun : Cette procédure est un peu plus délicate. On va demander le nom de la personne et il va falloir la retrouver dans le vecteur pour afficher les informations qui lui corresponde...

SupprimerQqun : C'est la plus difficile... Une fois qu'on a retrouvé la ligne dans le vecteur correspondant à la personne que l'on veut supprimer, il faut remonter toutes les autres lignes pour remplir la ligne qui a été effacée...

Si vous ne comprenez pas immédiatement, c'est tout à fait normal, mais essayez de le relire et d'imaginer ce qui se passe jusquà
ce que vous compreniez...

Nous avons maintenant le programme dans sa totalité : il suffit de les remettre dans l'ordre...

Programme Agenda

Et voilà! Si vous pouvez faire ça, et vous le pouvez si vous avez tout lu ( si, si! ) alors vous pouvez programmer... Il ne reste plus qu'à traduire dans le langage de votre choix...

 




Sondage

Quel est votre connexion à Internet aujourd'hui ?
 
RTC 56Kbps
ADSL simple de 128 à 2048 Kbps
ADSL + Téléphonie (+TV) de 128 à 2048 Kbps
ADSL simple jusqu'à 20Mbps
ADSL + Téléphonie (+TV) jusqu'à 20Mbps
Autres (RNIS, Satellites bi-directionnel...)
Total :
3361

Recherche


Docs
   Pflogsumm (Analyseur de log mail pour Postfix)
   Proftpd (Mise en service d'un serveur FTP avec proftpd sous Linux)
   Openldap (Mise en service d'un serveur LDAP sous Linux)
   Gestion des périphériques en c++ builder (Communication RS232 en C++ Builder)
   Les sockets windows (Windows Sockets : un cours accéléré)

guill.net©1999-2024