info@mp2i-pv
Toutes les semaines, les TP sont à rendre pour le mercredi soir suivant au plus tard, sur cahier-de-prepa.
Chaque TP est composé de deux parties:
Le but de ceux qui choisissent la partie flocon doit être d’arriver petit à petit de plus en plus loin dans la partie première étoile.
Ceux qui choisissent la partie première étoile n’ont pas besoin de faire la partie flocon, et dans l’idéal doivent terminer la partie première étoile.
Les réponses sont à rendre dans un ou plusieurs fichiers sources (éventuellement dans une archive), en ajoutant en commentaire vos nom et prénom sur la première ligne, la ligne de compilation à utiliser sur la deuxième ligne, et en identifiant de manière claire les numéros d’exercices et de questions.
Pour certains exercices, je fournis un fichier qui contient un
main avec des tests. À vous de compléter ce fichier en écrivant la
fonction demandée (avant le main), de le compiler et de
l’exécuter. Pour les exercices consistant à faire des affichages, à
vous d’écrire le main avec un ou deux exemples pour voir si ce qui
s’affiche est ce qui est attendu.
Écrire une fonction nombres_positifs qui prend en argument un
tableau d’entiers et un entier représentant la taille de ce tableau et
renvoie le nombre de cases du tableau dont la valeur est positive ou
nulle.
Écrire une fonction somme qui prend en argument un
tableau de double et un entier représentant la taille de ce tableau et
renvoie la somme des valeurs des cases de ce tableau.
trouve qui prend en argument une valeur
entière, un tableau d’entiers et un entier représentant la taille de
ce tableau et renvoie true si et seulement si la valeur apparaît
dans au moins une case du tableau.L’instruction break permet de sortir de la boucle dans laquelle elle
est exécutée. Par exemple la suite d’instructions:
int i;
for(i = 0; i<53; i = i+1){
if(i == 27){
break;
}
}
printf("valeur de i à la sortie de la boucle : %d\n", i);
provoque l’affichage suivant:
valeur de i à la sortie de la boucle : 27
trouve écrit à la question
précédente et faites en sorte de minimiser le nombre d’itérations
dans votre boucle.Écrire et documenter une fonction copie qui prend en argument un tableau d’entiers et sa taille et renvoie une copie de ce tableau.
Écrire une fonction miroir qui prend en argument un tableau de
booléen et sa taille et renvoie un tableau de la même taille qui
contient les mêmes éléments mais dans l’ordre inverse.
Écrire une fonction plus_petite_distance qui prend en argument un tableau de double supposé trié dans l’ordre croissant (sans avoir à le vérifier) et sa longueur et renvoie la plus petite distance entre deux nombres de ce tableau, sinon la constante INFINITY définie dans le fichier d’en-tête math.h.
Écrire une fonction qui prend en argument un tableau d’entiers, sa
taille et un entier p, et teste si un tableau est p-périodique
(c’est-à-dire si ses valeurs se répètent toutes les p cases, on ne
cherche pas à ce que p soit la plus petite période).
Si je considère un tableaux de valeurs comparables (par exemple des nombres), je peux définir une case comme un maximum local si ses deux voisines ont des valeurs strictement inférieures à elle (une case avec une seule voisine n’est pas un maximum local).
maximum_local qui prend en argument un tableau d’entiers, sa taille et un indice et teste si la valeur à cet indice est un maximum local.L’instruction break permet de sortir de la boucle dans laquelle elle
est exécutée. Par exemple la suite d’instructions:
int i;
for(i = 0; i<53; i = i+1){
if(i == 27){
break;
}
}
printf("valeur de i à la sortie de la boucle : %d\n", i);
provoque l’affichage suivant:
valeur de i à la sortie de la boucle : 27
vrai_maximum_local en adaptant maximum_local pour que cela tienne compte de cette situation possible : une case est maintenant un maximum local si elle appartient à un plateau qui est encadré de valeurs strictement inférieures.Écrire une fonction complement_a_deux qui prend en argument un entier supposé compris
entre $-2^7$ et $2^7-1$ (sans avoir à le vérifier) et qui renvoie un
tableau de booléens de taille 8 correspondant à la représentation en
complément à 2 de cet entier, de sorte que false représente un bit à
0 et true un bit à 1.