3ETI, Examen [CSC2] Developpement Logiciel en C CPE Lyon



Documents pareils
Quelques éléments de compilation en C et makefiles

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

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Introduction au langage C

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

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

Cours Langage C/C++ Programmation modulaire

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

TP : Gestion d une image au format PGM

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

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

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

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

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

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Plan du cours. Historique du langage Nouveautés de Java 7

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

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Conventions d écriture et outils de mise au point

Programmation système I Les entrées/sorties

Chapitre 1 : La gestion dynamique de la mémoire

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Algorithmique et Programmation, IMA

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Le langage C. Séance n 4

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

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

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


Programmation impérative

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

UE C avancé cours 1: introduction et révisions

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

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

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

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

Chap III : Les tableaux

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

Les structures de données. Rajae El Ouazzani

Le prototype de la fonction main()

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Cours 1: Java et les objets

Cours 1 : La compilation

Programmer en JAVA. par Tama

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

Algorithmique, Structures de données et langage C

Les chaînes de caractères

Machines virtuelles Cours 1 : Introduction

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

Licence Sciences et Technologies Examen janvier 2010

TP, première séquence d exercices.

C.M. 1 & 2 : Prise en main de Linux

Programmation en langage C

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

SUPPORT DE COURS. Langage C

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

Les structures. Chapitre 3

TD/TP PAC - Programmation n 3

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

I. Introduction aux fonctions : les fonctions standards

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

Chapitre 10. Les interfaces Comparable et Comparator 1

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Utilisation d objets : String et ArrayList

La mémoire. Un ordinateur. L'octet. Le bit

Arguments d un programme

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

Premiers Pas en Programmation Objet : les Classes et les Objets

Claude Delannoy. 3 e édition C++

Présentation du langage et premières fonctions

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

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

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

Java Licence Professionnelle CISII,

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Cours de Systèmes d Exploitation

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)

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

V- Manipulations de nombres en binaire

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Compilation (INF 564)

Architecture des ordinateurs

Simulation d un système de paiement par carte bancaire

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

TD/TP PAC - Programmation n 3

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

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

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Rappels d architecture

Programmation en Java IUT GEII (MC-II1) 1

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

Cours d Algorithmique et de Langage C v 3.0

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

Chaîne de production d un programme

Introduction à MATLAB R

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Transcription:

3ETI, Examen [CSC2] Developpement Logiciel en C CPE Lyon 2014-2015 (1ere session) durée 3h Tous documents et calculatrices autorisés. Répondez aux questions sur une copie séparée Le sujet comporte 8 pages Le temps approximatif ainsi que le barème sont indiqués pour les grandes parties. Notez que le barème est donné à titre purement indicatif et pourra être adapté par la suite. En cas de doute sur la compréhension de l énoncé, explicitez ce que vous comprenez et poursuivez l exercice dans cette logique. Note préliminaire: Toutes les questions concernent le language de programmation C dans le cadre du developpement de logiciels sur architecture PC standard. Nous vous invitons à commenter le code et les réponses. En particulier, en cas d ambiguité de compréhension d une question, ajoutez toutes remarques et illustrations supplémentaires permettant d expliquer votre démarche. Sauf mention contraire explicite, on supposera que l on dispose d un système Linux standard fonctionnant correctement sur un PC récent 64 bits (identiques aux conditions de TP des PC de CPE: int étant encodé sur 4 octets, pointeurs étant encodés respectivement sur 8 octets sur 64 bits). On supposera que le code C est compilé avec une version récente de gcc sous la norme C99 (ou ultérieure) identique aux conditions de TP des PC de CPE. On supposera dans chaque cas que les#include des en-tête standards nécessaires à la bonne compilation et exécution des programmes décrits sont correctement installés et appelés (ex. stdio, stdlib, string, math, etc). 1

