1 Rappel et compléments de la programmation en langage C.

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

La boucle for : init7.c et init71.c
Les fonctions A quoi ça sert ?
Introduction Langage très répandu Noyau Linux VLC … Des avantages indéniables mais aussi des contraintes ! Ceci nest quun rapide tour.
Rappels C.
C++ 6ème cours Patrick Reuter maître de conférences
Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
C.
Paramètres et pointeurs
Suite à de nombreuses remarques concernant le projet de structures de données 'Gestion d'un Aéroport' , voici un polycopié de cours concernant la gestion.
FLSI602 Génie Informatique et Réseaux
Cours de C GTR 2003/ COURS DE PROGRAMMATION EN LANGAGE C ALBERT Arnauld.
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Mémoire périphérique Stockage primaire: Mémoire principale (RAM)
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()
TRAITEMENT DE STRUCTURES
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
FICHIERS.
Les fichiers binaires en C++
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
IFT Structures de données
Operations de Base en C++ sur les Fichiers
Les Fichiers.
8PRO100 Éléments de programmation Les types composés.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Plan cours La notion de pointeur et d’adresse mémoire.
La librairie assert.h.
L’essentiel du langage C
Structures des données
Chapitre IX Gestion de flux.
2.1 - Historique Chapitre 2 : Introduction au langage C++
Les pointeurs L'opérateur &.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
La notion de type revisitée en POO
et quelques rappels sur certains éléments du langage C
Les adresses des fonctions
1 FICHIERS. 2 Les Fichiers  Les "entrées-sorties conversationnelles" échangent des informations entre le programme et l'utilisateur.  Le terme de fichier.
Autres éléments du langage
Un survol du language C.
Labo 4 : Les structures et les entrées et sorties
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que l’on veut allouer. Le premier exemple: #include void main()
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
Introduction au langage C Fonctions et Procédures
Les types composés Les enregistrements.
Les surcharges d'opérateurs
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
Les entrées-sorties élémentaires
8PRO107 Éléments de programmation Les adresses et les pointeurs.
PRO-1027 Programmation Scientifique en C
Langage de Programmation Orientée Objet : C++
3ième Classe (Mardi, 23 Septembre) CSI2572. O jourd'8: E Allocation de mémoire E Déallocation de mémoire E Tableaux (n dimensions) E Arithmetique des.
Algorithmique et langage C
programmation en langage C
Développement d’application avec base de données Semaine 3 : Modifications avec Entité Framework Automne 2015.
1 ALGORITHMIQUE AVANCEE IUT Vélizy – RT2 FA Laurent Marsan.
1 UNIX AVANCE Yves PAGNOTTE – Janvier – RAPPELS SUR UNIX DE BASE.
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Informatique 2A Langage C 2 è séance. Objectifs de la séance 2 Début de la modularité avec les fonctions Création d’une première bibliothèque.
Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
Informatique 2A Langage C 3 ème séance.
Cours de Langage C Les structures
Informatique 2A Langage C 4ème séance
A quoi sert la programmation? - indispensable pour plusieurs métiers. - passion. But du cours: - suite du cours Prog. Imp. I - fichiers, pointeurs, modularité.
Cours 08 SYSTÈME DE FICHIERS
Accès aux fichiers en C.
Transcription de la présentation:

1 Rappel et compléments de la programmation en langage C

2 Déclarer une fonction intprint_table(double start, double end, double step) { doubled; intlines = 1; printf("Celsius\tFarenheit\n"); for(d = start; d <= end; d += step, lines++) printf("%.1lf\t%.1lf\n", d, d * ); return lines; } 3 doubles comme paramètresTYPE de la valeur de retour Valeur renvoyée Nom de la fonction

3 Appeler une fonction #include intprint_table(double, double, double); void main(void) { intcombien; doubleend = 100.0; combien = print_table(1.0,end,3); print_table(end, 200, 15); } IMPORTANT: cette instruction spécifie comment la fonction est définie Le compilateur attend des doubles; les conversions sont automatiques Ici, on ne tient pas compte de la valeur de retour

4 void main(void) { int Val ; Val = addition(); printf(“val = %d”, Val); } int addition() { float tmp; tmp = calcule(2.5,3) + calcule(5,7.2); return (int)tmp; } float calcule(float float1, float float2) { return ( (float1 + float2 ) / 2) ; } float calculeFloat(float, float); int addition();

5 Règles de visibilité des variables Le C est un language structuré en blocs { }, les variables ne peuvent être utilisées que là où elles sont déclarées voidfunc(int x); int glo=0; // variable globale voidmain(void) { inti = 5, j, k = 2; //lacales à main floatf = 2.8, g; d = 3.7; func (i); } voidfunc(int v) { double d, e = 0.0, f =v; //lacales à func i++; g--;glo++; f = 0.0; } C’est le f local qui est utilisé Le compilateur ne connaît pas d Le compilateur ne connaît pas i et g

