Licence STPI Semestre 3 - Examen de Validation de Module - Janvier 2006 ULSI301 - LANGAGE C



Documents pareils
Les structures. Chapitre 3

Le langage C. Séance n 4

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d initiation à la programmation en C++ Johann Cuenin

Travaux Dirigés n 1 : chaînes de caractères

Programmation impérative

I. Introduction aux fonctions : les fonctions standards

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Chap III : Les tableaux

Initiation. àl algorithmique et à la programmation. en C

Algorithmique, Structures de données et langage C

Chapitre 1 : La gestion dynamique de la mémoire

Présentation du langage et premières fonctions

Conventions d écriture et outils de mise au point

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Bases de programmation. Cours 5. Structurer les données

Introduction au langage C

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

I00 Éléments d architecture

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Compression de Données - Algorithme de Huffman Document de Conception

Cours 1: Java et les objets

Le prototype de la fonction main()

Les fichiers. Chapitre 4

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Les chaînes de caractères

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Les structures de données. Rajae El Ouazzani

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Algorithmique et Programmation, IMA

Cours Programmation Système

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

UE Programmation Impérative Licence 2ème Année

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C


Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Définitions. Numéro à préciser. (Durée : )

Génie Logiciel avec Ada. 4 février 2013

TP, première séquence d exercices.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Programmation système I Les entrées/sorties

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Introduction à MATLAB R

Rappels Entrées -Sorties

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

Programmation en langage C

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Débuter avec Excel. Excel

Programmation C. Apprendre à développer des programmes simples dans le langage C

Premiers Pas en Programmation Objet : les Classes et les Objets

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Utilisation d objets : String et ArrayList

Java Licence Professionnelle CISII,

Poker. A rendre pour le 25 avril

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Recherche dans un tableau

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Excel 2007 Niveau 3 Page 1

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

STAGE IREM 0- Premiers pas en Python

ERETES-SERIES. Support de formation. Formation ERETES ERETES-SERIE 1/58

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Les arbres binaires de recherche

Programmation en Java IUT GEII (MC-II1) 1

Claude Delannoy. 3 e édition C++

Programmation système de commandes en C

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Programmation Classique en langage C

Exercices sur les interfaces

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

INITIATION A LA PROGRAMMATION

SUPPORT DE COURS. Langage C

V- Manipulations de nombres en binaire

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Cours d Algorithmique et de Langage C v 3.0

Gestion de la mémoire

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Introduction au Langage de Programmation C

Le système de gestion des fichiers, les entrées/sorties.

Outils pour la pratique

3IS - Système d'exploitation linux - Programmation système

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

Cours Langage C/C++ Programmation modulaire

Programmation en langage C Eléments de syntaxe

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Langage Éric Guérin 5 octobre 2010

Transcription:

Licence STPI Semestre 3 - Examen de Validation de Module - Janvier 2006 ULSI301 - LANGAGE C Durée : 2h. - Documents et Calculatrices autorisés. Toutes les réponses doivent être justifiées - Les exercices sont indépendants Dès le moment où une fonction est décrite dans une question, vous pouvez supposer qu elle est correcte pour toute la suite de l exercice, que vous ayez su l écrire ou non. - Exercice I : Matrices 2x2 de Nombres Complexes - I.1 - Nombres Complexes 1 - Ecrivez la structure cplx qui permet de représenter correctement un nombre complexe. 2 - Ecrivez maintenant le type complexe qui permet de représenter correctement un nombre complexe. Vous pourrez vous baser ou pas sur la structure cplx définie précédemment (au choix). Attention : A partir de maintenant, nous n utiliserons plus que le type complexe et plus la structure cplx. 3 - Ecrivez la fonction complexe saisiecomplexe1(void); qui permet la saisie au clavier d un nombre complexe. 4 - Ecrivez une fonction nommée saisiecomplexe2 qui fait le même travail en passage par adresse. 5 - Ecrivez une fonction nommée affichecomplexe qui permet d afficher un nombre complexe a l écran. Vous passerez le nombre complexe à afficher par adresse. 6 - Ecrivez une fonction nommée produitcomplexe qui permet d effectuer le produit de deux matrices de nombres complexes fournies en paramètre. Ces deux matrices seront passées par valeur, alors que le résultat sera passé par adresse. I.2 - Matrices 2x2 On souhaite gérer des matrices 2 2 de nombres complexes. On considère à partir de maintenant que toutes les fonctions, structures et types écrits lors de la question précédente sont déjà définies. Dans cette partie du problème, on choisira systématiquement de faire appel aux fonctions et types déjà définis plutôt que de réécrire des morceaux de programme qui auraient le même but. 1 - Ecrivez la structure puis le type mat22cplx qui permet de gérer une matrice 2 2 de nombres complexes. La nouvelle structure et le nouveau type devront ré-utiliser le type complexe. 2 - En faisant appel aux fonctions déjà écrites pour les nombres complexes, écrivez la fonction saisiematricecomplexe qui permet de faire la saisie au clavier d une matrice 2 2 de nombres complexes. 3 - En faisant appel aux fonctions déjà écrites pour les nombres complexes, écrivez la fonction affichematricecomplexe qui permet de faire l affichage d une matrice 2x2 de nombres complexes. 4 - Toujours en faisant appel aux fonctions déjà écrites pour les nombres complexes, écrivez la fonction produitmatricecomplexe qui permet de calculer le produit de deux matrices de nombres complexes. Le résultat devra être renvoyé via le mécanisme classique de retour et non en passage par adresse. 5 - Application En réutilisant tout ce qui a été écrit plus haut, écrivez un programme qui : Licence STPI Semestre 3 - Examen de Validation de Module - ULSI301 - Langage C - p. 1/2