1 Méthodologie et bonne pratiques de programmation [50min max] 5 points On considère les structures suivantes #define NBR_PLANETE 8 //les noms des 8 planetes du systeme solaire. enum nom_planete mercure,venus,terre,mars,jupiter,saturne,uranus,neptune; struct info_planete enum nom_planete nom; //la designation du nom d une planete float rayon; //le rayon moyen de la planete (float >0) int distance_soleil; //la distance moyenne au soleil (entier >0) int nbr_satellites; //le nombre de satellites de la planete (entier >=0) ; //structure stockant les informations des 8 planetes du systeme solaire struct info_systeme_solaire struct info_planete planete[nbr_planete]; ; On suppose également que l on dispose de la fonction systeme_solaire_initialiser qui vient initialiser une structure de typeinfo_systeme_solaire avec les bons paramètres pour chaque planète. Notons que les planètes sont référencées dans l ordre du tableau (mercure, venus, terre, mars, jupiter, saturne, uranus, neptune). On souhaite réaliser la fonction obtenir_info_planete qui prend en paramètre un pointeur vers un système solaire et un indice, et renvoie un pointeur vers la planète correspondant à cet indice. Par exemple, l indice 0 correspondra à la planète mercure, et l indice 3 à la planète mars. Le contrat de la fonction est le suivant: /* La fonction obtenir_info_planete permet de recuperer un pointeur vers * la planete du systeme solaire designee par son indice dans l ordre * des planetes. * * Necessite: * - Pointeur vers un systeme_solaire non modifiable. Pointeur non NULL. * - Un indice entier designant la position de la planete dans l ordre du * systeme solaire. L indice doit etre compris entre 0 et NBR_PLANETE-1 (inclus). * Garantie: * - Renvoie un pointeur vers une structure d info_planete non modifiable. * Le pointeur est non NULL. * */ Question 1 Écrivez l en-tête de la fonction correspondant à ce contrat. Question 2 Écrivez l implémentation du corps de cette fonction correspondant à ce contrat et à votre en-tête. 2/8 CPE Lyon

On souhaite réaliser la fonction calculer_rayon_moyen qui, étant donné l information d une structure info_systeme_solaire, calcule le rayon moyen de l ensemble des planètes. Le contrat et l en-tête de cette fonction sont les suivants: /* Fonction calculer_rayon_moyen calcule le rayon moyen sur * l ensemble des planetes decrites dans ce systeme. * * Necessite: * - Pointeur non modifiable vers un systeme_solaire. Pointeur non null. * - Un systeme pour lequel l ensemble des planetes possedent un rayon > 0. * Garantie: * - Renvoie un flottant positif (>0) correspondant au rayon moyen de l ensemble des planetes. * */ float calculer_rayon_moyen(const struct info_systeme_solaire *systeme); Question 3 Écrivez le corps de cette fonction. Prenez soin de bien respecter les bons critères de programmation, et n oubliez pas d utiliser la fonction déjà existante. On souhaite finalement coder une fonction qui permet d afficher sur la ligne de commande le nom (en toutes lettres) des planètes dont le rayon est compris entre deux bornes min et max. L en-tête de cette fonction est la suivante: void afficher_planete_avec_rayon_specifique(const struct info_systeme_solaire *systeme,float rayon_min,float rayon_max) Question 4 Écrivez le contrat ainsi que le corps de cette fonction. Prenez soin de bien réspecter les critères de bonnes programmation. Notez qu il est possible de créer des sous fonctions si cela permet de simplifier la lecture du code ou de factoriser celui-ci. 3/8 CPE Lyon

2 Connaissances générales du développement logiciel [35min max] 4 points Question 5 Pour chacune des propositions suivantes, dites si celle-ci est vraie ou fausse en justifiant ou en expliquant votre réponse. (Une réponse sans explication n apporte pas de points). Remarque: un apport d informations supplémentaires pertinentes peut dans certains cas apporter un bonus. 1. Si on supprime les fichiers objets (.o), il n est plus possible de lancer l executable qui a été réalisé à partir de ceux-ci. 2. SVN est un compilateur C. 3. Un code sous licence GPL peut être modifié librement puis redistribué. 4. L appel à la fonctionsizeof sur un pointeur renvoie une taille qui dépend du type de la variable pointée. 5. Il est possible d avoir des erreurs de gestion de mémoire lors de l execution d un programme alors que celui-ci termine normalement sans avoir affiché d erreur de segmentation (ou Segmentation Fault en version anglaise). 6. Les commentaires (code après\\, ou entre\* et*\) sont parfois analysés par gcc pour optimiser le code binaire généré. 7. L étape de préprocesseur lors de la compilation permet de générer le code assembleur associé au code C. 8. Pour comparer l égalité de deux nombres flottants x1 et x2, il est préférable d utiliser la comparaison suivante: if( x1-x2<epsilon ), avec epsilon initialisé à un nombre petit tel que10 6. 9. Dans un grand code déjà existant, il est généralement préférable de modifier l interface des fonctions que leurs implémentations. 10. Soit une chaîne de caractères contenue dans un tableau de 4 cases (char T[4]). Les 4 cases contiennent respectivement les lettres suivantes: abcd. L affichage de ce tableau par la commandeprintf( %s,t) affiche de manière certaineabcd et uniquement cela. 11. La mémoire dite de cache permet de rendre inaccessible certaine variables au programme qui ne peut alors plus accéder à leurs valeurs respectives. On dit que cette mémoire vient les cacher ou encore les dissimuler. 4/8 CPE Lyon