6 Identification des tableaux et pointeurs En C, le nom d’un tableau représente l’adresse de sa composante 0, donc a == &a[0] C'est pour cela que les tableaux passés comme paramètres dans une fonction sont modifiables Passer des tableaux aux fonctions Pour le compilateur, un tableau comme argument de fonction, c’est un pointeur vers sa composante 0 (à la réservation mémoire près). La fonction peut donc modifier n’importe quel élément (passage par référence) Le paramètre peut soit être déclaré comme tableau, soit comme pointeur int add_elements(int a[], int size) { int add_elements(int *p, int size) {

7 Exemple #include voidsum(long [], int); intmain(void) { longTab[6] = { 1, 2, 3, 5, 7, 11 }; sum(Tab, 6); printf("%ld\n", Tab[0]); return 0; } voidsum(long a[], int sz) { inti; longtotal = 0; for(i = 0; i < sz; i++) total += a[i]; a[0] = total; } Tab a sz Tab

8 Utiliser des pointeurs - exemple p end #include longsum(long*, int); intmain(void) { longTab[6] = { 1, 2, 3, 5, 7, 11 }; printf("%ld\n", sum(Tab, 6)); return 0; } longsum(long *p, int sz) { long*end = p + sz; longtotal = 0; while(p < end) total += *p++; return total; } Tab Tab

9 Quelle notation? A[0] est équivalent à *A A[i] est équivalent à *(A + i) &A[0] est équivalent à A shorta[8] = { 10, 20, 30, 40, 50, 60, 70, 80 }; short*p = a; printf("%d\n", a[3]); printf("%d\n", *(a + 3)); printf("%d\n", *(p + 3)); printf("%d\n", p[3]); shorta[8] = { 10, 20, 30, 40, 50, 60, 70, 80 }; short*p = a; printf("%d\n", a[3]); printf("%d\n", *(a + 3)); printf("%d\n", *(p + 3)); printf("%d\n", p[3]); a p

10 Passer des structures comme paramètres de fonction Une structure peut être passée, comme une autre variable, par valeur ou par adresse Passer par valeur n’est pas toujours efficace (recopiage à l’entrée) Passer par adresse ne nécessite pas de recopiage void Par_valeur(struct Membre m); void Par_reference(struct Membre *m); Par_valeur(m); Par_reference(&m); void Par_valeur(struct Membre m); void Par_reference(struct Membre *m); Par_valeur(m); Par_reference(&m);

11 Utiliser p->name L’écriture p->name est synonyme de (*p)->name, où p est un pointeur vers une structure voidaffiche_membre (struct Membre *p) { printf("nom = %s\n", p->nom); printf("adresse = %s\n", p->adresse); printf(”numéro de membre = %d\n", p->numero); printf("\nDate d’affiliation %d/%d/%d\n", p->creation.jour, p->creation.mois, p->creation.an); } voidaffiche_membre (struct Membre *p) { printf("nom = %s\n", p->nom); printf("adresse = %s\n", p->adresse); printf(”numéro de membre = %d\n", p->numero); printf("\nDate d’affiliation %d/%d/%d\n", p->creation.jour, p->creation.mois, p->creation.an); } Quand la structure est un pointeur ! !

12 Retour de structures dans une fonction Par valeur (recopiage) ou par référence struct Complex add(struct Complex a, struct Complex b) { struct Complex result = a; result.real_part += b.real_part; result.imag_part += b.imag_part; return result; } struct Complex add(struct Complex a, struct Complex b) { struct Complex result = a; result.real_part += b.real_part; result.imag_part += b.imag_part; return result; } struct Complexc1 = { 1.0, 1.1 }; struct Complexc2 = { 2.0, 2.1 }; struct Complexc3; c3 = add(c1, c2);/* c3 = c1 + c2 */ struct Complexc1 = { 1.0, 1.1 }; struct Complexc2 = { 2.0, 2.1 }; struct Complexc3; c3 = add(c1, c2);/* c3 = c1 + c2 */

13 Gestion des fichiers en C Elle est assurée par la librairie standard via un ensemble de fonctions commençant par “f” Avant de manipuler un fichier, il faut lui associer un descripteur (pointeur vers la structure fichier) Il y a 3 descripteurs automatiquement ouvert par tout programme C, stdin, stdout et stderr stdin (standard input) est connecté au clavier. On peut y lire stdout (standard output) et stderr (standard error) sont reliés au moniteur. On peut y écrire. FILE *f; /*déclare un descripteur f de fichier*/ !

