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



Documents pareils
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

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

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

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

Algorithmique I. Algorithmique I p.1/??

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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

Le langage C. Séance n 4

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

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

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

Programmation système I Les entrées/sorties

Algorithmique, Structures de données et langage C

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

PROJET ALGORITHMIQUE ET PROGRAMMATION II

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

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

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

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

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

TD/TP PAC - Programmation n 3

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

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Traduction des Langages : Le Compilateur Micro Java

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

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

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

Chapitre 1 : La gestion dynamique de la mémoire

Programmation sous QT

TP : Gestion d une image au format PGM

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

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

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

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

Introduction au langage C

Les arbres binaires de recherche

Analyse de sécurité de logiciels système par typage statique

Programmer en JAVA. par Tama

Cours 1 : La compilation

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

Généralités sur le Langage Java et éléments syntaxiques.

TP1 : Initiation à Java et Eclipse

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

Conventions d écriture et outils de mise au point

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

Programmation Objet Java Correction

Les structures. Chapitre 3

Outils pour la pratique

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

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

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

Brique BDL Gestion de Projet Logiciel

TP3 : Manipulation et implantation de systèmes de fichiers 1

4D v11 SQL Release 5 (11.5) ADDENDUM

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Les structures de données. Rajae El Ouazzani

TP 1. Prise en main du langage Python

Les chaînes de caractères

Corrigé des exercices sur les références

TD/TP PAC - Programmation n 3

Cours: Administration d'une Base de Données

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

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

Mise en œuvre des serveurs d application

Rappels d architecture

Cours d Algorithmique et de Langage C v 3.0

Licence Sciences et Technologies Examen janvier 2010

Programmation Orientée Objet Java

Cours 1 : Qu est-ce que la programmation?

Chapitre VI- La validation de la composition.

GOL502 Industries de services

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement


ALGORITHMIQUE ET PROGRAMMATION En C

Cours 1: Java et les objets

Programmation en Java IUT GEII (MC-II1) 1

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

LES TYPES DE DONNÉES DU LANGAGE PASCAL

OS Réseaux et Programmation Système - C5

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Informatique Générale

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

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

Machines virtuelles Cours 1 : Introduction

Structure fonctionnelle d un SGBD

Simulation d un système de paiement par carte bancaire

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

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

Poker. A rendre pour le 25 avril

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

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

Architecture des ordinateurs

Compilation (INF 564)

Corrigés des premiers exercices sur les classes

IFT Systèmes d exploitation - TP n 1-20%

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

Programmation impérative

Transcription:

