Objectifs de ce cours. Introduction au langage C - Cours 4. Procédures. Exemple de procédure. Analyse de problème.

Documents pareils
1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Algorithmique et Programmation, IMA

Introduction au langage C

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Langages et Concepts de Programmation Introduction à la programmation en langage C


Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

UE Programmation Impérative Licence 2ème Année

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Le prototype de la fonction main()

ALGORITHMIQUE ET PROGRAMMATION En C

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Les chaînes de caractères

Programmation système I Les entrées/sorties

Présentation du langage et premières fonctions

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Le langage C. Séance n 4

I. Introduction aux fonctions : les fonctions standards

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Programmation système de commandes en C

Programmation en langage C

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Cours Programmation Système

Langage Éric Guérin 5 octobre 2010

Programmation C. Apprendre à développer des programmes simples dans le langage C

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Bases de programmation. Cours 5. Structurer les données

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Programmation Classique en langage C

Programmation C. J.-F. Lalande. 15 novembre 2012

INF 321 : mémento de la syntaxe de Java

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Rappels Entrées -Sorties

Chap III : Les tableaux

Les structures. Chapitre 3

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Notes de Cours - Programmation Pascal Ferraro

Chapitre 1 : La gestion dynamique de la mémoire

I00 Éléments d architecture

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Initiation. àl algorithmique et à la programmation. en C

Quelques éléments de compilation en C et makefiles

Le langage C. Introduction, guide de reference

TP 1. Prise en main du langage Python

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

STAGE IREM 0- Premiers pas en Python

Programmation en langage C Eléments de syntaxe

Cours d Algorithmique et de Langage C v 3.0

Arguments d un programme

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Outils pour la pratique

Algorithmique, Structures de données et langage C

Conventions d écriture et outils de mise au point

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Structure d un programme

Programmation système en C/C++

3IS - Système d'exploitation linux - Programmation système

Architecture des ordinateurs

Cours Langage C/C++ Programmation modulaire

Support de Cours de Langage C. Christian Bac

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

TP1. Outils Java Eléments de correction

Compression de Données - Algorithme de Huffman Document de Conception

Tp 1 correction. Structures de données (IF2)

Maple: premiers calculs et premières applications

Cours 6 : Tubes anonymes et nommés

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Claude Delannoy. 3 e édition C++

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

SUPPORT DE COURS. Langage C

Cours de programmation avancée. Le langage C. Université du Luxembourg

TP1 : Initiation à Java et Eclipse

Chaîne de production d un programme

V- Manipulations de nombres en binaire

Initiation à l algorithmique

Solutions du chapitre 4

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Fonction réciproque. Christelle MELODELIMA. Chapitre 2 :

Introduction à l héritage en C++

Programmation impérative

Initiation à la programmation en Python

Cours 1 : La compilation

Introduction à l algorithmique et à la programmation M1102 CM n 3

Notions de Langage C

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Cours 1: Java et les objets

IV- Comment fonctionne un ordinateur?

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

Transcription:

1/30 Objectif de ce cours 2/30 Objectifs de ce cours Introduction au langage C - Cours 4 Girardot/Roelens Septembre 2013 Analyse de problème I décomposer un traitement complexe en traitements simples Concepts de programmation I notion de procédure Définition Procédures Procédures Définition 3/30 I construction du langage qui permet de regrouper une série d instructions I de la désigner par un symbole (nom) I de l exécuter «à volonté» (depuis n importe quel endroit du programme) Procédures Premier exemple 4/30 Exemple de procédure #include <stdio.h> #include <stdlib.h> void bonjour(void) printf("hello World\n"); bonjour(); bonjour(); return 0; Exécution [P]$ prog4 Hello World Hello World [P]$

Procédures Retour au PGCD 5/30 Retour sur le programme PGCD #include <stdio.h> #include <stdlib.h> int a, b, c; a = 834389; b = 944353; for (;;) if (a<b) c=a; a=b; b=c; if (a==b) printf("la valeur du PGCD est %d\n", a); return 0; a=a-b; return 0; Comment calculer le PGCD de trois nombres? Un peu de réflexion Procédures Retour au PGCD 6/30 Propriété PGCD(a, b, c) =PGCD(PGCD(a, b), c) Premier codage I a=x, b=y I code du programme PGCD I b=z I code du programme PGCD I a est le résultat voulu Inconvénients I copier-coller de code (source d erreurs) I gestion des variables difficiles (source d erreurs) I encore plus compliqué si plusieurs traitements sont imbriqués Procédures PGCD seconde version 7/30 Utilisation d une procédure Permet de ne pas dupliquer le code! #include <stdio.h> #include <stdlib.h> int a, b, c; void pgcd(void) for (;;) if (a<b) c=a; a=b; b=c; if (a==b) return; a=a-b; a = 834389; b = 944353; pgcd(); b = 743; pgcd(); printf("la valeur du PGCD est %d\n",a);return 0; Procédures PGCD seconde version 8/30 Quelques explications Variables a, b, c utilisées par deux procédures I variables globales I positionnées dans main I réutilisées dans pgcd I réutilisées dans main! gestion complexe lorsque le nombre de procédures devient important

