et quelques rappels sur certains éléments du langage C

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

Introduction au Langage C,C++
Introduction Langage très répandu Noyau Linux VLC … Des avantages indéniables mais aussi des contraintes ! Ceci nest quun rapide tour.
Programmation Orienté Objet en C++
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.
GEF 243B Programmation informatique appliquée
C.
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
Paramètres et pointeurs
Les pointeurs Manipulation d'adresses et de ce qui est contenu dans ces adresses Très important, fondamental même en C mauvaise réputation : 'dur à comprendre',
Fonctions Dans un programme : certaines opérations (ou séquences d'opérations) peuvent se répéter plusieurs fois : affichage de tableau, saisie, ou même.
FLSI602 Génie Informatique et Réseaux
FLSI602 Génie Informatique et Réseaux
B.Shishedjiev - Informatique II
Common Gateway Interface
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
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()
Programme de baccalauréat en informatique Algorithmique et programmation IFT-1001 Thierry EUDE Hatem Mahbouli Laboratoire #12 Département dinformatique.
TRAITEMENT DE STRUCTURES
Les fichiers et les chaînes de caractères
1 Les pointeurs et quelques rappels sur certains éléments du langage C.
FICHIERS.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
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-2000: Structures de données
Structures de données IFT-2000
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.
C++ : variables Déclaration de variables
LANGAGE C LP A2I IUT St DIE
Tableaux Introduction aux tableaux à une dimension. Déclaration, stockage, initialisation et accès en lecture ou en écriture aux composantes d’un tableau.
Structures de données IFT-2000
Plan cours La notion de pointeur et d’adresse mémoire.
L’essentiel du langage C
Introduction au C.
Structures des données
Le langage C Structures de données
2.1 - Historique Chapitre 2 : Introduction au langage C++
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
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
Notions de pointeurs en C
Labo II : Tableaux et pointeurs
La notion de type revisitée en POO
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.
SIF-1053 Architecture des ordinateurs
ALGORITHMIQUE ET PROGRAMMATION C
Argc et argv Utilisation des paramètres de la ligne de commande.
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.
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()
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
8PRO100 Éléments de programmation Les pointeurs de caractères.
Fiabilisation des lectures au clavier. Problèmes liés à scanf: rencontre de caractères invalides Sans arrêt prématuré: compte = scanf(``%d%c``;&n,&c);
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.
8PRO107 Éléments de programmation Les adresses et les pointeurs.
PRO-1027 Programmation Scientifique en C
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.
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
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 4ème séance
Transcription de la présentation:

et quelques rappels sur certains éléments du langage C Les pointeurs et quelques rappels sur certains éléments du langage C

Définition des pointeurs Initialisation des pointeurs type *identificateur; . . . int *pi; float *pf; double *pd; Type des données int a, *pi; pi = &a; pi = NULL; NULL - dans stdio.h

Pointeurs Adressage direct: Accès au contenu d'une variable par le nom de la variable. Adressage indirect: Accès au contenu d'une variable, en passant par un pointeur qui contient l'adresse de la variable. accès indirect int x,y,*px,*py; x=10; px=&x; py=px; y=*py; //y=x; accès direct x x x x x ? 10 ? 10 ? 10 y y y 10 10 10 10 10 px px py

Pointeurs - arthmetique ptr+const=ptr +const*sizeof(type) ptr-const=ptr - const*sizeof(type) int x, *p; p=&x; p++; p += 4; x=*--p; . . . *p++; *++p; ++*p (*p)++ *(p+1)

Pointeurs - exemples int *pt2; float *pt1; pt1=(float *)pt2; . . . void *pt2; pt1=pt2; int *p, *q; if(p==NULL) . . . if(p<q) . . .

#include <stdio.h> void main() { int i1=1,i2=2; int *p1,*p2; p1=&i1; p2=p1; printf("%d,%d\n",*p1,*p2); /*affiche ?*/ p2=&i2; printf("%d\n",*p2); /*affiche ?*/ *p2=*p1; } 1,1 2 1

#include<stdio.h> int main() { int i; int *j; i = 1; j = &i; *j = 2; printf("i vaut : %d\n", i); return 0; } i vaut : 2

#include <stdio.h> int main() { int i=11; int *ptri; ptri = &i; printf("La valeur %d est pointee par %p\n“,i, ptri); return(0); } La valeur 11 est pointee par 2427:21FE

#include <stdio.h> int main() { int i; int *ptri; ptri = &i; printf("La valeur pointée par ptri est %d\n", *ptri); return(0); } La valeur pointee par ptri est 19125

#include <stdio.h> int main() { int i; int *ptri; ptri = &i; i = 15; printf("La valeur pointée par ptri est %d\n", *ptri); return(0); } La valeur pointee par ptri est 15

Les opérations élémentaires sur pointeurs #include <stdio.h> main() { int A = 1; int B = 2; int C = 3; int *P1, *P2; P1=&A; P2=&C; *P1=(*P2)++; printf("%d,%d\n",*P1,*P2); P1=P2; P2=&B; *P1-=*P2; ++*P2; *P1*=*P2; A=++*P2**P1; P1=&A; *P2=*P1/=*P2; return 0; } 3,4 2,2 6,6 17

Utilisation des pointeurs Fonctions à plusieurs arguments de sortie Calcul d’adresse Allocation dynamique de la mémoire 20

Exemple: Faire un programme C à calculer les trois résultats: 1) le nombre d’ éléments positives; 2) le nombre d’ éléments négatives; 3) la somme de tout les nombres dans un tableau donné.