3ETI, Examen [CSC2] Developpement Logiciel en C CPE Lyon 2012-2013 (2eme session) durée 2h Tous documents et calculatrices autorisés. Le sujet comporte 6 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 32 ou 64 bits (identiques aux conditions de TP des PC de CPE: int étant encodé sur 4 octets, pointeurs étant encodés respectivement sur 4(/8) octets sur 32(/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 Concepts de programmation 1.1 Généralités [20min max] 3 points Question 1 Pour les questions suivantes, répondez par vrai ou faux, puis justifiez en une ligne ou deux votre réponse: 1. Un programme portable est un programme qui est très léger sur le disque dur. 2. Makefile est un synonyme de gcc. 3. La GPL est une licence logiciel libre. 4. Dans le langage C, il existe une fonction permettant d indiquer si un pointeur non NULL contient l adresse d une case valide ou non. 5. Fermer un descripteur de fichier (fid) avec la commande suivante: assert(fclose(fid)==0); est une bonne idée. 1.2 Méthode de debug [15min max] 3 points Question 2 Quelles démarches pouvez-vous réaliser pour débugger votre code lorsque votre programme s interrompt en indiquant une erreur de segmentation (ou Seg Fault). Donnez un maximum de détails sur les procédures à suivre. 2/6 CPE Lyon

2 Manipulation et structuration de code C Dans l ensemble des questions de l exercice, on prendra soin de bien se placer dans le cadre d un codage de type défensif. Soit les structures de données définissant l astraction d une forêt constituée elle même d un ensemble d abres, formés eux même d un tronc et d un type de feuille qui sont eux même définis par des caractéristiques propres. Le code de ces structures est le suivant: //une structure de tronc d arbre struct structure_tronc float hauteur; //hauteur du tronc float rayon; //rayon du tronc //differentes couleurs de feuilles enum type_couleur vert_clair,vert_sombre,vert_rouge,rouge //une structure de donnees de feuilles struct structure_feuille enum type_couleur couleur; //couleur de la feuille int nombre_de_veinure; //nombre de veinure de la feuille //une structre d une entitee arbre struct structure_arbre struct structure_tronc tronc; struct structure_feuille feuille; //une structure modelisant une foret comme un // ensemble d arbres (ici stocke en tableau) #define N_arbre 50 struct structure_foret struct structure_arbre arbre[n_arbre]; La fonction principale main() consiste dans un premier temps à déclarer une variable de type structure foret. Voici le code correspondant: int main() struct structure_foret foret; return 0; 3/6 CPE Lyon

2.1 Mémoire [5min max] 1 points Question 3 Dans la fonction main(), l espace mémoire permettant de stocker le contenu de la variable foret est-il alloué sur la pile ou sur le tas? Si vous avez répondu pile : Quelle commande aurait permis d allouer ce contenu sur le tas? Si vous avez répondu tas : Quelle commande aurait permis d allouer ce contenu sur la pile? 2.2 Initialisation [20min max] 3 points Par défaut, un arbre doit posséder les propriétés suivantes: hauteur de tronc de2(m). rayon de tronc de0.5 (m). couleur de feuille vert clair. nombre de veinures de feuille à 3. La (nouvelle) fonction main() permettant d initialiser l ensemble de la forêt à des valeurs par défauts est désormais la suivante: int main() struct structure_foret foret; foret_init(&foret); return 0; Chaque entité est initialisée spécifiquement par sa fonction d initialisation propre. définit ainsi les 4 fonctions suivantes: void foret_init(struct structure_foret* foret); void arbre_init(struct structure_arbre* arbre); void tronc_init(struct structure_tronc* tronc); void feuille_init(struct structure_feuille* feuille); On Question 4 Ecrivez le corps des 4 fonctions d initialisations. Notez que la fonction foret_init() devra faire appel à arbre_init(), qui devra lui même faire appel à tronc_init() et feuille_init(). 4/6 CPE Lyon

2.3 Manipulation d adresse [20min max] 3 points On propose la fonction arbre_recupere() qui prend en entrée un pointeur constant non NULL sur une structure_foret ainsi qu un nombre entier k_arbre compris entre 0 etn_arbre. Cette fonction doit retourner une variable de type pointeur dont la valeur est égale à l adresse de l arbre numérok_arbre (dans le tableau d abres de la structure forêt). On vous propose la signature suivante: struct structure_arbre* arbre_recupere(const struct structure_foret* foret,int k_arbre); Question 5 Expliquez pourquoi l implémentation de cette fonction avec cette signature ne pourra pas compiler? Que faut-il changer dans la signature pour avoir une chance de pouvoir mettre en place la fonctionnalité demandée. Question 6 Ecrivez l implémentation de la fonctionarbre_recupere avec la signature corrigée. 2.4 Bonne pratique et algorithmie [35min max] 5 points On cherche à écrire une fonction arbre_le_plus_haut qui prend en entrée un pointeur constant sur une structure_foret et retourne l adresse de l arbre dont la taille est maximale. Question 7 Ecrivez la signature de cette fonction. Question 8 Ecrivez le contract de cette fonction. Question 9 Ecrivez l implémentation de cette fonction. 5/6 CPE Lyon

2.5 Variables [5min max] 2 points On cherche à implémenter une fonction arbre_ecrit_hauteur dont la signature est la suivante: void arbre_ecrit_hauteur(struct structure_arbre* arbre,float hauteur); qui viens assigner la valeurhauteur au tronc de l arbre désigné. Deux implémentations de cette fonction vous sont proposées: void arbre_ecrit_hauteur(struct structure_arbre* arbre, float hauteur) arbre->tronc.hauteur=hauteur; void arbre_ecrit_hauteur(struct structure_arbre* arbre, float hauteur) struct structure_tronc tronc=arbre->tronc; tronc.hauteur=hauteur; Question 10 Il y a t-il une différence de résultat entre ces deux implémentations? réponse. Justifiez votre 6/6 CPE Lyon