programmation impérative 2006-2007pensa/prog-l2-pcpa/cours1.pdf · 2006-10-04 · faire tout ce...

Post on 13-Apr-2020

4 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Programmation Impérative2006-2007

Licence PhysiqueUniversité Jean Monnet

Ruggero G. PENSA

Eléments d’algorithmique

Introduction

Variables

Opérateurs et expressions

Actions

Entrée/Sortie

Définitions

Algorithmedescription d’un ensemble d’étapes (instructions) à effectuer dans un ordre donné pour parvenir à un résultat

Langage de programmationlangage dans lequel un algorithme peut être traduit pour être compris par l’ordinateur

Programmedescription d’un algorithme dans un langage de programmation

Exemples Guide de montage d’un meuble IKEA/Conforama… Recette de cuisine

Types de langage

Pour vos algorithmes Langage naturel : français, anglais, italien… Langages formels : pseudo-code

Pour vos programmes Langages évolués : C, Pascal, Visual Basic, Delphi, Java…

Utile à savoir Langages assembleurs : mnémoniques Langages machines : ensemble de bits

Langages interprétés : Visual Basic, Matlab, Pearl… Langages compilés : C, Pascal, Cobol, ADA

Langage de programmation

Un langage de programmation est un langage formel avec une syntaxe bien définie, qui sert à coder des algorithmes et des structures de données dans une forme compréhensible par l’ordinateur

Un programme informatique est constitué d’une suite d’instructions (ou ordres) exécutées par l’ordinateur pour accomplir une tâche particulière

Dans un langage il est important à la fois Le contenu (le sens) La forme (la syntaxe, la grammaire)

Méthodologie de programmation

Problème

Algorithme

Programme(langage évolué)

Programme(langage machine)

Résultats

Analyse

Débogage

Révision Débogage

Conception

Exécution

Traduction (Compilation)

TD

TP

Qualités d’un algorithme

Correctbien faire ce qui est prévu

Completfaire tout ce qui est prévu

Efficaceexécution rapideavec peu d’occupation mémoire

Clairdoit être facilement lisible et évolutif

Introduction au formalisme

Un algorithme doit être compréhensible par plusieurs personnes

Exemple

Nom : addDeuxEntiersRôle : Additionner deux entiers Entrée : a, b : entierSortie : entierDéclaration :

débutretourner (a + b)

fin

Entête

Corps

Variable

Entité qui contient une information

Possède un nom (identifiant)

Possède une valeur

Possède un type (qui caractérise l’ensemble des valeurs que peut prendre la variable)

Est stockée dans la mémoire centrale de l’ordinateur

Variable

Analogie avec une armoire d’archive qui contiendrait des tiroirs étiquetés

Armoire Mémoire de l’ordinateur Tiroirs Variables Etiquettes Identifiants Contenu Valeur Couleur Type

Exemple : bleu pour les factures, rouge pour les bons de commande…

Type d’une variable

Caractérise L’ensemble des valeurs que peut prendre la variable L’ensemble des actions que l’on peut effectuer sur une variable

Toute variable doit être déclarée avant son utilisation (partie Déclaration) en lui associant un Type

Identifiant : Type Exemples

age : Naturel nom : Chaîne de Caractères sexe : Caractère moyenne : Réel

Une fois qu’un type est associé à une variable, on peut pas le changer

Une fois qu’un type est associé à une variable le contenu de cette variable doit être obligatoirement du même type

Types de données

Types simples Dénombrables (nombre d’éléments fini) Indénombrables (nombre d’éléments infini)

Types complexes Exemples

- nombre complexe (partie réelle + partie imaginaire)- etudiant (nom + prénom + moyenne)

Types de données simples

Dénombrables

Booléen : { VRAI, FAUX }les variables ne peuvent prendre que ces deux valeurs

Intervalle, ex, : [1..10]les variables ne peuvent prendre que les valeurs entières définies dans cet intervalle

Énuméré, ex : {rouge, vert, jaune}les variables ne peuvent prendre que les valeurs explicitées

