Structures de données IFT-10541 Abder Alikacem Semaine 2 Tests sur les pointeurs Département d’informatique et de génie logiciel Édition Janvier 2009.

Slides:



Advertisements
Présentations similaires
la programmation en langage C
Advertisements

C.
1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif.
Programme de baccalauréat en informatique Algorithmique et programmation IFT-1001 Thierry EUDE Hatem Mahbouli Laboratoire #12 Département dinformatique.
Structures de données IFT-2000
Allocation de la mémoire Tâche à faire Attribuer de lespace mémoire Charger Code et Données Exécuter La tâche -Tenir à jour une carte de lespace libre/occupé.
Introduction Création d'un projet Ajout de fichiers Compilation Exécution Utiliser le débogueur Département dinformatique et de génie logiciel Développer.
Algorithmique et Programmation
Structures de données IFT Abder Alikacem Transtypage Module 1 Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Structures de données IFT Abder Alikacem Espace de nommage Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Espace de nommage Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Structures de données IFT-2000
Structures de données IFT-10541
Structures de données IFT-2000 Abder Alikacem La librairie STL du C++ Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT Abder Alikacem Gestion des exceptions Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-10541
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Sous-séquence de somme maximale (Algo#4). Algorithme retour arrière. Département dinformatique et de génie.
Structures de données IFT-10541
IFT Structures de données
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
Structures de données IFT-2000
IFT Structures de données Abder Alikacem Département dinformatique et de génie logiciel.
Structures de données IFT-10541
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT Abder Alikacem Gestion des exceptions Module 2 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT Abder Alikacem Linéarisation des matrices Département dinformatique et de génie logiciel Édition septembre 2009.
Structures de données IFT-2000 Abder Alikacem L’héritage en C++ Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT Abder Alikacem Semaine 10 Les arbres SPLAY Département dinformatique et de génie logiciel Édition septembre
Structures de données IFT-2000
Une introduction à Java
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-10541
Analyse d’algorithmes
Structures de données IFT-10541
Structures de données IFT-2000
Formation C++. Hello World ! #include /* Commentaire sur plusieurs lignes */ int main() { //Affiche hello world std::cout
Le sexe de l’ordinateur L’ordinateur de quel sexe de quel sexe est-il ?
Structures de données IFT-2000
Structures de données IFT-2000
Faculté Polytechnique de Mons
Efficacité des algorithmes
Tutorat en bio-informatique
L’ordinateur De quel sexe Est-il?.
Exec et signaux. Comment surveiller les processus? Avant d’aller plus loin, vous aurez sans doute besoin de cette commande : ps –A u: permet d’afficher.
L’ordinateur De quel sexe Est-il?.
Le sexe de l’ordinateur
Conception de Programmes - IUT de Paris - 1ère année Cours 2 – Références et passage de paramètres Les Références –Introduction aux références.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Chapitre VII Techniques plus avancées à travers le concept de classe.
Test.
UE MAREP Cours 12 : Révisions
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Structures de données IFT-2000 Abder Alikacem Laboratoire #1 Département d’informatique et de génie logiciel Édition Septembre 2009.
NICE.introduction ► ► Dans minix, toutes les processus utilisateurs s’exécutent avec la même priorité. ► ► Si en arrière fond, plusieurs processus intensifs.
Test.
Test.
test
TEST.
Int 10. Int 6.
Test test.
Transcription de la présentation:

Structures de données IFT Abder Alikacem Semaine 2 Tests sur les pointeurs Département d’informatique et de génie logiciel Édition Janvier 2009

Test#1 a- Il y aura erreur de compilation b- Il y aura un accès à une zone mémoire indéterminée ou invalide c- Le code s'exécutera sans erreur int a, *b, **c;Réponse (a, b ou c) : ___ c = (int *)&a; **c = 5;

Test #2 Qu’affiche le programme suivant? Comment réagit votre compilateur à la compilation? A-t-il raison (est ce logique) s’il vous affiche une valeur? int * mallocIntMaison(int valeur); int main() { int *i; i = mallocIntMaison(10); cout << *i; return 0; } int* mallocIntMaison(int valeur) { int i = valeur; return &i; }

Test#3 a- Il y aura erreur de compilation b- Il y aura un accès à une zone mémoire indéterminée ou invalide c- Le code s'exécutera sans erreur int x[5];Réponse (a, b ou c) : ___ int y[6]; int *z[2]; z[0] = x; z[1] = y;

int main() { int x[5]; int y[6]; int *z[2]; z[0] = x; z[1] = y; (*z)[2]=4; (*(z+1))[3]=8; return 0; } Test #4

Test#5 int x[10];Réponse (a, b ou c) : ___ *(x + 5*sizeof(int)) = 33; a- Il y aura erreur de compilation b- Il y aura un accès à une zone mémoire indéterminée ou invalide c- Le code s'exécutera sans erreur

int main() { int R,x,*y,**z,***w; x = 5; y = &x; z = &y; w = &z; R = ***w; cout << R; return 0; } Test#6

int main() { int a, **c; c = (int **)&a; **c = 5; cout << **c; return 0; } Retour sur le test#1

int main() { int a, **c; c = (int **)&a; (int)*c = 5; cout (*c) return 0; } Test#8

int main() { int R,x,*y,**z,***w; x = 5; y = &x; z = (int **)y; // z = static_cast (y) w = &z; R = (int) **w; // R = static_cast (**w) cout << R; return 0; } Test#9

int main() { int R,x[5],i; for(i=0;i<5;i++) { x[i]=i; } R = *((&(x[3]))+1); cout << R; return 0; } Test #10

int main() { int R,x[5],i,*y[5]; for(i=0;i<5;i++) { x[i]=i; } for(i=0;i<5;i++) { y[i] = &(x[i]); } R = ((&y[0])[1])[2]; cout << R; return 0; } Test #11

Test #12 Réponse (a, b ou c) : ___ long double * ld;Réponse (a, b ou c) : ___ ld = new (long double *); *ld= ; a- Il y aura erreur de compilation b- Il y aura un accès à une zone mémoire indéterminée ou invalide c- Le code s'exécutera sans erreur

Test #13 Qu'est-ce que le programme suivant affiche ? Sinon, expliquez pourquoi que ça plante. int main() { int *tableau, taille = 20, i; for(i=0;i<taille;i++) tableau[i] = i; cout << tableau[12]; return 0; }

Test #14 Donnez la valeur affectée à R suite aux instructions suivantes: int R,z[5],*x,i; x = z; for(i=0;i<5;i++) x[i]=i; x = x+x[1]; x = x- x[2]; x = x+ x[6]; R = *((&(x[-1]))-1);

Test #15 void toto(char ***); int main() { char * ptr1; char ** ptr2; ptr1 = (char *)malloc(128); strcpy(ptr1, "Le C est facile!!!"); ptr2=&ptr1; toto(&ptr2); cout << ptr1; return(0); } void toto (char ***x) { **x = **x + 3; *(**x+1) = '\''; } Qu’affiche ce programme?

Test #16 Considérer le code suivant : int tab[100]; int i=0; int *a; int *b; for(i=0; i<50 ; i++)tab[i] = 10*i; b = new int[100]; a = b; /* ligne 1*/ b = tab; /* ligne 2*/ a) que devient a si on fait free (b) à la place du commentaire /*ligne 1*/ ? b) qu’arrivera –t-il si on fait free (b) à la place du commentaire /*ligne 2*/ ?

Test #17 Écrire une fonction qui initialise une chaîne de char.. void toto1(…); Écrire un main() pour simuler l’appel de toto1()

Test #18 Même question: un tableau de 3 chaînes de char.. void toto2(…); Écrire un main() pour simuler l’appel de toto2()

#include using namespace std; void toto1 (char **x) { *x = new char[40]; strcpy(*x, "salut"); } int main() { char * ptr1; char ** ptr2; toto1(&ptr1); cout << ptr1; toto2(&ptr2); cout << ptr2[0] << ptr2[1] << ptr2[2]) << endl; return 0; } void toto2 (char ***x) { *x = new char *[3]; **x = new char[40]; *(*x+1) = new char[40]; *(*x+2) = new char[40]; strcpy((*x)[0], "allo"); strcpy((*x)[1], "patate"); strcpy((*x)[2], "toto"); }

void mallocIntMaison(int **ptr, int valeur); int main() { int *i; mallocIntMaison(&i,10); cout << *i; return 0; } void mallocIntMaison(int **ptr, int valeur) { int i = valeur; *ptr = &i; } Test #19

Test #20 int main() { int bonjour[50]; int *allo; int i; for(i=0;i<50;i++) bonjour[i] = i; allo = bonjour; allo++; cout << allo[45] <<endl; /*Premier affichage*/ allo[4] = 777; allo[5] = 888; allo[6] = 999; cout << (bonjour+1)[5] <<endl; /*Deuxième affichage*/ allo= allo+10 ; cout <<* (int**) (bonjour - 1) << endl;/*Troisième affichage*/ cout << allo <<endl; /*Quatrième affichage*/ cout << *(int*)(*(bonjour - 1))<< endl; /*Cinquième affichage*/ return 0; } Expliquez tous les affichages après l’exécution de ce code.

Test #21 Qu’affiche le bout de programme suivant : int main() {int **x; int i, j; x=new int*[6]; x[0][0]=0; x[0][1]=1; x[0][2]=2; x[1][0]=3; x[1][1]=4; x[1][2]=5; for (i=0; i<2; i++) for (j=0; j<3; j++) cout << x[i][j]; return 0; }

Test #22 Qu’affiche le bout de programme suivant : int main() {int **x; int i, j; x= new int*[6]; for (i=0; i<6; i++) x[i]= new int; x[0][0]=0; x[0][1]=1; x[0][2]=2; x[1][0]=3; x[1][1]=4; x[1][2]=5; for (i=0; i<2; i++) for (j=0; j<3; j++) cout << x[i][j]; return 0; }

Test #23 Est ce que le programme suivant s’exécute? int main() {int **x; int i, j; x= new int*[6]; for (i=0; i<6; i++) x[i]= new int; x[0][0]=0; x[0][1]=1; x[0][2]=2; x[1][0]=3; x[1][1]=4; x[1][2]=5; for (i=0; i<2; i++) for (j=0; j<3; j++) cout x[i][j]; delete[] x; return 0; }

Test #24 Est ce que le programme suivant s’exécute? int main() {int **x; int i, j; x= new int*[2]; for (i=0; i<2; i++) x[i]= new int[3]; x[0][0]=0; x[0][1]=1; x[0][2]=2; x[1][0]=3; x[1][1]=4; x[1][2]=5; for (i=0; i<2; i++) for (j=0; j<3; j++) cout << x[i][j]; delete [] x; /*Est ce qu’on a rien oublié?*/ return 0; }

Test #25 Qu’affiche le bout de programme suivant : int main() {int ***ptr; int i,j; ptr = new int **[2]; for(i = 0; i < 2; i++) {*(ptr + i) = new int*[3]; for(j = 0; j < 3; j++) {*( *(ptr + i) + j) = new int[4]; *( *( *(ptr + i) + j)) = 48; *( *( *(ptr + i) + j) + 1) = 34; *( *( *(ptr + i) + j) + 2) = 7; *( *( *(ptr + i) + j) + 3) = 125; } cout << ptr[0][1][2]; return 0; }

Test #26 Que fait la fonction sss ci-dessous ? (Test à faire après l’étude de La semaine 3) struct element { TypeEl el; element *suivant; element *precedent; } ;/*noeud typique d’une liste doublement chaînée circulaire */ bool sss(elem *a) { elem *x; if (a == 0) return true; x = a; do { if (a->suivant->precedent != a) return false; a = a->suivant; } while (a != x); return true; }

Test #27 Que fait la fonction sss ci-dessous ? (Test à faire après l’étude de la semaine 3) struct element { TypeEl el; element *suivant; element *precedent; }; /* noeud typique d’une liste doublement chaînée circulaire */ bool sss(elem *a) { elem *x; if (a == 0) return true; x = a; do { if (a->suivant->precedent != a->suivant ) return false; a = a->suivant; } while (a != x); return true; }

Test #28 Soit les déclarations suivantes : int tableau[] = {15,12,14,17,25,89,74,14,1,35,26,85}; int * ptr; int * * ptrPtr; ptrPtr = &ptr; ptr = tableau; Donnez 6 façons différentes (2 qui utilisent ptr et 4 qui utilisent ptrPtr) pour avoir accès à la valeur 89.

int main() {int tableau[] = {15,12,14,17,25,89,74,14,1,35,26,85}; int * ptr; int * * ptrPtr; ptrPtr = &ptr; ptr = tableau; cout << *(ptr+5) << ptr[5] << endl; cout << *(*ptrPtr+5) << ptrPtr[0][5] << (*ptrPtr)[5] << *(ptrPtr[0]+5) << endl;; return 0; }

#include void toto(char ***); int main() { char * ptr1; char ** ptr2; ptr2=&ptr1; toto(&ptr2); cout << ptr1; return 0; } void toto (char ***x) { **x="Bonjour"; *(**x+3)='\0'; } void toto (char ***x) { **x= new char[128]; strcpy(**x, "Bonjour"); *(**x+3)='\0'; } Qu’affiche ce programme? Expliquez. Test #29

Qu’affiche ce programme? Expliquez. Test #30 #include #define N 9 int main() { int *p; char *n; char **s; int tab[N] = {-8,-6,-4,-2,0,2,4,6,8}; s = &n; *s = "pointeurs"; p = tab+N-1; while (**s != '\0') { cout << *(n+*p); ++(*s); p--; } return 0; }

Qu’affiche ce programme? Expliquez. Test #31 int initcmp(char *c1,char *c2) { return c1==NULL || c2==NULL || *c1!=*c2; } void resultat(int (*f)(char*,char*),char *ch1,char *ch2) { if ((*f)(ch1,ch2)==0 ) cout << " pareil\n" else cout << "pas pareil\n"); } int main() { resultat(initcmp,"Anne","Arbre"); resultat(strcmp,"Anne","Arbre"); return 0; }