Algorithmique 1
Algorithmique 1
Plan du cours :
Chapitre 1 : Introduction
[Link]
Chapitre 1 Introduction
Chapitre 1
Introduction
1 Bref historique sur l’informatique
2 Introduction à l’algorithmique
Ce chapitre a pour objectif de présenter en bref c’est quoi l’informatique, ensuite de présenter l’objet
de ce cours qui est l’algorithmique.
1. Introduction
1.1. L'informatique
L’informatique est la science du traitement automatique de l'information grâce à l’ordinateur, C-à-d
automatiser l’information que nous manipulons. Elle a pour objet d'élaborer et de formuler l'ensemble
de commandes, d'ordres ou d'instructions permettant de commander l'ordinateur et de l'orienter lors
du traitement.
1.2. L’information
L’information est un ensemble d’événements qui peuvent être communiqué à l’ordinateur. Elle peut
être : texte, son, image, vidéo, …
1.3. L’ordinateur
L’ordinateur est un appareil très puissant permettant de traiter les informations avec une très grande
vitesse, un degré de précision élevé et a la faculté de stocker toutes ces informations. L’ordinateur peut
recevoir des données en entrée, puis effectuer des opérations sur ces données en fonction d’un
programme, et enfin fournir des résultats en sortie.
L’ordinateur est composé de deux parties : la partie matérielle et la partie logicielle. La combinaison de
ces deux parties forme ce qu’on appelle : système informatique.
1.3.1. Partie matérielle (Hardware)
C’est la partie physique et palpable du système informatique. Elle est divisée en :
L’unité centrale
Les périphériques
a. L’unité centrale (UC)
C’est l’élément fonctionnel central de tout ordinateur et c’est là où s’effectue l’essentiel du traitement
de l’information. A l’intérieur on trouve comme composant principal ce qu’on appelle la carte mère.
Sur la carte mère on trouve toutes l’électroniques de l’ordinateur, comme composants principales on
trouve le microprocesseur (CPU) et la mémoire interne.
Le microprocesseur c’est le cerveau de l’ordinateur c-à-d c’est le responsable de toute opération
effectuée à l’intérieur de l’ordinateur (exp. imprimer une page, dessiner un tableau, écouter une
chanson, faire un calcul, envoyer un mail, etc.). Classiquement, le processeur est composé de trois
parties :
L'unité logique, dont la mission est d'assurer les opérations de type logique (supérieur,
inférieur, égal, intersection (ET), union (OU)... ;
L'unité arithmétique, capable de réaliser les opérations mathématiques ;
L'unité de commande et de contrôle, permettant de contrôler le fonctionnement de
l'ordinateur.
2
[Link]
Chapitre 1 Introduction
[Link]
Chapitre 1 Introduction
Nous verrons ces notions en détaille dans les chapitres qui suivent.
[Link]
Chapitre 2 Algorithme Séquentiel Simple
Dans ce chapitre, nous présentons des notions de base sur l’algorithmique, c-à-d comment écrire un
algorithme qui résout un problème donné tout, à savoir : utiliser les actions de base (affectation,
lecture, écriture), définir les notions de variable et constante, définir le types d’une variable et déclarer
une variable, …
__________________________________________________________________________________
1. Notion d’algorithme
Un programme informatique permet à l’ordinateur de résoudre un problème, mais avant de
communiquer à l’ordinateur comment résoudre ce problème, il faut en premier lieu pouvoir le
résoudre nous même faire un algorithme.
1.1. L'algorithmique désigne la discipline qui étudie les algorithmes et leurs applications en
informatique
1.2. Un algorithme est une méthode permettant de résoudre un problème donné en un temps fini;
le mot algorithme vient du nom du célèbre mathématicien arabe Al Khawarizmi (Abu Ja'far Mohammed
Ben Mussa Al-Khwarismi)
[Link]
Chapitre 2 Algorithme Séquentiel Simple
Le pseudo-code : représentation textuelle avec une série de conventions ressemblant à un langage de
programmation (il s’agit d’un langage informel proche du langage naturel et indépendant de tout
langage de programmation).
Il est plus pratique pour écrire un algorithme
Sa représentation est largement utilisée
1.6. Etapes de résolution d'un problème (Algorithme)
1. Comprendre l'énoncé du problème
2. Décomposer le problème en sous-problèmes plus simple à résoudre
3. Associer à chaque sous problème, une spécification :
Les données nécessaires
Les données résultantes
1. La démarche à suivre pour arriver au résultat en partant d'un ensemble de données.
2. Elaboration d'un algorithme
1.7. Réalisation d’un programme
La résolution d’un problème donné passe par une succession d’étapes à savoir :
Problème Enoncé explicite Algorithme Programme
Durant l'écriture d'un programme, on peut être confronté à 2 types d'erreur :
Les erreurs syntaxiques : elles se remarquent à la compilation et sont le résultat d'une mauvaise
écriture dans le langage de programmation.
Les erreurs sémantiques : elles se remarquent à l'exécution et sont le résultat d'une mauvaise
analyse. Ces erreurs sont beaucoup plus graves car elles peuvent se déclencher en cours
d'exploitation du programme.
1.8. Langages de programmation (langages informatiques)
Un langage de programmation est un code de communication, permettant à un être humain de
dialoguer avec une machine en lui soumettant des instructions et en analysant les données matérielles
fournies par le système. Le langage de programmation est l’intermédiaire entre le programmeur et la
machine. Il permet d’écrire des programmes (suite consécutive d’instructions) destinés à effectuer une
tache donnée.
On distingue deux types de langages :
Langages procéduraux : Fortran, Cobol, Pascal, C, …
Langages orientés objets : C++, Java, C#,…
Le choix d'un langage de programmation n'est pas facile, chacun a ses spécificités et correspond mieux
à certains types d'utilisations.
[Link]
Chapitre 2 Algorithme Séquentiel Simple
1.9. Bases d’un langage algorithmique
1.9.1. Structure de Base
En pseudo-code la structure générale d’un algorithme est la suivante :
Algorithme nom_de_l'algorithme
CONST {Définition des constantes}
TYPE {Définition de types} ils sont facultatifs (s’il n’y a pas de var ou const ou
VAR {Déclaration de variables} type on ne les écrit pas)
DEBUT
{Suite d'instructions}
FIN.
Partie en-tête : c’est la première ligne de l’algorithme, elle commence par le mot algorithme suit
d’un espace puit le nom de l’algorithme.
Partie déclarations : dans cette partie, toutes objets utilisés dans la résolution du problème doivent
êtres déclarés.
Partie traitement : cette partie commence par le mot Début et se termine par le mot Fin, elle
contient les actions utilisées dans la résolution du problème.
1.9.2. Instructions de base
Un algorithme est formé de quatre types d’instructions considérées comme des petites briques de
base :
1. L’affectation de variables
2. La lecture et/ou l’écriture
3. Les tests
4. Les boucles
Avant de décrire ces instructions, nous présentons d’abord la notion de variable et constante.
1.9.3. Constantes et variables
On sépare les objets en deux classes : les constantes et les variables.
[Link]. Notion de variable
Les données manipulées dans un algorithme sont appelées des variables. Une variable sert à stocker la
valeur d’une donnée dans un langage de programmation. Elle désigne un emplacement mémoire dont
le contenu peut changer au cours d’un programme (d’où le nom de variable).
Chaque emplacement mémoire a un numéro qui permet d'y faire référence de façon unique : c'est
l'adresse mémoire de cette cellule.
Règle : La variable doit être déclarée avant d’être utilisée, elle doit être caractérisée par :
Un nom (Identificateur)
Un type qui indique l’ensemble des valeurs que peut prendre la variable (entier, réel, booléen,
caractère, chaîne de caractères, …)
Une valeur
Identificateurs : règles
Le choix du nom d’une variable est soumis à quelques règles qui varient selon le langage, mais en
général :
Un nom doit commencer par une lettre alphabétique. Exemple : E1 (1E n’est pas valide)
[Link]
Chapitre 2 Algorithme Séquentiel Simple
Doit être constitué uniquement de lettres, de chiffres et du soulignement (« _ ») (Éviter les
caractères de ponctuation et les espaces). Exemples : SMI2008, SMI_2008. (SMP 2008, SMP-
2008, SMP;2008 : sont non valides)
Doit être différent des mots réservés du langage (par exemple en C: int, float, double, switch,
case, for, main, return, …)
La longueur du nom doit être inférieure à la taille maximale spécifiée par le langage utilisé (en c,
le nom doit faire au plus 32 caractères).
En c, Les majuscules sont distinguées des minuscules : a et A sont deux noms différents.
Conseil : pour la lisibilité du code choisir des noms significatifs qui décrivent les données manipulées.
Exemples : NoteEtudiant, Prix_TTC, Prix_HT
Remarque : en pseudo-code algorithmique, on va respecter les règles citées, même si on est libre
dans la syntaxe
Types des variables
Le type d’une variable détermine l’ensemble des valeurs qu’elle peut prendre. Les types offerts par la
plupart des langages sont :
Type numérique (entier ou réel)
Byte (codé sur 1octet): de [-27,27[ ou [0, 28[
Entier court (codé sur 2 octets) : [-215,215[
Entier long (codé sur 4 octets): [-231,231[
Réel simple précision (codé sur 4 octets) : précision d’ordre 10-7
Réel double précision (codé sur 8 octets) : précision d’ordre 10-14
Type logique ou booléen : deux valeurs VRAI ou FAUX
Type caractère : lettres majuscules, minuscules, chiffres, symboles, ... . Exemples : ’A’, ’b’, ’1’, ’?’, …
Type chaîne de caractère : toute suite de caractères. Exemples : " " , " Nom, Prénom", "code
postale: 1000", …
A) Entier : Pour représenter les nombres entiers, les opérations utilisables sur les entiers sont :
Toutes les opérations élémentaires de bases sont permises : + , - , * , /
Les opérateurs de comparaison classiques : <, >, =, ...
La division / est la division euclidienne (ou entière). Ex : 11 / 4 = 2 et non pas 2.75 !)
Il existe l’opérateur modulo %, qui donne le reste de la division euclidienne. Ex : 11%4 = 3
B) Réel : Pour représenter les nombres réels, les opérations utilisables sur les réels sont :
Les opérations arithmétiques classiques : + (addition), - (soustraction), * (produit), / (division)
Les opérateurs de comparaison classiques : <, >, =, ...
La division / donne un résultat décimal
L’opérateur modulo % n’existe pas
C) Booléen : Une variable de type logique (booléen) peut prendre deux valeurs : VRAI ou FAUX. Les
opérations principales les plus utilisées sont :
• Les opérateurs logiques : NON, ET, OU
Tables de vérité :
A B A ET B A OU B A NON A
FAUX FAUX FAUX FAUX
FAUX VRAI
FAUX VRAI FAUX VRAI
VRAI FAUX
VRAI FAUX FAUX VRAI
VRAI VRAI VRAI VRAI
[Link]
Chapitre 2 Algorithme Séquentiel Simple
• Opérateurs de comparaison : =, ≤, ≥, ≠
D) Caractère
Il s'agit du domaine constitué des caractères alphabétiques et numériques. Une variable de ce type ne
peut contenir qu'un seul et unique caractère. Les opérations élémentaires réalisables sont les
comparaisons : <, >, =, ...
E) Chaine de caractère
Une chaine de caractère est un objet qui peut contenir plusieurs caractères de manière ordonnée.
Déclarer une variable revient à lui réserver un emplacement mémoire. On ne connait pas sa valeur
initiale !
[Link]. Notion de constante
Une constante est une variable dont la valeur ne change pas au cours de l'exécution du programme,
elle peut être un nombre, un caractère, ou une chaine de caractères. En pseudo-code,
Constante identificateur=valeur (par convention, les noms de constantes sont en majuscules)
Exemple : pour calculer la surface des cercles, la valeur de pi est une constante mais le rayon est une
variable.
Constante PI=3.14, MAXI=32
Une constante doit toujours recevoir une valeur dès sa déclaration.
En C :
1. Les constantes littérale : Exp. Int a=10 ; float tax_rate = 0.28;
2. Les constantes symboliques
2.1. #define PI 3.14159 (#define peut se trouver n’importe où dans le code source, mais son effet est limité à la
partie de code qui la suit. En général, les programmeurs groupent tous les #define ensemble, au début du
fichier, avant la fonction main() ).
2.2. const float pi = 3.14159;
[Link]
Chapitre 2 Algorithme Séquentiel Simple
1.9.4. Opérations de base
Dans ce qui suit nous décrivons la liste des opérations de base pouvant composer un algorithme. Elles
sont décrites en pseudocode (pseudolangage).
[Link]. Affectation
L’affectation consiste à attribuer une valeur à une variable (c’est-à-dire remplir ou modifier le contenu
d'une zone mémoire). En pseudo-code, l'affectation est notée par le signe ←
Var← e : a ribue la valeur de e à la variable Var
e peut être une valeur, une autre variable ou une expression
Var et e doivent être de même type ou de types compatibles
L’affectation ne modifie que ce qui est à gauche de la flèche
Exemples 1 : i ←1, j ←i , k ←i+j , x ←10.3 , OK ←FAUX , ch1 ←"SMI" , ch2 ←ch1 , x ←4 , x ←j
(avec i, j, k : entier; x :réel; ok :booléen; ch1,ch2 :chaine de caractères)
Exemples non valides : i ←10.3 , OK ←"SMI" , j ←x
Exemples 2
a ←10 a reçoit la constante 10
a ← (a*b)+c a reçoit le résultat de (a*b)+c
d ←'m' d reçoit la lettre m
Remarques
Le langage de programmation C utilisent le signe égal = pour l’affectation ←.
Lors d’une affectation, l’expression de droite est évaluée et la valeur trouvée est affectée à la
variable de gauche. Ainsi, A←B est différente de B←A
L’affectation est différente d'une équation mathématique :
Les opérations x ← x+1 et x ← x-1 ont un sens en programmation et se nomment respectivement
incrémentation et décrémentation.
A+1 ← 3 n'est pas possible en langages de programma on et n'est pas équivalente à A ← 2
Certains langages donnent des valeurs par défaut aux variables déclarées. Pour éviter tout problème
il est préférable d'initialiser les variables déclarées.
Exemple en C
int n;
int p;
n = 10;
p = 2*n-3;
Quelques opérateurs bien pratiques
i + + : opérateur permettant d’ajouter une unité à la variable i (de type int ou char)
i - - : idem mais pour retirer une unité
x* = y, x/ = y, x- = y, x+ = y : opérateurs permettant de multiplier (diviser, soustraire ou ajouter) x par y (pas
de restriction de type)
[Link]. La lecture
Lire(variable)
Cette opération permet d'attribuer à une variable une valeur introduite au moyen d'un organe d'entrée
(généralement le clavier).
Exemples de lecture
Lire(a) On demande à l'utilisateur d'introduire une valeur pour a
Lire(a,b,c) On demande à l'utilisateur d'introduire 3 valeurs pour a, b et c respectivement
10
[Link]
Chapitre 2 Algorithme Séquentiel Simple
En C :
Saisie avec scanf.
Permet de lire sur l’entrée standard (le clavier)
scanf(‘‘<code format>‘‘, &<variable>); avec <code format> = %d, %f ou %c pour lire un entier, un flottant
ou un caractère.
Exemples
int n; scanf(‘‘%d‘‘, &n);
float x; scanf(‘‘%f‘‘, &x);
char a ; scanf((‘‘%c‘‘, &a);
Remarque : Le programme s'arrête lorsqu'il rencontre une instruction Lire et ne se poursuit qu'après
la saisie de l’entrée attendue par le clavier et de la touche Entrée (cette touche signale la fin de l’entrée)
Conseil : Avant de lire une variable, il est fortement conseillé d’écrire des messages à l’écran, afin de
prévenir l’utilisateur de ce qu’il doit frapper
[Link]. L’écriture
Ecrire(expression)
Elle communique une valeur donnée ou un résultat d'une expression à l'organe de sortie.
Exemples d'écriture
Ecrire('bonjour') Affiche le message bonjour (constante)
Ecrire(12) Affiche la valeur 12
Ecrire(a,b,c) Affiche les valeurs de a, b et c
Ecrire(a+b) Affiche la valeur de a+b
Ecrire(a, b+2, "Message") Affiche la valeur de a, puis la valeur de l’expression b+2 et enfin le mot
’’message’’ .
Exemples en C
printf(‘‘hello nn ‘‘);
int x=10; printf(‘‘valeur de x = %dnn ‘‘,x);
int x=10; float y = 3.4; printf(‘‘valeur de x = %d et de y+x = %fnn ‘‘,x,y+x);
Principaux codes de format
%d pour le type int
%c pour le type char
%f pour le type float
Caractères de mise en forme
/n : retour à la ligne
/r : retour en début de ligne courante
/t : tabulation
11
[Link]
Chapitre 2 Algorithme Séquentiel Simple
Notes :
Les instructions d'un algorithme sont habituellement exécutées une à la suite de l'autre, en
séquence (de haut en bas et de gauche à droite).
L'ordre d’exécution est important
On ne peut pas changer cette séquence de façon arbitraire
1.9.6. Expressions et opérateurs
Une expression peut être une valeur, une variable ou une opération constituée de variables reliées par
des opérateurs
Exemples : 1, b, a*2, a+ 3*b-c, …
L'évaluation de l'expression fournit une valeur unique qui est le résultat de l'opération
Les opérateurs dépendent du type de l'opération, ils peuvent être :
Des opérateurs arithmétiques : +, -, *, /, % (modulo), ^(puissance)
Des opérateurs logiques : NON(!), OU(| |), ET (&&)
Des opérateurs relationnels : =, <, >, <=, >=
Des opérateurs sur les chaînes : & (concaténation)
Une expression est évaluée de gauche à droite mais en tenant compte des priorités des opérateurs.
Remarque :
On ne peut pas additionner un entier et un caractère
Toutefois dans certains langages on peut utiliser un opérateur avec deux opérandes de types
différents, c’est par exemple le cas avec les types arithmétiques (4 + 5.5)
La signification d’un opérateur peut changer en fonction du type des opérandes, par exemple
o L’opérateur + avec des entiers effectue l’addition, 3+6 vaut 9
o Avec des chaînes de caractères il effectue la concaténation, "bonjour" + " tout le monde" vaut
"bonjour tout le monde"
[Link]
Chapitre 2 Algorithme Séquentiel Simple
Exercice 1 :
Quel est le type de chaque variable :
A=1, B=vrai, test= 12.23, specialite=’m’,
Exercice 2 :
Soient A, B deux variables de types entiers, C, D deux variables de type réel, E, F deux variables de type
booléen.
Quel est le type des variables suivants : A1, B1, C1, A2, B2, C2, D2, A3, B3, C3, D3
A1 A+B ; B1A*B; C1A/B;
A2C+D; B2C*D; C2C/D; D2A*C;
A3E ou F; B3E et F; C3(A>B) ; D3Faux ;
Exercice 3 :
Quel sont les identificateurs valides et ceux qui ne sont pas valides :
A, cA, 12, 1A, A1, A12m, bougie, test?, SI .
Exercice 4 :
Donnez les valeurs des variables A, B et C après exécution des instructions suivantes ?
Variables A, B, C : Entier
Début
A←7
B ← 17
A←B
B ← A+5
C←A+B
C←B–A
Fin
Exercice 5 :
Donnez les valeurs des variables A et B après exécution des instructions suivantes ?
Variables A, B : Entier
Début
A←6
B←2
A←B
B←A
Fin
Les deux dernières instructions permettent-elles d’échanger les valeurs de A et B ?
Exercice 6 :
Écrire un algorithme permettant d’échanger les valeurs de deux variables A et B ?
Exercice 7 :
Écrire un algorithme qui permet d’effectuer la saisie d’un nom, d’un prénom et affiche ensuite le nom
complet.
Exercice 8 :
Écrire un algorithme qui demande un nombre entier à l'utilisateur, puis qui calcule et affiche le carré
de ce nombre.
Exercice 9
On dispose de trois variables A, B et C. Ecrivez un algorithme transférant à B la valeur de A, à C la valeur
de B et à A la valeur de C (quels que soient les contenus préalables de ces variables).
Exercice 10 :
Ecrire un programme qui permet d’introduire un nombre et d’afficher son double ainsi que sa moitié.
13
[Link]
Chapitre 3 Les structures conditionnelles (en langage algorithmique et en C)
Ce chapitre a pour but de présenter l’action conditionnelle dans ces trois formes : l’action
conditionnelle simple (réduite et alternée), l’action conditionnelle généralisée (imbriquée) et l’action
conditionnelle à choix, ainsi une traduction de ces formes en langage C. le chapitre est terminé par une
suite d’exercices à résoudre pour vous entraîner à domicile.
Souvent les problèmes nécessitent l'étude de plusieurs situations qui ne peuvent pas être traitées par
les séquences d'actions simples. Par exemple pour résoudre une équation de second degré, après le
calcul du déterminant on a besoin de tester ce dernier s’il est positif, négatif ou nul. Les instructions
lire(), ecrire() et affectation ne peuvent indiquer ce signe ; autres instructions sont alors s’imposent,
ce sont les structures conditionnelles qui le permettent.
On appelle structure conditionnelle les instructions qui permettent de tester si une condition (voir
page 16) est vraie ou non.
1. Définition
La structure de contrôle conditionnelle permet à un programme de modifier son traitement en fonction
d'une condition. Il existe trois formes d'instructions conditionnelles :
Forme simple
Forme généralisée (imbriquée)
Forme à choix
1.1. La structure de contrôle conditionnelle simple
Elle est distinguée par deux formes : réduite et alternée
a) La forme réduite
1 Définition : Une structure de contrôle conditionnelle est dite à forme simple réduite lorsque le
traitement dépend d'une condition. Si la condition est évaluée à « vrai », le traitement est exécuté.
2 Vocabulaire et syntaxe :
Algorithme Code C
Si (condition) Alors If (condition)
Instruction 1 Instruction 1 ;
Fin Si
Remarque : Instruction peut être n’importe quelle action utilisée dans l’algorithme (←, lire, écrire, si,
sinon, pour, tant que, répéter)
b) La forme alternative :
14
[Link]
Chapitre 3 Les structures conditionnelles (en langage algorithmique et en C)
1 Définition : Une structure de contrôle conditionnelle est dite à forme alternative lorsque le
traitement dépend d'une condition à deux états : Si la condition est évaluée à « vrai », le premier
traitement est exécuté ; Si la condition est évaluée à « faux », le second traitement est exécuté.
2 Vocabulaire et syntaxe :
Algorithme Code C
Si (condition) Alors If (condition)
Instruction 1 Instruction 1 ;
Sinon else
Instruction 2 Instruction 2 ;
Fin Si
[Link]
Chapitre 3 Les structures conditionnelles (en langage algorithmique et en C)
Remarques :
Il est préférable de mettre les événements les plus probables en premier lieu.
Chaque traitement peut comporter une ou plusieurs instructions.
1.3. La structure de contrôle conditionnelle à choix
Une structure de contrôle conditionnelle est dite à choix lorsque le traitement dépend de la valeur que
prendra un sélecteur. Ce sélecteur est de type entier, caractère ou booléen.
1 Vocabulaire et syntaxe :
Algorithme Code C
Selon sélecteur Faire switch (selecteur)
Valeur 1 : Action 1 {
Valeur 2 : Action 2-1 case Valeur 1 : Action 1 ; break ;
Action 2-2 case Valeur 2 : Action 2-1 ;
Action 2-n Action 2-2 ;
Valeur3,valeur 4: Action4 Action 2-n ; break ;
Valeur 5 .. Valeur 7 :Action 6 case Valeur3 :
….. case valeur 4 : Action4 ; break ;
Valeur N : Action N case Valeur5 :
Sinon case valeur 6
Action R case valeur 7 : Action 5 ; break ;
FinSelon ……..
case Valeur N : Action N ; break ;
default :
Action R ;
}
2. La Condition
La condition est une expression booléenne simple ou une suite composée d’expressions booléennes.
Une condition simple est composé d’un seul opérateur de comparaison (=, ≠, <, ≤, >,≥).
Une condition composée est une condition formée de plusieurs conditions simples reliées par des
opérateurs logiques : ET, OU, OU exclusif (XOR) et NON.
Exemples :
x compris entre 2 et 6 : (x >= 2) ET (x < =6)
n divisible par 3 ou par 2 : (n%3=0) OU (n%2=0)
x est vrai et y est faux : (x=vrai) et (non y)
Deux valeurs et deux seulement sont identiques parmi a, b et c : (a=b) XOR (a=c) XOR (b=c)
L'évaluation d'une condition composée se fait selon des règles présentées généralement dans ce qu'on
appelle tables de vérité.
Exercices pour résoudre à domicile
Exercice 1
Ecrire les algorithmes qui permettent de :
1- Résoudre une équation du premier degré : ax+b=0, où a, b sont des réels donnés par l’utilisateur.
2- Résoudre une équation du deuxième degré : ax²+bx+c=0, où a, b et c des réels données par
l’utilisateur.
16
[Link]
Chapitre 3 Les structures conditionnelles (en langage algorithmique et en C)
Exercice 2
1) Ecrivez l’algorithme qui lit une valeur d’angle en degrés, la convertit en radian et affiche le résultat.
2) Ecrivez également l’algorithme qui lit une valeur d’angle en radian, la convertit en degrés et affiche
le résultat.
Exercice 3
Ecrivez un algorithme qui permet de lire un certain temps en seconde puis le transforme en heures,
minutes et secondes.
Exercice 4
Ecrire un algorithme qui calcule la moyenne d’un étudiant pour sept notes avec les coefficients 2,1,4,3,
1,4,2. Puis afficher selon cette moyenne s’il est admis ou ajourné.
Exercice 5
Algorithme exo5_1 Algorithme exo5_2 Algorithme exo5_3
Variable Variable Variable
a,b,c : entier a,b,c : entier a,b,c : entier
Début Début Début
Lire(a,b) Lire(a,b) Lire(a,b)
c a+b C a+b c a+b
Si (c) < 0 alors Si c < 0 alors Si c < 0 alors
c -(a+b) Ecrire( -c ) Ecrire( -c )
Fsi Fsi Sinon
Ecrire(c) Si c ≥ 0 alors Ecrire( c )
Fin Ecrire( c ) Fsi
Fsi Fin
Fin
1. Exécuter (donner la trace d’exécution) les algorithmes exo5_1 , exo5_2 et exo5_3 pour :
- a= -10 , b = 5
- a = 10, b = -29
- a = 5, b = -2
- a=8,b=6
- a = -4 , b = 9
2. Que faites ces algorithmes ?
3. Quelle est la meilleure solution (le meilleur algorithme) ?
Exercice 6
Les habitants d’une ville paient l’impôt selon les règles suivantes :
-les hommes de plus de 20 ans paient l’impôt
-les femmes paient l’impôt si elles ont entre 18 et 35 ans
-les autres ne paient pas d’impôt
Ecrire un algorithme qui demande l’âge et le sexe (‘M’ ou ‘F’) d’un habitant et affiche si celui -ci est
imposable . Tester l’algorithme avec une femme de 20 ans, un homme de 18 ans et un homme de 35
ans.
17
[Link]
Chapitre 4 Les boucles (en langage algorithmique et en C)
1. La boucle Pour
L’instruction de boucle Pour permet de répéter l’exécution d’un bloc d’instructions. Elle utilise un
compteur d’itération, une valeur initiale et une valeur finale du compteur. Le compteur est
incrémenté automatiquement de 1. Elle se caractérisent par le fait que l’on connait à l’avance le
nombre d’itérations que l’on va devoir effectuer.
La syntaxe de l’instruction de la boucle Pour est :
Algorithme Code C
1) 1)
Pour cpt de vi à vf Faire For (cpt=vi ; vi<=vf ; vpt++)
<instruction_1> <instruction_1> ;
Fin Pour
2) 2)
Pour cpt de vi à vf Faire For (cpt=vi ; vi<=vf ; vi++)
<instruction_1> { <instruction_1> ;
<instruction_2> <instruction_2> ;
…….. …….. ;
<instruction_n> <instruction_n> ;
Fin Pour }
Rq : cpt : le compteur, vi : Valeur initiale, vf : Valeur finale
Dans la boucle Pour, à chaque instant, on connait le nombre d’itérations déjà effectuées et aussi le
nombre d’itérations restantes.
18
[Link]
Chapitre 4 Les boucles (en langage algorithmique et en C)
Algorithme Code C
1) 1)
Tantque <condition> Faire while <condition>
<instruction_1> <instruction_1> ;
Fin Tantque
2) 2)
Tantque <condition> Faire while <condition>
<instruction_1> { <instruction_1> ;
<instruction_2> <instruction_2> ;
…….. …….. ;
<instruction_n> <instruction_n> ;
Fin Tantque }
Rq : le nombre de répétition des instructions dans la boucle tantque est [0..k]
3. La boucle Répéter
L’instruction de boucle Répéter permet de répéter l’exécution d’un bloc d’instructions. À chaque
itération, une expression booléenne (condition) est réévaluée :
Si l’expression donne TRUE : donc on arrête la boucle et on exécuter l’instruction qui vient après
Répéter ;
Si l’expression donne FALSE : on continue la boucle en exécutant l’itération suivante
La syntaxe de l’instruction de la boucle Répéter est :
Algorithme Code C
1) 1)
Répéter Do
<instruction_1> <instruction_1> ;
Jusqu’à <condition> while <condition>
2) 2)
répéter Do
<instruction_1> { <instruction_1> ;
<instruction_2> <instruction_2> ;
…….. …….. ;
<instruction_n> <instruction_n> ;
Jusqu’à <condition> }
while <condition> ;
19
[Link]
Chapitre 4 Les boucles (en langage algorithmique et en C)
Rqs :
4.1. continue
Cette instruction permet le passage à l’itération suivante dans une boucle en sautant à la fin du bloc.
4.2. break
Il permet de sortir d’un bloc associé à une instructions répétitive ou alternative contrôlée par les
instructions : if, for, while ou do while. Il ne permet de sortir que d’un niveau d’imbrication.
4.3. return
Elle provoque la terminaison de l’exécution de la fonction dans laquelle elle se trouve et le retour à la
fonction appelante
4.4. goto
Permet d’aller n’importe où à l’intérieur d’une fonction. Il est associé à une étiquette appelé label, un
label est une chaine de caractères suivie par du double points « : »
20
[Link]
Chapitre 4 Les boucles (en langage algorithmique et en C)
La commande de branchement goto et l’instruction repérer par étiquette doivent se trouver dans la
même fonction.
Exemple :
Algorithme Code C
Algorithme exemple #include<stdio.h>
Variable x,i : entier main()
Début {
x0, i1 int i,x;
loop : xx+i i=1; x=0;
ii+1 loop : x=x+i;i++;
si (i<100) alors if (i<100)
aller à loop goto loop;
fsi printf("%f",x);
ecrire(x) }
Fin
Exercice 1
Ecrire un algorithme qui demande un nombre compris entre 10 et 20, jusqu’à ce que la réponse
convienne. En cas de réponse supérieure à 20, on fera apparaître un message : « Plus petit ! », et
inversement, « Plus grand ! » si le nombre est inférieur à 10.
Exercice 2
Ecrire un algorithme qui demande un nombre de départ, et qui ensuite affiche les dix nombres suivants.
Par exemple, si l'utilisateur entre le nombre 17, le programme affichera les nombres de 18 à 27.
Exercice 3
Ecrire un algorithme qui demande un nombre de départ, et qui ensuite écrit la table de multiplication
de ce nombre, présentée comme suit (cas où l'utilisateur entre le nombre 7) :
Table de 7 :
7x1=7
7 x 2 = 14
7 x 3 = 21
…
7 x 10 = 70
Exercice 4
Ecrire un algorithme qui demande un nombre de départ, et qui calcule la somme des entiers jusqu’à
ce nombre. Par exemple, si l’on entre 5, le programme doit calculer : 1 + 2 + 3 + 4 + 5 = 15 NB : on
souhaite afficher uniquement le résultat, pas la décomposition du calcul.
Exercice 5
Ecrire un algorithme qui demande successivement 20 nombres à l’utilisateur, et qui lui dise ensuite
quel était le plus grand parmi ces 20 nombres :
Entrez le nombre numéro 1 : 12
Entrez le nombre numéro 2 : 14
21
[Link]
Chapitre 4 Les boucles (en langage algorithmique et en C)
...
Entrez le nombre numéro 20 : 6
Le plus grand de ces nombres est : 14
Exercice 6
Ecrire un algorithme qui demande successivement 10 nombres à l'utilisateur, et qui affiche à la fin le
plus grand de ces 10 nombres et son rang dans la liste saisie !
Exemple :
Entrez le nombre numéro 1 : 13 Le plus grand de ces nombres est : 17
Entrez le nombre numéro 2 : 17 C'était le 2ème nombre saisi
…..
Entrez le nombre numéro 10 : 5
Exercice 7
Ecrire l’algorithme qui vérifie si un nombre N positif est premier ou non. Un nombre est premier s’il
n’est divisible que par 1 et par lui-même.
RQ : afficher un message d’erreur si N<=0
Exercice 8
Ecrire un algorithme qui Lit d’abord une valeur entière Ensuite il va lire 20 nombres entiers quelconques
Ensuite il va déterminer combien de fois la première valeur a été saisie (sans compter la première
saisie).
Exercice 9
Ecrire un algorithme mettant en œuvre le jeu suivant entre deux joueurs : Le premier utilisateur saisi
un entier que le second doit deviner. Pour cela, il a le droit à autant de tentatives qu'il souhaite. A
chaque échec, le programme lui indique si l'entier est plus grand ou plus petit que sa proposition.
Un score est affiché lorsque l'entier est trouvé.
Exercice 10
Ecrire un algorithme qui permet d’afficher tous les couples ( x,y) , ou x est un entier compris entre 1 et
p et y est un entier compris entre 1 et q .
p et q sont des entiers strictement positifs lus au clavier.
Exemple : p = 3 q= 4
Les couples affichés sont :
(1,1),(1,2),(1,3), ( 1,4 )
(2,1),(2,2),(2,3),(2,4)
(3,1) , (3,2 ) , (3,3) , (3,4 )
22
[Link]
Chapitre 5 Les tableaux et les chaine de caractères
23
[Link]
Chapitre 5 Les tableaux et les chaine de caractères
T[3]
T
10,00 15,50 20,00 09,00 11,75 20,00 19,50 13,00 15,00 12,50
Algorithme Code C
« Nom » : tableau de « taille » de « type » « type » « nom[taille]»;
Exp : Exp :
T : tableau [1. .100] d’ entiers int T[100] ;
Remarques :
Dans la partie Constante, on peut définir la taille du tableau. Ensuite, on peut déclarer le
nombre d'éléments à saisir dans le tableau.
Le nombre d'éléments à saisir ne doit pas dépasser la taille du tableau pour ne pas déborder sa
capacité.
On appelle dimension d'un vecteur le nombre d'éléments qui constituent ce vecteur.
1.1.2. Opérations sur les tableaux
Comment accède-t-on à un élément quelconque du tableau ? c-à-d, comment peut-on exploiter les
divers éléments d’un tableau en tant que variable ? comment y lit-on des valeurs et comment les
affiche-t-on ? …
a) Décrire un élément quelconque du tableau : nom du tableau[indice]
Algorithme Code C
Même chose dans l’algorithme, c-à-d :
Exp : T[2] 5, T[3]=32, T[5]=’a’, T[i] T[i]+3, … nom du tableau[indice]
Exp : T[2]=5, T[3]==32, T[5]==’a’, T[i]=T[i]+3, …
24
[Link]
Chapitre 5 Les tableaux et les chaine de caractères
b) Lecture d’un tableau (vecteur) : La lecture d'un tableau consiste à saisir les données des éléments
du tableau. (Remplir des cases successives du tableau). On doit utiliser une boucle qui permet de
saisir à chaque entrée dans la boucle la iième case.
Algorithme Code C
Pour i de 1 à 10 faire for (i=0 ; i<=9 ; i++)
Lire(T[i]) scanf(‘’%d’’, &T[i]) ;
Fin pour
Algorithme Code C
Pour i de 1 à 10 faire for (i=0 ;i<=9 ;i++)
Ecrire(T[i]) printf(‘’%d\t’’, T[i]) ;
Fin pour
Remarques :
En Algorithmique l’indice est le numéro d’une case dans le tableau, il commence par 1.
En langage C Les indices du tableau commencent par 0 (dans l’exemple précédent : le 1ier
élément est T[0], 2ème élément est T[1], ….., le dernier (10ème) élément est T[9]).
Pour mettre toutes les cases à 0 on fait : for (i=0 ; i<10 ; i++) T[i]=0 ;
Exercices à domicile
Exercice 1
Ecrire un programme qui permet de remplir un tableau de N éléments, et d’afficher son contenu.
Exercice 2
Ecrire un programme qui permet de rechercher un élément donné X dans un tableau.
Exercice 3
Ecrire un programme qui permet de rechercher le minimum et le maximum dans un tableau de N
éléments
Exercice 4
Ecrire un programme qui permet de calculer la moyenne des éléments d’un tableau de N entiers.
Exercice 5 (Tri à Bulles)
Ecrire un programme qui permet de trier les éléments d’un tableau par la méthode de tri à bulles.
La méthode de tri à bulles consiste à balayer tout le tableau, en comparant les éléments adjacents et
les échangeant s'ils ne sont pas dans le bon ordre. Un seul passage ne déplacera un élément donné
que d'une position, mais en répétant le processus jusqu'à ce plus aucun échange ne soit nécessaire, le
tableau sera trié.
Exercice 6 (Recherche dichotomique d’un élément dans un tableau)
Ecrire un programme qui permet de rechercher un élément donné par la méthode dichotomique
dans un tableau à une dimension trié.
Note : on suppose dans tous les exercices que la taille du tableau est 100.
25
[Link]