Vous allez mettre en œuvre un petit programme qui
permet de tester trois fonctions très réduites :
La fonction impaire() qui permet de déterminer si une
valeur est impaire.
La fonction paire() qui permet de déterminer si une
valeur est paire.
La fonction absolue() qui retourne la valeur absolue
d'un nombre entier.
Pour chacune de ces trois fonctions, il s'agit de
déterminer :
Le nombre et le type de paramètre.
S'il existe une valeur de retour, et qu'elle est son type.
Si c'est une fonction inline.
A partir du scénario proposé ci-dessous, utilisez
les bonnes fonctions suivant le cas demandé.
Nombre premier
Nous allons reprendre le TP sur la recherche du nombre premier.
Toutefois, cette fois-ci, vous allez fabriquer une fonction que vous
appelerez premier() qui renvoie une valeur booléenne
suivant le résultat du nombre à rechercher passé en argument. Les
affichages et la saisie devront se faire à l'extérieur de cette
fonction. Vous pouvez vous servir du codage déjà réalisé lors du TP
sur les instructions.
Solution
Calcul de la longueur d'une chaîne de caractères
Nous allons reprendre tous les traitements sur les chaînes de
caractères que nous avons déjà réalisés durant les TP sur les types
composés pour en faire des fonctions. Vous allez donc commencer par le
calcul de la longueur d'une chaîne et proposer la fonction
correspondante. Votre programme principal devra faire appel à cette
fonction pour résoudre le problème demandé.
Rappel du sujet et résultats
Vous allez mettre en oeuvre un petit programme qui permet de calculer
la longueur d'une chaîne de caractères saisie à partir du clavier.
Cette chaîne devra être relativement simple et ne pas comporter
d'espace problème avec l'objet cin.
Bibliothèque de traitement de chaînes de caractères
Avec les environnements du C++ sont livrées un certain nombre de
bibliothèques qui disposent de fonctions bien utiles. C'est notamment
le cas d'une bibliothèque qui gère l'ensemble des traitements sur les
chaînes de caractères. Pour cela, il est nécessaire d'inclure les
déclarations des fonctions que se situent dans le fichier en-tête <string.h>.
Dans la bibliothèque délivrée sur le traitement des chaînes de
caractères, il existe une fonction qui réalise la même chose. Elle
s'appelle strlen() dont voici la signature :
int strlen(const char *s);
Utiliser cette fonction dans votre programme à la place de la
fonction que vous venez de construire et tester le résultat.
Copie du contenu d'une chaîne de caractères vers une autre
Pour cet exercice, vous utiliserez le debbuger pour réaliser le suivi
du contenu des variables utilisées en positionnant un point d'arrêt
sur la dernière ligne du programme celle comportant
l'instruction de retour.
Pour ce programme, vous allez mettre en œuvre :
Une fonction qui copie le contenu d'une chaîne vers une autre,
Ainsi qu'une deuxième fonction qui permet de mettre en minuscule
toutes les lettres d'une chaîne de caractères.
Pour chacune de ces trois fonctions, il s'agit de
déterminer :
Le nombre et le type de paramètre en prenant bien soin de
déterminer le type de passage au niveau de la déclaration.
S'il existe une valeur de retour, et qu'elle est son type.
Si c'est une fonction inline.
Dans le programme principal, et afin de tester ces
deux fonctions, vous allez déclarer deux chaînes de caractères :
La première se nomme invite et comporte le message
suivant BIENVENUE A TOUS.
La deuxième se nomme message.
Attention : réfléchissez bien à la déclaration la plus
adaptée pour chacune de ces chaînes de caractères.
Le but du programme sera dans un premier temps de copier le contenu
de la chaîne invite pour remplir la chaîne message. Une fois que cette
opération est réalisée, vous devez ensuite placer toutes les lettres
de message en minuscule.
Bibliothèque de traitement de chaînes de caractères
Dans la bibliothèque délivrée sur le traitement des chaînes de
caractères, il existe une fonction qui réalise la même chose. La
fonction qui s'occupe de la copie d'une chaîne vers une autre
s'appelle strcpy() dont voici la signature :
char *strcpy(char *s1, const char *s2);
Utiliser cette fonction dans votre programme à la place de la
fonction que vous venez de construire et tester le résultat. Attention
toutefois à la signature proposée. Elle vous indique comment utiliser
correctement votre fonction.
Concaténation de deux chaînes de caractères
Réaliser une fonction qui permet de cancaténer deux chaînes de
caractères. Votre programme principal devra faire appel à cette
fonction pour résoudre le problème demandé. Je vous rappelle le sujet.
À partir de deux chaînes de caractères saisies au clavier, vous allez
concaténer ces deux chaînes pour en faire une seule. La concaténation
consiste à fusionner les deux chaînes, l'une à la suite de l'autre
pour en faire une troisième.
Résultats
Bibliothèque de traitement de chaînes de caractères
Dans la bibliothèque délivrée sur le traitement des chaînes de
caractères, il existe une fonction qui réalise la même chose. Elle
s'appelle strcat() dont voici la signature :
char *strcat(char *s1, const char *s2);
Utiliser cette fonction dans votre programme à la place de la
fonction que vous venez de construire et tester le résultat.
Suppression d'une partie de chaîne
Réaliser une fonction qui permet de supprimer une partie d'une chaîne
de caractères. Votre programme principal devra faire appel à cette
fonction pour résoudre le problème demandé. Je vous rappelle le sujet.
À partir d'une chaîne de caractères saisie au clavier, vous allez
supprimer une partie de cette chaîne en demandant la position du
premier caractère à effacer ainsi que le nombre de caractères à
effacer à partir de cette position.
Résultat
Récupération d'une partie de chaîne
Réaliser une fonction qui permet de récupérer une partie de chaîne de
caractères. Votre programme principal devra faire appel à cette
fonction pour résoudre le problème demandé. Je vous rappelle le sujet.
À partir d'une chaîne de caractères saisie au clavier, vous allez
récupérer une partie de cette chaîne en demandant la position du
premier caractère à récupérer ainsi que le nombre de caractères à
récupérer à partir de cette position.
Résultat
Insertion d'une chaîne dans une autre
Réaliser une fonction qui permet de récupérer une partie de chaîne de
caractères. Votre programme principal devra faire appel à cette
fonction pour résoudre le problème demandé. Je vous rappelle le
sujet.À partir d'une chaîne de caractères saisie au clavier, vous
allez insérer une autre chaîne de caractères également saisie
au clavier en précisant la position désirée sur la première
chaîne de caractères.
Résultat
Recherche d'une suite de diviseurs dans un nombre
En reprenant la recherche que nous avons effectué sur les nombres
premiers, nous allons faire l'étude inverse, c'est-à-dire rechercher
la suite des diviseurs que compose un nombre saisi au clavier.
Pour cela vous allez construire les éléments
suivants :
D'abord une structure dénommée Diviseurs, composée
d'une part, d'un tableau de valeurs et d'autre part, du nombre de
valeurs que contient effectivement le tableau.
D'une fonction dénommée rechercheDiviseurs() qui
permet de compléter cette structure passée en argument par rapport à
un nombre également passé en argument qui est la
valeur saisie par l'opérateur.
Récupérer une valeur entière issue d'une chaîne de caractères
En vous aidant de l'étude réalisée lors du TP sur les chaînes, vous
allez mettre en œuvre un programme qui permet de récupérer une valeur
numérique issue de la saisie au clavier. Ce programme doit surtout
assurer le contrôle de la valeur introduite afin de prévenir
l'utilisateur lors d'une mauvaise saisie.
Procédure à suivre avant de commencer à coder
Pour réaliser cette opération, vous devez élaborer deux fonctions :
bool chaineInt(const char *chaine, int &entier);
Cette fonction permet à partir d'une chaîne passée en paramètre de
donner la valeur entière équivalente, si bien entendue, une valeur
entière est bien présente dans cette chaîne. Justement, la fonction
doit retourner true si une valeur entière a pu être trouvée,
et false dans le cas contraire.
int clavierInt(const char *message); Cette fonction
doit, à partir d'un message d'invite comme Introduisez votre
valeur :, retourner la valeur entière saisie par l'opérateur.
Cette fonction doit se servir de la fonction chaineInt élaborée
ci-dessus, et contrôler le résultat afin d'avertir convenablement
l'utilisateur d'une mauvaise saisie éventuelle. Nous devons rester à
l'intérieur de cette fonction jusqu'à ce qu'une valeur entière soit
correctement saisie.
Arguments en ligne de commande
Cette fois-ci, vous allez mettre en œuvre un programme qui permet de
passer des arguments sur la ligne de commande. Ce programme effectue
du calcul simple +, -, *, / sur des valeurs entières. Il se
nomme tout simplement calcul auquel vous devez
impérativement passer 3 paramètres ; les deux opérandes ainsi que
l'opération représentant le calcul. En tenant compte du scénario
ci-dessous, il est impératif de contrôler les différents opérandes
pour que le calcul puisse effectivement se réaliser.
Scénario et résultat
Jeu du Quinze Vainc
Il s'agit d'un à deux joueurs, dans lequel on utilise une piste de
neuf cases numérotées de 1 à 9, trois jetons blancs, trois jetons
noirs. Chaque joueur, à tour de rôle, pose un de ses pions sur une
case libre. Le but est de totaliser 15 en additionnant les
nombres associés à ses trois pions. Si personne n’a gagné lorsque les
six pions sont posés, chaque joueur, à tour de rôle, déplace un de ses
pions vers une case libre, jusqu’à ce que l’un des joueurs obtienne le
total 15.
Quelques remarques supplémentaires
Dans ce projet, l’utilisateur joue contre l’ordinateur.
L’utilisateur possède les pions blancs et commence la partie. À chaque
tour, l’ordinateur affiche l’état du jeu. Quand l’utilisateur joue, il
lui demande le coup qu’il veut jouer et vérifie que ce coup est
valable. Quand l’ordinateur joue, il affiche le coup choisi. Définir
et programmer pour l’ordinateur une stratégie élémentaire : si
l’ordinateur a un coup gagnant, il le joue. Si il n’a pas de coup
gagnant, il cherche si son adversaire en a un, et le contre.
Proposer des fonctions adaptées qui permettent d'exprimer plus
simplement les différentes phases du jeu.