ALGORITHMIQUE 1 TP2 Pointeurs - Fonctions Classe : SETI 1ere Année Groupe : 1 Année : 2012/2013 Date : Binôme : - APERE - Nicolas - KAVANAGH - Johan Z. Kachouh / ESCPI Document1 1 EXERCICE 1 – Pointeur simple Soit le programme C suivant : int i = 0; int *p; float x = 3.14; float *f; void main( void ) { p = &i; *f = 666; f = &x; *f = *p; *p = 34; p = f *p = *p + 1; printf( "%d %f\n", i, *f ); } Questions : 1. Dans le programme suivant, rayez les lignes illégales (erreurs) et donner les explications. 2. Qu'affiche ce programme après correction? ---- Z. Kachouh / ESCPI Document1 2 EXERCICE 2 – Tableaux statiques Nous souhaitons écrire un programme affectant aux éléments d’un tableau les valeurs de leurs indexes et afficher le contenu. L’écriture doit respecter le prototype suivant : void exo2(int T[], int N) ---Re-formulation du problème (algorithme de haut niveau) Ecrire une procédure dont le prototype est void exo2(int T[], int N) T : le tableau N : la taille de T Qui donnent à chaque casse du tableau la valeur de son index (position du tableau) Qui afficher les valeurs à l’écran Qui ne retourne aucune valeur > Utiliser cette procédure dans un programme Donner la description des données (variables) utilisées Variables Types Portée Description size Entier positif Locale Taille du tableau Tableau Tableau d’Entier Locale « size » valeurs T Tableau de Locale à la fonction Paramètre de la fonction N Entier Locale à la fonction Paramètre de la fonction i Entier positif Locale à la fonction Index Algorithme ALGORITHME TABLEAU Procédure Exo2( T : Tableau d’entiers signés, N : entier signé ) Début Variables locales i : entier positif Pour i allant de 0 à N-1 Par pas de 1 Faire T(i) i; afficher "La case ", i," du tableau contient ", T(i), ALaLigne FinPour FIN Début Variables locales size : entier positif Tableau : Tableau (size) d’entiers positifs Programme Exo2(Tableau, size); Fin FIN ALGORITHME TABLEAU Plan test Size 1 3 4 0 Tableau S attendue La case 0 du Peu Importe … S observée Résultat (Ok/Ko), commentaire tableau contient 0 La case 1 du tableau contient 1 La case 2 du tableau contient 2 … La case 3 du tableau contient 3 Rien Z. Kachouh / ESCPI Document1 3 Transcodage de l’algorithme en langage C //Tableau void Exo2(int T[], int N) { char i ; for(i=0; i<N; i++) { T[i]=i; printf(« La case %d du tableau contient %d\n»,i, T[i]); } } void Main(void) { char size = 10; char Tableau[size]; Exo2(Tableau,size); } Tests Dans cet exercice, laisser les élèves se tremper sur le type des variables (unsigned char ou char) avant de faire un commentaire. Num A b S attendue S observée Résultat (Ok/Ko), commentaire 1 5 5 10 10 Ok 2 -5 10 interdit 5 Ko 3 200 200 400 144 Dépassement de valeur par le type 4 A 5 Saisie non valide 5 Erreur donnée pas scanf Conclusion Nous avons utilisé pour les variables d’entrée a et b le type entier positif (unsigned char) sur un octet pour respecter l’énoncé du cahier des charges. Les valeurs permises pour ces variables sont entre 0 et 255. Le résultat véhiculé par la variable S est également de type entier positif (unsigned char) sur un octet. Ceci ne nous permet pas de dépasser une somme de 255 de a et b ensemble. Les tests numéros 2 et 4 ne sont pac concluant car la saisie des valeurs de types ne correspondants pas au type de données (unsigned char) n’est as contrôlé. Le test numéro 3 n’est pas concluant car il y a dépassement de la valeur permise pour la variable S qui est de 0 à 255. Nous suggérons, pour résoudre ce problème de choisir un type entier positif sur 2 octets (unsigned short). Comme perspectives pour améliorer le future programme, nous suggérons de faire un contrôle de la saisie au clavier sur le type des données avant de calculer la somme et contrôler les limites des valeurs. Z. Kachouh / ESCPI Document1 4 EXERCICE 3 – Tableaux dynamiques Nous souhaitons écrire un programme affectant aux éléments d’un tableau les valeurs de leurs indexes et afficher le contenu. L’écriture doit respecter le prototype suivant : void exo3(int *T, int N) On utilise la syntaxe suivante pour un tableau dynamique, int *tab, de taille N : int *tab = (int *) malloc(N*sizeof(int)); ---Re-formulation du problème (algorithme de haut niveau) Ecrire un programme dont le prototype est void exo3(int *T, int N) T : le tableau N : la taille de T Qui donnent à chaque casse du tableau la valeur de son index (position du tableau) Qui afficher les valeurs à l’écran Qui ne retourne aucune valeur > Utiliser cette procédure dans un programme Donner la description des données (variables) utilisées Variables Types Portée Description Size Entier positif Locale Taille du tableau Tableau Tableau d’Entier Locale « size » valeurs T Tableau de Locale à la fonction Paramètre de la fonction N Entier Locale à la fonction Paramètre de la fonction i Entier positif Locale à la fonction Index Algorithme ALGORITHME TABLEAU Procédure Exo2( T : Tableau d’entiers signés, N : entier signé ) Début Variables locales i : entier positif Pour i allant de 0 à N Par pas de 1 Faire T(i) i ; afficher "La case ", i," du tableau contient ", T(i), ALaLigne FinPour FIN Début Variables locales size : entier positif Tableau : Tableau (size) d’entiers positifs Programme Exo2(Tableau, size); Fin FIN ALGORITHME TABLEAU Plan test size 1 Tableau S attendue La case 1 du Peu Z. Kachouh / ESCPI S observée Résultat (Ok/Ko), commentaire tableau contient 1 Document1 5 3 Importe 4 0 //… La case 2 du tableau contient 2 La case 3 du tableau contient 3 //… La case 3 du tableau contient 3 Rien Transcodage de l’algorithme en langage C void Exo2(int T[], int N) { char i ; for(i=0; i<=N; i++) { T[i]=i; printf(« La case %d du tableau contient %d\n»,i, T[i]); } } void Main(void) { char size = 10; char Tableau[size]; Exo2(Tableau,size); } Tests Dans cet exercice, laisser les élèves se tremper sur le type des variables (unsigned char ou char) avant de faire un commentaire. Num a b S attendue S observée Résultat (Ok/Ko), commentaire 1 5 5 10 10 Ok 2 -5 10 interdit 5 Ko 3 200 200 400 144 Dépassement de valeur par le type 4 a 5 Saisie non valide 5 Erreur donnée pas scanf Conclusion Nous avons utilisé pour les variables d’entrée a et b le type entier positif (unsigned char) sur un octet pour respecter l’énoncé du cahier des charges. Les valeurs permises pour ces variables sont entre 0 et 255. Le résultat véhiculé par la variable S est également de type entier positif (unsigned char) sur un octet. Ceci ne nous permet pas de dépasser une somme de 255 de a et b ensemble. Les tests numéros 2 et 4 ne sont pac concluant car la saisie des valeurs de types ne correspondants pas au type de données (unsigned char) n’est as contrôlé. Le test numéro 3 n’est pas concluant car il y a dépassement de la valeur permise pour la variable S qui est de 0 à 255. Nous suggérons, pour résoudre ce problème de choisir un type entier positif sur 2 octets (unsigned short). Comme perspectives pour améliorer le future programme, nous suggérons de faire un contrôle de la saisie au clavier sur le type des données avant de calculer la somme et contrôler les limites des valeurs. Z. Kachouh / ESCPI Document1 6 Z. Kachouh / ESCPI Document1 7