14 Ouvrir et fermer des fichiers Les fichiers sont ouverts avec la fonction fopen ils sont fermés avec la fonction fclose FILE* fopen(const char* name, const char* mode); int fclose (FILE *f); FILE* fopen(const char* name, const char* mode); int fclose (FILE *f); mode (pour les fichiers TEXTES) :  « r » lecture seule  « w » écriture seule (destruction de l'ancienne version si elle existe)  « w+ » lecture/écriture (destruction ancienne version si elle existe)  « r+ » lecture/écriture d'un fichier existant (mise à jour), pas de création d'une nouvelle version.  « a+ » lecture/écriture d'un fichier existant (mise à jour), pas de création d'une nouvelle version, le pointeur est positionné à la fin du fichier. mode (pour les fichiers TEXTES) :  « r » lecture seule  « w » écriture seule (destruction de l'ancienne version si elle existe)  « w+ » lecture/écriture (destruction ancienne version si elle existe)  « r+ » lecture/écriture d'un fichier existant (mise à jour), pas de création d'une nouvelle version.  « a+ » lecture/écriture d'un fichier existant (mise à jour), pas de création d'une nouvelle version, le pointeur est positionné à la fin du fichier.

15 Ouvrir et fermer des fichiers Les fichiers sont ouverts avec la fonction fopen ils sont fermés avec la fonction fclose FILE* fopen(const char* name, const char* mode); int fclose (FILE *f); FILE* fopen(const char* name, const char* mode); int fclose (FILE *f); #include void main(void) { FILE*in; FILE*out; FILE*append; in = fopen("autoexec.bat", "r"); out = fopen("autoexec.bak", "w"); append = fopen("config.sys", "a"); /* … */ fclose(in); fclose(out); fclose(append); } #include void main(void) { FILE*in; FILE*out; FILE*append; in = fopen("autoexec.bat", "r"); out = fopen("autoexec.bak", "w"); append = fopen("config.sys", "a"); /* … */ fclose(in); fclose(out); fclose(append); }

16 Lecture et écriture sur fichier Fonctions de lecture intfscanf(FILE* stream, const char* format,...); intfgetc(FILE* stream); char*fgets(char* buffer, int size, FILE* stream); intfscanf(FILE* stream, const char* format,...); intfgetc(FILE* stream); char*fgets(char* buffer, int size, FILE* stream); Fonctions d’écriture int feof(FILE *f); /*renvoie une valeur non nulle si fin de fichier*/ intfprintf(FILE* stream, const char* format,...); intfputc(int ch, FILE* stream); intfputs(const char* buffer, FILE* stream); intfprintf(FILE* stream, const char* format,...); intfputc(int ch, FILE* stream); intfputs(const char* buffer, FILE* stream);

17 Exemple d’écriture (lecture) de fichier #include void sauvegarde( char titre[], int n, float x[], int ind [] ) { int i=0; FILE *f; f = fopen(“monfichier.dat”,”w”); if (f !=NULL){ fprintf(f,”%s\n”,titre); for (i=0; i < n; i++ ) { fprintf(f,”%f %d\n”, x[i],ind[i]); } fclose(f); } Mon titre #include void main(void) { char titre[81]; float x[10]; int ind[10], i=0; FILE *f; f = fopen(“monfichier.dat”,”r”); if (f!= NULL) { fgets(titre,80,f); while(!feof(f)) { fscanf(f,”%f %d”,&x[i],&ind[i]); i++; } fclose(f); } La constante NULL (définie comme 0 dans stdio.h) réfère à une adresse non définie

Rappelle 18 mode lectur e écritur e crée le fichier vide le fichier position du flux rX début r+XX début w XXX w+XXXXdébut a XX fin a+XXX fin

Fichiers binaires Les fichiers binaires permettent des entrées/sorties de données au format interne de la machine. Les accès sont considérablement plus efficaces que pour des entrées/sorties formatées 19

Ouverture L’ouverture d’un fichier binaire se fait en ajoutant le spécificateur b au mode d’ouverture de l’appel fopen, toutes les autres options restant utilisables. FILE *fi, *fo; fi = fopen("data.bin", "r+b"); fo = fopen("result.bin", "wb"); 20

Entrees/sorties Les accès se font via deux fonctions, fread et fwrite, avec une interface banalisée : adresse de donnée, taille de la donnée, nombre de données (dans le cas d’utilisation de tableaux) et, bien sûr, le pointeur fichier. Pour les tailles des données à lire ou écrire, il est conseillé d’utiliser systématiquement l’opérateur sizeof. Exemple: double x, y; float tab[50]; /* Lecture sur ’fi’ de 2 scalaires */ fread(&x, sizeof(double), 1, fi); fread(&y, sizeof(double), 1, fi); /* Ecriture sur ’fo’ d’un tableau */ fwrite(tab, sizeof(float), 50, fo); 21

Remarque Ces fonctions retournent le nombre de données lues ou écrites, qui doit être égal au troisième argument de l’appel sauf problème. certaines des fonctions de lecture texte sont utilisables sur un fichier ouvert en mode binaire. En particulier les fonctions fgetc et fputc permettent une lecture ou écriture binaire, octet par octet. 22