Exemple: Le prototype de la fonction #include <stdio.h> 1/2 void fon(int a[ ],int n,int *n_pos,int *n_neg,int *s); void main() { int tab[ ]={22,-33,4,5,-6}; int n_pos,n_neg,somme; fon(tab,sizeof(tab)/sizeof(int),&n_pos,&n_neg,&somme); printf("Le nombre d'elements positives=%d\n",n_pos); printf("Le nombre d'elements negatives=%d\n",n_neg); printf("La somme d'elements=%d\n",somme); } Le nombre d'elements positives=3 Le nombre d'elements negatives=2 La somme d'elements=-8

void fon(int a[],int n,int *n_pos,int *n_neg,int *s) 2/2 { int i; *n_pos=*n_neg=*s=0; for(i=0;i<n;i++) { if(a[i]>0) (*n_pos)++; else if(a[i]<0) (*n_neg)++; (*s)+=a[i]; } La définition de la fonction

Utilisation des pointeurs Calcul d’adresse - Exemple: Soit P un pointeur qui 'pointe' sur un tableau A: int A[] = {12, 23, 34, 45, 56, 67, 78, 89, 90}; int *P; P = A; Quelles valeurs ou adresses fournissent ces expressions: a) *P+2 => la valeur 14 b) *(P+2) => la valeur 34 c) &P+1 => l'adresse du pointeur derrière le pointeur P(rarement utilisée) d) &A[4]-3 => l'adresse de la composante A[1] e) A+3 => l'adresse de la composante A[3] f) &A[7]-P => la valeur (indice) 7 g) P+(*P-10)=> l'adresse de la composante A[2] h) *(P+*(P+8)-A[7]) => la valeur 23 24

chaîne est une valeur variable

#include <stdio.h> void main() {char *tab[]={"Eleve","Prof","Stage"}; printf("%s,%s\n",tab[0],*tab); printf("%s,%s\n",tab[1],*(tab+1)); printf("%c,%c\n",**tab,*tab[0]); printf("%c,%c\n",*tab[1],*(tab[1]+1)); printf("%c",*(tab[2]+1)); } Eleve,Eleve Prof,Prof E,E P,r t

Exemple: Faire un programme C à trouver: 1) le nombre d’occurrence d’un caractère donné dans une chaîne de caractère donné; 2) la chaîne miroir de la chaîne donné. #include <stdio.h> 1/3 #include <string.h> int count(char *s,char ch); void miroir(char *s,char *t); Les prototypes des fonctions

Entrer des données Appel des fonctions void main() 2/3 { char s[60],m[60],c; printf("Entrer une chaine:"); gets(s); //fgets(s,60,stdin); printf("Entrer un caractere:"); fflush(stdin); c=getchar(); printf("Le nombre de caractere %c dans %s est=%d\n",c,s,count(s,c)); miroir(s,m); printf("La chaine miroir est: %s\n",m); } Entrer des données Appel des fonctions Entrer une chaine:abcdcc Entrer un caractere:c Le nombre de caractere c dans abcdcc est=3 La chaine miroire est: ccdcba

La définition de la fonction de comptage int count(char *s,char ch) 3/3 { int c=0; while(*s!='\0') if(*s++ ==ch)c++; return c; } void miroir(char *s,char *t) { int l=strlen(s); s+=l-1; while(l) {*t++=*s--; l- -; *t='\0'; La définition de la fonction de comptage La définition de la fonction de miroir

Utilisation des pointeurs Allocation dynamique de la mémoire int *a; a … 1 élément 2 éléments n éléments