79
versité PARIS-SUD - Licence MPI - S1 1 Introduction à Introduction à l’informatique l’informatique Chapitre 1: Algorithmes et Programmes

Introduction à l’informatique

  • Upload
    kele

  • View
    65

  • Download
    2

Embed Size (px)

DESCRIPTION

Introduction à l’informatique. Chapitre 1: Algorithmes et Programmes. Algorithmes et Programmes. Vie d'un programme Algorithme Programmation : le langage Exécution et test des programmes. Cycle de vie d'un programme (d'un logiciel). Conception - Modélisation Analyse du problème - PowerPoint PPT Presentation

Citation preview

Page 1: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 1

Introduction à l’informatiqueIntroduction à l’informatique

Chapitre 1: Algorithmes et Programmes

Page 2: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 2

Algorithmes et ProgrammesAlgorithmes et Programmes

Vie d'un programme Algorithme Programmation : le langage Exécution et test des programmes

Page 3: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 3

Cycle de vie d'un programme (d'un logiciel)Cycle de vie d'un programme (d'un logiciel) Conception - Modélisation

Analyse du problème Solution algorithmique

langage d'algorithmes Programmation

Programme langage de « haut niveau »

Compilation – Interprétation Exécution sur machine

langage machine de « bas niveau » assembleur et code machine

Mise au point Vérification par test pour corriger Evaluation du coût pour optimiser

Page 4: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 4

Cycle de vie d'un programme (d'un logiciel)Cycle de vie d'un programme (d'un logiciel) Conception - Modélisation

Langage de description d'algorithme simplicité , précision indépendant de la programmation et de la machine Exemple : diagramme , pseudo C, ...

Programmation Exécution

Page 5: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 5

Conception - Modélisation Programmation

Langage de programmation (langages « évolués ») syntaxe contraignante, différents styles d'abstraction indépendant de la machine

Types de langages impératifs : Fortran, Cobol, Pascal, C fonctionnels : Lisp, ML, Caml logiques : Prolog objets : C++, Java

Exécution

Cycle de vie d'un programme (d'un Cycle de vie d'un programme (d'un logiciel)logiciel)

Page 6: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 6

Conception - Modélisation Programmation Exécution

Langage assembleur dépendant de la machine, du processeur Exemples : Assembleur pour PC (IA-32), PowerPC,

MIPS, SPARC, etc.

Cycle de vie d'un programme (d'un Cycle de vie d'un programme (d'un logiciel)logiciel)

Page 7: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 7

Conception - Modélisation Analyse du problème

Un nombre N est pair si le reste de la division de N par 2 est nul

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

L'entier N est-il pair ?L'entier N est-il pair ?

Page 8: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 8

Programmation Programme C

main () {// début du programme principal

int n ; printf("Donner un nombre n:") ; scanf("%d", &n) ; if ((n % 2) == 0) printf("%d est pair \n", n); else printf("%d n'est pas pair \n", n);} // fin du programme principal

L'entier N est-il pair ?L'entier N est-il pair ?

Page 9: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 9

L'entier N est-il pair ?L'entier N est-il pair ? Compilation - Codage

9de3bfc0 21000000 a0142000 d2040000

90000000 80a24000 02800009 01000000

….

808a6001 02800003 01000000 90022001

load N modi 2 jzer P...halt

Assembleur Code machine

Page 10: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 10

() Recette, règle, mécanisme, procédé, procédure, méthode,

(=) Description d'une procédure de calcul par une suite d'étapes de calcul, d'actions (plus ou moins) élémentaires.

Un algorithme n'est pas forcément destiné à décrire la solution d'un problème pour la programmation et l'informatique ... Un algorithme en cuisine s'appelle une recette Un algorithme en musique s'appelle une partition Un algorithme en tissage s'appelle un point

AlgorithmeAlgorithme

Page 11: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 11

Algorithme (historique)Algorithme (historique) Les premières formulations de règles précises pour la

résolution de certains types d'équations remontent aux Babyloniens (époque d'Hammurabi, (1800 avant J.C.).

Depuis l'antiquité : algorithmes sur les nombres. Exemple : l'algorithme d'Euclide qui permet de calculer le

p.g.c.d. de deux nombres entiers. Le mot algorithme est plus récent, il vient du nom d'un

mathématicien perse du IXe siècle: Muhammad ibn Musa al-Khowârizmî.

La signification du mot évolue au cours des temps : pratique de l'algèbre (d'Alembert, XVIIIe siècle) méthode et notation de toute espèce de calcul tout procédé de calcul systématique, voire automatique

