Les fonctions

Liste des travaux pratiques

Fonctions mathématiques simples

Vous allez mettre en œuvre un petit programme qui permet de tester trois fonctions très réduites :
  1. La fonction impaire() qui permet de déterminer si une valeur est impaire.
  2. La fonction paire() qui permet de déterminer si une valeur est paire.
  3. La fonction absolue() qui retourne la valeur absolue d'un nombre entier.
Pour chacune de ces trois fonctions, il s'agit de déterminer :
  1. Le nombre et le type de paramètre.
  2. S'il existe une valeur de retour, et qu'elle est son type.
  3. 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 :
  1. Une fonction qui copie le contenu d'une chaîne vers une autre,
  2. 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 :
  1. 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.
  2. S'il existe une valeur de retour, et qu'elle est son type.
  3. 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 :
  1. La première se nomme invite et comporte le message suivant BIENVENUE A TOUS.
  2. 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 :
  1. 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.
  2. 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 :

  1. 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.
  2. 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.

Scénario et résultat