Informatique 2A 2009-2010 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.

Slides:



Advertisements
Présentations similaires
GEF 243B Programmation informatique appliquée Listes chaînées I – Tableaux de structures §15.1 – 15.2.
Advertisements

Premier programme en C :
La boucle for : init7.c et init71.c
Cours de C – Séance dexercices 12 Octobre Exercice 5 Idem quexercice 1 : lire une ligne au clavier Sans limitation de la longueur de la ligne (utilisez.
Introduction au Langage C,C++
Rappels C.
GEF 243B Programmation informatique appliquée
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
(Classes prédéfinies – API Java)
C.
Structures et unions types énumérés Qu'est-ce qu'une structure
Chap. 1 Structures séquentielles : listes linéaires
FLSI602 Génie Informatique et Réseaux
FLSI602 Génie Informatique et Réseaux
B.Shishedjiev - Informatique II
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
II. Chaînage, SDD séquentielles
TRAITEMENT DE STRUCTURES
Principes de programmation (suite)
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
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.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
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-2000: Structures de données
IFT-2000: Structures de données Les graphes Dominic Genest, 2009.
Présentation Structures de Données et TDA
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
Les enregistrements (struct) suite. Struct Rappel Enregistrement : Suite de données pouvant être de types différents, accessibles via une seule variable.
Un langage de programmation hybride
8PRO100 Éléments de programmation Les types composés.
Standard Template Library
C++ : variables Déclaration de variables
L’essentiel du langage C
Structures des données
Le langage C Structures de données
1 Exemples Construction et implantation de types de données abstraits.
Les pointeurs L'opérateur &.
Le langage C Rappel Pointeurs & Allocation de mémoire.
Ch. PAUL - Piles et Files à l'aide de listes chainées
4 Introduction des objets. Les chaînes et tableaux
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
Les types.
Un survol du language C.
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.
II. Chaînage, SDD séquentielles
ETNA – 1ème année Guillaume Belmas –
Strings et Tableaux en Java
Les chaînes de caractères
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Les types composés Les enregistrements.
Les surcharges d'opérateurs
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
ISBN Chapitre 10 L'implémentation des sous- programmes.
8PRO100 Éléments de programmation Les pointeurs de caractères.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Introduction au langage C Structures de données
8PRO107 Éléments de programmation Les adresses et les pointeurs.
 Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
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
Transcription de la présentation:

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 ème partie Les listes chaînées

Les chaînes de caractères En C, une chaîne de caractères est un tableau de caractères (type char) dont le dernier élément est le caractère nul, noté ‘ \0 ’. (\zéro) Comment disposer d’un emplacement pour y ranger une chaîne ? Statiquement : char chaine1[21] ; Permet de ranger une chaîne d’au plus 20 caractères compte tenu de son zéro de fin Dynamiquement : char *chaine2; int n = 20 ; chaine2=malloc(n+1) ; A l’adresse chaine2, on pourra ranger une chaîne d’au plus 20 caractères compte tenu de son zéro de fin

Les chaînes de caractères Comment initialiser une chaîne lors de sa réservation ? char chaine1[20] ; chaine1=« bonjour » ; INTERDIT char chaine1[20] =« bonjour »; AUTORISé Réservation de 20 octets à partir de chaine1

Pour copier le contenu de chaine2 dans l’emplacement pointé par chaine1, il faut utiliser la fonction strcpy : Fonctions manipulant des chaînes #include char chaine1[100]="eso"; char chaine2[100]="ose"; strcpy(chaine1,chaine2); printf("%s\n%s\n",chaine1,chaine2); Il existe de nombreuses fonctions permettant de manipuler les chaînes de caractères. Elles se trouvent dans la bibliothèque voir poly strlen : longueur d’une chaîne de caractères strcmp : comparaison de 2 chaînes strchr : recherche d’un caractère dans une chaîne sprintf, sscanf: équivalents de printf et scanfc strrev: inverse une chaîne

Construction d’une chaîne de caractères int sprintf (char *destination, const char *format) Même utilisation que la fonction printf sauf qu’elle stocke le résultat dans la chaîne de caractères destination Ex : char chaine[100], ext[4]=« tif »; int i=4,val=4; sprintf(chaine, « file_%d_par_%d.%s », i, val, ext); printf(« %s \n », chaine); //affiche « file_4_par_4.tif »

Une structure est un exemple de type composite, c’est à dire un type de données formé de plusieurs variables pouvant être de types différents. Les structures Exemple : définition d’un nombre complexe struct complexe { double re; /* Partie réelle */ double im; /* Partie imaginaire */ }; struct complexe z; // Déclaration d'un objet de ce type z.re = 1; z.im =2; // Initialisation des “champs” Le nom du nouveau type de données est “struct complexe” struct : mot réservé du langage complexe : nom de la structure re et im : champs de la structure

struct complexe { double re; double im; } typedef struct complexe COMPLEXE;... void main( ) { COMPLEXE z ; //Déclaration de la variable z de type COMPLEXE... } Type synonyme On peut définir le nom du nouveau type de données. Par convention, on note ces nouveaux noms en MAJUSCULES Cette définition se fait hors du main, dans un.h par exemple On peut faire plus court : typedef struct complexe {double re; double im;} COMPLEXE;

Structures et fonctions Ce nouveau type de variable peut être utilisé exactement de la même manière que les autres ( int,double, …) COMPLEXE somme(COMPLEXE z1,COMPLEXE z2) { COMPLEXE z; z.re = z1.re + z2.re; z.im = z1.im + z2.im; return z; } typedef struct client { char nom[50]; /* nom du client */ char prenom[50]; /* prénom du client */ double montant; /* somme disponible sur le compte */ } CLIENT; Les éléments d’une structure peuvent ne pas avoir le même type

Les listes chaînées Un tableau est une structure pratique, qui permet de manipuler un grand nombre de données à la fois. Mais : sa taille est fixe la position des données est fixe Il est difficile d’augmenter, réduire la taille d’un tableau et d’y insérer des données de manière dynamique Pour résoudre le problème : liste simplement chaînée Donnée Pointeur sur la donnée suivante Maillon ou noeud

Les listes chaînées Implémentation à l’aide d’une structure : typedef struct noeud { char val ; struct noeud *suivant; } NOEUD ; Ici, la donnée est un caractère. Ca peut être n’importe quel type de donnée, éventuellement une autre structure. La structure est autoréférencée. C’est une possibilité offerte par le C.

Pointeurs et structures NŒUD* n ; n = malloc (sizeof(NŒUD)) ; Pour accéder à la valeur du NŒUD à partir du pointeur n : (*n).val ou (préférable) n->val On peut définir des pointeurs sur des structures :

Fonctions primitives Création d’une liste chaînée : debut créer un noeud il pointe sur NULL NOEUD* chr_sll_create () { NOEUD* debut; // Allocation et initialisation de debut debut = malloc(sizeof(NOEUD)); debut->val='0'; debut->suivant=NULL; return debut; } Implémentation : Renvoie un pointeur sur le premier nœud : c’est lui qui définit la chaîne. 0

Fonctions primitives Insertion d’un élément après un autre : 0 e m o debut s 1. Création du nœud à ajouter (allocation d’un pointeur) 2. Le nœud ajouté pointe sur le suivant 3. Le nœud courant pointe sur le nœud ajouté courant ajouté suivant

NOEUD* chr_sll_insert (char c, NOEUD* n_courant) { NOEUD* n_ajoute; n_ajoute = malloc(sizeof(NOEUD)); n_ajoute->val = c; n_ajoute->suivant =n_courant->suivant; n_courant->suivant = n_ajoute; return(n_ajoute); } Fonctions primitives Implémentation : 1. Création du nœud à ajouter 2. Le nœud ajouté pointe sur le suivant 3. Le nœud courant pointe sur le nœud ajouté

Autres fonctions primitives 3. Suppression d’un nœud après un certain noeud 1. Compter le nombre de nœuds d’une liste chaînée 2. Afficher la valeur de tous les nœuds situés après un certain noeud à vous de jouer …