Fonctions / Manipulation de tableaux / chaines de caractères
Cette partie aborde plusieurs concepts de base :
l'Écriture de fonctions
la manipulation de tableaux
la manipulation de chaines de caractères
Vous pouvez vous référer aux parties du cours correspondantes si besoin de révision. Certains exercices de cette série ne possèdent pas encore de scripts d'auto-évaluation, il vous appartient donc d'être vigilants sur le respect du cahier des charges.
écriture de fonctions
au sens mathématique
Code de cet exercice : polyfonc
Écrivez une fonction polynome qui reçoit un réel et qui retourne un réel. Son protoype est le suivant :
double polynome(double x);
Cette fonction retoune la valeur du polynôme P(x) = x⁴+x³+x²+x+1, x étant le réel fourni à la fonction.
Testez votre fonction avec un programme qui reçoit une valeur réelle en ligne de commande et qui affiche le résultat dans le terminal.
Testez votre programme avec l'outil program_valid. Seule la fonction polynome est évaluée, mais le programme DOIT compiler proprement pour que l'archive fonctionne.
modulo
code de cet exercice : modulo7
L'objectif est maintenant de créer une fonction c2mod7 qui reçoit un entier i comme seul argument. Cette fonction renvoie '1' si i est congru à 2 modulo 7, '0' dans les autres cas. Son prototype est le suivant :
int c2mod7(int i);
Prenez le temps de tester votre fonction avec un programe dédié.
Testez votre fonction à l'aide de program_valid. Encore une fois, le programme entier doit compiler proprement.
Manipulation de tableaux
Construction d'un tableau
code de cet exercice : firsteven
Écrivez une fonction disp_array qui reçoit un tableau d'entiers ainsi que la taille de ce tableau comme argument, et qui affiche chacun de ces entiers à l'écran. Vous séparerez chaque valeur, au choix, par des espaces et/ou des sauts de ligne. Son prototype est le suivant :
void disp_array(int tab[], int tabsize);
Testez cette fonction avec un programme simple et un tableau déclaré comme une constante dans votre programme.
Ajoutez la fonction fill_even qui remplit un tableau reçu en argument par les n premiers nombres pairs. Son prototype est le suivant :
void fill_even(int tab[], int n);
Écrivez un programme complet qui, en utilisant les fonctions précédentes, affiche la liste des n premiers nombres pairs, n étant passé comme argument en ligne de commande.
Testez votre programme
validez le programme
Test de tri
Code de cet exercice : tritest
Écrivez une fonction qui reçoit un tableau d'entiers et sa taille comme paramètres et qui renvoie 1 si le tableau est trié dans l'ordre croissant (strictement), 0 sinon.
Testez cette fonction avec un tableau déclaré comme constante.
Modifiez la fonction pour qu'elle renvoie -1 si le tableau est trié dans l'ordre strictement décroissant
Écrivez un programme complet qui reçoit plusieurs entiers en ligne de commande et qui, grâce à la fonction précédente, affiche croissant, décroissant ou non trié, selon que les entiers sont respectivement triés dans l'ordre croissant, trié dans l'ordre décroissant ou non triés.
Testez votre programme dans plusieurs cas.
Validez votre programme
Le triangle de Pascal
Code de cet exercice : tripascal
Le triangle de Pascal est constitué des coefficients binomiaux :
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
...
Une façon aisée de calculer ce triangle est de constater que chaque élément i est la somme des éléments i et i-1 de la ligne précédente.
Écrivez la fonction affiche_pascal qui reçoit un tableau d'entiers ainsi que sa taille, et qui affiche les coefficients non nuls de ce tableau, séparés par des espaces, sur une ligne (Si une valeur est nulle dans le tableau, les valeurs suivantes du tableau seront toutes nulles).
Écrivez un programme pour tester votre fonction à partir d'un tableau déclaré comme une constante.
Écrivez la fonction maj_pascal qui reçoit un tableau d'entiers ainsi que sa taille. Ce tableau contient les éléments du rang n où n est strictement inférieur à la taille du tableau (les cases non utilisées contiennent des 0). Cette fonction doit mettre à jour ce tableau pour qu'il contienne les éléments du rang n+1.
Écrivez le programme complet qui reçoit un entier n en ligne de commande et qui affiche les n premières lignes du triangle de pascal
Validez votre programme
Manipulation de chaînes de caractères
Dans cette partie, les exercices portent sur la manipulation de chaînes de caractères. Pour rappel, les chaînes de caractères se comportent comme des tableaux d'entiers de type char. La fin d'une chaîne de caractères est indiquée par un caractère de valeur 0 (le caractère NULL). Il s'agit concrètement de la première case du tableau non utilisée pour stocker un caractère de la chaîne.
Calcul de longueur
Code de cet exercice : strlength
Écrivez un programme qui affiche la taille du premier argument passé dans la ligne de commande. L'usage de la fonction strlen n'est pas autorisé.
Test de palindrome
Code de cet exercice : palindrome
rappel : Un palindrome est un mot qui reste le même quel que soit le sens dans lequel on le lit (comme radar, gag, non, laval…).
Écrivez un programme qui teste si le premier argument passé en ligne de commande est un palindrome. Si c'est le cas, il doit afficher “palindrome”, sinon, il doit afficher “pas un palindrome” (pour l'instant, seule une version naïve est demandée. Comme 'a'!='A', il est normal que rAdar ne soit pas identifié comme palindrome).
Changement de Casse
Code de cet exercice : chgtcasse
Écrivez une fonction qui modifie Une chaîne de caractère pour qu'elle ne comporte que des caractères majuscule.
Utilisez cette fonction dans un programme qui reçoit un argument et un seul en ligne de commande et qui affiche sa version en majuscules.
Reprenez le programme du palindrome en prenant en compte le fait que si radar est un palindrome, alors RadAr aussi…
Test de validité d'argument entier
Code de cet exercice : isint
rappel: Les valeurs des caractères peuvent êtres manipulées comme des entiers. il est donc possible de tester le position relative dans la table ASCii grâce aux fonction inférieur et supérieur. Etant donné que la table ASCii suit une certaine logique, 'a' < 'z' est toujours vrai et '6' > '7' est toujours faux (par exemple). De la même façon, 'a' + 1 vaut 'b', 'Q' - 4 vaut 'M' et '0' + 3 vaut '3'.
Écrivez une fonction qui reçoit une chaîne de caractère et qui renvoie un entier. Si la chaîne de caractères représente une valeur entière, la fonction doit renvoyer 1, sinon, elle doit renvoyer 0.
Écrivez un programme qui affiche la somme de deux entiers passés comme argument en ligne de commande. Ce programme doit toujours afficher un résultat cohérent, quelque soient les arguments. Il doit donc afficher “Erreur” si :
[Facultatif] Comparaison de chaînes
Code de cet exercice : cmpstr
Écrivez une fonction qui reçoit deux chaînes de caractères et qui renvoie :
0 si les chaînes sont différentes
1 si les chaînes ont la même valeur
2 si la fonction a reçu deux fois la même chaîne.
Testez cette fonction dans un programme. Ce programme affichera sur une première ligne le résultat de la fonction appelée sur les deux premiers arguments passés en ligne de commande. Sur une deuxième ligne, le programme affichera le résultat de la fonction si elle est appelée deux fois sur le même argument.
Écrivez un programme qui copie le premier argument de la ligne de commande dans une variable et qui affiche le contenu de cette variable. Vous utiliserez votre fonction pour bien vérifier qu'il s'agit d'une copie.