• Aucun résultat trouvé

Examen de C et C++ Année 2012/2013 - Deuxième session

N/A
N/A
Protected

Academic year: 2022

Partager "Examen de C et C++ Année 2012/2013 - Deuxième session"

Copied!
6
0
0

Texte intégral

(1)

int exgPtInt(int** p, int** q) {

}

Examen de C et C++

Année 2012/2013 - Deuxième session

Numéro d'anonymat :

Réalisez une fonction compareBits qui retourne la valeur vraie si et seulement si le premier et le dernier bits de l’entier passé en paramètre ont la même valeur.

Vous devez répondre dans les cadres prévus à cet effet. Il sera tenu compte de la concision et de l'efficacité de vos programmes. Téléphones portables, calculatrices, ordinateurs et tablettes interdits. Notes personnelles (manuscrites ou imprimées) et documents de cours, TD et TP sont autorisés.

Fonctions et opérateurs bitwise.

Université de Bourgogne - UFR Sciences et Techniques - L2

int compareBits(int x) {

}

1 point

Réalisez une fonction exgPtInt qui échange les contenus de deux variables de type pointeurs sur int.

Pointeurs sur scalaires.

void test1() {

int x=10,y=20;

int* p1=&x;

int* p2=&y;

exgPtInt(&p1,&p2);

(*p1)++;

printf("%d %d\n",*p1,*p2);

}

Donnez les valeurs affichées par la fonction test1 ci-dessous.

1 point 2 points

(2)

Tableaux 1D.

void minmax(int t[], int n, int* mini, int* maxi) {

}

Réalisez une fonction minmax qui recherche en un seul passage les valeurs minimum et maximum d’un tableau d’entiers supposé être de taille n. Les valeurs trouvées doivent être placées dans des variables dont les adresses sont passées via les paramètres mini et maxi.

void concat(char** dest, const char* source) {

}

2 points

Chaînes et variables dynamiques.

Donnez ci-contre les lignes de code permettant de créer un ta- bleau initialisé avec les valeurs 5,1,2,4,3 et d’appeler la fonction minmax pour placer les valeurs minimum et maximum dans deux variables de type int.

2 points Réalisez une fonction concat ayant pour effet de concaténer à la chaîne pointée par la variable pointée par le paramètre dest la chaîne pointée par le paramètre source. On suppose que la chaîne de destination est dans le tas. Le bloc mémoire qui la contient doit être redimensionné (par appel à la fonction realloc) à la taille nécessaire et suffisante pour contenir le résultat de la concaténation. Vous devez utiliser la fonction strcat.

1 point

Structures et variables dynamiques.

La structure définie ci-contre représente un tableau d’entiers encapsulé. Le champ tab pointe sur un bloc mémoire situé dans le tas qui contient les valeurs stockées dans le tableau. Le champ n contient la

typedef struct {

int n;

(3)

tabInt tri(tabInt t) {

tabInt result;

return result;

} 2 points

On suppose qu’il existe une fonction void triTab(int t[], int n) qui trie par ordre croissant les valeurs contenues dans le tableau situé à l’adresse tab et supposé de taille n. Il ne vous est pas demandé de réaliser cette fonction.

Complétez ci-dessous la définition de la fonction tri qui accepte en paramètre un tableau encapsulé et retourne un autre tableau encapsulé, totalement indépendant en mémoire de celui passé en paramètre, et contenant les mêmes valeurs mais triées en ordre croissant. Le tableau original passé en paramètre ne doit pas être modifié. Vous devez utiliser la fonction triTab.

Classes.

La classe TabStr suivante représente un tableau encapsulé de chaînes de caractères.

Cette classe comprend un constructeur permettant de créer un tableau encapsulé d’une taille donnée en paramètre, un destructeur, une méthode put permettant de placer une chaîne dans le tableau à un indice donné en paramètre, et une méthode isIn qui teste si une chaîne passée en paramètre est dans le tableau.

class TabStr {

private:

int n;

string* tab;

public:

TabStr(int n);

~TabStr();

void put(int i, string s);

int isIn(string s);

};

Complétez les définitions des constructeur, destructeur et méthodes put et isIn.

TabStr::TabStr(int n) {

}

TabStr::~TabStr() {

} 1 point

(4)

Structures complexes en C++.

Les deux classes définies ci-dessus permettent de réaliser des listes simplement chaînées de chaînes de caractères. La variable d’instance n de la classe LstStr contient le nombre de chaînes stockées dans la liste. Le rôle des autres variables d’instance est évident.

void TabStr::put(int i, string s) {

}

int TabStr::isIn(string s) {

}

class Maillon {

friend class LstStr;

private:

string val;

Maillon* suiv;

Maillon(string s, Maillon* suivant);

};

2 points

class LstStr {

private:

Maillon* prem;

int n;

public:

LstStr(string tab[], int size);

void exg(Maillon* m1, Maillon* m2);

Signifie que la classe };

LstStr a accès aux mem- bres privés de Maillon.

Vous devez implanter ci-con- tre la méthode exg qui permet l’échange des chaînes conte- nues dans deux maillons dont les adresses sont passées en paramètres.

void LstStr::exg(Maillon* m1, Maillon* m2) {

(5)

LstStr::LstStr(string tab[], int size) {

}

typedef struct _maillon {

char* val;

struct _maillon* suiv;

} maillon;

Structures complexes en C.

On définit en langage C les structures ci dessous qui ont les même rôles que les classes Maillon et LstStr de la partie précédente.

2 points Vous devez implanter ci-dessous le constructeur de la classe LstStr qui accepte en paramètre un tableau de string et qui doit créer une liste contenant toutes les chaînes du tableaux, dont le nombre est donné par le paramètre size. Vous devez respecter les consignes suivantes :

1. Les chaînes doivent être rangées dans la liste dans le même ordre que celui dans lequel elle sont rangées dans le tableau passé en paramètre au constructeur.

2. L’implantation doit être aussi efficace que possible en terme de temps d’exécution.

3. La liste produite doit être complètement indépendante du tableau passé en paramètre au constructeur. Il ne doit pas y avoir de partage de mémoire entre les deux.

typedef struct {

maillon* prem;

int n;

}lstStr;

Donnez (page suivante) l’implantation de la fonction lstStr* cloneListe(lstStr* model) qui produit un clone d’une liste existante, c’est à dire une liste identique mais complètement indépendante en mémoire. Vous êtes expressément encouragés à décomposer ce travail en plusieurs fonctions de manière à rendre votre code aussi clair que possible.

(6)

3 points

Références

Documents relatifs

Pour cela créer un dossier nommé tableur, ce sera plus simple pour le retrouver parmi tous vos fichiers. Application : Recopier et compléter le tableau suivant en utilisant les

9/En quoi est-ce difficile de vivre avec une personne bipolaire.

Dans cet exercice, on travaille avec des listes chaînées d'entiers qui seront représentées complètement sur le tas (donc accessibles uniquement par pointeurs) et qui son

En supposant que la fonction comb_bitwise est correctement programmée, réalisez une fonction void test_bitwise() qui déclare deux variables entières x et y, initialisées

Complétez (page suivante) la définition de la fonction test3 de manière à ce que l'exécution de cette fonction crée sur la pile un tableau de 11 caractères, puis crée sur la tas,

Une pile non vide est représentée par une instance de Pile dans laquelle val contient la valeur la plus récemment empilée (sommet) et suite pointe une pile contenant les

Une pile non vide est représentée par une instance de Pile dans laquelle val contient la valeur la plus récemment empilée (sommet) et suite pointe une pile contenant les

[r]