Examen de Langage C Vendredi 2 Décembre 2011



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

Les structures. Chapitre 3

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

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

Programmation Classique en langage C

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

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

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

Le prototype de la fonction main()

Introduction au langage C

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

Cours 6 : Tubes anonymes et nommés

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

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

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


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

Le langage C. Séance n 4

Algorithmique et Programmation, IMA

PROJET ALGORITHMIQUE ET PROGRAMMATION II

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmation en langage C

Les structures de données. Rajae El Ouazzani

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

Architecture des ordinateurs

Programme Compte bancaire (code)

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

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

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

Cours de C. Allocation dynamique. Sébastien Paumier

SUPPORT DE COURS. Langage C

INFO-F-105 Language de programmation I Séance VI

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

Java Licence Professionnelle CISII,

Chapitre 1 : La gestion dynamique de la mémoire

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

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

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

Programmation système en C/C++

Cours d Algorithmique et de Langage C v 3.0

Algorithmique, Structures de données et langage C

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Programmer en JAVA. par Tama

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

Programmation système de commandes en C

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

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Solutions du chapitre 4

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

Programmation système I Les entrées/sorties

INF 104 (SELC) Introduction au langage C

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

Arguments d un programme

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

TP2 : tableaux dynamiques et listes chaînées

Cours 14 Les fichiers

Les chaînes de caractères

Rappels Entrées -Sorties

Programmation C. J.-F. Lalande. 15 novembre 2012

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

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

Problèmes liés à la concurrence

Langages et Concepts de Programmation Introduction à la programmation en langage C

INITIATION A LA PROGRAMMATION

Cours Programmation Système

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

V- Manipulations de nombres en binaire

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

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Programmation C++ (débutant)/instructions for, while et do...while

Conventions d écriture et outils de mise au point

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

COURS D'INFORMATIQUE: LANGAGE C NOTES DE COURS

Apprendre Java en 154 minutes

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

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

Introduction au Langage de Programmation C

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Structure fonctionnelle d un SGBD

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

MINIMUM. connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S.

I. Introduction aux fonctions : les fonctions standards

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

Claude Delannoy. 3 e édition C++

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

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

OS Réseaux et Programmation Système - C5

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

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

COMPARAISONDESLANGAGESC, C++, JAVA ET

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

TD3: tableaux avancées, première classe et chaînes

STAGE IREM 0- Premiers pas en Python

Les arbres binaires de recherche

Langage Éric Guérin 5 octobre 2010

Cours 1: Java et les objets

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

Corrigés des premiers exercices sur les classes

Gestion distribuée (par sockets) de banque en Java

Transcription:

Année 2011-2012 Examen de Langage C Vendredi 2 Décembre 2011 Promotion Guichet 1 ière année É. Salvat Modalités : Durée : 2 heures Seul document autorisé : carte de référence du C, pas de machine à calculer, ni de téléphone. Toute sortie est définitive! Le barème est donné à titre indicatif. Exercice 1 (Le sudoku - 5 points). Dans cet exercice on se propose d écrire deux fonctions qui permettent de tester partiellement une grille de sudoku. Une grille de sudoku sera représentée par un tableau d entiers de 9 par 9. Une case de la grille contient un nombre compris entre 1 et 9 ou bien un 0 pour indiquer que la case est vide. 1. définir la fonction VerifieValeurs qui prend en paramètre une grille de sudoku et qui renvoie 0 si toutes les cases ont des valeurs correctes ou bien 1 si une case contient une mauvaise valeur. Il ne s agit pas ici de savoir si la grille est bien remplie en respectant les règles du sudoku, mais simplement de vérifier qu il n y a pas dans la grille de valeur supérieure à 9 ou inférieure à 0. 2. définir la fonction ControleLigne qui prend en paramètre une grille de sudoku et un numéro de ligne et qui vérifie que la ligne en question est correctement remplie : les chiffres entre 1 et 9 n apparaissent au plus qu une fois chacun sur la ligne. de l exercice 1. 1. Fonction VerifieValeurs int VerifieValeurs(int grille[9][9]) int i,j; for (i=0; i<9; i++) for (j=0; j<9; j++) if ((grille[i][j]<0) (grille[i][j]>9) ) 2. Fonction ControleLigne On suppose que la grille ne contient pas de valeurs hors rang (négatives ou supérieures à 9). Le tableau controle permet de marquer les valeurs lues sur la ligne. int ControleLigne(int grille[9][9], int ligne) int i; int controle[9]; for (i=0; i<9; i++) controle[i]=0; for (i=0; i<9; i++) if ((grille[ligne][i]>0) && (grille[ligne][i]<=9) ) controle[grille[ligne][i]-1]++; if (controle[grille[ligne][i]-1] > 1) 1

On peut aussi contrôler sans mémoriser les valeurs déjà lues, il faut alors parcourir plusieurs fois le tableau : int ControleLigne(int grille[9][9], int ligne) int i,j; for (i=0; i<8; i++) for (i=i+1; i<9; i++) if ((grille[ligne][i]>0) && (grille[ligne][i]<=9) ) if (grille[ligne][i] == grille[ligne][j]) Exercice 2 (Les accolades - 4 points). Une des contraintes syntaxiques d un programme écrit en langage C est de respecter les délimiteurs de blocs : à chaque accolade ouvrante () doit correspondre une accolade fermante (). On ne s intéressera dans cet exercice qu aux seules accolades. 1. Ecrire un programme en C qui prend en paramètre le nom d un fichier source et qui vérifie que les accolades sont correctement positionnées dans ce fichier. Pour ce faire vous devez lire le fichier ligne par ligne, pour chaque ligne vous devrez parcourir la ligne à la recherche des accolades. Il suffit de compter les accolades en incrémentant un compteur chaque fois que l on trouve une accolade ouvrante, et en décrémentant ce même compteur chaque fois que l on trouve une accolade fermante. Ainsi, on peut distinguer trois cas de figures : si le compteur passe en dessous de 0, on a un problème : il y a plus d accolades fermantes que d accolades ouvrantes rencontrées jusqu à présent. On peut donc arrêter l analyse et renvoyer une erreur. si à la fin du fichier le compteur est strictement supérieur à 0 : il y a aussi un problème, on a ouvert plus d accolades que ce que l on en a fermé. Il faut alors renvoyer une erreur. Enfin, à la fin du fichier le compteur est à 0 : les accolades sont correctement positionnées. La fonction renvoie le code de succès. de l exercice 2. Lecture du fichier caractère par caractère : #include <stdio.h> #include <stdlib.h> int main(int argc, char**argv) FILE *fic; char c; int cpt=0; if((fic=fopen(argv[1],"r"))==null) printf("erreur d ouverture\n"); exit(-1); 2