Caractères : table ASCII

Dénombrables

Exemples célibataire : booléen mois : 1..12 minuscules : ‘a’..‘z’ jour : JoursDeLaSemaine

Déclaration : type JourDeLaSemaine = énuméré {lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche}

Types de données simples

Indénombrables

Entier (positifs et négatifs)

Naturel (entiers positifs)

Réel

Chaîne de caractéresExemple ’’cours’’ ou ’’TD d’algorithmique’’

Indénombrables

Exemples

age : naturel

taille : réel

nom : chaîne de caractères

Constante

Variable dont la valeur est fixée tout au début de l’algorithme et ne change pas lors de l’exécution de l’algorithme

Possède Un nom Un type Une valeur (fixe)

Exemples Pi : Réel 3.14159 Euro : Réel 6.55957 Répétitions : Entier 10

Opérateurs, opérande et expression

Opérateur : symbole d’opération qui permet d’agir sur des variables ou de faire des calculs

Opérande : entité (variable, constante ou expression) utilisée par un opérateur

Expression : combinaisons d’opérateur(s) et d’opérande(s), evaluée durant l’exécution de l’algorithme.Possède une valeur (son interprétation) un type

Opérateur, opérande et expression

Exemple : a + b

a : opérande gauche + : opérateur b : opérande droite a + b : expression

Si a vaut 2 et b vaut 3, l’expression a + b vaut 5 Si a et b sont des entiers, l’expression a + b est de

type entier

Type d’opérateurs

Unaire : un seul opérande(Exemple : non)

Binaire : deux opérandes(Exemple : +)

L’expression possède un seul type dans une expression chaque opérateur doit être associé au type de l’expression(Exemple : "J’ai" + 2 + "chats")

Seule exception tolérée : types arithmétiques(Exemple : 2 + 3.5)

Signification des opérateurs

Peut changer en fonction du type des opérandes

Par exemple

opérateur + avec des entiers aura pour sens l'addition2 + 3 vaut 5

Opérateur + avec des chaînes de caractères aura pour sens la concaténation"bonjour" + " tout le monde" vaut"bonjour tout le monde"

Opérateurs sur les booléens

Quatre opérateurs

vraifauxfauxvrainon aa

fauxfauxfauxvraifauxvraivraivraifauxvraivraivraia ou bba

fauxfauxfauxfauxfauxvraifauxvraifauxvraivraivraia et bba

fauxfauxfauxvraifauxvraivraivraifauxfauxvraivrai

a ouExclusif bba

Opérateurs sur les énumérés

Trois opérateurs succ : permet d'obtenir le successeur pred : permet d'obtenir le prédecesseur ord : permet d'obtenir le naturel de correspondant à la

position de l'élément dans la liste de l'énuméré

Exemplestype JoursDeLaSemaine succ Lundi vaut Mardisucc Dimanche vaut Lundi

pred Mardi vaut Lundipred Lundi vaut Dimanche

ord Lundi vaut 0ord Dimanche vaut 6

Opérateurs sur les caractères

Quatre opérateurs (les trois des énumérés + car)

On considère la position dans la table ASCII

Exemples ord 'A' vaut 65 car 65 vaut 'A' pred 'A' vaut '@' succ 'b' vaut 'c'

Cf. man ascii

Opérateurs arithmetiques

Pour les entiers : +, -, *, / Pour les réels : +, -, *, / Pour les naturels et les entières :div : division entièremod : reste de la division

Exemples 11 div 2 vaut 5 11 mod 2 vaut 1

Opérateurs sur les chaînes de caractères

Concatenation : +

Exemple :"bonjour" + " tout le monde" vaut "bonjour tout le monde"

Opérateurs de comparaison

= : opérateur d'égalitéon le retrouve chez tous les types simples et permet de savoir si deux opérandes sont égales

≠ : opérateur d'inégalité

<, >, ≤, ≥ : opérateurs de comparaisons pour les types possédant un ordre