1. Demande à l utilisateur combien de matrices il veut gérer, 2. Crée un tableau en allocation dynamique pour contenir les n matrices, 3. Propose la saisie des n matrices, 4. Calcule le produit de ces n matrices, 5. Affiche la matrice-résultat. Licence STPI Semestre 3 - Examen de Validation de Module - ULSI301 - Langage C - p. 2/2

Licence STPI Semestre 3 - Examen de Rattrapage - Juillet 2006 ULSI301 - LANGAGE C Durée : 2h. - Documents et Calculatrices autorisés. Toutes les réponses doivent être justifiées La qualité du code sera prise en compte dans la notation. Dès le moment où une fonction est décrite dans une question, vous pouvez supposer qu elle est correcte pour toute la suite de l exercice, que vous ayez su l écrire ou non. - Exercice I : Bibliothèque : première version - On veut écrire un logiciel permettant de gérer l ensemble des livres contenus dans une bibliothèque. Pour chaque livre, on a besoin des informations suivantes : Le titre du livre (200 caractères), Le nom de l auteur (100 caractères), l année de son édition. I.1 - Types Ecrivez le type livre qui représente correctement un livre, ainsi que le type bibliotheque qui permette de stocker 100 livres au maximum. Le type bibliotheque devra donc contenir deux champs : un champ tableau suffisamment grand pour contenir les 100 livres possibles, un champ nombre qui contient le nombre de livres actuellement présents dans la bibliothèque. I.2 - Fonction Principale Ecrivez une fonction main qui crée une variable pour la bibliothèque, que vous initialiserez pour qu elle ne contienne aucun livre. I.3 - Fonction d Ajout d un Livre On veut écrire une fonction qui propose la saisie d un livre à l utilisateur et qui ajoute ce livre à la bibliothèque. On propose les trois prototypes suivants : void AjoutLivre1(bibliotheque b); bibliotheque AjoutLivre2(bibliotheque b); void AjoutLivre3(bibliotheque* b); 1 - En supposant dans un premier temps que ces trois fonctions sont correctes, écrivez la ligne de programme que vous ajouteriez dans la fonction main pour appeler chacune d elles. Il est totalement inutile de réécrire entièrement le main. 2 - Expliquez maintenant avec précision pourquoi la fonction AjoutLivre1 ne pourrait pas fonctionner contrairement aux deux autres. 3 - Après avoir calculé sizeof(livre) et sizeof(bibliotheque), expliquez également avec précision pourquoi la fonction AjoutLivre3 est préférable par rapport à AjoutLivre2. 4 - Ecrivez la fonction AjoutLivre2. 5 - Ecrivez la fonction AjoutLivre3. Licence STPI Semestre 3 - Examen de Rattrapage - ULSI301 - Langage C - p. 1/2