Page 12: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 12

Algorithme de la mousse au chocolat Algorithme de la mousse au chocolat (6 p)(6 p)

Ingrédients : 250g de chocolat, 125g de beurre, 6 œufs, 50 g de sucre,

café Etapes :

faire fondre le chocolat avec 2 cuillères d'eau ajouter le beurre laisser refroidir avant d'ajouter les jaunes d’œufs ajouter le sucre et comme parfum un peu de café battre les blancs en neige et les ajouter au mélange.

A partir des ingrédients (données en entrée), appliquer la recette (les étapes) va produire une mousse au chocolat (le résultat).

L’abus de mousse au chocolat est déconseilléL’abus de mousse au chocolat est déconseillé

Page 13: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 13

Algorithme : un peu de méthodologieAlgorithme : un peu de méthodologie identifier les données fournies / nécessaires

(données en entrée) identifier le résultat (données en sortie) déterminer les actions ou opérations

élémentaires spécifier l'enchaînement des actions

langage d'algorithmes = langage de description des données, des actions et des enchaînements

Page 14: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 14

Langage de description d'algorithmesLangage de description d'algorithmes Algorithme titre % commentaire Lexique : variables // entrée : variables // sortie : variables // auxiliaire action : noms des opérations début liste d'instructions fin

Page 15: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 15

Calculer le carré de N avec l'addition seuleCalculer le carré de N avec l'addition seule Analyse

N2 = N + N + ... + N N fois

Algorithme Algorithme Calcul-Carré-par-Add Calcul du carré d'un entier

Lexique : N entier // Entrée Carré entier // Sortie

Action : +1. Initialiser Carré à 0 2. Faire N fois : 3. Carré ← Carré + N

Page 16: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 16

VariableVariable Une variable est le nom d'un «récipient» destiné à

contenir une valeur. Lorsque nous nous intéresserons un peu plus à l'ordinateur, le récipient sera une «zone» mémoire.

Le type d'une variable sert à préciser la nature des valeurs acceptables par le récipient. Un type est un nom pour un ensemble de valeurs. Exemple : Carré est une variable de type entier. La valeur

de (dans) Carré est un entier. La valeur de Carré ne peut être un caractère ou un réel

Page 17: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 17

Affectation par une valeurAffectation par une valeur L'affectation variable ← valeur est une instruction qui

permet de changer la valeur d'une variable. L'affectation modifie le contenu du récipient désigné par la variable. La valeur de la variable à gauche de ← est remplacée par la

valeur à droite de ←. Exemple : Carré ← 0 « se lit » le récipient Carré reçoit la

valeur 0. Avertissement

L'affectation est une instruction qui est dite «destructrice». L'ancienne valeur de la variable est détruite, écrasée, effacée

par la nouvelle valeur ! Carré ← N Copie de la valeur de N. La valeur de N (par

exemple 7) existe en double

Page 18: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 18

Affectation par une expressionAffectation par une expression L'affectation variable ← expression est effectuée par :

1. évaluation de l'expression 2. placement du résultat dans le récipient désigné par la

variable à gauche.

Attention A droite de ←, dans l'expression, les variables sont

abusivement utilisées pour désigner les valeurs qu'elles contiennent. Ceci est une convention.

Exemple : Carré ← Carré + N a pour effet de mettre le résultat de la somme de la valeur de Carré avec la valeur de N dans le récipient Carré.

Page 19: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 19

Tester si N est un carré parfaitTester si N est un carré parfait Analyse

N est un carré parfait si il existe un entier J dont le carré vaut N. (16 en est un, 23 non !)

Algorithme Algorithme Test-Carré-Parfait Lexique :

N entier Réponse booléen Action : + , * , , = Auxiliaire : I, J entier

(* voir page suivante *)

Page 20: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 20

Début1. I←0

Répéter2. J←I*I3. I←I+14. jusqu’à J N5a. Si J = N 5b alors Reponse ← Vrai5c sinon Reponse ← Faux

FinsiFin

Tester si N est un carré parfaitTester si N est un carré parfait

Page 21: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 21

Algorithme = Abstraction de séquences de calculAlgorithme = Abstraction de séquences de calcul

Instruction Expression évaluée Valeur de carré

1. 0 0

2.

Instruction Expression évaluée Valeur de carré

1. 0 0

2.

3. Carré + N 3

3. Carré + N 6

3. Carré + N 9

Calcul-Carré-par-Add pour N=0