Une expression de comparaison contenant un opérateur de comparaisons est de type booléenExemples 12 < 14 vaut VRAI "marco" = "zizou" vaut FAUX

Priorité des opérateurs

Tout comme en arithmétique, les opérateurs ont des prioritésExemple : * / + - (du plus prioritaire au moins prioritaire)

Pour les booléen :non, et, ouExclusif, ou

En cas de doute : utiliser les parenthèses

Actions sur les variables

Lecture d'une variable obtenir son contenu Il suffit de nommer la variable

Exemple : écrire(a)

Écriture d'une variable affecter un (nouveau) contenu à la variable en utilisant la procédure lire (a) en utilisant l'opérateur d'affectation ""

Syntaxe : identifiant expressionl'expression ne contient pas d'opérateur d'affectation

Opérateur d'affectation

Qu'est-ce que ça veut dire c a + b ? On prend la valeur contenue dans la variable a On prend la valeur contenue dans la variable b On additionne ces deux valeurs On met ce résultat dans la variable c Si c avait auparavant une valeur, cette dernière est perdue

Exemple :- x 1 (on affecte la valeur 1 à la variable x)- x x + 1 (on ajoute 1 à la valeur contenue dans x, on

stocke le résultat dans x)- Résultat : incrémentation de la variable x d'une unité (x vaut 2)

Les entrées/sorties

Un algorithme a souvent des interactions avec l'utilisateur. Il peut Afficher un résultat (texte ou contenu d'une variable) Demander à l'utilisateur de saisir une information afin de la stocker

dans une variable

Affichage Commande écrire suivie entre parenthèses de la chaîne de

caractères entre guillemets et/ou des variables de type simple à afficher (séparées par des virgules)

Exemple :écrire("La valeur de la variable prix est ", prix, " Euros")

Saisie Commande lire suivie entre parenthèses de la variable de type

simple qui va recevoir la valeur saisie par l'utilisateur Exemple : lire(b)

Exemple d'algorithme

Nom : euroVersFrancRôle : Convertisseur des sommes en euros vers le franc, avec sisie de la

somme en euro et affichage de la somme en franc.Entrée : -Sortie : -Déclaration : constante tauxConversion : Réel 6.55957 variable valeurEnEuro, valeurEnFranc : Réeldébut écrire("Entrer votre valeur en euro : ") lire(valeurEnEuro) valeurEnFranc valeurEnEuro * tauxConversion écrire(valeurEnEuro, "euros = ", valeurEnFranc, " Fra")fin

Langage C

Introduction

Variables

Opérateurs et expressions

Instructions

Entrée/Sortie

Histoire

Développé en 1971 par Dennis Ritchie au sein des laboratoires Bell pour écrire le système UNIX

Spécifications publiées en 1978 dans l'ouvrage de Kerninghan et Ritchie : "The C Programming Language" (K&R C)

Norme AINSI C publiée en 1989 (ANSI C)

Compilation

.c

.h

.s .o

compilateur

assembleur

éditeur de liens

gcc –o exécutable source.c

fichier.cfichier.o

fichier exécutable

Compilation 2

.c

.h

.s .o

compilateur

assembleur

éditeur de liens

.c

.s .o

vert.c

bleu.c

vert.o

bleu.o

common.h

fichier exécutable

Séparateurs et commentaires

Espace, tab et retour à la ligne sont ignorées (mais utiles pour la mise en forme du fichier .c)

/* */ : commentaires (ignorés)/* ceci est un commentairesur plusieurs lignes */

; termine une déclaration ou une instruction simple , sépare deux éléments dans une liste (…) liste d'arguments {…} bloc ou liste d'initialisations […] dimension/sélection d'élements de tableaux

Structure d'un programme C