I.4 - Fonction de recherche Ecrivez une fonction qui affiche tous les livres dont l année d édition est supérieure ou égale à 2000. I.5 - Fonction de suppression d un livre (un peu difficile) Proposez une fonction qui permettrait de supprimer un livre de la bibliothèque. - Exercice II : Bibliothèque : deuxième version - On souhaite maintenant gérer une bibliothèque permettant de contenir un nombre de livres maximum non prédéfini. On veut de plus concevoir une structure permettant de faciliter le classement des livres dans la bibliothèque. II.1 - Structrure 1 - Expliquez pourquoi une liste chaînée est une solution élégante à ce problème. 2 - Ecrivez la structure maillon d une telle liste, chaque maillon représentant un livre de la bibliothèque. On supposera qu un chaînage simple est suffisant. II.2 - Ajout d un Livre 1 - Proposez une fonction permettant de saisir puis d ajouter un livre à n importe quel endroit de la bibliothèque. II.3 - Fonction de recherche Ecrivez une fonction qui affiche tous les livres dont l année d édition est supérieure ou égale à 2000. II.4 - Fonction de suppression d un livre Proposez une fonction qui permettrait de supprimer un livre de la bibliothèque. On ne tolérera pas les fuites de mémoire. Licence STPI Semestre 3 - Examen de Rattrapage - ULSI301 - Langage C - p. 2/2