3 Structs, adressage et portée des variables en C [20min max] 2 points Soit les structures, fonctions et code suivants (pour information, le programme compile et 5 lignes sont affichées à son exécution). 1 struct bouteille 2 3 int volume; 4 int prix; 5 ; 6 struct collection 7 8 struct bouteille B[2]; 9 ; 10 11 void fonction_1(struct collection c) 12 13 c.b[0].prix=20; 14 15 void fonction_2(struct collection *c) 16 17 struct bouteille b=c->b[1]; 18 b.volume=4; 19 20 void fonction_3(struct collection *c) 21 22 c->b[1].prix=6; 23 24 void fonction_4(struct collection c) 25 26 struct bouteille *b=&(c.b[1]); 27 b->prix=9; 28 int main() struct collection c0; struct collection c1; c0.b[0].volume=1; c1=c0; c1.b[0].volume=2; printf("%d\n",c0.b[0].volume); c0.b[0].prix=10; fonction_1(c0); printf("%d\n",c0.b[0].prix); c0.b[1].volume=3; fonction_2(&c0); printf("%d\n",c0.b[1].volume); c0.b[1].prix=5; fonction_3(&c0); printf("%d\n",c0.b[1].prix); c0.b[1].prix=8; fonction_4(c0); printf("%d\n",c0.b[1].prix); return 0; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Question 6 Qu affiche ce programme (écrivez votre réponse sur votre copie double)? Expliquez rapidement votre raisonnement pour chaque affichage (remarque: il est inutile de passer du temps à recopier le code du programme). 5/8 CPE Lyon

4 Utilisation du mot clé const [20min max] 2 points Soit la structure et les 8 fonctions suivantes appelées depuis un programme (qui n est pas décrit). 1 struct fleur_rose 2 3 int prix; 4 int avoir_piquants; 5 ; 6 struct fleur_jasmin 7 8 int prix; 9 int nbr_petales; 10 ; 11 struct bouquet 12 13 struct fleur_rose rose; 14 struct fleur_jasmin jasmin; 15 ; 16 17 void initialize(struct bouquet* b) 18 19 b->rose.prix=2; 20 b->rose.avoir_piquants=0; 21 b->jasmin.prix=3; 22 b->jasmin.nbr_petales=9; 23 24 25 void fonction_1() 26 27 28 const struct bouquet b2=b; 29 30 31 void fonction_2() 32 33 34 const struct bouquet b2=b; 35 const struct bouquet b3=b2; 36 37 38 void fonction_3() 39 40 struct bouquet *b; initialize(b); 41 struct bouquet b2=*b; 42 void fonction_4() const struct fleur_rose *r=&(b. rose); void fonction_5() const struct bouquet *b2=&b; const struct fleur_rose *r=&(b2-> rose); void fonction_6() const struct bouquet b2=b; struct fleur_rose *r=&(b2.rose); void fonction_7() const struct bouquet *b2=&b; struct fleur_rose *r=&(b2->rose); void fonction_8() const struct bouquet *b2=&b; struct fleur_rose r=b2->rose; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 Question 7 Pour chacune des 8 fonctions, indiquez si celle-ci est correcte: c est à dire ne présentant aucun warning ni erreur à la compilation et à l exécution (Écrivez votre réponse sur votre copie. Il est inutile de passer du temps à recopier tout le code du programme). Si la fonction est incorrecte, expliquez pourquoi. 6/8 CPE Lyon