Procédures Paramètres et résultat 9/30 Paramètres et résultat d une procédure Procédures Paramètres et résultat 10/30 Déclaration d une procédure Paramètres I informations fournies à la procédure nécessaires pour son fonctionnement Résultat I permet de récupérer le résultat du calcul effectué par la procédure Exemple : calcul du carré d un nombre int square(int x) return x*x; Paramètres I déclarés en nombre et en type entre les parenthèses suivant le nom de la procédure I le nom donné est local à la procédure (inconnu des autres procédures) Résultat I seul le type du résultat est déclaré, avant le nom de la procédure I utilisation de l instruction return I c est le code appelant qui doit récupérer ce résultat Procédures Paramètres et résultat 11/30 Utilisation d une procédure Passage de paramètres I respecter le nombre, l ordre, le type indiqué dans la déclaration I les paramètres sont copiés dans les variables locales de la procédure I le compilateur mémorise le point d appel (compteur ordinal de retour après l exécution de la procédure) Résultat I lors de l instruction return, le compilateur mémorise ce résultat dans un endroit particulier de la mémoire I il récupère la valeur du compteur ordinal avant l appel de procédure! le programme continue là où il en était avant l appel I la procédure appelante peut (doit) récuperer le résultat immédiatement (sinon, perdu) int a,b,c; c=square(a)+square(b+1)/2; Procédures Le nouveau programme PGCD 12/30 Le nouveau programme PGCD int pgcd (int x,int y) int z; for (;;) if (x < y) z=x;x=y;y=z; if (x==y y==0) return x; x-=y; int main (int argc,char *argv[]) int a,b,c; a=834389; b=944353; c=884913; printf("le PGCD est %d\n",pgcd(pgcd(a,b),c)); return 0;

Notion de prototype Prototypes Eléments de C Prototypes 13/30 I décrit les types des arguments et du résultat d une procédure I permet au compilateur de vérifier le bon usage de la procédure Exemple int pgcd(int a, int b); int pgcd(int, int); I les prototypes des procédures standard du langage sont décrits dans des fichiers tels que stdio.h Le type void I permet d indiquer qu une procédure ne rend pas de résultat I ou n admet pas de paramètres Prototypes (2) Eléments de C Prototypes 14/30 Déclaration I toutes les procédures doivent être déclarées avant leur premier usage I par défaut, une procédure est de type «int», sans paramètre I exemple toto() int toto(void) I déclaration correcte de la procédure principale int main(int argc, char * argv[]) Usage I les procédures doivent être utilisées avec le nombre correct de paramètres, et des paramètres du bon type I l instruction return doit fournir une valeur du type déclaré de la procédure I le compilateur peut procéder à des conversions de taille ou de représentation des paramètres Appel Eléments de C Appel de procédure 15/30 Mécanisme d appel de procédure 1. les expressions utilisées comme paramètres dans l appel de la procédure sont calculées (dans un ordre inconnu) 2. les valeurs obtenues sont affectées aux arguments de la procédure, qui se comportent comme des variables locales à celle-ci 3. le corps de la procédure est exécuté 4. la valeur (éventuelle) fournie par une instruction return est rendue comme résultat de la procédure Programme Eléments de C Exemple de procédure 16/30 Exemple de procédure #include <stdio.h> #include <stdlib.h> int fun(int x) x = x+2; return x*x; int x=3; printf("%d\n",fun(x)); printf("%d\n",x); return 0; Résultat 25 3

Eléments de C Structure d un programme C 17/30 Structure d un programme C Eléments de C Structure d un programme C 18/30 Structure d un programme C (2) Un programme C est une séquence de déclarations I variables I procédures I la commande #include permet d inclure dans le fichier compilé les déclarations d objets (variables et procédures) des bibliothèques du système I ces déclarations sont dites «globales» Contraintes I tout objet doit être déclaré avant sa première utilisation dans le texte I pour cette raison, on place souvent les déclarations de variables en premier (au début du fichier) I une procédure est «déclarée» soit par sa définition elle-même, soit par la déclaration de son prototype (les deux peuvent apparaître dans un même fichier si elles sont cohérentes) I le programme a une structure en râteau (pas d imbrication des procédures) L exécution d un programme consiste en l exécution de la procédure de nom main Eléments de C Variables 19/30 Nature des variables I variables globales I déclarées dans le fichier du programme hors de toute procédure I à limiter au plus strict nécessaire (source de bogue) I variables locales I les arguments d une procédure (recoivent une valeur à l appel de la procédure) I les variables déclarées à l intérieur d une procédure I déclarations locales I s effectuent après une accolade ouvrante I avant toute instruction I ne sont visibles que dans le bloc (défini par les accolades) où elles sont déclarées if (x<y) int c; c=x; x=y; y=c; Variables globales Eléments de C Variables 20/30 Initialisation des variables I elles reçoivent leur valeur initiale au lancement du programme I les valeurs initiales doivent être des constantes ou des expressions ne faisant intervenir que des constantes Variables locales I les arguments d une procédure reçoivent comme valeur initiale les valeurs des expressions utilisées dans l appel de la procédure I les variables déclarées dans un bloc avec initialisation reçoivent leur valeur à chaque entrée dans le bloc ; ces «valeurs initiales» peuvent être des expressions quelconques I les variables déclarées dans un bloc, mais non initialisées reçoivent une valeur indéterminée à chaque entrée dans le bloc (ce qui se trouve à cet endroit de la mémoire de l ordinateur)

