TD9 - Mémoire
Exercice 1 (Allocation dynamique)
- Écrire un programme qui alloue dynamiquement une variable de type
int
avec le mot-clénew
(sans initialisation). - Demander à l'utilisateur de saisir une valeur pour cette variable et modifier la valeur de la variable avec cette saisie.
- Écrire une fonction qui prend en paramètre un pointeur sur un
int
et qui affiche la valeur de la variable pointée. - Afficher la valeur de la variable avec la fonction précédente.
- Afficher l'adresse de la variable.
- Libérer cette variable avec le mot-clé
delete
.
Exercice 2
-
Écrire un programme qui génère un tableau (
std::vector
) de100
entiers aléatoires compris entre 0 et 100.infoVous pouvez utiliser la fonction
rand()
pour générer un nombre aléatoire. Je vous renvoie à l'Exercice 1 du TD5 pour plus d'informations. -
Écrire une fonction qui retourne un pointeur sur le plus grand élément du tableau.
-
Écrire une fonction qui prend en paramètre un pointeur sur un emplacement mémoire contiguë d'entiers et sa taille et qui retourne la somme des éléments du tableau.
-
Utiliser les fonctions précédentes pour afficher le plus grand élément du tableau et la somme des éléments du tableau.
astuceOn peut récupérer un pointeur sur le premier élément d'un
std::vector
avec la méthodedata()
. Sinon il est aussi possible d'utiliser l'opérateur&
sur le premier élément dustd::vector
. -
Completer la fonction
sum
suivante pour qu'elle retourne un pointeur sur la somme des éléments du tableau passé en paramètre.int* sum(std::vector<int> const& v) {
int sum {0};
// boucle for
// TODO
} -
Utiliser la fonction
sum
pour afficher la somme des éléments du tableau. -
En fonction du résultat obtenu, que pouvez-vous en déduire sur le fonctionnement de la fonction
sum
? Si elle ne fonctionne pas, corriger la fonctionsum
pour qu'elle fonctionne correctement.
Exercice 3 (Split)
Dans cet exercice, on ne doit pas utiliser de std::vector
.
-
Allouer dynamiquement un tableau de
100
flottants aléatoires compris entre 0 et 100 (utiliser l'allocation dynamique pour des emplacements mémoire contiguës).infoVous pouvez utiliser la fonction
rand()
pour générer un nombre aléatoire. Pour générer un nombre flottant aléatoire vous pouvez utiliser la fonctionrand()
et la diviser parRAND_MAX
(qui est une constante définie dans la bibliothèquecstdlib
) ce qui permet d'obtenir un nombre flottant aléatoire entre 0 et 1. Il ne vous reste plus qu'à multiplier ce nombre par 100 pour obtenir un nombre flottant aléatoire entre 0 et 100. -
Écrire une fonction qui prend en paramètre un tableau de flottants (sous la forme d'un pointeur sur le premier élément du tableau) et sa taille et qui retourne un pointeur sur le plus grand élément du tableau.
-
On souhaite créer une fonction qui permet de créer un nouveau tableau composé des éléments du tableau passé en paramètre qui sont supérieurs à un certain seuil. Écrire une fonction
thresholdFilter
qui prend en paramètre un tableau de flottants, sa taille, un seuil et une référence sur un entier qui contiendra la taille du nouveau tableau et qui retourne un pointeur sur le premier élément du nouveau tableau.Voilà la signature de la fonction:
float* thresholdFilter(float const* const array, size_t const size, float const threshold, size_t& new_size);
infoVous pouvez remarquer que j'ai écrit
float const* const array
au lieu defloat* array
. Le premierconst
signifie que l'on ne peut pas modifier les valeurs pointées par le pointeurarray
et le deuxièmeconst
signifie que l'on ne peut pas modifier l'adresse pointée par le pointeurarray
.