Licence STPI Semestre 3 - Contrôle Continu - Novembre 2006 ULSI301 - LANGAGE C Durée : 1h. 30 - Documents et Calculatrices interdits. NOM : Prénom : Groupe : - Exercice I : Correspondances de Types - Soit un programme qui débuterait de la façon suivante : void f1(int k); 2 int* f2(void); 4 int main(void) { 6 char Carac; char* pcarac; 8 char tcarac[50]; 10 int Entier; int* pentier; 12 int tentier[50]; 14... Donnez le type des expressions ci-après : Expression Votre Réponse Expression Votre Réponse (A à H) (A à H) Carac pentier tentier *pcarac tcarac+5 pcarac[0] tentier[50] *tcarac malloc(10*sizeof(char)); f1(2); f2(); *f2(); tcarac[10] &Carac &pentier &(*pcarac) &(tcarac[0]) &Entier 824 ((char*)25875) en répondant par A, B, C, D, E, F, G ou H avec : A char B char* C char** D int E int* F int** G void H void* Vous répondez directement sur cette feuille. Toute réponse fausse compte comme un point négatif. Licence STPI Semestre 3 - Contrôle Continu - ULSI301 - Langage C - p. 1/3

- Exercice II : Syntaxe du Langage C - Soit un programme qui débuterait de la façon suivante : int main(void) 2 { char* pcarac; 4 int Entier; int* pentier1; 6 int* pentier2; int* pentier3; 8 int* pentier4; int tentier[50]; 10 pentier1 = (int*) malloc(50*sizeof(int)); 12 pentier3 = tentier+10; pentier4 = pentier1 + 152; 14... Pour chacune des expressions ci-après : Expression Votre Réponse (A à C) pentier2 = *(malloc(10*sizeof(int))); pentier2 = (char*) pcarac; pentier2 = (int*)pcarac; pentier2 = tentier; pentier2 = tentier[5]; pentier2 = Entier; pentier3[0] = 3; pentier3[50] = 2; *pentier4 = 10; Entier = *pentier2; pcarac[5] = H ; *(pentier3+2) = 5; pentier = 5; Indiquez si : A : elle n est pas correcte syntaxiquement, c est à dire qu elle provoque une erreur de compilation, en d autres termes gcc afficherait une erreur B : elle est correcte syntaxiquemnent (gcc n affiche aucune erreur) mais fait planter le programme C : elle se compile et s exécute correctement Vous répondez directement sur cette feuille. Toute réponse fausse compte comme un point négatif. N.B. : il est vivement conseillé de représenter l état de la RAM sur un schéma au brouillon. - Exercice III : Allocation Mémoire - Soit le programme ci-dessous : Licence STPI Semestre 3 - Contrôle Continu - ULSI301 - Langage C - p. 2/3

int* f(void); 2 4 int main(void) { 6 int *p; 8 p = f(10); printf("10 au carre vaut %d",p[11]); 10 } 12 14 int* f(void) {int T[50]; 16 int i; for(i = 0; i < 50; i++) 18 { T[i] = i*i; 20 } return T; 22 } III.1 - Ca Plante! Expliquez pourquoi ce programme "plante de temps en temps" : (quelques lignes) III.2 - Modification Réécrivez le et modifiez le pour éliminer ce problème. Licence STPI Semestre 3 - Contrôle Continu - ULSI301 - Langage C - p. 3/3

Licence STPI Semestre 3 - Examen - Janvier 2007 ULSI301 - LANGAGE C Durée : 2h. - Documents et Calculatrices interdits. Toutes les réponses doivent être justifiées - Les exercices sont indépendants Dès le moment où une fonction est décrite dans une question, vous pouvez supposer qu elle est correcte pour toute la suite de l exercice, que vous ayez su l écrire ou non. La qualité du code écrit fera partie des critères d évaluation. - Exercice I : QCM - Dans cet exercice, toute réponse fausse compte comme un point négatif. La note atribuée à cet exercice sera calculée par la formule max(votrenote,0). Vous répondrez directement sur cette feuille. Soit un programme qui débuterait de la façon suivante : 1 typedef struct { 3 char** lignes; char* data; 5 long largeur,hauteur; } image; 7 void f1(image k); 9 image* f2(int l,int h); 11 int main(void) { 13 image img; image* pimg; 15... Donnez le type des expressions ci-après, en supposant qu elles soient tapées après la ligne 15 : Expression Votre Réponse Expression Votre Réponse (A à L) (A à L) pimg (pimg[0]).data pimg+5 *(pimg.largeur) &((*pimg).lignes); f1(pimg); img.data+2 &(img.largeur) (*img).data *(f2(5,3)); f2(); f1(*pimg); img.lignes[3] &(img.lignes[5][3]) en répondant par A, B, C, D, E, F, G, H, I, J, K ou L avec : A char B char* C char** D long E long* F long** G img H img* I img** J void K void* L syntaxe incorrecte Licence STPI Semestre 3 - Examen - ULSI301 - Langage C - p. 1/4

- Exercice II : Polynômes - On veut représenter les polynômes sous forme d une structure de données : a 0 x 0 + a 1 x 1 + a 2 x 2 +... + a i 1 x i 1 +... + a n 1 x n 1 + a n x n On choisit de les représenter sous forme d un tableau. Chaque case du tableau contiendra un terme, représenté par : le coefficient a i, qui est un réel, la valeur de l exposant i, qui est une valeur entière On considèrera que tout terme ayant un exposant négatif ne fait pas partie du polynôme. Ainsi, si on représente le polynôme 1 + 2x 5x 3 dans un tableau "trop grand" permettant de stocker 5 termes en tout, il pourrait être représenté par le tableau suivant : 0 1 2 1-5 3?? -1?? -1 Dans ce tableau, les trois premiers termes sont donc significatifs, les deux derniers ne le sont pas. II.1 - Fonctions de base 1 - Ecrivez le type termepoly qui représente correctement un terme du polynôme. 2 - Ecrivez le type Polynome qui représente correctement un Polynôme complet de degré quelconque. La structure devra contenir notamment le nombre de termes total (significatifs + non significatifs) ainsi qu un pointeur sur l ensemble des termes. 3 - Ecrivez la fonction : Polynome CreerPoly(int nbtermes); qui renvoie un polynôme de nbtermes correctement initialisé. L exposant de chaque terme sera initialement affecté à la valeur 1. Note 1 : le polynôme généré est donc un "polynôme vide" au sens où il ne contient aucun terme significatif. Note 2 : votre programme doit pouvoir gérer un nombre quelconque de termes. L exemple donné plus haut sur 5 termes n est qu un exemple! Note 3 : Si pour une raison ou pour une autre le polynôme ne pouvait pas être créé, il faut que le polynôme renvoyé ait un nombre de termes égal à 0 et que son pointeur pointe sur NULL. 4 - Ecrivez la fonction : Polynome AjoutTerme1(float coefficient, int exposant, Polynome P); qui ajoute un terme significatif au polynôme. Par exemple, à partir de l exemple du polynôme 1 + 2x 5x 3, ajouter le terme 3x 2 revient à obtenir : 0 1 2 1-5 3 3 2?? -1 5 - Réécrivez la fonction d ajout, alors appelée AjoutTerme2, qui, au lieu de renvoyer le Polynome, ne renverra rien. Dans ces conditions, justifiez pourquoi on est obligés de passer le polynôme par adresse à la fonction. 6 - Ecrivez la fonction AjoutTerme2 décrite ci-dessus. Licence STPI Semestre 3 - Examen - ULSI301 - Langage C - p. 2/4

II.2 - Opérations sur les Polynômes 1 - Ecrivez la fonction : Polynome AjoutPolynomes(Polynome P1, Polynome P2); qui renvoie un polynôme qui serait la somme des deux polynômes. Note : Dans cette question, le polynôme-résultat pourra contenir des termes "non significatifs". 2 - Ecrivez la fonction : void ProduitPolynomes(Polynome* P1, Polynome* P2, Polynome* R); qui fournit via la variable R un polynôme qui contient le produit des deux polyômes. Note : Dans cette question, on ne cherchera pas à factoriser les termes de même degré. II.3 - Evaluation d un Polynôme 1 - Ecrivez la fonction : float EvalPoly(Polynome* P,float x); qui calcule, la valeur que vaut P au point x. 2 - Expliquez l intérêt de passer le polynôme par adresse dans la fonction EvalPoly. 3 - On souhaite sauvegarder les données dans un fichier. Ecrivez la fonction : void SavePoly(char* Nom, Polynome* P, float x1, float x2, float p); qui sauvegarde dans un fichier texte les valeurs y = P (x) pour x situé entre x 1 et x 2 avec un pas p. II.4 - Fonction Principale En réutilisant toutes les fonctions déjà écrites, écrivez une fonction main qui crée les 3 polynômes suivants : P 1 (x) = x 2 + 3x + 1 P 2 (x) = 5x 3 + 3 P 3 (x) = x + 7 Le programme produira le polynôme suivant : P 4 (x) = P 1 (x) (P 2 (x) + P 3 (x)) Enfin, le programme sauvera dans un fichier "RESULTATS.TXT" les valeurs du polynôme P 4 (x) évaluées entre x = 1 et x = 5.2 pour un pas sur x de 0.1 - Annexe : Prototypes de Fonctions Standard - /* fonctions associées aux fichiers (stdio.h) */ 2 FILE* fopen(char* nom, char* mode); int fwrite(void* buf, int taillecase, int nbcases,file* f); 4 int fread(void* buf, int taillecase, int nbcases,file* f); void fclose(file* f); 6 /* fonctions pour le traitement des chaines de caractères (string.h) */ 8 int strlen(char* s); // renvoie la taille de la chaine de caractères s 10 /* gestion de la RAM (stdlib.h) */ void* malloc(int nombreoctets); 12 void free(void* ptr); Licence STPI Semestre 3 - Examen - ULSI301 - Langage C - p. 3/4

14 /* autres fonctions (stdio.h) */ sprintf(char* destination, char* format,...); 16 // sprintf est identique à printf mais le résultat est mis dans // destination au lieu d être affiché à l écran 18 /* fonctions mathématiques (math.h) */ 20 double pow(double x,double y); //calcule x^y Licence STPI Semestre 3 - Examen - ULSI301 - Langage C - p. 4/4

Licence STPI Semestre 3 - Examen de Rattrapage - Février 2007 ULSI301 - LANGAGE C Durée : 2h. - Documents et Calculatrices interdits. Toutes les réponses doivent être justifiées - Les exercices sont indépendants Dès le moment où une fonction est décrite dans une question, vous pouvez supposer qu elle est correcte pour toute la suite de l exercice, que vous ayez su l écrire ou non. La qualité du code écrit fera partie des critères d évaluation. - Exercice I : QCM - Dans cet exercice, toute réponse fausse compte comme un point négatif. La note atribuée à cet exercice sera calculée par la formule max(votrenote,0). Vous répondrez directement sur cette feuille. Soit un programme qui débuterait de la façon suivante : 1 typedef struct { 3 char** lignes; char* data; 5 long largeur,hauteur; } image; 7 void f1(image* k); 9 image f2(void); 11 int main(void) { 13 image img; image* pimg; 15... Donnez le type des expressions ci-après, en supposant qu elles soient tapées après la ligne 15 : Expression Votre Réponse Expression Votre Réponse (A à L) (A à L) pimg pimg.data (pimg[0]).data (*pimg).largeur) f1(&img); &(img.data); pimg+4 &img img.data f2(5,3); f1(pimg); f1(&pimg); **(*pimg).lignes; &*(img.lignes[2]) en répondant par A, B, C, D, E, F, G, H, I, J, K ou L avec : A char B char* C char** D long E long* F long** G image H image* I image** J void K void* L syntaxe incorrecte Licence STPI Semestre 3 - Examen de Rattrapage - ULSI301 - Langage C - p. 1/3

- Exercice II : Figures à 3 dimensions - On veut représenter des figures à 3 dimensions dans l espace (par exemple un cube) : A B F C E D Pour celà, on a besoin de définir la notion de "point" dans l espace à 3 dimensions. Chaque point sera décrit par ses 3 coordonnées x, y et z, pas nécessairement entières. Ensuite, nous avons besoin de définir la notion de "figure à 3 dimensions", qui sera décrite notamment par un tableau contenant les points formant la figure à représenter. Par exemple, dans le cas du cube, il est clair qu il faudra 6 points, donc 6 cases dans ce tableau. II.1 - Fonctions de base 1 - Ecrivez le type point qui représente correctement un point en 3 dimensions. 2 - Ecrivez le type figure3d qui représente correctement une figure complète à 3 dimensions. Cette structure contiendra, en plus des données (les points eux-mêmes), le nombre de points que constituent la figure ainsi que le nombre de points utilisés. Le but de ce dernier champ est de pouvoir toujours savoir le numéro de la case qui suit le dernier point ajouté. Par exemple, si l on a créé une figure3d de 10 points et que l on n a rempli que les coordonnées de 3 points à cette figure, ce champ vaudra 3. 3 - Ecrivez la fonction : figure3d CreeFigure(int nbpoints); qui renvoie une figure de nbpoints correctement initialisée. Les coordonnées x, y, et z de tous les points seront placées à la valeur 0, et le nombre de points utilisés sera placé à la valeur 0. Note 1 : votre programme doit pouvoir gérer un nombre quelconque de points. L exemple du cube, constitué de 6 points, n est qu un exemple! Note 2 : Si pour une raison ou pour une autre la figure3d ne pouvait pas être créée, il faut que le polynôme renvoyé ait un nombre de points égal à 0 et que son pointeur pointe sur NULL. 4 - Ecrivez la fonction : figure3d AjoutPoint1(float x, float y, float z, figure3d f); qui met le point constitué des coordonnées x, y et z à la place indiquée par le champ "nombre de points utilisés", puis ajoutera 1 à ce champ. 5 - Réécrivez la fonction d ajout, alors appelée AjoutPoint2, qui, au lieu de renvoyer la figure3d, ne renverra rien. Dans ces conditions, justifiez pourquoi on est obligés de passer par adresse la figure3d à la fonction. 6 - Ecrivez une fonction qui calcule la distance entre deux points : float Distance(point* P1, point* P2); Expliquez ici l intérêt du passage par adresse pour cette fonction précise. Licence STPI Semestre 3 - Examen de Rattrapage - ULSI301 - Langage C - p. 2/3

II.2 - Opérations sur les Figures à 3 dimensions 1 - Ecrivez la fonction : figure3d ConcatenerFigures(figure3d f1, figure3d f2); qui renvoie une figure qui serait la concaténation de deux figures. 2 - Ecrivez la fonction : figure3d Tri(figure3d f, point p); qui trie les points de la figure par ordre croissant de distance par rapport au point p passé en paramètre. Vous choisirez la méthode qui vous plait le mieux. Note : pour info, on retrouve ce type de sous-programme dans tous les jeux en 3 dimensions. II.3 - Fichier Ecrivez une fonction : void SaveFigure(char* Nom, figure f ); qui sauvegarde dans un fichier texte les points qui composent la figure f. Chaque point devra être sur une ligne du fichier texte, et sur chaque ligne on doit voir dans l ordre les valeurs de x, y et z séparées par une tabulation. II.4 - Fonction Principale En réutilisant toutes les fonctions déjà écrites, écrivez une fonction main qui crée une figure contenant un cube de côté 10 et une pyramide à base carrée de hauteur 5, placée juste au dessus du cube. Faites ensuite concaténer les deux figures au programme, et faites lui trier les points dans l ordre croissant par rapport au point ( 5, 0, 0) sur la figure concaténée. Enfin, le programme sauvera dans un fichier "MAISON.TXT" la figure résultant. - Annexe : Prototypes de Fonctions Standard - /* fonctions associées aux fichiers (stdio.h) */ 2 FILE* fopen(char* nom, char* mode); int fwrite(void* buf, int taillecase, int nbcases,file* f); 4 int fread(void* buf, int taillecase, int nbcases,file* f); void fclose(file* f); 6 8 /* gestion de la RAM (stdlib.h) */ void* malloc(int nombreoctets); 10 void free(void* ptr); 12 /* autres fonctions (stdio.h) */ sprintf(char* destination, char* format,...); 14 // sprintf est identique à printf mais le résultat est mis dans // destination au lieu d être affiché à l écran 16 /* fonctions mathématiques (math.h) */ 18 double pow(double x,double y); //calcule x^y double sqrt(double x); //calcule racine(y) Licence STPI Semestre 3 - Examen de Rattrapage - ULSI301 - Langage C - p. 3/3