Calcul-Carré-par-Add pour N=3

Page 22: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 22

Algorithme = Abstraction de séquences de calculAlgorithme = Abstraction de séquences de calcul

Instruction Expression évaluée Valeur de i Valeur de J Valeur de réponse

1 0

2 I*I 0

3 I+1 1

4 J 7 ?

2 I*I 1

3 I+1 2

4 J 7 ?

2 I*I 4

3 I+1 3

4 J 7 ?

2 I*I 9

3 I+1 4

4 J 7 ?

5 J=N

5c faux Faux

Test du carré parfait (N=7)

Page 23: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 23

Instruction conditionnelleInstruction conditionnelle Si « condition » alors faire liste d'instructions

sinon faire liste d'instructions Exemple : l'instruction 5 de l'algorithme Test-

Carré-Parfait est une conditionnelle. Condition est une expression booléenne

Exemple : Reprenons l'exécution de Test-Carré-Parfait pour N=7. La première évaluation de la condition J 7 produit la

valeur booléenne «faux» donc les instructions 2. et 3. sont exécutées.

Page 24: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 24

Algèbre de BooleAlgèbre de Boole Un ensemble = {0, 1} muni de l'ordre total (0 < 1) et

des opérations suivantes : Addition : x + y = max(x,y) Multiplication : x.y = min(x,y) Complémentation :

propriétés l'addition et la multiplication sont commutatives 0 est élément neutre de l'addition 1 est élément neutre de la multiplication l'addition est distributive sur la multiplication et vice versa. Propriété des compléments :

1 et . 0x x x x+ = =

0 si 1 et 1 si 0x x x x= = = =

Page 25: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 25

Fonctions booléennes – tables de véritéFonctions booléennes – tables de véritéUne fonction booléenne f est une application de 2 dans cas n=1.

Il existe 4 fonctions booléennes de { 0, 1 } dans { 0, 1 } : l'identité, la complémentation et ...

cas n=2. Il existe 24 fonctions booléennes de { 0, 1 }2 dans { 0, 1}

x y f0 f1 f2 f3 f4 f5 … f9 … f13 f14 f15

0 0 0 0 0 0 0 0 1 1 1 1

0 1 0 0 0 0 1 1 0 1 1 1

1 0 0 0 1 1 0 0 0 0 1 1

1 1 0 1 0 1 0 1 1 1 0 1

Page 26: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 26

Algèbre de Boole et LogiqueAlgèbre de Boole et Logique Utiliser faux et vrai (ou F et V) à la place de 0 et 1 Renommer l'addition, la multiplication et la

complémentation par ou, et et non respectivement appelée disjonction, conjonction et négation.

x y ou et Non (x)

F F F F V

F V V F V

V F V F F

V V V V F

Page 27: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 27

Condition et Expression booléenneCondition et Expression booléenne Expression booléenne élémentaire par l'exemple

(J < 7) est une expression booléenne élémentaire. J est de type entier, 7 est un entier et la comparaison < est un

opérateur de N x N dans { F, V }.

(Réponse) est une expression booléenne élémentaire. Réponse est de type booléen.

(Lettre = `a`) est une expression booléenne élémentaire si la variable Lettre est de type caractère.

Remarque Les mêmes symboles (=, <, etc.) sont utilisés pour la

comparaison d'entiers, de caractères, de booléens.

Page 28: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 28

Condition et Expression booléenneCondition et Expression booléenne Expression booléenne élémentaire par l'exemple

(J < 7 et J > 4) est une expression booléenne. C'est la conjonction de deux expressions booléennes

élémentaires. Elle est évaluée à vraie si la valeur de la variable J

appartient à ]4,7[. Considérons les variables cv pour la couleur de ma

voiture, mv pour la marque et div pour l'immatriculation (département). Que signifie l'expression ci-dessous ?

(cv = blanc et mv = peugeot) ou (cv = gris ou cv = blanc) et div = 75 )

Page 29: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 29

Langage de programmation CLangage de programmation C#include <stdio.h> //bibliothèque

