Procédure. Introduction au langage C. Cours 3. Procédures. Retour au PGCD PGCD / 2. Version 2. Comment calculer le PGCD de trois nombres?



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

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)

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

Algorithmique et Programmation, IMA

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

Introduction au langage C

Le prototype de la fonction main()

Programmation système I Les entrées/sorties

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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

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


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

ALGORITHMIQUE ET PROGRAMMATION En C

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

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

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

Programmation en langage C Eléments de syntaxe

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

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

Chapitre 1 : La gestion dynamique de la mémoire

Le langage C. Introduction, guide de reference

Support de Cours de Langage C. Christian Bac

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

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

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

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

INF 321 : mémento de la syntaxe de Java

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

Programmation en langage C

I. Introduction aux fonctions : les fonctions standards

Les chaînes de caractères

Programmation Classique en langage C

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Programmation système de commandes en C

Cours d Algorithmique et de Langage C v 3.0

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

Algorithmique, Structures de données et langage C

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

Cours Programmation Système

Langage Éric Guérin 5 octobre 2010

INF 104 (SELC) Introduction au langage C

Arguments d un programme

Chap III : Les tableaux

Conventions d écriture et outils de mise au point

Programmation système en C/C++

Présentation du langage et premières fonctions

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

Claude Delannoy. 3 e édition C++

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

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

Notes de Cours - Programmation Pascal Ferraro

Gestion de la mémoire

UE C avancé cours 1: introduction et révisions

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Introduction à l héritage en C++

Rappels Entrées -Sorties

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Langage Java. Classe de première SI

COURS et TP DE LANGAGE C++

Programmation Structurée en Langage C

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

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

Java Licence Professionnelle CISII,

Les structures. Chapitre 3

Chaîne de production d un programme

SUPPORT DE COURS. Langage C

Cours 6 : Tubes anonymes et nommés

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

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

Le langage C. Séance n 4

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

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

Plan du cours. Historique du langage Nouveautés de Java 7

Programmation impérative

Outils pour la pratique

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

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

TP : Gestion d une image au format PGM

Programmation en C/C++

PROGRAMMATION PAR OBJETS

Utilisation d objets : String et ArrayList

Architecture des ordinateurs

Fonction réciproque. Christelle MELODELIMA. Chapitre 2 :

Structure d un programme

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Quelques éléments de compilation en C et makefiles

Généralités sur le Langage Java et éléments syntaxiques.

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

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

Programmation en C - Sommaire

Le Langage C++ Patrick TRAU - ULP IPST version du 02/10/05

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Une introduction à Java

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

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

Transcription:

Cours C-3 1 Cours C-3 2 Procédure Introduction au langage C Cours 3 Procédures Jean-Jacques Girardot / Marc Roelens Septembre 2007 Construction du langage qui permet de désigner par un nom une portion de code, et de l exécuter à volonté Exemple void bonjour(void) printf("hello World\n") ; bonjour() ; bonjour() ; exit(0) ; Exécution [P]$ prog4 Hello World Hello World [P]$ Cours C-3 3 Retour au PGCD 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) ; exit(0) ; A=A-B ; exit(0) ; Comment calculer le PGCD de trois nombres? Cours C-3 4 Version 2 int A, B, C ; void pgcd(void) PGCD / 2 for ( ; ;) if (A<B) C=A ; A=B ; B=C ; if (A==B) return ; A=A-B ; A = 834389 ; B = 944353 ; pgcd() ; printf("la valeur du PGCD est %d\n", A) ; exit(0) ;

Cours C-3 5 Calcul du carré d un nombre Utilisation exécution int square(int x) return x*x ; Procédures avec paramètres et résultat int square(int x) return x*x ; int a=4, b=6 ; printf("%d %d %d %d\n", a, square(a), b, 3+square(b+1)) ; exit(0) ; 4 16 6 52 Cours C-3 6 Arguments, Paramètres et Résultats La déclaration des arguments et du résultat s effectue dans l en-tête de la procédure int pgcd(int A, int B) Les arguments sont des variables accessibles uniquement dans la procédure Le résultat est fourni par l instruction : return expression ; L utilisation de la procédure s effectue sous la forme nom(paramètres...) R = pgcd(a,b) ; les paramètres sont des expressions quelconques, dont les valeurs vont être affectées aux arguments de la procédure. Cours C-3 7 Cours C-3 8 Quelques types du langage C Types et prototypes Mots clefs Description Taille int entier 4 octets long entier 4 octets short entier 2 octets char entier 1 octet float flottant 4 octets double flottant 8 octets Notion de prototype Prototypes décrit les types des arguments et du résultat d une procédure int pgcd(int A, int B) ; int pgcd(int, int) ; les prototypes des procédures standard du langage sont décrits dans des fichiers tels que stdio.h sizeof(char) sizeof(short) sizeof(int) sizeof(long) sizeof(float) sizeof(double) Le type void : indique qu une procédure ne rend pas de résultat, ou n accepte pas de paramètres

