Vous êtes sur la page 1sur 33

Chapitre 1

IntroductIon à l’algorIthmIque
Sommaire
• Introduction
• Définitions
• Méthode Informatique de Résolution d’un problème
• Pseudo-langage algorithmique
– Les données
– Les entrées/sorties
– Les constantes et les variables
– Les instructions
– Les types d’opérateurs
– Les procédures et les fonctions
• Conclusion
Introduction

• Ce chapitre présente la démarche


algorithmique qui part de l’analyse d’un
problème jusqu’ à la détermination d’un
algorithme qui le résous de manière effective.
• Le mot algorithme tire son origine de
AL’KHAWARIZMI, nom d’un mathématicien
arabe né à Bagdad vers 780 et mort vers 850,
connu pour ses travaux sur l’algèbre et surtout
pour son traité sur la numération Hindou-
Arabe dont on ne connaît qu’une traduction
en Latin, incomplète et modifiée.
DÉFINITIONS
défInItIon d’un Programme Informatique

• Un programme informatique est une séquence


d’instructions qui :
– lisent;
– Manipulent
– Ecrivent des données
• dans le but d’exécuter une certaine tache.

• Des Exemples de taches pour lesquelles un programme


informatique peut être mis en place:
– Calculer la racine carré d’un nombre
– Trouver le nombre de mots « équation » dans un livre de
mathématique
– Jouer un fichier audio
défInItIon d’un algorIthme
• Un algorithme est une méthode pour résoudre un
problème. Il est couramment décrit sous forme de
séquence d’étapes.

• Exemple: Comment pouvons nous dire qu’un


nombre entier est premier?
– Lire le nombre (N).
– Diviser N par tout les nombres compris entre 2 et N-1
et calculer le reste de chaque division.
– Si tous les reste sont différents de zéro, le nombre est
premier. Dans le cas contraire, le nombre n’est pas
premier.
défInItIon d’un Langage de programmation

• Un langage de programmation est un langage utilisé pour


décrire les instructions compréhensible par un
ordinateur.
• Que trouve-t-on dans un langage de programmation?
– Données(nombres, chaines de caractères, structures, …)
– Instructions (arithmétique, séquence, répétition, …)

• Un langage de programmation impose une syntaxe


rigoureuse et une sémantique, car il doit être
compréhensible par un ordinateur!
• Le programme est la traduction d’un algorithme et des
structures de données dans un langage de
programmation qui impose une syntaxe rigoureuse.
archItecture schématIque d’un ordInateur

Programme • Conception du programme


(langage de • Langage: C
haut-niveau)

Compilateur

Programme
(langage
machine)
Chargeur

Memoire
Memoire
Instruction Périphérique de
Données
Périphérique d’entré sortie
(clavier, sourie, (écran, imprimante,
microphone, etc.) hauts parleurs,
etc.)
CPU

Central Processing Unit


Langage de Haut Niveau
• L’ordinateur comprend ne comprend que les instructions de très
bas niveau (langage machine).

• Les logiciel sont le plus souvent developpé dans des langages de


haut niveau qui permettent:
– Productivité élevée
– Meilleur lisibilité
– Simple à debugger

• Le compilateur permet de traduire automatiquement un langage


de haut niveau en langage machine.

• Il existe une multitude de langage de programmation de haut


niveau: C, C++, Java, Pascal, PHP, Modula, Lisp, Python, Excel,
Fortran, Cobol, APL, Basic, Tcl, Ruby, Smalltalk, Haskell, Perl, Prolog,