main() { //entête const type nom = valeur ; // bloc déclaration

type1 nom1, nom2 ; type2 nom3 ; instruction; ... //bloc

d'instructions instruction;}

Page 30: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 30

Syntaxe : symboles, mots, règlesSyntaxe : symboles, mots, règles symboles spéciaux

[ ] \{ } . , ; : # =< > - * / ( ) !

mots réservés if else int char float double while for switch

case, const etc.

règles syntaxiques point virgule après chaque instruction accolade ouvrante au début { et fermante } à la fin de

chaque fonction (y compris « main »), de chaque bloc d’instructions

La syntaxe d'un programme est définie par une grammaire.

Page 31: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 31

Autres règlesAutres règles Contraintes imposées par le langage

Toute variable apparaissant dans le bloc d'instructions doit être déclarée.

Contraintes imposées par l'usage Tout programme doit être commenté ! Un commentaire est du texte encadré par des symboles de

début /* et de fin */ ou une ligne commençant par // Ignoré lors des traitements du programme

/* Tout l’algo repose sur la recherche du plus grand nombre premier après le carré parfait */

int i = 0; // sert d’indice dans la boucle

Page 32: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 32

Bloc déclarationBloc déclarationtype nom-variable ; Syntaxe

nom-variable est un identificateur : les caractères sont les lettres (A..Z,a..z) et les chiffres 0..9 et le

soulignement (pas de caractères spéciaux, pas de blancs) mais ne commencent pas par un chiffre

ne commence pas par un chiffre minuscules et majuscules sont différentes fred≠Fred longueur maximum = 31 (plus de caractères sont tolérés, mais ils

sont ignorés)

Déclarer une variable sert à désigner un récipient par son nom spécifier le domaine des valeurs que peut «contenir » cette

variable

Page 33: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 33

TypesTypes Généralités

Un type est un nom pour un ensemble de valeurs. Un type est muni d'opérateurs. Donc :

Déclarer une variable sert aussi à connaître les opérateurs applicables à (la valeur de) la variable

Avertissement Les compilateurs C ne peuvent détecter certaines erreurs de typage.

Exemple un caractère (lettre de l’alphabet, chiffres) sera

représenté par un entier de type char (8 bits) : la lettre ‘a’ sera représentée par l’entier 97 !

Une erreur flagrante de typage ( 4 * ‘a’) ne sera pas détectée !

Page 34: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 34

Les types entiersLes types entiers

Pour manipuler les entiers, C propose 6 types (Table ci-dessous). D’autres existent.

Les opérations sur les entiers sont l’addition +, 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

Page 35: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 35

Les types réelsLes types réels Pour manipuler les réels, C propose 2 types (d’autres

existent) présentés dans la table ci-dessous Les opérateurs sur les réels sont l’addition +, la

soustraction -, la multiplication *, la division /, les comparaisons (=, !=, >, >=, etc.)

TYPE Intervalle Codage Chiffres significatifs

float [-2-150, -2128], 0,[+2-150, +2128]

4 octets 7 chiffres décimaux

double [-2-1075, -21024], 0,[+2-1075, +21024]

8 octets 15 chiffres décimaux

Page 36: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 36

Type booléenType booléen Le type booléen n’existe pas en C. Le booléen faux est représenté par l’entier 0, et

le booléen vrai par tout entier différent de 0. Les opérations de comparaison produisent 0

quand la condition est fausse et 1 quand la condition est vraie.

Les opérateurs sur les expressions booléennes sont le ET : &&, le OU : || et le NON : !

Page 37: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 37

Type caractèreType caractère Le type caractère n’existe pas de manière

indépendante en C Les caractères sont représentés par des « char »

correspondant au codage ASCII des caractères alphanumériques (lettres et chiffres), typographiques (ponctuation), etc.

Les caractères sont entrés entre quotes ‘a’, ‘b’, …’0’…’9’, etc.

Page 38: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 38

Déclarations de constantesDéclarations de constantes const type nom-constante valeur

nom-constante est un identificateur qui sert à nommer une valeur.

Une constante sert souvent à simplifier la lisibilité d'un programme.

Le nom donné à la valeur correspondant à l'utilisation de cette valeur dans un contexte particulier (ici le programme).

Exemples const float PI = 3.14159; // PI est la valeur 3.14159 const float euro 6.56; // euro est le réel 6.56 const int duo = 2; // duo est synonyme de 2

Avertissement Il est impossible de changer la valeur 2 : De la même manière il est impossible de toucher à la

constante duo dans le programme !

Page 39: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 39

AffectationAffectationnom-variable = expression ; sémantique

seule la notation change par rapport au langage algorithmique i←i+1le 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) ; // res = 1 ou res = 0

Attention : le compilateur C fait des conversions pour que la valeur affectée corresponde au type de la variable à gauche. Exemple :

int n; float x=15.4; n=x; // Les deux types sont différents printf("n=%d :\n", n); // résultat affiché : n=15