Cours C-3 9 Cours C-3 10 Procédures : notes Déclaration toutes les procédures doivent être déclarées avant leur premier usage par défaut, une procédure est de type «int», sans paramètre exemple toto() int toto(void) déclaration correcte de la procédure principale Usage int main(int argc, char * argv[]) les procédures doivent être utilisées avec le nombre correct de paramètres, et des paramètres du bon type l instruction return doit fournir une valeur du type déclaré de la procédure le compilateur peut procéder à des conversions de taille ou de représentation des paramètres Appel Procédures : mécanisme d appel 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 Cours C-3 11 Cours C-3 12 Procédures : exemple Programme int fun(int x) x = x+2 ; return x*x ; int x=3 ; printf("%d\n",fun(x)) ; printf("%d\n",x) ; exit(0) ; Résultat 25 3 Structure d un programme C Un programme C est une séquence de déclarations variables procédures la commande #include permet d inclure dans le fichier compilé les déclarations d objets (variables et procédures) des librairies du système ces déclarations sont dites «globales» Contraintes tout objet doit être déclaré avant sa première utilisation dans le texte pour cette raison, on place souvent les déclarations de variables en premier 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 L exécution d un programme consiste en l exécution de la procédure de nom main

Cours C-3 13 Nature des variables Variables globales Ce sont celles qui sont déclarées dans le fichier du programme (hors procédure) Variables locales Les arguments d une procédure Les variables déclarées à l intérieur d une procédure note on ne peut définir de procédure à l intérieur d une autre procédure (mais on peut déclarer un prototype) déclarations locales : s effectuent après une accolade ouvrante avant toute instruction 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 ; Cours C-3 14 Variables globales Initialisation des variables Elle reçoivent leur valeur initiale au lancement du programme ; les variables non initialisées ont la valeur 0. les valeurs initiales doivent être des constantes ou des expressions ne faisant intervenir que des constantes Variables locales Les arguments d une procédure reçoivent comme valeur initiale les valeurs des expressions utilisées dans l appel de la procédure 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 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) Cours C-3 15 Cours C-3 16 Visibilité des variables Les variables «visibles» à un emplacement d un programme sont les variables déclarées dans le bloc courant, puis les variables déclarées dans le bloc englobant, etc, jusqu aux variables globales 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) ;... Passage des paramètres le passage des paramètres se fait par valeur modifier l argument à l intérieur d une fonction n a pas d effet à l extérieur de celle-ci, et en particulier ne modifie pas une éventuelle variable utilisée comme paramètre

Cours C-3 17 Procédure PGCD - v2 Cours C-3 18 Fonctionnement du compilateur int pgcd(int A, int B) for ( ; ;) if (A<B) int C ; C=A ; A=B ; B=C ; if (A==B) return A ; A=A-B ; printf("la valeur du PGCD est %d\n", pgcd(834389,944353)); exit(0) ; Préprocesseur gère les lignes débutant par # commandes d inclusion d autres fichiers autres commandes, par exemple des «macro-définitions» #define PI 3.1415926535 remplacement des «macro-définitions» par leurs valeurs, suppression commentaires... Compilateur Analyse du programme source, transformation en «instructions élémentaires» Optimiseur Assembleur transformation des «instructions élémentaires» en langage machine Éditeur de liens (ou «relieur») rassembler tous les modules objets nécessaires pour constituer un programme exécutable Cours C-3 19 Cours C-3 20 Préprocesseur 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 des liens Opération qui consiste à rassembler les modules objet et des librairies pour obtenir un programme exécutable exemple : édition des liens après compilation séparée des modules sources 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

Cours C-3 21 Cours C-3 22 Édition des liens : bibliothèques Bibliothèques de nombreuses bibliothèques sont disponibles libc.a la bibliothèque «standard» du langage libgcc.a modules spécialisés de gcc libm.a procédures mathématiques libdbg.a mise au point les bibliothèques libc.a et libgcc.a sont liées par défaut, les autres doivent être indiquées explicitement : gcc -o zzz prog07c.o /usr/lib/libm.a gcc -o zzz prog07c.o -lm le relieur n ajoute pas la totalité du contenu d une bibliothèque, mais seulement les modules objets nécessaires au programme Quelques fonctions Prototype Fonctions utilitaires et mathématiques int abs(int p) double atof(char* s) int atoi(char* s) long atol(char* s) void exit(int cr) long labs(long p) int rand(void) void srand(int seed) Description Valeur absolue Conversion caractères vers flottant Conversion caractères vers entier Conversion caractères vers entier Arrêt du programme Valeur absolue Entier pseudo-aléatoire Init. du générateur pseudo-aléatoire Utilisation des fonctions utilitaires inclure stdlib.h dans le source ajouter -lc à la compilation Utilisation des fonctions mathématiques (page suivante) inclure math.h dans le source ajouter -lm à la compilation Cours C-3 23 Cours C-3 24 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) double pow(double x, double y) double sin(double x) double sinh(double x) double sqrt(double x) double tan(double x) double tanh(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 logarithme x y sinus sinus hyperbolique racine carrée tangente tangente hyperbolique Notes Écriture des programmes indenter correctement vos programmes sources consulter les manuels man gcc man 3 printf man 3 pow Compilation utiliser toutes les options permettant d obtenir les avertissements du compilateur gcc -Wall -ansi -pedantic toto.c -o toto Test écrire de petits morceaux, que l on teste au fur et à mesure ajouter des ordres d impression, à des fins de mise au point, que l on transforme ensuite en commentaires ne pas hésiter à utiliser gdb