while(c=getc(fic)) if(c== ) cpt++; if(c== ) cpt--; if (cpt<0) printf("accolade fermante surnuméraire\n"); if (cpt >0) printf("accolade ouvrante surnuméraire\n"); printf("nombre d accolades ouvrantes et fermantes égaux\n"); Version lisant dans le fichier par chaîne de caractères (ici par 256 caractères) : #include <stdio.h> #include <stdlib.h> int main(int argc, char**argv) FILE *fic; char ligne[256]; int cpt=0; if((fic=fopen(argv[1],"r"))==null) printf("erreur d ouverture\n"); exit(-1); while(fgets(ligne,256,fic)) for(i=0;ligne[i]!= \n ;i++) if(ligne[i]== ) cpt++; if(ligne[i]== ) cpt--; if (cpt<0) printf("accolade fermante surnuméraire\n"); 3

if (cpt >0) printf("accolade ouvrante surnuméraire\n"); printf("nombre d accolades ouvrantes et fermantes égaux\n"); Exercice 3 (Le compte en banque - 11 points). Le programme informatique d une banque, repose sur la structure suivante pour représenter les comptes de ses clients. typedef struct cpte int num; /* numéro du compte*/ char nom[30]; /* nom du propriétaire du compte */ char adresse[100]; /* adresse du propriétaire */ float solde; /* le solde du compte au début du mois en cours*/ ope* operations; /* les opérations du mois en cours */ compte; Le champ operations de la structure permet d enregistrer les opérations en cours de mois afin de calculer le nouveau solde du compte lorsque l on change de mois. L ensemble des opérations sera représenté par une liste chaînée. 1. Donnez la structure du type ope qui permet d enregistrer une opération et qui est donc un élément de la liste chaînée. Chaque opération contiendra les champs suivants : libelle : une chaîne contenant le libellé de l opération date : la date de l opération. On utilisera le type tdate que l on suppose définit ailleurs. type : un caractère, d si l opération est un débit, et c si il s agit d un crédit. montant : le montant de l opération un nombre à virgule positif qui sera à ajouter au solde si l opération est un crédit et à retrancher si il s agit d un débit. 2. Donnez la définition de la fonction NouveauSolde qui prend en paramètre un compte et qui renvoie le nouveau solde du compte en fonction des opérations qu il contient. 3. Définir la fonction NouvelleOperation qui prend en paramètre toutes les informations d une opération et renvoie un pointeur sur un nouveau ope dont les différents champs ont été correctement affectés. 4. En utilisant la fonction précédente écrire la fonction AjouteOperation qui prend en paramètre un pointeur sur un compte et toutes les informations d une opération et qui ajoute l opération dans la liste des opérations du compte. Les opérations doivent être par ordre chronologique. L ajout doit donc se faire au bon endroit. Pour cela on supposera que l on dispose de la fonction CompareDates(tDate d1, tdate d2) qui compare deux dates, et renvoie 1 si d1 est antérieure à d2, 0 si d1 et d2 sont les même dates, et 1 si d1 est postérieure à d2. 4

de l exercice 3. 1. La structure du type ope : typedef struct opera char libelle[20]; tdate date; char type; float montant; struct opera *suiv; ope; 2. La fonction NouveauSolde : float NouveauSolde(compte cpte) float nouveausolde; ope* ope_cour; nouveausolde = cpte.solde; ope_cour = cpte.operations; while (ope_cour!= NULL) if (ope_cour->type== d ) nouveausolde = nouveausolde - ope_cour->montant; nouveausolde = nouveausolde + ope_cour->montant; ope_cour = ope_cour->suiv; return nouveausolde; 3. La fonction NouvelleOperation : ope* NouvelleOperation(char* lib, tdate d, char t, float m) ope* nouv_ope; nouv_ope = (ope *) malloc(sizeof(ope)); strcpy(nouv_ope->libelle,lib); ope->date = d; ope->type = t; ope->montant = m; ope->suiv=null; return nouv_ope; 5

4. La fonction AjouteOperation : void AjouteOperation(compte* cpte,char* lib, tdate d, char t, float m) ope* nouv_ope; ope* ope_cour, ope_pred, ope_suiv; nouv_ope = NouvelleOperation(lib,d,t,m); ope_pred = NULL; ope_cour = cpte->operations; while (ope_cour!= NULL) if (CompareDates(ope_cour->date,d) <= 0) ope_pred = ope_cour; ope_cour = ope_cour->suiv; if (CompareDates(ope_cour->date,d) == 1) ope_pred->suiv = nouv_ope; nouv_ope->suiv = ope_cour; exit; // On insère en fin de liste if (ope_pred == NULL) // La liste est vide! cpte->operations = nouv_ope; ope_pred->suiv = nouv_ope; 6