Page 40: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 40

Instructions d’entrée-sortieInstructions d’entrée-sortiescanf("FORMAT", &nom-variable);

Permet de saisir (lire) des données tapées au clavier FORMAT permet de spécifier le type de la variable lue. Par

exemple, "%d" pour un entier, "%f" pour un réel…( d = décimal, f = floating point )

L'exécution de l'instruction ci-dessus Attend que l'utilisateur tape une valeur au clavier Cette valeur est affectée à la variable (idem au pluriel) La variable doit avoir été declarée (avec le bon type) (const)

Exemple int I= 234 ; scanf ("%d",&I) ;

Si l'utilisateur tape 33, la valeur de la variable I est 33 après exécution des deux instructions.

Page 41: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 41

Instructions d’entrée-sortieInstructions d’entrée-sortiescanf ("FORMATS", liste de variables); 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 après exécution.

Avertissement Si la valeur saisie n'est pas du type de la variable alors une erreur d'exécution se produit.Si la valeur n'est pas saisie, alors l'exécution du programme attend !

Page 42: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 42

Instructions d’entrée-sortieInstructions d’entrée-sortieprintf ("FORMAT", expression) printf ("FORMATS", liste d'expressions) permet d'afficher des valeurs (résultats de calcul)à l'écran. Exemple

I =1 ; //la valeur de I est 1printf("%d", I) ; //affichage de 1 à l'écranprintf("%d", 5+7) ; //affichage de 12 à l'écranprintf("valeur de I= %d", I) ; //affichage de valeur de I= 1

printf ("FORMAT \n", expression) affiche le résultat de l'évaluation

de l'expression puis effectue un retour à la ligne (voir console)

Page 43: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 43

Programmation en C du Test-Carré-ParfaitProgrammation en C du Test-Carré-Parfaitmain() { ... printf ("Donnez l'entier a tester : \n"); scanf("%d", &N); // saisie de la valeur de N au

clavier

I = 1; // initialisation de I

... printf( "Oui la valeur que vous avez entré…");} Avertissement

Toute instruction est suivie d’un point virgule ;

Page 44: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 44

ConditionnelleConditionnelle if (condition) instruction1 ;

Erreur a eviter : if (condition); instruction1 ;

condition est une expression booléenne

L'exécution de l'instruction globale évalue la condition si la condition est vraie, exécute l'instruction 1.

Attention : si la condition est fausse, il ne se passe rien dans ce cas.

Exemple N = 4 ; I=2;

if (N==I*I) printf ("L'entier %d est un carré parfait", N);

Affichage à l'écran de : L'entier 4 est un carré parfait

Page 45: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 45

ConditionnelleConditionnelleif (condition) instruction1;if (condition) instruction1; else instruction2;if (…);; instruction1; EST TOUJOURS EXECUTE A CAUSE DU ;

Permet d'introduire des branchements d'instructions. L'exécution de l'instruction globale

évalue la condition si la condition est vraie, exécute l'instruction 1 sinon exécute l'instruction 2.

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);

Affichage à l'écran de L'entier 5 n'est pas un carre parfait

Page 46: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 46

ConditionnelleConditionnelle

if (condition) bloc-instruction1 else bloc-instruction2

Un bloc d'instructions est une liste d'instructions encadrée par les mots clé { et }

Exemple N = 5 ;if (N % 2 = =0) printf("%d est pair", N);else{

N = N-1 ; printf ("%d est pair", N);

}

Affichage à l'écran : 4 est pair

% est le % est le reste de la reste de la division division entièreentière

Page 47: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 47