fin du bloc}corps du programme… ;variables… ;début du bloc{fonction principaleint main(int argc, char*argv[])fonctions… ;variables… ;prépocesseur#include <stdio.h>

Directives du procésseur

Commencent toujours par #Exemples : #include #define #ifdef

Quatre utilisations principales1. Inclusion de fichiers2. Constantes symboliques3. Macros4. Compilation conditionnelle

Variables

En C les variables sont caractérisées par

un identifiant

une portée

un type

une valeur

Identifiants

L'identifiant d'une variable est son nom

En C il est composé d'une suite de caractères parmi les lettres minuscules les lettres majuscules les chiffres "_" (underscore)

Le premier caractère est toujours "_" ou une lettre

Exemples (nom corrects)x x2 _x LePoint c_est_bon

Exemples (non incorrects)2x non' le.point hara-kiri

Identifiants 2

Distinction entre majuscules et minusculestoto ≠ Toto ≠ TOTO

Les mots réservés du langage C ne sont pas redéfinissables par le programmeur

caseswitchwhile

doforelseifcontinuebreak

returngotovolatilestaticregisterextern

autoconstsizeoftypedefunionstruct

enumunsigneddefaultsignedshortlong

voidasmdoublefloatcharint

Déclaration

On prévient le compilateur en début de bloc que l'on va utiliser une variable et le type d'éléments qui y seront stockés

Forme : <type> <identifiant> Exemple : int ma_variable

Affectation

On stocke une valeur dans la variable

Forme : <identifiant> = <contenu> ; Exemple : a = 3 ; (si a est une variable entière)

Initialisation

Déclaration + Affectation

Forme : <type> <identifiant> = <contenu> ; Exemple : int a = 3 ; (si a est une variable

èntiere)

Utilisation

On récupère la valeur qui est stockée dans la variable

Forme : <identifiant>Exemple : a + 2.5 (si a est une variable réelle)

Portée

La portée d'une variable définit où la variable peut être utilisée

En C une variable peut être utilisée à partir du moment où elle a été définie et jusqu'à la fin du bloc de déclaration

Portée Exemple

Variable a#include…int a ;… ;void test(int b){ if (a > b) { int c = b ; b = a ; a = b ; } ecrire(b) ;}void test2…

Portée Exemple

Variable b#include…int a ;… ;void test(int b){ if (a > b) { int c = b ; b = a ; a = b ; } ecrire(b) ;}void test2…

Portée Exemple

Variable c#include…int a ;… ;void test(int b){ if (a > b) { int c = b ; b = a ; a = b ; } ecrire(b) ;}void test2…

Types de base

void : type vide char : 'a' … 'b' … 'B' … '\n' … '\t' … '\014' int : 120 … -10 … 0123 … 0xfc … 0xFC float : 1.23 … -1.23 … 1.2345e+12 … 1. double : 1.23 … -1.23 … 1.23456789012345e+12 pas de type booléen en C Utiliser les entier

FAUX : 0, VRAI : tous les autres valeurs pas de type intervalle

Le type int possède 3 sous-typesshort, long et unsigned

Constantes

Les constantes sont des variables dont la valeur ne peut pas changer

Elles se déclarent comme des variables et sont affectées définitivement à ce moment là

Elles sont précédées du mot-clef constExemples const double Pi = 3.141592654 ; const int BufSize = 1024 ; const int VRAI = 1, FAUX = 0 ;

Elles ne peuvent pas être modifiées

Expressions

Une expression est un ensemble d'une ou de plusieurs opérations

Une expression a une valeur Types d'opérations :

arithmétiques logiques affectation et in/de-crémentation relations conversion de type

L'ordre d'évaluation dans une expression est déterminé par des règles de priorité et d'associativité

Le type de donné du résultat est déterminé par le type des opérandes

Opérateurs arithmétiques

Pour les entiers et les réels

expr % exprmodulo (binaire)%

expr / exprdivision (binaire)/

expr * exprmultiplication (binaire)

*

expr – exprsoustraction (binaire)-

-exprsoustraction (unaire)-

expr + expr + …addition (binaire)+UsageFonctionOpérateur

Opérateur d'affectation

Permettent de donner une valeur à une variable

int i, j ;i = 0 ;j = 1 ;

Attention : retourne la valeur affectéeint x, y ;x = y = -1 ; /* se lit : x = (y = -1) ; */

Combinaison possible avec un opérateur arithmétiquea = a + 2 ; a += 2 ;y = y / 4 ; y /= 4 ;x = x * (y + z) x *= y + z ;

Opérateurs d'in/de-crémentation

L'opérateur ++ et l'opérateur – fournissent un moyen efficace pour compacter les écritures x++ ; post-incrémentation x-- ; post-décrémentation ++x ; pré-incrémentation --x ; pré-décrémentation

Significationx++ ; équivaut à x = x + 1 ;x-- ; équivaut à x = x – 1 ;

Opérateurs relationnels

Le résultat est une expression booléenne vraie ou fausse Lors de l'évaluation : arrêt de l'évaluation dès que la première

opérande est fausse, dans le cas de &&, ou vraie, dans le cas de ||

expr || exprou logique||expr && expret logique&&

!exprnon logique!expr <= exprinférieur ou égal<=expr < exprinférieur<

expr >= exprsupérieur ou égal>=expr > exprsupérieur>expr != exprinégalité!=expr == exprégalité==

UsageFonctionOpérateur

Instruction

Il existe deux types d'instruction

Instructions simples terminées par un ';'Exemple : a = 4 ; b++ ;

Instructions composées utilisant un bloc {…} Instructions conditionnelles Instructions d'itération

Instruction conditionnelle (exemple)

if (a < b){ c = b – a ; ecrire("Négatif") ;}else{ c = a – b ; ecrire("Positif ou zéro") ;}

Instructions d'itération

while (a < b){ a++ ; b-- ;}

for (i=1 ; i <= 10 ; i++) { somme += i ; produit *= i;}

Entrées

Entrées : scanf()

scanf("%c", &c) ;char c ;scanf("%f", &f) ;float f ;scanf("%lf", &d) ;double d ;scanf("%i", &i) ;int i ;instructionVariable

!!!

Sorties

Entrées : printf()

printf("%c", c) ;char c ;

printf("%lf", d) ;printf("%f", f) ;printf("%e", f) ; exponentielle

double d ;float f ;

printf("%i", i) ;printf("%d", i) ;printf("%x", i) ; héxadecimal

int i ;instructionVariable

Exemple d'algorithme

Nom : euroVersFrancRôle : Convertisseur des sommes en euros vers le franc, avec sisie de la

somme en euro et affichage de la somme en franc.Entrée : -Sortie : -Déclaration : constante tauxConversion : Réel 6.55957 variable valeurEnEuro, valeurEnFranc : Réeldébut écrire("Entrer votre valeur en euro : ") lire(valeurEnEuro) valeurEnFranc valeurEnEuro * tauxConversion écrire(valeurEnEuro, "euros = ", valeurEnFranc, " Fra")fin

Traduction en Langage C

#include <stdio.h>

const float tauxDeConversion = 6.55957 ;

int main(int argc, char *argv[]){

float valeurEnEuro, valeurEnFranc;printf("Entrer votre valeur en euros :") ;scanf("%f", &valeurEnEuros) ;valeurEnFranc = valeurEnEuro * tauxDeConversion ;printf("%f euros = %f Fra\n", valeurEnEuros,

valeurEnFranc) ;return 0 ;

}

Récapitulatif

scanfprintf

lireécrire

EntréeSortie

E/S

a++ ;a-- ;+ - / * %! && ||== != < > <= >=

a a + 1a a – 1+ - / * mod et +. -. *. /.non et ou= ≠ < > ≤ ≥

incrémentationdécrémentationarithmétiquelogiquerelation

Opérateurs

int a ;a = 3 ;a

a : Entiera 3a

déclarationaffectationutilisationportée

Variables

void--intfloat / doublechar

-Booléen[1..10]EntierRéelCaractère

videbooléenintervalleentierréelcaractère

Types

Langage de programmationLangage C

Langage algorithmiquePseudo-code

Instruction

Depuis la déclaration jusqu'à la fin du bloc de déclaration

top related