Escolar Documentos
Profissional Documentos
Cultura Documentos
Introduction linformatique
!
!
!
2
Universit PARIS-SUD - Licence MPI - S1
Conception - Modlisation
!
!
Compilation Interprtation
!
langage d'algorithmes
Programme
!
Conception - Modlisation
!
Programmation
!
Analyse du problme
Solution algorithmique
Programmation
Excution
Mise au point
!
!
pour
pour
corriger
optimiser
3
4
Universit PARIS-SUD - Licence MPI - S1
Conception - Modlisation
Programmation
!
!
!
Conception - Modlisation
Programmation
Excution
!
!
!
!
Langage assembleur
dpendant de la machine, du processeur
! Exemples : Assembleur pour PC (IA-32), PowerPC,
MIPS, SPARC, etc.
Types de langages
!
Excution
5
Universit PARIS-SUD - Licence MPI - S1
6
Universit PARIS-SUD - Licence MPI - S1
Conception - Modlisation
!
Programme C
main () {// dbut du programme principal
int nombreateste ;
printf("Donner un nombre :") ;
scanf("%d", & nombreateste) ;
if ((nombreateste % 2) == 0)
printf("%d est pair \n", nombreateste);
else
printf("%d n'est pas pair \n", nombreateste);
} // fin du programme principal
Analyse du problme
!
Programmation
Solution algorithmique
1. calculer le reste R de la division de N par 2
! 2. si R est gal 0 alors N est pair
! 3. sinon N n'est pas pair
!
7
Universit PARIS-SUD - Licence MPI - S1
8
Universit PARIS-SUD - Licence MPI - S1
Algorithme
Compilation - Codage
9de3bfc0
load N
modi 2
jzer P
...
halt
!
21000000 a0142000 d2040000
!
808a6001 02800003 01000000 90022001
Assembleur
Code machine
9
Universit PARIS-SUD - Licence MPI - S1
Algorithme (historique)
!
Ingrdients :
!
!
!
!
!
!
!
Etapes :
10
Universit PARIS-SUD - Licence MPI - S1
12
13
Universit PARIS-SUD - Licence MPI - S1
Analyse
!
N2 = N + N + ... + N
14
Universit PARIS-SUD - Licence MPI - S1
Variable
!
N fois
Algorithme :
Algorithme Calcul-Carr-par-Add
%Calcul du carr d'un entier
Lexique :
N entier // Entre
Carr entier // Sortie
Action : +
Debut
Initialiser Carr 0
Faire N fois :
Carr ! Carr + N
Fin
15
Universit PARIS-SUD - Licence MPI - S1
16
Universit PARIS-SUD - Licence MPI - S1
Attention
!
Avertissement
!
!
!
1. valuation de l'expression
2. placement du rsultat dans le rcipient dsign par la
variable gauche.
17
Universit PARIS-SUD - Licence MPI - S1
Algorithme
!
!
Algorithme Test-Carr-Parfait
Lexique :
!
!
!
!
Analyse
!
18
Universit PARIS-SUD - Licence MPI - S1
N entier
Rponse boolen
Actions : + , * , ", =
Auxiliaire : I, J entier
Dbut
1. I!0
Rpter
2.
J!I*I
3.
I!I+1
4. jusqu J # N
5a. Si J = N
5b
alors Reponse ! Vrai
5c
sinon Reponse ! Faux
Finsi
Fin
19
Universit PARIS-SUD - Licence MPI - S1
20
Universit PARIS-SUD - Licence MPI - S1
Instruction
Instruction
Expression value
Valeur de carr
1.
2.
Expression value
0
Valeur de carr
0
2.
3.
Carr + N
3.
Carr + N
3.
Carr + N
Expression value
Valeur de i
Valeur de J
Valeur de
rponse
I*I
I+1
J#7?
I*I
I+1
J#7?
I*I
I+1
J#7?
I*I
I+1
J#7?
J=N
5c
faux
0
1
1
2
4
3
9
4
Faux
21
Universit PARIS-SUD - Licence MPI - S1
Instruction conditionnelle
!
22
Universit PARIS-SUD - Licence MPI - S1
Algbre de Boole
FINSI
! Exemple : l'instruction 5 de l'algorithme TestCarr-Parfait est une conditionnelle.
!
!
!
Addition : x + y = max(x,y)
Multiplication : x.y = min(x,y)
Complmentation :
x = 0 si x = 1 et x = 1 si x = 0
proprits
!
!
!
!
!
23
Universit PARIS-SUD - Licence MPI - S1
24
Universit PARIS-SUD - Licence MPI - S1
!
!
cas n=2.
!
f0
f1
f2
f3
f4
f5
f9
f13
f14
f15
ou
et
Non (x)
25
Universit PARIS-SUD - Licence MPI - S1
Remarque
!
26
Universit PARIS-SUD - Licence MPI - S1
28
Universit PARIS-SUD - Licence MPI - S1
Thorme de De Morgan
!
!
Langage de programmation C
Exemple
!
!
#include <stdio.h>
//bibliothque
main() {
const type nom = valeur ;
//entte
// bloc dclaration
ET
//bloc d'instructions
}
29
[ ] \{ } . , ; : # =< > - * / ( ) !
rgles syntaxiques
!
mots rservs
!
Autres rgles
symboles spciaux
!
30
Universit PARIS-SUD - Licence MPI - S1
32
Universit PARIS-SUD - Licence MPI - S1
Bloc dclaration
Types
type nom-variable ;
! Syntaxe
!
!
!
!
! Avertissement
Les compilateurs C ne peuvent dtecter certaines erreurs de typage.
!
Gnralits
!
Exemple
un caractre (lettre de lalphabet, chiffres) sera
reprsent par un entier de type char (8 bits) : la lettre
a sera reprsente par lentier 97 !
! Une erreur flagrante de typage ( 4 * a) ne sera pas
dtecte !
!
34
Universit PARIS-SUD - Licence MPI - S1
!
!
Pour manipuler les entiers, C propose 6 types (Table cidessous). Dautres existent.
Les oprations sur les entiers sont laddition +, la
soustraction -, la multiplication *, la division / et les
comparaisons (=, !=, >; >=, etc.)
TYPE
Intervalle
Codage
unsigned char
[0,255]
1 octet (= 8 bits)
char
[-128,127]
1 octet
unsigned short
[0, 65536]
2 octets
short
[-32768, 32767]
2 octets
unsigned int
[0, 4294967295]
4 octets
int
[-2147483648, 2147483647]
4 octets
TYPE
Intervalle
Codage
Chiffres
significatifs
float
[-2-150, -2128], 0,
[+2-150, +2128]
4 octets
7 chiffres
dcimaux
double
35
Universit PARIS-SUD - Licence MPI - S1
15 chiffres
dcimaux
36
Type boolen
!
!
!
Type caractre
!
!
37
Universit PARIS-SUD - Licence MPI - S1
Dclarations de constantes
!
!
!
nom-variable = expression ;
!
smantique
seule la notation change par rapport au langage algorithmique i!i+1
le type de l'expression droite de = doit tre identique au type de la variable
gauche
!
Exemples
I =0;
I =I+1;
res = (J = =I*I) ;
Exemples
!
!
!
Affectation
38
Universit PARIS-SUD - Licence MPI - S1
Avertissement
!
!
Exemple :
!
!
!
39
Universit PARIS-SUD - Licence MPI - S1
// res = 1 ou res = 0
40
Universit PARIS-SUD - Licence MPI - S1
Instructions dentre-sortie
Instructions dentre-sortie
scanf ("FORMATS", liste de variables);
scanf("FORMAT", &nom-variable);
!
!
Exemple
int I= 234 ;
scanf ("%d",&I) ;
Si l'utilisateur tape 33, la valeur de la variable I est 33
aprs excution des deux instructions.
41
Exemple
scanf ("%d %d %d", &I, &J, &N)
si l'utilisateur tape 33 44 22, la valeur de la variable I
est 33, celle de J est 44 et celle de N est 22 aprs
excution.
Avertissement
Si la valeur saisie n'est pas du type de la variable alors
une erreur d'excution se produit.
Si la valeur n'est pas saisie, alors l'excution du
programme attend !
42
Universit PARIS-SUD - Licence MPI - S1
Instructions dentre-sortie
Programmation en C du Test-Carr-Parfait
main() {
int I, N;
...
printf ("Donnez l'entier a tester : \n");
scanf("%d", &N);
// saisie de la valeur de N au clavier
I = 0;
// initialisation de I
...
printf( "Oui la valeur que vous avez entr");
}
! Avertissement
!
43
Universit PARIS-SUD - Licence MPI - S1
44
Universit PARIS-SUD - Licence MPI - S1
Conditionnelle
Conditionnelle
if (condition) instruction1 ;
Erreur viter :
if (condition);
instruction1 ;
condition est une expression boolenne
L'excution de l'instruction globale
!
!
if (condition) instruction1;
if (condition) instruction1; else instruction2;
if ();; instruction1; EST TOUJOURS EXECUTE A CAUSE DU ;
!
!
value la condition
si la condition est vraie, excute l'instruction 1.
!
!
value la condition
si la condition est vraie, excute l'instruction 1
sinon excute l'instruction 2.
N = 4 ; I=2;
if (N==I*I)
printf ("L'entier %d est un carr parfait", N);
Exemple
N = 5; I=2;
if (N= =I*I) printf ("L'entier %d est un carre parfait", N);
else printf("L'entier %d n'est pas un carre parfait", N);
Exemple
45
Universit PARIS-SUD - Licence MPI - S1
Conditionnelle
Conditionnelle
Exemple
N=5;
if (N % 2 = =0) printf("%d est pair", N);
else {
N = N-1 ;
printf ("%d est pair", N);
}
46
Universit PARIS-SUD - Licence MPI - S1
% est le
reste de la
division
entire
switch (expression) {
case expression-constante : bloc-instruction 1; break;
case expression-constante : bloc-instruction 2; break;
...
case expression-constante : bloc-instruction n; break;
default : bloc-instruction; break;
}
! le cas default est facultatif.
! Pas de break signifie que les 2 cas sont traits ensemble
! L'instruction break provoque une sortie immdiate du
switch
47
Universit PARIS-SUD - Licence MPI - S1
48
Universit PARIS-SUD - Licence MPI - S1
Conditionnelle
Itration
Exemple
N=5
switch (N%2) {
case 1 : printf ("%d est impair", N) ; break;
case 0 : printf ("%d est pair", N) ; break;
}
!
Exemple
switch (C) {
case 0 : case 2 : case 4 : case 6 : case 8 :
printf("%d est un chiffre pair" , C); break;
case 1 : case 3 : case 5 : case 7 : case 9 :
printf("%d est un chiffre impair", C); break;
default :
printf ("%d nest pas un chiffre", C);
}
!
49
Universit PARIS-SUD - Licence MPI - S1
Instructions
Instructions
jusqu (expression)
Attention
!
Attention
!
!
!
50
Universit PARIS-SUD - Licence MPI - S1
51
Universit PARIS-SUD - Licence MPI - S1
52
Universit PARIS-SUD - Licence MPI - S1
Itration : Pour
Itration
!
!
faire N fois
en C : for
53
Universit PARIS-SUD - Licence MPI - S1
Itration-while
!
1. valuation de la condition
2.
!
!
Itration - do...while
54
Universit PARIS-SUD - Licence MPI - S1
!
!
55
Universit PARIS-SUD - Licence MPI - S1
56
Universit PARIS-SUD - Licence MPI - S1
Itration - do...while
Exemple
Main () {
scanf("%d", &N);
Res = 1;
do {
Res = Res * N ;
N = N -1 ;
} while (N > 0) ;
printf("%d \n", Res);
}
Itration - for
Le nombre de rptitions est fixe
for (expr1; expr2; expr3;) {bloc-instructions}
// N est modifi
// N est test
Simulation de l'excution
!
58
Universit PARIS-SUD - Licence MPI - S1
Itration - for
Itration - for
Exemple
scanf("%d", &N) ; res = 1 ;
for (I = 2; I <=N; I = I + 1)
res = res * I ;
printf("%d \n", res);
Remarque gnrale
!
pour l'itration for, on peut mettre plusieurs autres variantes pour les
expressions expr1, expr2 et expr3.
59
Universit PARIS-SUD - Licence MPI - S1
60
Universit PARIS-SUD - Licence MPI - S1
Programmation de Test-Carr-Parfait
!
Rappel de l'algorithme
Programme Test-Carr-Parfait
#include <stdio.h> ;
// bibliothque
main() {
/* Test-Carr-Parfait : Ce programme vrifie si l'entier N est ou non un carr
parfait */
int N, I, J ;
// bloc dclaration
printf ("Donnez l'entier tester : ");
scanf("%d", &N);
// saisie de la valeur de N au clavier
I = 0;
// initialisation de I
J=0;
while (J<N) {
I = I+1 ;
J=I*I ;
}
if (J == N)
printf("%d est un carr parfait", N);
else
printf("%d n'est pas un carr parfait", N);
}
Dbut
1. I!0
Rpter
2.
J!I*I
3.
I!I+1
4. jusqu J # N
5a. Si J = N alors Reponse ! Vrai
5b. Sinon Reponse ! Faux
Finsi
Fin
61
Universit PARIS-SUD - Licence MPI - S1
62
Universit PARIS-SUD - Licence MPI - S1
Imbrication de boucles
// Test-Carr-Parfait
...
main(){ // Test-Carr-Parfait
...
I = 0;
// initialisation de I
do {
J=0;
for (k=1; k <= I; k = k + 1)
J = J + I;
// calcul de J=I*I par additions successives
I = I+1;
// incrmentation de I
}
while (J<N);
...
I = 0;
// initialisation de I
do {J = I * I ; I = I+1 ;} while (J<N);
...
}
main(){
// Test-Carr-Parfait
...
// enlever J de la dclaration
I = -1;
// initialisation de I
do I = I+1 ; while (I * I <N);
...
}
main(){
// Test-Carr-Parfait
...
// BOUCLE AUTO-SUFFISANTE
...
}
63
Universit PARIS-SUD - Licence MPI - S1
64
Universit PARIS-SUD - Licence MPI - S1
Tableaux mono-dimensionnels
!
Tableaux mono-dimensionnels
Dfinition
!
!
11
19
13
17
23
Exemple
!
!
!
main (){
...
const int N = 10;
int Tprem[N];
65
Universit PARIS-SUD - Licence MPI - S1
Tableaux mono-dimensionnels
!
Utilisation
!
main() {
const int N = 10;
int Tprem [N];
Tprem[0] = 1;
Tprem[1] = 2; Tprem[9] = 2 ; // pas Tprem[10] !!!
int i;
for (i= 0; i < N; i = i +1)
printf("%d \n", Tprem[i]);
}
67
Universit PARIS-SUD - Licence MPI - S1
66
Universit PARIS-SUD - Licence MPI - S1
Tableaux mono-dimensionnels
Utilisation (suite)
!
main(){
// programme TabCar
const int N = 100;
char Tcar [N];
int i, Nba;
Nba = 0;
for (i= 0; i < N; i = i +1)
if (Tcar[i] == 'a')
Nba = Nba + 1;
printf("le nombre de a est : %d", Nba);
}
68
Universit PARIS-SUD - Licence MPI - S1
Tableaux mono-dimensionnels
Tableaux multi-dimensionnels
!
Utilisation (suite)
!
main(){
const int N = 100;
char Tcar [N];
int i ;
Dfinition
// programme PremCar
Exemple
!
const int N = 3;
const int M = 4;
int Matrice[N] [M];
i = 0;
while ((i < N) && (Tcar[i] != 'a')) i = i + 1;
if (i == N) printf("a n'est pas dans le tableau " , i);
else printf("a est dans le tableau la pos %d ");
}
69
Universit PARIS-SUD - Licence MPI - S1
Tableaux multi-dimensionnels
0
main () {
const int N = 3; //Attention a ne pas se melanger les pinceaux
const int M = 4; // entre les 2 dimensions !!!!
int Matrice[N] [M];
for (i= 0; i < N; i = i +1) {
for (j= 0; j < M; j = j +1) {
if (Matrice[i][j] ==0)
NbZero = NbZero+1;
}
}
printf("le nombre de 0 est : %d", NbZero);
}
11
34
25
33
12
!
!
70
Universit PARIS-SUD - Licence MPI - S1
72
Tableaux multi-dimensionnels
!
!
!
!
main() {
const int N = 10;
const int M = 10;
int Matrice [N][M];
Matrice [0][0] = 1;
Matrice [1][0] = 2; Matrice [9][0] = 2 ; // pas Tprem[10] !!!
Algorithmique
73
Utilisation
action NOM
{ DESCRIPTION DE LACTION}
Donnes : LES DONNES EN ENTRE
Rsultats : LE OU LES DONNES RETOURNEES
Dbut
Fin
75
Universit PARIS-SUD - Licence MPI - S1
76
Universit PARIS-SUD - Licence MPI - S1
Exemple
Algorithmique
action div
{ les variables rsultats q et r sont respectivement
calcules comme le quotient et le reste de la division
entire }
Donnes : a, b : entier;
Rsultats : q, r : entier;
Dbut
q !0;
tant que a"b faire
a ! a-b;
Appel :
q ! q+1;
fin tant que
div (125, 37, x, y);
r ! a;
77
Fin
Exemple
INSTRUCTIONS
retourner variable;
Fin
78
Universit PARIS-SUD - Licence MPI - S1
!
!
!
79
Universit PARIS-SUD - Licence MPI - S1
80
Universit PARIS-SUD - Licence MPI - S1
Types de modules
!
81
82
Universit PARIS-SUD - Licence MPI - S1
Syntaxe gnrale:
<type-de-retour> <nom>(<liste-paramtres>)
<instructions>
!
Ex:
!
!
83
84
Universit PARIS-SUD - Licence MPI - S1
Linstruction return
!
Syntaxe:
return [expression];
!
85
Universit PARIS-SUD - Licence MPI - S1
/* dclaration de maFonction */
int maFonction(int val);
int main() {
/* maFonction est accessible ici */
}
void autreFonction() {
/* maFonction est accessible ici */
}
86
Universit PARIS-SUD - Licence MPI - S1
toto.c
87
Universit PARIS-SUD - Licence MPI - S1
toto.c
88
Universit PARIS-SUD - Licence MPI - S1
Prototype de fonction
!
Passage de paramtres
!
Ex:
int maFonction(int par1, float par2);
/* maFonction retourne une valeur de type int, et prend deux
paramtres de type int et float */
!
!
!
!
!
!
les tableaux ne sont pas passs par valeur (voir plus loin)
les structures sont effectivement passes par valeur, ce qui
implique la recopie de lensemble des champs de la
structure
90
Cas particuliers:
Variables locales
!
91
Universit PARIS-SUD - Licence MPI - S1
92
Universit PARIS-SUD - Licence MPI - S1
93
Universit PARIS-SUD - Licence MPI - S1
Mini-exemple
(1) scanf("%d", &I);
(2) if (I <= 10)
(3)
bloc1 ;
else
(4) bloc2 ;
!
- squence 1.2.3
valeurs test de I : -435 , 10
- squence 1.2.4
valeurs test de I : 832
Avertissement
! 0 est un entier particulier, mais ici ce n'est pas une valeur de test
plus intressante que -435 !
95
Universit PARIS-SUD - Licence MPI - S1
94
Universit PARIS-SUD - Licence MPI - S1
96
!
!
!
squence 1.2.3.4.5.6.7.8
squence 1.2.4.6.8
squence 1.2.3.4.6.8
squence 1.2.4.5.6.8
...
!
!
jeu de tests
!
!
!
...
squence 1.2.4.6.7.6.8
squence 1.2.3.4.5.6.7.6.8
...
Jeu de tests
Rgle gnrale
!
Gnrer les tests qui permettent d'explorer toute la table de vrit d'une
expression boolenne partir des conditions lmentaires.
...
97
!
!
98
Universit PARIS-SUD - Licence MPI - S1
99
Universit PARIS-SUD - Licence MPI - S1
100
Universit PARIS-SUD - Licence MPI - S1
Algorithme d'Euclide
calcul du cot
!
101
Universit PARIS-SUD - Licence MPI - S1
Entre I, J : entier
Auxiliaire K entier
//Calcul du pgcd de i et j
Sortie P : entier
dbut
tant que J > 0 faire
K ! I mod J;
I !J ; J ! K ;
P ! I;
fin
Nombre d'itrations ?
103
Universit PARIS-SUD - Licence MPI - S1
102
Algorithme d'Euclide
Algorithme PGCD-2
Algorithme PGCD-1
//Calcul du pgcd de i et j
Lexique I, J : entier // Entres
P : entier // Sortie
dbut
tant que I ! J faire
si I > J alors
I!I-J
sinon
J ! J - I;
P ! I;
fin
Nombre d'itrations ?