ConditionnelleConditionnelleswitch (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 traités ensemble L'instruction break provoque une sortie immédiate du

switch

Page 48: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 48

ConditionnelleConditionnelle Exemple N=5switch (N%2==0) {

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 n’est pas un chiffre", C);}

Page 49: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 49

ItérationItération Une itération correspond à la répétition d'une

séquence de calcul. Exemple : l'instruction 3. est itérée N fois dans

l'algorithme du Calcul-Carré-par-Add Le nombre d'exécutions répétées de l'instruction 3 ne

dépend pas des calculs effectués par l'instruction 3.

Exemple : la séquence d'instructions [ 2. 3. 4.] est itérée dans l'algorithme Test-Carré-Parfait}. Le nombre d'exécutions répétées de [ 2. 3. 4.] dépend

des calculs effectués par la séquence elle-même.

Page 50: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 50

Itération : tant queItération : tant que

Tant que (expression)Instructions

fin tant que

Attention Initialiser les variables testées dans l’expression Modifier les variables dans la boucle pour qu’elle s’arrête.

Exemple : calcul de factorielle

entree : N entier ; sortie : Res entier ;ecrire (entrez N) ; lire (N);Res=1;Tant que (N>0)

Res=Res*N;N=N-1;

Fin tant que

Exécution pour N=3, N=0.

Page 51: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 51

Itération : Répéter… jusqu’àItération : Répéter… jusqu’à

RépéterInstructions

jusqu’à (expression)

Attention Initialiser les variables testées dans l’expression avant le « répéter » Modifier les variables dans la boucle pour qu’elle s’arrête. On exécute des instructions avant de tester l’expression

Exemple : calcul de factorielle

entree : N entier ; sortie : Res entier ;ecrire (entrez N) ; lire (N);Res=1;répéter

Res=Res*N;N=N-1

jusqu’à (N 0);

Exécution pour N=3, N=0;

Page 52: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 52

Itération : PourItération : PourPour i allantde borne_inf à borne sup (par pas de 1) faireinstructionsFinpour

Exemple : calcul de factorielle

entree : N entier ; sortie : Res entier ;ecrire (entrez N) ; lire (N);Res=1;Pour i allant de 2 à N faire

Res=Res*iFinpour

Exécution pour N=3, N=0;

Page 53: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 53

ItérationItération Une écriture concise pour la répétition de blocs

d'instructions Il existe 2 sortes d'itération :

1. Le nombre de répétitions est fixe faire N fois en C : for

2. Le nombre de répétitions n'est pas fixe Il dépend des calculs effectués par les instructions

répétées si ... alors repartir en C : while ou do...while

Page 54: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 54

Itération-whileItération-while Le nombre de répétitions n'est pas fixe

while (condition) bloc-instruction; condition est une expression booléenne

L'exécution de cette itération s'effectue par : 1. évaluation de la condition 2.

si la condition est vraie alors exécution du bloc-instruction et repartir (recommencer) en 1.

si la condition est fausse alors l'exécution est terminée.

Tant que la condition est vraie, le bloc d'instructions est exécuté.

A la sortie de la boucle, la condition est toujours fausse (… ne pas tester)

Page 55: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 55

Itération - do...whileItération - do...whileLe nombre de répétitions n'est pas fixe

do liste-instruction while (condition);

L'exécution de cette itération s'effectue par :1.- exécution de la liste d'instructions

2.- évaluation de la condition

3.- si la condition est vraie alors repartir (recommencer) en 1. si la condition est fausse alors l'exécution est terminée.

Exécuter la liste d'instructions tant que la condition est vraie et toujours au moins une fois !!!

Page 56: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 56

Itération - do...whileItération - do...whileExemple Main () {

scanf("%d", &N); Res = 1;do {

Res = Res * N ;N = N -1 ; // N est modifié

} while (N > 0) ; // N est testéprintf("%d \n", Res);

}

Simulation de l'exécution pour la saisie de 0 et pour la saisie de 5

Page 57: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 57

Itération - forItération - forLe nombre de répétitions est fixe

for (expr1; expr2; expr3;) {bloc-instructions}

L'exécution de cette itération s'effectue par :1. initialiser le compteur d'itération par expr12. Tant que la condition expr2 est vraie, exécuter le bloc d'instructions3. Le compteur est modifié par expr3 à chaque itération

Utilisation typique (boucle pour du langage de description d’algorithme)for (i=0; i<N; i=i+1) {bloc-instructions}

Remarque générale d'utilisation Veiller à ce que l'intervalle [début, fin] soit identifiable avant l'itération.

Page 58: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 58

Itération - forItération - forExemple

scanf("%d", &N) ; res = 1 ;for (I = 2; I <=N; I = I + 1)

res = res * I ;printf("%d \n", res);

Simulation de l'exécution (pour la saisie de 0 et pour la saisie de 5)

Simulation par while

scanf("%d", &N) ; res = 1 ; I = 2 ;while (I <= N)

{ res = res * I ; I = I + 1;}

printf("%d", res);

Page 59: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 59

Itération - forItération - forExemple d'itération avec décrémentation

scanf("%d", &N) ; res = 1 ;for (I = N; I >=2; I = I - 1)

res := res * I ;printf ("%d", res);

Simulation de l'exécution pour la saisie de 0 et pour la saisie de 5

Remarque générale pour l'itération for, on peut mettre plusieurs autres variantes pour les

expressions expr1, expr2 et expr3.

Page 60: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 60

Programmation de Test-Carré-ParfaitProgrammation de Test-Carré-Parfait Rappel de l'algorithme

Début1. I←0

Répéter2. J←I*I3. I←I+14. jusqu’à J N5a. Si J = N alors Reponse ← Vrai5b. Sinon Reponse ← Faux

FinsiFin

Page 61: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 61

Programme Test-Carré-ParfaitProgramme Test-Carré-Parfait#include <stdio.h> ; // bibliothèque main() {

/* Test-Carré-Parfait : Ce programme vérifie si l'entier N est ou non un carré parfait */

int N, I, J ; // bloc déclaration 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);}

Page 62: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 62

Autres prog. de Test-Carré-ParfaitAutres prog. de Test-Carré-Parfaitmain(){ // Test-Carré-Parfait ...

I = 0; // initialisation de I do {J = I * I ; I = I+1 ;} while (J<N);

...

} main(){ // Test-Carré-Parfait ... // enlever J de la déclaration

I = -1; // initialisation de I do I = I+1 ; while (I * I <N);

...

}

main(){ // Test-Carré-Parfait ...

for (I=0; I*I<N; I=I+1); // BOUCLE AUTO-SUFFISANTE ...

}

Page 63: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 63

Imbrication de bouclesImbrication de boucles Supposons que la multiplication soit interdite ! 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; // incrémentation de I }

while (J<N); ...

La boucle « for » est imbriquée dans la boucle « do...while ».

Page 64: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 64

Tableaux mono-dimensionnelsTableaux mono-dimensionnels Définition

Le type tableau permet de représenter des fonctions à domaine fini

A chaque valeur d'un indice, le tableau associe une valeur ou élément de tableau.

Exemple On peut représenter les N entiers premiers par :

main (){ ...const int N = 10;int Tprem[N];

Page 65: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 65

Tableaux mono-dimensionnelsTableaux mono-dimensionnels

Définitions sur un exemple A chaque case i, le tableau fait correspondre un nombre

premier Accessible par l'opération Tprem[i] On peut changer la valeur d'une case par Tprem[i]=valeur Le type des éléments (ici entier) peut être quelconque Attention : les compilateurs C ne vérifient pas que l’indice

est compris dans l’intervalle défini à la déclaration du tableau. S’il n’est pas dans cet intervalle, il y a généralement erreur à l’exécution.

0 1 2 3 4 5 6 7 8 9

1 11 2 3 19 5 13 17 23 7

Page 66: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 66

Tableaux mono-dimensionnelsTableaux mono-dimensionnels Utilisation

Le programme Tableau est un exemple simple qui affiche sur l'écran tous les éléments du tableau des nombres premiers Tprem

main() { const int N = 10;int Tprem [N];Tprem[0] = 1;Tprem[1] = 2; … Tprem[9] = 29; // pas Tprem[10] !!! int i;for (i= 0; i < N; i = i +1)

printf("%d \n", Tprem[i]);}

Page 67: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 67

Tableaux mono-dimensionnelsTableaux mono-dimensionnelsUtilisation (suite)

Le programme TabCar compte et affiche le nombre de 'a' dans le tableau Tcar

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);}