Exemple Assembleur et Langage machine
Address Label Instruction (AT&T syntax) Object code[33]
.begin
.org 2048
a_start .equ 3000
2048 ld length,%
2064 be done 00000010 10000000 00000000 00000110
2068 addcc %r1,-4,%r1 10000010 10000000 01111111 11111100
2072 addcc %r1,%r2,%r4 10001000 10000000 01000000 00000010
2076 ld %r4,%r5 11001010 00000001 00000000 00000000
2080 ba loop 00010000 10111111 11111111 11111011
2084 addcc %r3,%r5,%r3 10000110 10000000 11000000 00000101
2088 done: jmpl %r15+4,%r0 10000001 11000011 11100000 00000100
2092 length: 20 00000000 00000000 00000000 00010100
2096 address: a_start 00000000 00000000 00001011 10111000
.org a_start
3000 a:
(From http://en.wikipedia.org/wiki/Assembly_language)
Exemple Langage C

#include <stdio.h>

// Ce programme demande deux nombres et


// affiche la somme des deux nombres
void main() {
int x, y, s;
printf("saisir deux nombre");
scanf("%d%d" , &x , &y);
s=x+y;
printf("La somme est =", s);
}
MÉTHODE INFORMATIQUE DE
résolutIon d’un ProBlÈme
méthode InformatIque de résolutIon d’un ProBlÈme

• La résolution informatique d’un problème dans la


pratique ne comporte qu’une phase automatique qui
est l’exécution du programme.
• Cependant, le programme n’est pas un élément de
résolution en lui-même. Il n’est qu’un automate
matérialisant un schéma de résolution pour produire
les grandeurs cherchées quand on lui injecte les
grandeurs connues.
• Le travail de résolution du problème est donc
totalement à la charge d’un informaticien qui doit
transformer une méthode en un composant
opérationnel qui est le programme.
Cette résolution informatique comporte quatre
grandes phases :
• Première phase : Etude
• Deuxième phase: Réalisation du modèle
• Troisième phase : spécification
• Quatrième phase : Traduction
Première phase : Etude
• Cette phase, étape préliminaire dans la
réalisation de l’algorithme, doit permettre:
– tout d’abord d’identifier les données d’entrée de
l’algorithme,
– déterminer les données de sortie qui fournissent
le résultat ou la solution du problème.
– Ensuite il faudra identifier les relations entre ces
deux types de données ; ce qui détermine le
modèle.
Données
MODELE DE Données
en
RESOLUTION en sorties
entrées
Deuxième phase: Réalisation du modèle

• Le fait d’avoir un modèle n’implique pas forcément


qu’on dispose d’une méthode pour le réaliser. Le travail
de réalisation du modèle consiste à déterminer un
enchainement d’opérations produisant les grandeurs
cherchées à partir des grandeurs connues en accord
avec le modèle. Cet enchainement d’opérations
constitue le schéma de résolution.
• En l’absence du schéma de résolution pour un modèle
donné, on essaiera de simplifier ce dernier en le
remplaçant par un modèle approché pour lequel on
dispose d’une méthode de résolution.
Troisième phase : spécification
• Le schéma de résolution à quelques fois une
expression imprécise, ou d’un niveau sémantique
trop élevé par rapport aux opérations
informatiques.
• Il est donc nécessaire de l’exprimer d’une
manière précise et complète en terme
informatique.
• Cette phase de spécification produit les
algorithmes (qui sont la description des
traitements) et les descriptions de données.
Pseudo-langage
• L’écriture d’un algorithme doit être concise et sans
équivoque. Pour atteindre cet objectif, les algorithmes
sont écrits en pseudo-langage ou pseudo-code.
• Le pseudo-langage a pour but de transcrire fidèlement
le schéma de résolution du problème dans un langage
destiné à une machine abstraite constituée :
– D’une entrée,
– D’une sortie,
– D’une mémoire,
– D’un processeur capable d’exécuter les instructions du
pseudo-code,
– Eventuellement, d’autres composants plus spécifiques.
Format du Pseudo-langage
• Le pseudo-langage peut s’exprimer sous divers
formats :
Organigramme de programmation Lignes d’instructions
ou algorigramme ou pseudo-code
DEBUT
LIRE Brut, montant_remi
SI Brut>1000 ALORS
montant_remi=brut*0,05
SINON
Montant_remi=0
FINSI
ECRIRE montant_remi
FIN
Quatrième phase : Traduction
• Pour la mise en œuvre effective du processus
informatique de résolution sur une machine
particulière, on doit traduire les algorithmes
et les descriptions des données dans un
langage de programmation disponible sur
cette machine.
• Pour ce cours, nous utiliseront le langage C.
Résumé

Réalisation du
Traduction RESULTAT
modèle
• Problème • Schéma de • Programme
• Modèle résolution • Algorithme • Données

Etude Spécification Exécution


Exemple
Concevoir un programme qui:

• Lorsqu’on lui donne un entier naturel représentant une


certaine durée en secondes (N),

• Calcul trois nombres (h, m, s) qui représente la même


durée décomposé en heures (h), minutes (m) et
secondes (s)

• Exemple
– Soit N=3815,
– Résultat h=1, m=3, s=35
Spécification
• Précondition:
– Spécification des données avant l’exécution du
programme

• Post condition:
– Spécification des données après l’exécution du
programme

• Dans notre Exemple


– Précondition: ?
– Post condition: ?
• Dans notre Exemple
– Précondition: N≥0
– Post condition: 3600*h + 60*m + s = N
Spécification
• De plus, la spécifications permet de décrire les
données d’entrées et les données de sorties du
programme.

Entrée: le programme va lire un entier naturel représentant un


nombre de secondes.

Sortie: le programme va afficher la même durée décomposé en


heures, minutes et secondes.
Une mauvaise spécification
• Précondition: N ≥ 0

• Post condition: 3600*h + 60*m + s = N,

• Pourquoi?
Une mauvaise spécification
• La spécification décrit-elle réellement ce que le
programme est supposé calculer?

• Exemple
– Soit N = 3815
– La solution h=1, m=3, s=35 correspond à la
spécification (1*3600 + 3*60 + 35 = 3815)
– Mais les solutions h=0, m=30, s=2015 et
h=0, m=0 and s=3815 correspondent aussi à la
spécification.
Alors qu’est ce qui ne va pas?
Une bonne spécification
• Précondition: N ≥ 0

• Post condition: 3600*h + 60*m + s = N,


0 <= s < 60, 0 <= m < 60

• La solution h=1, m=3, s=35 correspond bien à la


spécification.

• Les solutions h=0, m=30, s=2015 et


h=0, m=0, s=3815 ne correspondent pas à la
spécification.
Algorithms
• Un algorithme:
– h = N / 3600 (division entière)
– m = (N mod 3600) / 60 (mod: reste)
– s = N mod 60

• Un Autre algorithme:
– s = N mod 60
– x = N / 60
– m = x mod 60
– h = x / 60

• Plusieurs algorithmes peuvent exister pour résoudre un


même problème.
• Donc choisir celui qui est le meilleur de tous.
• Mais, à la question quel le meilleur de tous? La réponse à
cette question n’est pas aussi simple.
Programme en C
#include <stdio.h>
/* ce programme attend un entier naturel représentant une certaine durée en
secondes (N),Calcul trois nombres (h, m, s) qui représente la même durée décomposé
en heures (h), minutes (m) et secondes (s)*/

void main() {
int N, h, m, s ;
printf(“> Programme Décomposer\n");
scanf("%d" , &N);
h = N / 3600;
m = (N % 3600) / 60;
s = N % 60;
printf(" %d heures %d minutes et %d seconds",h,m,s);
}
Exécution
> Programme Décomposer Temps
3815
1 heures, 3 minutes and 35 secondes

> Programme Décomposer Temps


60
0 heures, 1 minutes and 0 secondes

Vous aimerez peut-être aussi