Eléments de C Variables 21/30 Visibilité des variables I les variables «visibles» à un emplacement d un programme sont les variables déclarées dans le bloc «le plus proche» int toto=2, toutou=3;... void fun(int titi,int tutu) int toutou=5; toto+titi+toutou; /* E1 : 11 */ int toto = 10; toto+titi+toutou; /* E2 : 19 */... fun(4,6);... Eléments de C Construction des programmes 22/30 Chaîne de compilation La construction d un programme exécutable se fait en plusieurs phases I préprocesseur I gère les lignes débutant par # I commandes d inclusion d autres fichiers I autres commandes, par exemple des «macro-définitions» #define PI 3.1415926535 I remplacement des «macro-définitions» par leurs valeurs, suppression commentaires... I compilateur I analyse du programme source, transformation en «instructions élémentaires» Eléments de C Construction des programmes 23/30 Chaîne de compilation (2) I optimiseur I assembleur I transformation des «instructions élémentaires» en langage machine I éditeur de liens (ou «relieur») I rassembler tous les modules objets nécessaires et les bibliothèques pour constituer un programme exécutable I exécution du programme I utiliser l environnement d exécution (procédures systèmes) Préprocesseur Eléments de C Construction des programmes 24/30 Exemple [P]$ cat prog01.c #define PI 3.1415926535 float c; c = PI*2.5; [P]$ gcc -E prog01.c # 2 "prog01.c" float c; c = 3.1415926535*2.5;

Édition de liens Eléments de C Construction des programmes 25/30 I opération qui consiste à rassembler les modules objet et des librairies pour obtenir un programme exécutable I exemple : édition des liens après compilation séparée des modules sources I gcc -c square.c gcc -c prog07b.c gcc -o xyz prog07b.o square.o on peut mélanger sources et objets gcc -c square.c gcc -o xyz prog07b.c square.o Bibliothèques (libraries) Eléments de C Bibliothèques 26/30 Édition des liens : bibliothèques I de nombreuses bibliothèques sont disponibles libc la bibliothèque «standard» du langage libgcc modules spécialisés de gcc libm procédures mathématiques libdbg mise au point I les bibliothèques libc et libgcc sont liées par défaut, les autres doivent être indiquées explicitement gcc -o zzz prog07c.o -lm I le relieur n ajoute pas la totalité du contenu d une bibliothèque, mais seulement les modules objets nécessaires au programme I désormais, les bibliothèques sont chargées dynamiquement au moment de l exécution (DLL = Dynamically loaded libraries) Eléments de C Bibliothèques 27/30 Procédures utilitaires Eléments de C Bibliothèques 28/30 Procédures mathématiques Quelques procédures Prototype Description int abs(int p) Valeur absolue double atof(char* s) Conversion caractères vers flottant int atoi(char* s) Conversion caractères vers entier long atol(char* s) Conversion caractères vers entier void exit(int cr) Arrêt du programme long labs(long p) Valeur absolue int rand(void) Entier pseudo-aléatoire void srand(int seed) Init. du générateur pseudo-aléatoire Utilisation des procédures utilitaires I inclure stdlib.h dans le source Prototype double acos(double x) double asin(double x) double atan(double x) double atan2(double x, double y) double ceil(double x) double cos(double x) double cosh(double x) double exp(double x) double fabs(double x) double floor(double x) double fmod(double x, double y) double log(double x) double log10(double x) Description arc cosinus arc sinus arc tangente arc tangente partie entière cosinus cosinus hyperbolique exponentielle valeur absolue partie entière reste logarithme népérien logarithme décimal

Eléments de C Bibliothèques 29/30 Procédures mathématiques Prototype Description double pow(double x, double y) x y double sin(double x) sinus double sinh(double x) sinus hyperbolique double sqrt(double x) racine carrée double tan(double x) tangente double tanh(double x) tangente hyperbolique Utilisation des procédures mathématiques I inclure math.h dans le source I ajouter -lm à la compilation Eléments de C Notes 30/30 Notes Écriture des programmes I indenter correctement vos programmes sources I consulter les manuels man gcc man 3 printf man 3 pow Compilation I utiliser toutes les options permettant d obtenir les avertissements du compilateur gcc -Wall -ansi -pedantic toto.c -o toto Test I écrire de petits morceaux, que l on teste au fur et à mesure I ajouter des ordres d impression, à des fins de mise au point, que l on transforme ensuite en commentaires I ne pas hésiter à utiliser gdb