Page 68: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 68

Tableaux mono-dimensionnelsTableaux mono-dimensionnels

Utilisation (suite) Le programme PremCar vérifie et affiche si 'a' est présent dans le

tableau Tcar

main(){ // programme PremCar

const int N = 100;char Tcar [N];int i ;

i = 0;while ((i < N) && (Tcar[i] != 'a')) i = i + 1;if (i == N) printf("a n'est pas dans le tableau");else printf("a est dans le tableau");}

Page 69: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 69

Qualité d'un programmeQualité d'un programme Le programme est-il une bonne traduction de

l'algorithme ? Le programme produit-il toujours la solution du

problème ? Le programme est-il performant ? Fait-il des actions

inutiles ? Utilise-t-il des variables sans en avoir réellement besoin ?

La validation, vérification, test de programme sont des tâches très complexes qui s'appliquent de façon beaucoup plus générale ... tout au long du cycle de vie du logiciel !

Page 70: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 70

Test de programme - Trouver les fautesTest de programme - Trouver les fautes Test statique (lecture attentive du texte du

programme) le type des variables usage des variables

Test dynamique (exécution du programme)

1. choisir un jeu de tests (les entrées à tester)– test structurel (texte et structure du programme)– test fonctionnel (spécification, algorithme)– test aléatoire ou statistique

