Introduction à l'Algorithmique
Introduction à l'Algorithmique
Algorithme
Algorithmique
L'algorithme est la science qui a pour but de concevoir et d'analyser les algorithmes.
Concevoir un algorithme de résolution d'un problème, c'est proposer une méthode de
résolution du dit problème. La conception d'un algorithme requière donc quelques qualités:
L'algorithme
Un algorithme est une suite d'instruction ordonnée qui décrit de façon exhaustive les
différentes étapes à suivre par un processeur ou un automate pour résoudre un problème
donné en un temps fini.
Le processeur
Exemple d'algorithme
Exemple 1
Toto achète au marché de Mokolo, 20Kg de viande sans os à 2€ le Kg.
Quelle est la dépense totale effectuée par Toto?
Ecrire un algorithme pour permettre à Toto de calculer rapidement la dépense totale.
Exemple2
Ecrire un algorithme qui permet de calculer la somme de 5 premiers entier naturels non nuls.
La démarche à suivre pour obtenir un algorithme de résolution d'un problème donné compte
plusieurs étapes:
On se pose la question: Qu'est-ce qu'on demande de faire? Quel est le travail à fournir ?
En général l'énoncé du problème fait ressortir les objectifs.
Le texte de l'algorithme
Le texte a pour but de vérifier que l'algorithme marche et fournir de bons résultats. Le travail
à faire ici consiste à essayer l'algorithme avec des données choisies au hasard pour s'assurer
de son bon comportement.
Le dossier algorithmique
Le dossier algorithmique est un document qui résume la démarche utilisée pour produire
l'algorithme qui comporte 4 étapes:
No Valeur
Type Nature Utilisation Valeur initiale Sens
m finale
début
Fin
Comment déclarer un objet (constantes, types, variables...)
Un type
C'est un ensemble.
Exemple:
Semaine = (Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche)
Les variables
Exemple d'algorithme
Algorithme: Somme
var x, y, S : réel
debut
lire(x)
lire(y)
S←x+y
écrire ("le résultat est ", S)
Fin
La résolution d'un problème en informatique ne comporte qu'une seule phase automatique qui
est l'exécution d'un programme, et le programme quant à lui matérialise dans un langage
compréhensible par l'ordinateur un principe de résolution ou un algorithme.
L'écriture d'un programme n'est qu'une étape dans le processus de programmation. Cette étape
comporte deux phases:
La résolution du problème
Elle consiste à la mise sur pied d'un algorithme de résolution du dit problème. Cette phase est
la plus difficile et représente plus de 70% du travail à fournir. C'est la phase dans laquelle le
programmeur doit faire appel à son intelligence et à son intuition pour produire des solutions
efficaces. Cette phase est dépendante de la machine obtenue.
Instructions de base
Algorithme
Concept d'objet
Le nom
Encore appelé identificateur, le nom permet d'identifier un objet dans un algorithme, il est
posé d'un ensemble de caractères alphabétiques ou alpha numérique.
Remarque:
Le type
Il indique dans lequel un objet prend ses valeurs, il indique aussi implicitement les opérations
qui pourrait être réalisées sur cet objet.
Le type entier
C'est un type qui prend ses valeurs dans l'ensemble Z.
Les opérations possibles sur objet de type entier son: l'addition (+); la soustraction (-); la
multiplication (x); la division (div), le modulo (mod) qui permet de trouver le reste de la
division, exemple: 3mod4=3; 5mod2=1; 4mod2=0
Le type réel
Ce type prend ses valeurs dans l'ensemble R. Les opérations possibles sont l'addition (+), la
soustraction (-), la multiplication (x), la puissance (**), la division (/).
Le type booléen
C'est un ensemble à deux valeur: "vraie" ou "faux", les opérations possibles sur les éléments
du types booléen sont : "nom", "ou", "et".
A B non A A ou B A et B
F F V F F
F V V V F
V F F V F
V V F V V
Le type caractère
C'est l'ensemble constitué par les lettres ("a", ..., "z") des chiffres ("0", ..., "9") et les
caractères spéciaux (+; -; *; #).
L'opération possible sur les éléments de type caractère est appelée concaténation. Le symbole
sera "+"
Exemple:
'A'+'B'='AB'
'3'+'4'='34'
La nature
Variable
Une variable est un objet qui peut changer de valeur lors de l'exécution d'un algorithme.
Exemple:
var b: réel
Une constante
Une constante est un objet qui ne change pas de valeur lors de l'exécution d'un algorithme. Sa
valeur est fixée au début de l'algorithme (lors de la déclaration) et toute tentative de
modification de cette valeur provoque une erreur.
Exemple:
const Pi=3.14
L'utilisation
Un objet peut être objet d'entrée, objet de sortie ou objet interne.
Un objet d'entrée contient une valeur du problème à résoudre. Sa valeur finale n'est pas
importante.
Un objet de sortie contient à la fin du déroulement d'un algorithme une valeur de sortie qui
peut être un résultat. Sa valeur initiale n'a pas d'importance.
Objet interne
C'est un objet intermédiaire utilisé dans un algorithme, le plus souvent il joue le rôle de
compteur. Ainsi sa valeur finale et sa valeur initiale n'ont pas d'importance.
Valeur initiale
C'est la valeur que prend un objet pour la première fois dans un algorithme.
Exemple:
x←4
y ← -2
Valeur finale
C'est la valeur que l'objet contient à la fin de son utilisation dans l'algorithme.
Le sens
Le sens est donné par une courte phrase, celle-ci indique le rôle que joue l'objet dans
l'algorithme. Cependant si l'objet a un nom significatif, on peut ne pas préciser le sens.
Le nom x
Le type entier
Nature variable
Utilisation entrée
Valeur initiale 4
Valeur finale 5
Sens objet à additionner
Ce sont des ondes ou instructions contenues dans un algorithme et que l'ordinateur devra
interpréter et exécuter afin de résoudre un problème donné. Dans la plus part des cas:
l'affectation
Exemple:
La lecture
L'écriture
Exercice d'application
Exercice 1
Ecrire un algorithme qui lit deux nombres entiers, calcule et affiche la somme des deux
nombres, la moyenne de ces 2 nombres et le reste de la division du second nombre par le
premier nombre.
Objectifs:
Afficher
Principe de résolution:
Somme=a+b
moyenne=(a+b)/2
reste = bmod(a)
Algorithme: Calcul
var a,b,somme,reste:entier
moyenne:réel
debut
lire(a)
lire(b)
somme ← a+b
moyenne ← (a+b)/2
reste ← b mod a
écrire('la somme est:', somme)
écrire('la moyenne est:', moyenne)
écrire('le reste est:', reste)
Fin
Exercice 2
Une structure de la place emploie les temporaires à l'heure à raison de 4€ l'heure. Des retenus
sur salaire de l'ordre 15% sont effectuée sur le salaire mensuel. Ecrire un algorithme
permettant de lire la durée de travail mensuel d'un employer et de calculer son net à percevoir.
Exercice 3
Ecrire un algorithme qui permet de lire deux nombres et qui les permute dans les deux cas
suivants:
Exercice 4
Structures de contrôle
Algorithme
Généralités
On distingue les structures séquentielles, les structures conditionnelles et les structures
répétitives.
Structure séquentielle
C'est la structure la plus simple car il y’a aucune condition, aucune répétition, toutes les
institutions s'exécute de façon séquentielle (étape par étape)
Exemple:
debut
lire(a)
lire(b)
c←a
a←b
b←c
écrire(a,b)
fin
Structure conditionnelle
Elle est utilisée pour résoudre des problèmes ayant une ou plusieurs alternatives. On distingue
la structure "si" et "cas où".
deuxième cas:
si condition alors action 1
sinon action 2
fin si
Sémantique (explication)
Fonctionnement
Premier cas: On exécute "action" uniquement lorsque la condition est vraie.
Deuxième cas: On exécute "action 1" uniquement lorsque la condition est vraie, et on exécute
"action 2" uniquement lorsque la condition est fausse.
Exemple 1:
Ecrire un algorithme qui permet de lire un entier et affiche sa valeur lorsqu'il est positif
Algorithme: nombre positif
var a:entier
debut
lire(a)
si a>0 alors
écrire(a)
fin si
fin
Exemple 2:
Ecrire un algorithme qui lit deux caractères et les affiches dans l'ordre alphabétique.
Algorithme: ordre_alphabet
var A,B: caractère
debut
lire(A)
lire(B)
si A<B alors
écrire(A,B)
sinon
écrire(B,A)
fin si
fin
Syntaxe:
cas où
condition 1 : Action 1
condition 2 : action 2
condition n : action n
[ sinon
action n+1 ]
fin cas
Explications:
Les mots suivants sont reconnus par l'ordinateur: condition 1; condition 2; condition n sont
des booléens, action 1; action 2; ...; action n. Chaque d'elle peuvent être soit une instruction,
soit un ensemble.
On exécute action 1 uniquement lorsque condition 1 uniquement lorsque condition 1 est vraie
et on exécute action 2 uniquement lorsque condition 2 est vraie et on exécute action n+1
lorsque condition n+1 est vraie.
Dès qu'une condition est vraie les autres conditions sont fausses.
Exemple 1: ax+b=0
Algorithme: equation-1
var a,b : réel
debut
lire(a)
lire(b)
cas où
a=0 et b=0 : écrire('infinité de solution')
a=0 et b≠0 : écrire('pas de solution')
a#0 : écrire('la solution est :', -b/a)
fin cas
fin
Exemple 2:
Algorithme: Equation_dégré_2
var a, b, c, x1, x1: réel
debut
lire(a)
lire(b)
lire(c)
cas où
a=0 et b≠0 et c≠0 : écrire('la solution est :' -b/c)
a=0 et b=0 et c=0 : écrire('infinité de solution')
a=0 et b=0 et c≠0 : écrire('pas de solution')
a≠0 et b**2-4*a*c<0 : écrire('pas de solution')
a≠0 et b**2-4*a*c=0 : écrire('la solution est :' -b/c)
a≠0 et b**2-4*a*c>0 : écrire('la solution est :', (-b*-D½)/2*a, (-b+D½)/2*a)
fin cas
fin
Exercice
Ecrire un algorithme qui lit 3 nombres et les affiches dans l'ordre croissant. Utilisez la
structure "si" et le récrire avec "cas où".
Encore appelé structure répétition ou boucle, les structures itératives permettent d'effectuer
des traitements répétitifs, c'est-à-dire qu'on exécute une action plusieurs fois. Dans une boucle
le nombre d'itération peut être connu d'avance ou pas.
Si le nombre d'itération n'est pas connu d'avance, on utilise un prédicat (une condition) pour
mettre fin à l'itération. On distingue:
La boucle "pour"
La boucle "tant que"
La boucle "répéter"
La boucle "pour"
On utilise la boucle "pour" lorsqu'on connaît d'avance le nombre d'itération à effectuer, c'est-
à-dire lorsqu'on connaît le nombre de fois qu'on doit exécuter une action.
Exemple: Ecrire un algorithme qui permet de lire 10 notes
La syntaxe:
Sémantique
Les mots en gras sont reconnus par l'ordinateur.
Compteur est un objet intermédiaire de type entier, il a pour première valeur N. M est la
valeur finale de compteur.
pas est un objet intermédiaire de type entier, c'est un objet optionnel qui a pour valeur par
défaut "1", et dans ce cas on ne le précise pas.
action peut être soit une instruction, soit un ensemble d'instruction, soit une structure de
contrôle.
Exemple 1:
Exemple 2:
On utilise la boucle "tant que" lorsqu'on ne connaît pas d'avance le nombre de répétition à
effectuer. Mais on connaît une condition d'arrêt.
Syntaxe:
tant que condition faire
action
fin tant que
Sémantique
Les mots en gras sont reconnus par l'ordinateur.
condition est un booléen
action peut être une instruction, soit un ensemble d'instruction, soit une structure de contrôle.
Fonctionnement
On exécute "action" tant que la condition est vraie, on arrête l'exécution lorsque la condition
devient fausse.
Si initialement la condition est fausse on n'exécute pas action.
Exemple 1:
Exercice 2
Boucle "répéter"
On utilise la boucle "répéter" dans les mêmes conditions que la boucle "tant que", c'est-à-dire
lorsqu'on ne connaît pas d'avance le nombre de répétition à effectuer.
Syntaxe
répéter
Action
jusqu'à condition
Sémantique
action peut être une instruction, un ensemble d'instruction ou une structure de contrôle.
condition est un booléen qui vaut vrai ou faux.
Fonctionnement
On exécute action jusqu'à ce que la condition devienne vraie, autrement dit on exécute action
tant que la condition est fausse.
Exemple:
Algorithme: nombre_positif
var N: réel
debut
répéter
lire(N)
jusqu'à N>0
Fin
Exercice:
Ecrire un algorithme qui lit un nombre entier n>1 et qui affiche la table de multiplication
correspondante.
correction:
Algorithme: table_de_multiplication
var i, n: entier
debut
répéter
lire(n)
jusqu'à n>1
pour i=1 à 10 faire
écrire(i,'x',n'=',i*n)
fin pour
fin
Les sous-programmes
Algorithme
Généralités
Lorsque la complexité d'un problème s'accroît, il devient nécessaire d'utiliser les sous-
programmes pour alléger la tâche. Ces sous-programmes sont les procédures et les fonctions.
De façon générale les sous programmes nous permettent:
Définition
Exemple:
Ecrire une procédure qui prend en paramètre deux nombres "a" et "b", qui calcule la somme et
la moyenne de ces nombres
Algorithme: somme(A, B, S, M: réel)
debut
S←A+B
M←S/2
fin
Exemple:
Ecrire une fonction qui prend en paramètre deux nombres et renvoie la moyenne de ces
nombres.
fonction moyenne(A, B: réel):réel
var m: réel
debut
m←(A+B)/2
moyenne←m
fin
Passage de paramètres
Un paramètre formel est un paramètre utilisé dans la définition d'un sous programme.
Un paramètre effectif ou réel est un paramètre utilisé lors de l'appel d'un sous-
programme.
Soit un travail T décrit par un énoncé E, l'analyse descente du travail T consiste à trouver une
décomposition de l’énoncer E en une suite d’énoncer E0, E1, ..., En-1 tel que la décomposition
obtenue soit élémentaire.
La réalisation des travaux associées T0, T1, ..., Tn-1 réalise le travail T.
L'arbre hiérarchique ou arborescence hiérarchique correspondant respective à l'énoncé E et le
travail T se présente comme suite:
La décomposition s'arrête lorsque l'on obtient des énoncés pouvant être réalisés simplement à
l'aide d'action élémentaire.
Après la décomposition chaque énoncé peut être réalisé par un algorithme ou un sous-
programme indépendant. L'enchaînement approprié de ces algorithmes ou sous-programme
permet de réaliser le travail T.
Application
Problème 1
Ecrivons un algorithme qui permet de calculer Cpn avec P inférieur ou égal à n. Ce problème
peut être décomposé en trois modules comme suite:
Résolution:
fonction: factorielle(m:entier):entier
var i, fact: entier
debut
si m=0 alors
fact←1
sinon
fact←1
pour i=1 à m faire
fact←fact*i
fin pour
fin si
factorielle←fact
fin
fonction: combinaison(a, b, c: entier):entier
var z: entier
debut
z←a div(b*c)
combinaison←z
fin
Algorithme: combinaison_P_N
var n, P, R, A, A, B, C: entier
debut
lecture(n,P)
A←factorielle(n)
B←factorielle(p)
C←factorielle(n-P)
R←combinaison(A,B,C)
écrire(R)
fin
Problème 2
Ecrire un algorithme qui permet de résoudre une équation du second degré de la forme
ax2+bx+c=0 avec a différent de zéro.
Arborescence:
Procédure: solution(d:réel)
var x0, x1, x2: réel
debut
si d<0 alors
écrire('pas de solution')
sinon
si d=0 alors
x0← -b/2
écrire('la solution est x0= ',x)
sinon
x1←(-b-sqrt(d))/2*a
x2←(-b+sqrt(d))/2*a
écrire('les solutions sont: ', x1, x2)
fin si
fin si
fin
Algorithme: équation
var dit, a, b, c: réel
debut
lecture(a,b,c)
det←discriminant(a,b,c)
solution(det)
fin
Algorithme
Généralités
Les objets manipulés jusqu'ici sont de types simples, c'est-à-dire qu'ils ne peuvent contenir
qu'une valeur à la fois. Cependant il peut arriver qu'on ait envie d'utiliser plusieurs valeurs à la
fois et de pouvoir les récupérer dans la suite du traitement. Dans ce cas, il est conseillé
d'utiliser les objets de type composé comme:
Les vecteurs
Les fichiers
Les enregistrements
Les listes chaînées
Les piles
Les files
Les arbres
Les graphes
Un tableau à une dimension encore appelé vecteur est une suite de données contiguëes logées
en mémoire centrale et référencé par un indexe (suite contiguë; c'est lorsque ses éléments se
suivent).
Le nom
Le type de ses éléments
la borne inférieure et la borne supérieure
la taille (taille d'un vecteur: c'est le nombre d'élément que contient un vecteur).
taille=Sup-inf+1
Premier cas:
Deuxième cas:
Exemple 1:
Exemple 2:
Chaque élément du vecteur est repéré par son rang dans ce vecteur. Si "inf" est le rang du
premier élément du vecteur alors le rang du ‘’ième’’ élément est donné par la formule inf+(i-
1)
Soit un vecteur
-5 2 1 10 0
V[1]=-5
V[2]=2
V[3]=1
V[4]=10
V[5]=0
V[i] = ieme élément du vecteur V
La lecture
Ecriture
Exemple 1
Ecrivons une procédure qui permet de lire un vecteur de 10 entiers et qui ensuite met tous les
éléments de ce vecteur à zéro.
Correction:
Exemple 2
Ecrire une fonction qui prend en paramètre un vecteur d'entier et qui renvoie la somme des
éléments de ce vecteurs.
Correction
Exercice 1:
Ecrire une procédure qui prend en paramètre deux vecteurs de réel "A" et "B" et qui transfert
les éléments du vecteur "A" dans le vecteur "B".
Exercice 2:
Selon que le vecteur est trié ou pas les opérations suivantes peuvent être effectuées:
La consultation.
La mise à jour.
Consulter un vecteur consiste à parcourir tous les éléments de ce vecteur sans toutefois les
modifier. Exemple: le transfert, la copie etc.
La mise à jour d'un vecteur
Le vecteur est trié lorsque les éléments sont classés dans un ordre précis (croissant,
décroissant, etc.)
Premier cas: Le vecteur est non trié (les éléments sont en désordre)
Pour insérer un nouvel élément dans un vecteur non trié, on ajoute une case à la suite du
vecteur. On insère le nouvel élément dans cette case.
4 5 2 -5 4 5 2 -5 1
V: → V:
val = 6
3 4 8 12 14 3 4 6 8 12 14
V: →V :
Suppression
Val = 2
4 7 1 2 5 8
V:
4 7 1 5 8
V:
4 5 7 8 10 14
V:
Principe 1:
Principe 2:
Une chaîne de caractères est un ensemble de caractères portant le même nom de variable.
Chaque caractère est repéré par son rang dans la chaîne.
Une chaîne de caractères correspond alors à un vecteur donc les éléments sont les caractères.
Déclaration
const max=20
type chaîne = tableau[1..max] de caractères
var ch: chaîne
ou alors
Remarque:
Exemple
Avec les objets de types chaîne de caractère on peut effectuer les opérations suivantes:
Exercice
Le nom de l'hôtel
Localité
Numéro de téléphone
Prix de l'hôtel
Numéro de la session
Désignation
Le nombre de place max
Le nombre d'inscrit
La durée de la session (jour, mois, année)
Heure de debut de session.
Le nom
L'adresse: le numéro de téléphone
L'accompagnateur
L'hébergement: la liste des sessions auquel il est inscrit.
Le champ accompagnateur est un entier qui vaut "1" si le congressiste est accompagné "0"
sinon.
Le champ hébergement est de type hôtel
Le champ liste des sessions est un tableau de session sachant que chaque congressiste ne peut
participer qu'à 10 sessions au maximum.
Le nombre de congressiste est de 100 avec un total de 20 sessions.
Questions:
1.
o Définit la structure de données correspondant à la liste des sessions.
o Définir la structure de donnée correspondante à un hôtel
o Définir la structure de donnée correspondante à un hôtel.
o Définir la structure de données correspondante à la liste des congressistes.
2. Ecrire une procédure qui permet de créer la liste des sessions.
3. Ecrire une fonction qui prend en paramètre la liste des congressistes et qui compte le
nombre de congressiste accompagné sachant qu'on a enregistré que 80 congressistes.
4. Ecrire une procédure qui affiche la liste des sessions qui se sont déroulée le
11/06/2009
5. Ecrire une procédure qui affichage la liste des congressistes inscrits dans la session
"base de données repartie"
6. Ecrire une fonction qui compte le nombre de congressistes affectés à " Prestige hôtel".
7. Ecrire une procédure qui recherche et affiche la session qui a le plus grand nombre
d'inscrit et celle qui a le plus petit nombre d'inscrit
Algorithme
Exemple d'algorithme
Algorithme 1
Ecrire un algorithme qui permet de lire un entier "n" strictement positif et qui calcule la
somme des "n" premier nombres positifs.
1) Algorithme
1a: somme
var N: entier
S: réel
debut
répéter
lire(N)
jusqu'à N>0
S←N*(N+1)/2
écrire('la somme de ',n,'premiers termes est: ,'S)
fin
Ici on a 3 opérations fixes
2) Algorithme
1b: somme
var n, i, S: entier
debut
écrire('Entrez un entier positif')
lire(x)
tant que n<=0 faire
écrire('Veuillez ressaisir votre nombre')
lire(x)
fin tant que
S←0
pour i=1 à n faire
S←i+S
fin pour
écrire('la somme des,'n', premier nombres positifs est ,'S)
fin
Ici on a n opération qui vont varier en fonction de n
Algorithme 2
Ecrire un algorithme qui permet de lire un entier "n" strictement positif et qui affiche tous les
multiples de 3 inférieurs ou égaux à "n"
répéter
lire(n)
jusqu'à n>=0
i←1
tant que i<=n faire
si imod3=0 alors
écrire(i)
fin si
i←i+1
fin tant que
fin
Complexité théorique
C'est un ordre de grandeur des coûts théoriques indépendants des conditions pratiques
l'exécution (c'est une généralisation de la complexité pratique).
Exercice 2:
La complexité max: Elle s'obtient avec les données les plus défavorables.
La complexité min: Qui s'obtient avec les données les plus favorables.
7 4 2 1 3 5
V:
5 4 2 1 3 7
V:
TN = 5Ta+13TC = (n-1)Ta+(2n+1)TC
Recherche dichotomique
La recherche dichotomique suppose que le vecteur dans lequel on recherche une valeur "val"
donnée est triée. Supposons que le vecteur est trié dans l'ordre croissant. Soit "min" et "max"
les valeurs minimales et maximales de l'ensemble des indices du vecteur V. Le principe de la
recherche dichotomique est le suivant:
1. Calculer le milieu
mil = (min+max)/2
2. Si V du milieu = val V[mil]=val alors on arrête la recherche car on a trouvé "val".
3. Si V[mil]>val alors on continue la recherche dans la partie de V donc les indices
varies entre "min" et "mil".
4. Si V[mil]<val alors on continue la recherche dans la partie de V donc les indices
varies entre "mil" et "max"
5. Temps qu'on n'a pas trouvé val reprendre toute ces actions à partir de la première
jusqu'à l'obtention d'un intervalle de recherche de taille "1".
S'il n'y a pas toujours égalité alors la valeur recherchée n'existe pas dans le vecteur.
Trier un ensemble de n informations consiste à classer ces fonctions selon certains critères
(ordre croissant, ordre décroissant, ordre alphabétique)
Le tri sélection
La procédure correspondante est la suivante
Exercice:
Réécrire cet algorithme en remplaçant la boucle "pour" par la boucle "répéter" et par la boucle
"tant que".
Exercice:
Réécrire cette procédure en remplaçant la boucle "tant que" par la boucle "répéter" et la
boucle "pour" par "tant que".
Exercice:
Réécrire cet algorithme en remplaçant la boucle "répéter" par la boucle "tant que"
Notion d'organigramme
Algorithme
Généralités
En général, on peut représenter un algorithme sous forme structurée ou sous forme graphique.
L'organigramme est une représentation graphique d'un algorithme. C'est le plus ancien des
représentations et il constitue un diagramme qui montre le cheminement des données dans un
programme dans un système d'information, ainsi que les opérations pratiquées sur ces
données lors des différentes étapes du traitement.
Les opérations dans un organigramme sont représentées par les symboles dont les formes sont
normalisées. Ces symboles sont reliés entre eux par des lignes fléchées qui indiquent le
chemin. C'est ainsi qu'on a:
Exercices d'application
Exercice 1:
Ecrire un organigramme qui lit un entier N et qui calcule et affiche la somme et la moyenne
de N nombres.
Exercice 2:
Ecrire un organigramme qui lit la longueur et la largeur d'un rectangle, calcul et affiche son
périmètre et sa surface.
Exercice 4:
Ecrire un organigramme qui permet de lire le prix hors taxe et la quantité de cet article puis
calcule et affiche le montant de la facture sachant que le taux de la TVA est de 20,6%
Exercice 5:
Ecrire un organigramme qui lit un nombre N non nul et affiche le message: inférieure à "0" ou
supérieur à "0" suivant sa valeur.
Exercice 6:
Récursivité
Algorithme
Exemple:
Les listes.
Les piles.
Les files.
Les arbres.
Le raisonnement récursif
Une formulation simpliste ou triviale: qui permet d'arrêter les traitements récursif.
Une formulation récursive: qui permet de poursuivre le traitement, exemple: tant que
la condition est vraie on exécute l'action.
Récursivité indirecte
La récursivité directe
Application
Fonction factorielle
La factorielle d'un nombre entier n est le produit des nombres entiers inférieurs ou égaux à ce
nombre n. Cette définition peut se noter de plusieurs façons
1. 0!=1
1!=1
2!=2
3!=3x2x1
N!=N(N-1)x...x2x1
2. N!=1 si N=0
N!=N(N-1)x...x2x1 si N>0
3. N!=1 si N=0
N!=N(N-1)! si N>0
fonction factorielle(N:entier):entier
var p, i: entier
début
si N=0 alors
factorielle ←1
sinon
p←1
pour i=1 à N faire
p ← i*P
fin pour
factorielle ← p
fin si
fin
Autre fonction
fonction factorielle(N: entier): entier
debut
si N=0 alors
factorielle ← 1
sinon
factorielle ← n*factorielle(n-1)
fin si
fin
Exécution
F0 F1 F2 F3 F4
3*fact(2
N=3 2*fact(1) 1*fact(0)
) 1
fact(3) fact(1) fact(0)
fact(2)
Fonction de Fibonacci
f0 ; f1=1
fn=fn-2+fn-1 si n>1
f(n)=n si n<=1
f(n)=f(n-2)+f(n-1) si n>1
Correction:
fonction fibonacci(n:entier):entier
début
si n<=1 alors
fibonacci ← n
sinon← fibonacci(n-1)+fibonacci(n-2)
fin si
fin
Les enregistrements
Algorithme
Le type tableau nous a permis de définir une structure composée de plusieurs éléments, cette
structure nous permettrait de réunir les éléments de même type. Mais si nous voulons
regrouper les informations n'ayant pas nécessairement le même type au sein d'une même
structure, par exemple: les informations concernant un étudiant. Une nouvelle structure
appelée enregistrement est plus adaptée pour représenter ce type d'information.
Déclaration
type nom=enregistrement
champ1 : type1
champ2 : type2
........
champn : type;
fin enregistrement
Exemple:
Déclarons un type étudiant
Application:
Type Etudiant=enregistrement
machine : chaîne
nom : chaîne
prénom : chaîne
sexe : caractère
age : entier
note : réel
fin enregistrement
Utilisation
Le code.
Le nom.
Le prénom.
Le grade.
Le sexe.
Application
Projets d'étude
Algorithme
Projet 1
Gestion de la CAMMTEL
A la fin du mois, la CAMMTEL distribue les factures de consommation à tous ses clients et
reçoit les cheques correspondants.
La CAMMTEL veut savoir à la fin de chaque mois quelles factures n'ont pas été payées, une
facture est composée par:
Le code.
Le nom du client
L'adresse du client (BP, Ville, Téléphone)
L'index de but et l'index de fin: pour la consommation
Le montant
Un chèque est constitué par:
Le numéro du chèque
Le numéro du compte client
Le montant payé
Le nom du client
Le code de la facture
Questions:
Projet 2
Le nom
Le prénom.
La catégorie (étudiant, enseignant, travailleur etc.)
Le menu
Le montant
Le nom du menu
La quantité
Le prix
Questions:
Ecrire une procédure "liste_client" qui permet de créer un vecteur de client.
Ecrire une procédure qui affiche la liste des clients par catégorie avec leur
consommation (menu et le montant)
Ecrire une facture qui calcule le montant total de consommation par jour.
Ecrire une procédure qui ajoute un nouveau client dans la liste.
La liste est triée dans l'ordre alphabétique des clients.
Ecrire une fonction qui affiche le nom du menu le plus sollicité.
Ecrire une procédure qui affiche le nom du client qui a le plus consommé et le
montant de sa consommation.
Projet 3
Le numéro d'immatriculation.
La marque.
Le type
Projet 4
Gestionnaire d'adresse.
Chaque personne est caractérisée par:
Son numéro
Son nom
Son prénom
Son numéro de téléphone
Son sexe
Questions:
1. Donner la déclaration qui correspond à une personne.
Qui correspond à une liste de personne.
2. Ecrire une procédure qui permet de créer une liste de 50 personnes.
3. Ecrire une fonction qui prend en paramètre une liste de personne et renvoie le nombre
d'homme présent dans la liste.
4. Ecrire une procédure qui affiche la liste des filles abonnées à CAMMTEL (Nom,
numéro de téléphone)
5. Ecrire une procédure qui prend en paramètre une liste de personne et une personne.
Cette procédure permet de rechercher si cette personne existe.
6. On suppose que la liste de personne est triée dans l'ordre alphabétique. Ecrire une
procédure qui permet d'insérer une nouvelle personne dans la liste.
7. Ecrire une procédure qui permet de supprimer une personne donc le numéro de
téléphone est 36309424.
Les fichiers
Algorithme
Jusqu'après les objets utilisé dans nos algorithmes (objet simple tableau) n'ont qu'une durée de
vie brève. Leur existence est limitée à la période d'exécution du programme dont il constitue
l'environnement (parce qu'ils sont situés en mémoire centrale).
Ces informations ne pouvaient provenir que de deux sources:
Le type fichier va nous permettre de manipuler des informations situées sur des supports
externes, exemple: le disque dur, le CD, la disquette.
Exemple:
La création: Consulter un fichier consiste à épuiser une partie des informations qu'il
contient sans toute fois y apporter des modifications.
La mise à jour: Elle consiste à modifier le contenu d'un fichier, à ajouter un nouvel
élément dans le fichier, supprimer un élément du fichier.
Lors du traitement d'un fichier l'algorithme doit assurer le contrôle de ce fichier à l'aide d'une
primitive d'ouverture de fichier, soit en lecture, soit en écriture, soit en lecture/écriture.
Syntaxe:
F: fichier
ouvrirL(F)
Sémantique:
L'exécution de cette instruction permet de lire les enregistrements dans le fichier F.
Syntaxe:
OuvrirE(F)
Sémantique:
Syntaxe:
Ouvrir(F)
Sémantique:
A la fin de traitement du fichier l'algorithme doit indiquer qu'il n'a plus besoin du fichier F en
effectuant sa fermeture au moyen d'une primitive donc la syntaxe est:
Fermer(F)
L'exécution de cette instruction complète le fichier par une marque de fin en cas de création
du fichier.
F: fichier
val : article
lire(F, val)
Sémantique:
L'exécution de cette instruction permet d'introduire la valeur d'un ensemble de F dans la
variable val.
Syntaxe:
écrire(F, val)
Sémantique:
Syntaxe:
Fin(F)
Sémantique:
Cette instruction est une fonction booléenne qui est fausse quand aucune action de lecture est
exécutée. Elle garde cette valeur tant que les exécutions successives de lire(F, val) rencontrent
les articles F.
Elle prend la valeur vraie dès que l'exécution de lire(F, val) rencontre la marque de fin de
fichier.
Parcourir un fichier consiste à accéder à chaque article ou élément du fichier une et une seule
fois. Les procédures générales de parcours d'un fichier sont:
Exemple1:
Exemple2:
Le code
Le nom
La ville
L'adresse qui est un enregistrement composé de:
o La boîte postale
o Le numéro de téléphone
La disponibilité: qui sera un booléen.
Questions:
1.
o Donnez la déclaration d'un fichier d'hôtel.
o Donnez la déclaration qui permet de créer un fichier d'hôtel.
o Ecrire une procédure qui affiche la liste des hôtels disponibles.
2. Ecrire une procédure qui prend en paramètre le fichier hôtel et renvoie la taille de ce
fichier.
3. On voudrait supprimer un hôtel du fichier:
o Ecrire une procédure qui permet de transférer les éléments du fichier dans le
vecteur hôtel.
o Ecrire une procédure qui prend en paramètre le vecteur hôtel et qui supprime
cet hôtel du vecteur.
Après suppression le vecteur d'hôtel est transféré à nouveau dans le fichier
hôtel
4.
o Ecrire une procédure qui permet d'effectuer ce transfert.
o Ecrire une fonction qui prend en paramètre le fichier d'hôtel et le code d'un
hôtel puis retourne vraie si cet hôtel existe dans le fichier et faux sinon.
Algorithme
Définition et caractéristiques
Une matrice est un ensemble de données de même type logées en mémoire centrale et
référencé par deux indices (les lignes et les colonnes).
Une matrice est caractérisée par:
Le nom
Le nombre de colonne
Le nombre de ligne
La taille de la matrice (nombre de ligne x nombre de colonnes)
Le type des éléments de la matrice.
Chaque élément dans une matrice est caractérisé par le numéro de la ligne et le numéro de la
colonne.
Déclaration:
Exemple:
L'écriture
Applications
La diagonale
La matrice symétrique
La matrice réflexive
Exercices
Exercice 1:
Ecrire une procédure qui recherche le plus grand et le plus élément dans une matrice d'entier.
Exercice 2:
Ecrire une procédure qui prend en paramètre une matrice carrée d'ordre n et qui met à zéro
tous les éléments de la diagonale et ceux de l'anti-diagonale.
Exercice 3:
Ecrire une fonction qui prend en paramètre une matrice carrée d'entier d'ordre n et qui renvoie
le nombre d'entier pair.
Exercice 4:
Ecrire une procédure qui prend en paramètre une matrice de caractère et qui compte le
nombre de fois qu'apparaît le caractère "A" et le nombre de fois qu'apparaît le caractère "B".
Exercice 5:
Ecrire une procédure qui permet de transférer les éléments d'une matrice carrée d'ordre
n dans un vecteur d'entier.
Donnez en fonction de n, i et j une formule permettant d'identifier un élément de la
matrice dans le vecteur.
Exercice 6:
Ecrire une procédure qui permet de rechercher un élément dans une matrice.
Exercice 7:
Ecrire une fonction qui prend en paramètre une matrice carrée d'ordre n et qui calcule la trace
de cette matrice.
Exercice 8:
Matrice identité.
Matrice symétrique.
Exercice 9:
Exercice 10:
Ecrire une fonction qui vérifie si une matrice est triangulaire supérieure.