Upload
phungkhuong
View
252
Download
0
Embed Size (px)
Citation preview
Progression :
1. Notion d'algorithme et de programme 2. Premiers pas en C 3. Type entier, réel, constantes et variables 4. Les entrées-sorties simplifiées 5. Expressions arithmétiques et logiques 6. Syntaxe des instructions
7. Les entrées-sorties 8. Quelques compléments commodes 9. Variables indexées (tableaux) 10. Adresse et pointeur 11. Les Fonctions 12. Les objets structurés 13. Les fichiers 14. Piles, files, listes chaînées
I.
Notion d’algorithme
Un parallèle culinaire
Une recette de cuisine
Ingrédients
Recette
Plat
Algorithme
Données (entrées)
Algorithme
Résultat (sorties)
a) Définition
• Suite finie et non ambiguë d’instructions
• dans un langage pseudo-naturel simple
• permettant de décrire une méthode pour répondre à un problème
• en s’affranchissant des aspects matériels de mise en œuvre (type de machine, langage de programmation utilisé, …)
L’étape suivante sera de traduire cet algorithme dans un langage de programmation « compréhensible » et exécutable par une machine
problème algorithme programme solutions
données
b) Analyse préliminaire et développement d’un algorithme
• Poser clairement le problème o Spécification des données à partir de l'énoncé du problème, d'hypothèses, ou de
source d'informations externes, ... o Spécification des buts à atteindre à partir des résultats attendus, des suites
d'opérations à effectuer, ... o S'assurer que le problème puisse être traité (il y a des problèmes indécidable !) o Simplifier éventuellement le problème (ex : calcul des décimales de π ...)
• Définir l'algorithme o Tout objet manipulé doit être clairement défini (nature et rôle) avant son usage. o Définir une suite d’instructions simples :
o non ambiguë o exécutable en un nombre fini d’opérations o dans un temps limité o et qui doit produire un résultat
a) Définir un premier algorithme très général
• ensemble d’actions de haut niveau • à réaliser de manière séquentielle Recette des crêpes au nutella :
I. Définir les ingrédients (350g de farine, ½ litre de lait, 3 œufs) II. Faire la pâte à crêpe III. Cuire une crêpe dans une poêle IV. Étaler du nutella sur la crêpe
b) Raffinement des tâches
Chaque action (ou tâche) peut-être vue comme un sous problème • avec ses données et son résultat spécifiques • et qui peut être résolu isolément
â raffinement de chaque tâche
On enchaîne des raffinements successifs : â Conception structurée
Raffinement successifs :Recette des crêpes au nutella : I. Définir les ingrédients II. Faire une pâte à crêpe
1. Mettre 350g de farine dans un bol 2. Ajouter ½ litre de lait 3. Mélanger 4. Ajouter 3 œufs 5. Mélanger
III. Cuire une crêpe dans une poêle IV. Étaler du nutella sur la crêpe
Action Mélanger : répétition d’une action élémentaire : Tant que le mélange n’est pas homogène,
- tourner la pâte avec une cuillère
3. Eléments de base pour écrire un algorithme Une recette de cuisine Un algorithme • ingrédients (farine, beurre, …) données • récipients (plat, bol, …) variables • outils (couteaux, mixeur…) opérateurs • instructions simples (verser, …) affectation, … • instructions conditionnelles si-alors-sinon • instructions répétitives tant-que
"Outils" de base pour écrire un algorithme a) définition d'une variable b) lecture/écriture c) expressions arithmétiques et logiques d) affectation e) instruction conditionnelle f) répétition d’une action
a) Définir une variable ð nommer au début les variables utilisées (contenants) ð en précisant la nature du contenu (entier, réel, caractère…) ex : soient a, b, c trois réels
b) Instruction de lecture/écriture ð pour représenter les échanges homme-machine
• lire (variable) homme -> machine • écrire(variable) homme <- machine
c) Expressions ð Expression arithmétique (dans N, Z, R…)
ex : b2-4ac
ð Expression logique (résultat VRAI ou FAUX) avec les opérateurs ET, OU, NON, = , ≠ , < , ≤ ex : 0 < b2-4ac
ET vrai faux
vrai vrai faux
Faux faux faux
OU vrai faux
vrai vrai vrai
faux vrai faux
d) Affectation : • Une variable ne peut contenir qu’une seule information
variable <- expression • l’affectation qui initialise
x <- 1 s <- x+1
• l’affectation qui modifie s <- s+x
Remarques : • lire est une forme d’affectation • variable à droite de <- : désigne le contenu (la valeur) • variable à gauche de <- : désigne le contenant (zone mémoire)
s <- s+x
e) Instruction alternative
• Action liée à une condition
si (condition) action1 sinon action2 fin-si suite de l’algorithme
Remarques : • les actions sont des suites d’instructions élémentaires • délimitées par si, sinon et fin-si • sinon action2 est facultatif • présentation : il faut indenter les instructions de chaque action
oui condition
action1 non
action2
f) Instruction répétitive
• Action répétée sous condition
tant-que (condition) action fin tant-que suite de l’algorithme
condition
non
oui
action
5. Quelques exemples : • l’algorithme pour la résolution de l’équation du 2ème degré • l’algorithme mystérieux soient a, b, r entiers;
lire(a) ;
lire(b) ;
r <- 0 ;
tant-que (b ≠ 0)
si (b est pair)
b <- b/2 ;
a <- 2*a ;
sinon
b <- b-1 ;
r <- r+a ;
fin-si
fin tant-que
ecrire(r) ;
Résumé chap. I • Un algorithme est une recette obtenu par affinements successifs • Il manipule des contenants (variables) et des contenus (valeurs)
• Il s'affranchit des contraintes spécifiques aux langages • Les outils disponibles :
o définir les variables : soient a un réel, i un entier, c un caractère o les opérateurs arithmétiques et logiques (≠ , = , < , ≤ , et , ou , non) o initialiser une variable : a <- 2*3.14 i <- 0 c <- 'Z' o modifier une variable : a <- a*a i <- i+1 c <- c-'A'+'a' o si condition alors action fin si o tant que condition faire action fin tant que
• Recommandations : o ne jamais utiliser une variable non initialisée (contenu "aléatoire")
o simuler les départs de boucle et les fins de boucle en étudiant le contenus des variables pour valider vos algorithmes
o connaître les algo. de bases : compter et accumuler (moyenne,...), calculer des suites (xn, x!, ...), chercher une valeur particulière dans une suite (min, ...), ...
II.
Premiers pas en C
Introduction Langage de programmation : • syntaxe non ambigüe qui permet de retranscrire un algorithme en une suite
d'instructions qui seront ensuite converties en langage machine • prend en compte les spécificités techniques de la machine (contrairement à un
algorithme) • Cette suite d'instructions est désignée "code source"
Compilateur : • spécifique au langage • programme qui permet de traduire le texte du programme (code source) en
instructions machines de bas niveau (code exécutable) • prend en compte les spécificités techniques de la machine
problème algo. code exécut. solutions
données
Code source Compilation
Le C a été mis au point par D.Ritchie et B.W.Kernighan
• Au début des années 70
• Pour écrire un système d'exploitation portable : UNIX
• Le succès d'UNIX a entraîné celui de C :
• un des langages le plus utilisé (gestion des réseaux, …).
La première définition de ce langage a été donnée dans leur livre
« The C programming language ». Ce langage a été normalisé en 1989 : C-ANSI
(American National Standards Institute)
Quelques caractéristiques du langage : • adapté aux programmes de taille moyenne • programmation de bas niveau (proche assembleur) • comme de haut niveau (programmation structurée) • indépendant de la machine (portabilité) • C original et C-ANSI (1989) plus fiable au niveau syntaxique
Ce cours : un sous-ensemble du C-ANSI
Premières remarques sur la constitution d’un programme C : • Programme C : fichier texte
• Commentaires : /* coucou */
1. Développement d’un programme
1 : L’algorithme : « recette » décrite en pseudo-français 2 : Code source : transcription de l’algorithme dans le langage fichier construit sous un éditeur de texte 3 : Compilation : traduction du code source en code machine exécutable 4 : Edition de lien : (link) compléter le code avec des fonctions prédéfinies
déjà compilées (sin , sqrt, …)
â Fichier exécutable : résultat de cette séquence d’opérations
Développer un programme : • réaliser les 4 étapes • tester l'exécution avec différents jeux de données • recommencer la séquence jusqu'à obtention d'un fonctionnement satisfaisant
2. Code source Un fichier source est une succession d'un nbre quelconque d'éléments indépendants :
• directives pour le préprocesseur (lignes qui débutent par # ) • construction de types
• déclaration de variables et de fcts externes
• définition de variables (réservation d'espace mémoire)
• définition de fcts dont la fct principale main( ) !!!
3. Compiler/executer
Fichier source salut.c!/* Auteur : Melanie Zettofret! Objectif : afficher coucou ! */!!
#include <stdio.h>!!
void main(void)!{ !! printf("coucou !\n");!}!
!!
Dans une console UNIX : Compiler avec la commande gcc salut.c –o salut
lancer l’exécution du code en tapant ./salut !
III.
Constantes, types et variables
1. Constantes 2. Identifiateurs 3. Variables 4. Affectation
1. Les constantes Ce sont les valeurs définies explicitement. On distingue : - les caractères alphanumérique-étendus
‘a‘ ‘A‘ ‘1‘ ‘ ‘ ‘@‘ ‘\n‘
- les entiers 0 -1 32767
- les réels 0. 3.14 0.314e1 0.314E1
ATTENTION : 1 est différent de ‘1‘
2. Identificateur
• Pourquoi faire ? donner des noms aux variables et aux actions
• 31 caractères max, majuscule ≠ minuscule
identificateur : lettre[lettresOuChiffresOu_ ] • Exemple : x x1 delta Delta Bond_007
• Mots réservés du langage (voir fiche résumé) : o une trentaine o tous en minuscule
!
3. Variable • un emplacement mémoire (1, 2, 4 octets ou plus) • on en crée (presque) autant qu’on veut • en donnant des noms qui suggèrent bien leurs rôles
compteur, somme, valeurMin, ... • le contenu peut changer dans le temps • contient toujours quelque chose !!! Une variable sera toujours définie avant utilisation par : • un type (sa nature qui détermine sa taille) • et un identificateur (son nom)!
3.1 Type d’une variable • convention de codage de l'information • dans un emplacement de taille préfixée
7 types de base en C : ü char : petit entier codé sur 1 octet (entre –128 et 127) ü short : entier de taille moyenne sur 2 octets (de –32768 à 32767) ü long : grand entier sur 8 octets (jusqu’à 19 chiffres) ü int : entier dont la taille est liée au processeur (mot machine) ü float : réel avec 7 chiffres significatifs ü double : réel de grande précision ü long double : réel de très grande précision
Le qualificatif unsigned : redéfinit l’intervalle de validité à partir de 0 Un unsigned short est dans [0, 65535] Un unsigned char est dans [0, 255]
3.2 Définition d'une variable : Objectifs : • réserver un emplacement mémoire • qui soit adapté au codage de l’information • associer un nom (identificateur) à cet emplacement Syntaxe pour la définition de variable :
-> type variableInit [ , variableInit ] ; où variableInit : -> identificateur -> identificateur = expression constante
Exemple : !float x;!!long i, j=1, k ;!!char c1='1', c2 = 2 ;!
!Exemples d’erreur :!!int i=0, j=i+1 ;!!char a=300 ;!
!!
Remarques : • Le C ne fait pas de différence entre les petits entiers et les caractères qui sont déclarés indifféremment comme des char
char c ;
• Le code ASCII des lettres et des chiffres respecte l’ordre partiel
intuitif des caractères alphanumériques ‘a’ (97), ‘b’ (98), … ‘A’ (65), ‘B’ (66), … ‘0’ (48), ‘1’ (49), ‘2’ (50), …
binaire
petit entier codé en binaire
Caractère représenté par son code ASCII (65)
0 1 0 0 0 0 0 1
65 ‘A‘
4. Affectation d'une variable : Syntaxe simplifiée de l'instruction d'affectation :
variable = expression ; Exemple : /* définition d'une variable */
short cpt;
/* affectation d'une variable */ cpt = 0 ; cpt = cpt+1 ;
Résumé chap. II et III • Comprendre les types et leur codage (nbre d'octets occupés, capacité de codage)
o float a, b ; double x ; long double distTerreLune ; o char i ; short compteur ; int moyenne ; long numTel ; o char carCourant ; o unsigned long distance ; unsigned char pixRouge, pixVert, pixBleu ;
• Affectation d'une variable : • compteur = 0 ; • compteur = compteur+1 ;
• Remarques et Recommandations : o Les char représentent à la fois les caractères et les petits entiers (le code ASCII
qui représente un caractère est un petit entier) o Ils ne se distinguent que par les opérations de lecture/écriture
o Les calculs doivent respecter la capacité de codage de chaque type (risque de "débordement")
o Utiliser des noms de variables mnémoniques