5 Bonnes pratiques de programmation et fichiers [30min max] 4 points Vous utilisez un code écrit en C qui gère les employés d une entreprise. La structure entreprise contient au maximumnmax employés. Ce code contient la fonction suivante dans son API: int calculer_cout_total_salaire(const struct employes T[NMAX]); Question 8 Que pensez vous de ce prototype de fonction? Vous semble t-il satisfaire aux contraintes de bonnes pratiques? Si non, quel serait votre proposition de changement? Un employé de cette entreprise est enregistré en mémoire de manière à ce que l on puisse stocker les informations suivantes: Son nom, age, fonction, salaire, montant de ses primes, ancienneté dans la société, numéro de sécurité sociale, nom de son superieur direct, nom des personnes sous sa responsabilité (maximum 8 personnes), nombre d arrêts maladie dans l année, nombre de jours de congés restants, sa photo, la couleur de ses yeux (marron, vert, ou bleu). On suppose que la photo est stockée dans un fichier présent sur le disque dur. On souhaite définir une ou plusieurs struct permettant de stocker et manipuler aisément l enregistrement d un employé. Question 9 Écrivez la définition de la (ou les) struct(s) C que vous mettriez en place afin de réaliser cet enregistrement. Faites en sorte de bien respecter les bonnes pratiques de programmation. Question 10 Quelle fonction souhaiteriez vous écrire en lien avec cette struct sans même avoir à connaitre l utilisation de cet enregistrement dans le code? Ecrivez le prototype de cette fonction (inutile d écrire l implémentation de celle(s)-ci). Notez que vous n êtes pas restreint à une seule fonction: Il est possible d en définir plusieurs. Vous souhaitez désormais écrire une fonction qui permet d écrire dans un fichier texte sur le disque dur des informations d identification d une personne et de sa position dans l entreprise. Voici un exemple du contenu d un tel fichier pour une personne ayant sous sa responsabilité 3 autres employés: nom: Holtz Francois fonction: responsable age: 42 superieur: Botlz Michel responsable de : - Heitz René - Ruts Boris - Vickers Rolf La fonction d écriture doit prendre comme paramètre le nom du fichier dans lequel elle doit écrire. Question 11 En prenant particulièrement soin de respecter les critères de bonnes pratiques vues en cours et en projet, écrivez la signature et l implémentation correspondante de la fonction réalisant cette écriture dans un fichier pour une personne quelconque de l entreprise. N oubliez pas de donner un contrat à votre fonction. Réfléchissez aux paramètres de la fonction. Notez que vous avez le droit de faire des suppositions sur des valeurs standards des paramètres. Indiquez clairement les hypothèses que vous prenez. 7/8 CPE Lyon

6 Compilation, Makefile et préprocesseur [25min max] 3 points On suppose que l on dispose dans un même répertoire de 5 fichiers: Makefile,pgm_2.c, pgm_2.h,pgm_3.c,pgm_4.c dont les contenus sont décrits ci-dessous. pgm_2.h #ifndef PGM_2_H #define PGM_2_H #ifdef A #define VALEUR 6 #else #define VALEUR 9 #endif void fonction_2(); pgm_3.c #include <stdio.h> int main() printf("bonjour\n"); return 0; #endif pgm_2.c #include "pgm_2.h" #include <stdio.h> void fonction_2() printf("%d\n",valeur); pgm_4.c #define A #include "pgm_2.h" #include <stdio.h> int main() fonction_2(); printf("%d\n",valeur); return 0; Makefile CFLAGS=-Wall -Wextra -g all: pgm_1 pgm_1: pgm_1.o pgm_2.o pgm_1.o: pgm_1.c pgm_2.h pgm_2.o: pgm_2.c pgm_2.h pgm_1.c: pgm_4.c cp pgm_4.c pgm_1.c clean: rm -f *.o pgm_1 pgm_1.c pgm_3 * On suppose que l on dispose d une ligne de commande dans le répertoire où se situe l ensemble des fichiers. Question 12 On tape make pgm_3. Que se passe t-il? Quels sont les fichiers désormais présents dans le répertoire après exécution de cette commande? Question 13 On tape make. Que se passe t-il? Quels sont les fichiers désormais présents dans le répertoire après exécution de cette commande? Question 14 On tape./pgm_1. Que se passe t-il? Que voit-on affiché sur la ligne de commande? 8/8 CPE Lyon