2. traitement/exécution du jeu de tests

3. analyse (dépouillement) des résultats du jeu de tests

Page 71: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 71

Test structurel - Trouver les fautes Test structurel - Trouver les fautes Impossible d'essayer toutes les valeurs possibles en entrée !

Un jeu de test est un ensemble représentatif de valeurs d'entrées permettant de générer tous les types d'exécution du programme : de couvrir toutes les instructions et enchaînements d'instructions

Mini-exemple (1) scanf("%d", &I) ; "(2) if (I <= 10) (3) bloc1 "

else (4) bloc2 ;

- séquence 1.2.3 valeurs test de I : -435 , 10"- séquence 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 intéressante que

-435 !

Page 72: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 72

Un exemple plus élaboréUn exemple plus élaboré(1) scanf("%d", &I); scanf("%d", &J); K= 0; signe = 1;(2) if (I < 0) {(3) signe = -1 ; (4) I = - I;(5)} (6) if (J < 0) { (7) signe = -signe ; (8 ) J = - J;(9) } (10) while (I >= J) {(11) I = I - J ; (12) K = K+1;(13)} (14) K = signe * K; printf("%d", K) ;

Page 73: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 73

Un exemple plus élaboréUn exemple plus élaboré jeu de tests

séquence 1.2.3.4.5.6.7.8 valeurs test : ... séquence 1.2.4.6.8 valeurs test : ... séquence 1.2.3.4.6.8 valeurs test : ... séquence 1.2.4.5.6.8 valeurs test : ...

... ... séquence 1.2.4.6.7.6.8 valeurs test : ... séquence 1.2.3.4.5.6.7.6.8 valeurs test : ...

... ...

Page 74: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 74

Test des conditionsTest des conditions(1) if ( (I==0) || (I==36 ))

(2) bloc1 else

(3) bloc2

Jeu de tests séquence 1.2 valeurs test de I : 0 Ne pas négliger la valeur test 36 pour I afin que le bloc1 soit testé pour

les deux valeurs 0 et 36 qui rendent la condition vraie.

Règle générale Générer les tests qui permettent d'explorer toute la table de vérité d'une

expression booléenne à partir des conditions élémentaires.

Page 75: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 75

Complexité et coûts des algorithmesComplexité et coûts des algorithmes Un problème peut avoir une solution mais pas de

solution algorithmique (on ne sait pas construire la solution).

Exemple (problème de l'arrêt) : Considérons la fonction booléenne à 2 arguments. Le

premier argument est un programme C. Le deuxième argument est une entrée pour ce programme.

Cette fonction vaut vraie si le programme s'arrête pour l'entrée donnée et faux sinon.

Il est impossible d'écrire un algorithme (et un programme C) qui réalise cette fonction.

Page 76: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 76

Complexité et coûts des algorithmesComplexité et coûts des algorithmes Un problème peut avoir une solution

algorithmique mais cet algorithme peut ne pas être raisonnable parce qu'il effectue un nombre très grand d'opérations.

Exemple (programme de jeux): Jeu d'échec. A chaque étape, il existe un nombre

fini de coups possibles. Donc il est possible d'explorer la suite du jeu pour chaque coup. Mais il faut examiner de l'ordre de 1019 coups pour décider de chaque déplacement.

Page 77: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 77

Coût en temps d'un algorithmeCoût en temps d'un algorithme unité de mesure : opération élémentaire

identifier les opérations élémentaires

calcul du coût cas le pire = compter le nombre maximal

d'opérations élémentaires effectuées par une exécution (la pire)

moyenne = considérer toutes les exécutions possibles, pour chacune compter le nombre ...

Page 78: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 78

Algorithme d'EuclideAlgorithme d'EuclideAlgorithme PGCD-1 //Calcul du pgcd de i et j Lexique I, J : entier // Entrées

P : entier // Sortiedébut

tant que I ≠ J fairesi I > J alors I ← I - J sinon J ← J - I;

P ← I; fin

Nombre d'itérations ?

Page 79: Introduction à l’informatique

Université PARIS-SUD - Licence MPI - S1 79

Algorithme d'EuclideAlgorithme d'Euclide

Algorithme PGCD-2 //Calcul du pgcd de i et j Entrée I, J : entier Sortie P : entier Auxiliaire K entier

débuttant que J > 0 faire

K ← I mod J;I ←J ; J ← K ;

P ← I; fin Nombre d'itérations ?