0% ont trouvé ce document utile (0 vote)
71 vues8 pages

TD AP1 Total

Le document présente une série d'exercices en algorithmique et programmation, couvrant des concepts tels que les variables, les opérateurs, les entrées/sorties, les tableaux, les boucles et les fonctions. Chaque exercice demande la rédaction de programmes en langage C pour résoudre des problèmes spécifiques, allant de la conversion de devises à la gestion de tableaux et à la résolution d'équations. Les exercices sont structurés en chapitres, chacun abordant des thèmes différents et des compétences de programmation.

Transféré par

anhtai032006
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
71 vues8 pages

TD AP1 Total

Le document présente une série d'exercices en algorithmique et programmation, couvrant des concepts tels que les variables, les opérateurs, les entrées/sorties, les tableaux, les boucles et les fonctions. Chaque exercice demande la rédaction de programmes en langage C pour résoudre des problèmes spécifiques, allant de la conversion de devises à la gestion de tableaux et à la résolution d'équations. Les exercices sont structurés en chapitres, chacun abordant des thèmes différents et des compétences de programmation.

Transféré par

anhtai032006
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Algorithmique et Programmation 1

Chapitre 1
Variables, opérateurs, entrées/sorties, alternatives

Exercice 1
Soit le programme suivant :

int main()
{
int a=5, b=2, c;
float f=5, g=2, h1, h2, h3;

c=a/b;
h1=f/g;
h2=a/b;
h3=f/b;

return 0;
}

Donner les valeurs de c, h1, h2 et h3 à la fin de l’exécution du programme

Exercice 2
Ecrire un programme qui permet de convertir en dollars une somme monétaire en euros
donnée en entrée. Le résultat sera affiché.
1 Euro = 1.10 Dollar

Exercice 3
Ecrire un programme qui permute et affiche les valeurs de trois variables a, b, c de type entier
qui sont entrées au clavier (b reçoit la valeur de a, a celle de c et c celle de b).

Exercice 4
Ecrire un programme qui calcule et affiche le quotient et le reste de la division entière de deux
nombres entiers entrés au clavier ainsi que le quotient réel de ces deux nombres.

Exercice 5
Soit la séquence d’instructions suivante :

if (a>b) {AFFICHER ("premier choix \n");} else


if (a>10) {AFFICHER ("deuxième choix \n");}
if (b<10) {AFFICHER ("troisième choix \n");}
else {AFFICHER ("quatrième choix \n");}

1) Réécrire le code en respectant les conventions d’indentation


2) Déterminer les réponses du programme pour chacun des couples de nombres suivants :

(1) a=10 et b=5 (4) a=10 et b=10


(2) a=5 et b=5 (5) a=20 et b=10
(3) a=5 et b=10 (6) a=20 et b=20
Exercice 6
On souhaite développer un programme permettant de résoudre une équation du second degré
ax 2 + bx + c = 0 .
Les trois réels a, b et c seront demandés à l’utilisateur.

En vous appuyant sur l’algorigramme vu en cours, écrivez le code source du programme en


langage C.

Attention : penser à gérer les cas particuliers liés aux valeurs de a et b !

Pour déterminer la racine carré d’un nombre, vous utiliserez la fontion sqrt appartenant à la
bibliothèque math.h
Exemple d’utilisation :
double x ;
double y = 16 ;
x=sqrt(y) /* x prend la valeur 4 */

Exercice 7
Ecrire un programme qui demande 3 entiers à l’utilisateur, puis les affiche dans l’ordre
décroissant à l’écran. Les valeurs des variables ne changeront pas.
Une exécution de votre programme ne devra réaliser que trois tests au maximum.

Exercice 8
Ecrire un programme qui demande un numéro de jour, de mois et d’année puis affiche s’il
s’agit d’une date valide ou pas. Attention : il faut gérer les années bissextiles.
Rappel : une année est bissextile si elle est divisible par 4 et non divisible par 100 ou si elle
est divisible par 400

Exercice 9
Écrire un algorithme qui demande une heure (heures, minutes, secondes) puis affiche l’heure
qu’il sera une seconde plus tard.

Chapitre 2
Tableaux et boucles

Exercice 1
On souhaite écrire deux programmes qui calculent la factorielle n! = 1.2.3.(n − 1 ).n d'un
entier n demandé à l’utilisateur. Le premier programme utilisera une boucle while, le
deuxième une boucle for.
Ecrire les programmes en langage C.

Exercice 2
Ecrire le code source d’un programme qui affiche les premiers termes de la série :

sera un entier saisi au clavier par l’utilisateur.


Exercice 3
Ecrire un programme en langage C qui affiche les tables de multiplications de 1 à n (n est
saisi au clavier).

Exercice 4
Ecrire un programme qui :
1) Déclare un tableau d’entiers de taille 50
2) Demande à l’utilisateur de fournir un nombre d’entiers à saisir en s’assurant que ce
nombre est inférieur ou égal à la taille du tableau (on stockera la valeur entrée par
l’utilisateur dans une variable taille)
3) Réalise la saisie des valeurs
4) Affiche le tableau ainsi que la moyenne de ses valeurs

Exercice 5
Pour résoudre cet exercice, vous n'utiliserez pas l'opérateur reste de la division entière.
Ecrire un programme qui va
• Lire une suite des prix des achats d’un client (uniquement des entiers, l’utilisateur
entre zéro lorsque la saisie est terminée).
• Calculer la somme qu’il doit payer
• Lire la somme qu’il paye,
• Simuler la remise de la monnaie en affichant le nombre de coupures de 10€/5€/2€/1€ à
rendre, s'il y a lieu.

Exercice 6
On considère les questions 1 à 3 de l’exercice 4 réalisées
Ecrire un programme permettant de :
1) Trouver et afficher les valeur max et min dans le tableau
2) D’inverser l’ordre de ses valeurs
3) D’indiquer (par un affichage) si une valeur saisie par l’utilisateur est présente dans le
tableau.

NB : Les question sont indépendantes (vous ne ferez pas tous les calculs en même temps)

Exercice 7
Ecrire un programme qui :
1) Déclare un tableau de réels à deux dimensions de taille 30*30 ainsi qu’un tableau de
réels à une dimension de taille 900.
2) Demande la saisie à l’utilisateur du nombre de lignes et de colonnes qu’il souhaite
utiliser dans le tableau à deux dimensions (avec vérification des valeurs, qui seront
stockées dans des variables nbLignes et nbColonnes)
3) Réalise la saisie des valeurs du tableau 2D par l’utilisateur
4) Copie les valeurs du tableau 2D dans le tableau 1D de manière à ce que les lignes
soient consécutives.
Ex :
Chapitre 3
Les fonctions

Exercice 1
Soit une fonction possédant le prototype : int maFonction(int x); On souhaite appeler cette
fonction et afficher son résultat.
Parmi les appels suivants, lesquels sont corrects ?

int x; int a=5;


1 x= maFonction(5); 5 maFonction(int a);
AFFICHER(x); AFFICHER(maFonction(int a));
2 AFFICHER(maFonction(5)); 6 maFonction(5);

maFonction(5); int a=5;


3 7
AFFICHER(maFonction(5)); AFFICHER(maFonction(a));
int x,a=5; int x,a=5;
4 x= maFonction(a); 8 x= maFonction(int a);
AFFICHER(x); AFFICHER(x);

Exercice 2
a) Définir les prototypes (en-tête) des fonctions suivantes :
- affiche_Entier, qui réalise l’affichage d’un entier passé en paramètre.
- maximum, qui retourne la valeur maximum parmi deux réels.
- puissance, retournant la valeur d’un réel passé en paramètre élevé à une puissance
entière également passée en paramètre.
- facto, qui calcule et affiche la factorielle d’un entier passé en paramètre.
- affiche_Tab, qui affiche les valeurs contenues dans un tableau de réels.
- moy_Tab, qui calcule et retourne la moyenne des valeurs contenues dans un tableau
d’entiers passé en paramètre.
- copie_tableau, réalisant la copie d’un tableau d’entiers vers un tableau de réels. Les
deux tableaux seront passés en paramètre.

b) Définir les fonctions précédentes.


c) Ecrire les appels pour les fonctions précédentes

Exercice 3 : Exercice nécessaire pour la réalisation du prochain TP


On souhaite réaliser un jeu de morpion. Rappel des règles :
- Les joueurs jouent chacun leur tour.
- A chaque tour, un joueur place une pièce correspondant à son symbole dans une grille 3x3.
- Le premier joueur à avoir aligner 3 pièces gagne.

La grille de jeu sera un tableau statique d’entiers à deux dimensions de taille 3x3.
- La valeur 0 correspondra à une case vide
- La valeur 1 correspondra à une pièce placée par le joueur 1
- La valeur 2 correspondra à une pièce placée par le joueur 2
Un joueur sera représenté part un entier correspondant à son numéro (1 ou 2).

Les prototypes suivants correspondent à des fonctions déjà définies.


void initialisation_grille(int [][TAILLE]);
Entrée : tableau 2D d’entiers correspondant à la grille de jeu.
Sortie : aucune.
Rôle : initialise la grille à vide.

void afficher_grille(int [][TAILLE]);


Entrée : tableau 2D d’entiers correspondant à la grille de jeu.
Sortie : aucune.
Rôle : affiche à l’écran la grille de jeu. X représente le joueur 1, O représente le joueur 2.

int tour_joueur(int [][TAILLE])


Entrée : tableau 2D d’entiers correspondant à la grille de jeu.
Sortie : entier (1 ou 2).
Rôle : analyse la grille de jeu, détermine le prochain joueur à jouer et retourne son numéro.

int saisie(int [][TAILLE],int)


Entrées : tableau 2D d’entiers correspondant à la grille de jeu, entier correspondant au numéro
du joueur dont le tour est en cours
Sortie : entier (1 ou 0).
Rôle : demande au joueur dont c’est le tour de saisir les coordonnées de la case sur laquelle il
souhaite jouer. L’origine des coordonnées se situe en (0,0). Si les cordonnées saisies sont en
dehors de la grille ou si la case correspondante n’est pas vide, la fonction retourne 0. Si les
coordonnées sont valides, la fonction ajoute le numéro du joueur dans la grille aux
coordonnées saisies et retourne 1.

int vainqueur(int [][TAILLE])


Entrée : tableau 2D d’entiers correspondant à la grille de jeu
Sortie : entier (0, 1, 2 ou -1).
Rôle : analyse la grille de jeu et détermine s’il y a un vainqueur. Si un vainqueur est identifié,
son numéro de joueur est retourné. Si aucun vainqueur n’est identifié et que la grille n’est pas
entièrement remplie, la fonction retourne 0. Si aucun vainqueur n’est identifié et que la grille
est entièrement remplie, la fonction retourne -1 (match nul).

En utilisant les fonctions précédentes, écrire le programme principal réalisant la boucle


de jeu. Vous n’avez pas à définir les fonctions, mais vous devrez déclarer leurs prototypes. Le
programme devra initialiser le jeu et le lancer. Le programme s’arrêtera lorsqu’un vainqueur
sera identifié, ou lorsqu’une situation de match nul sera détectée.

Exercice 4
Réécrire le programme de l’exercice 1 du dernier TP (gestion d’un tableau d’au plus 30 notes)
en utilisant des fonctions.

1. Ecrire une fonction qui demande à l‘utilisateur, puis retourne, le nombre de notes qu’il
souhaite stocker. On pensera à s’assurer que ce nombre est inférieur ou égal à la taille
du tableau donnée lors de la déclaration.
2. Ecrire une fonction réalisant la saisie des notes et leur stockage dans le tableau.
3. Ecrire une fonction réalisant l’affichage des notes du tableau.
4. Ecrire une fonction affichant les notes maximum et minimum ainsi que la moyenne.
5. Ecrire une fonction permettant de remplir automatiquement un tableau de taille 4
correspondant à l’histogramme des notes.
Rappel : Chaque case de ce tableau correspond à un intervalle de notes : [0,8[ pour la
première case, [8,10[ pour la seconde, [10,12[ pour la troisième et [12, 20] pour la
dernière.
6. Ecrire un programme principal réalisant la saisie des notes, l’affichage de celles-ci
ainsi que du maximum, du minimum, de la moyenne et de l’histogramme. Vous
réaliserez cela pour trois matières différentes. Chaque matière aura son propre tableau
de notes.

Exercice 5
On souhaite réaliser plusieurs fonctions permettant d’effectuer des opérations sur des vecteurs de
dimensions comprises entre 1 et 10.
On considère qu’un vecteur est implémenté comme un tableau de taille maximale 10.
La dimension d d’un vecteur pourra être inférieure à 10. Dans ce cas, on ne s’intéressera qu’aux d
premières valeurs du tableau.
La première case du tableau contient la valeur de la coordonnée en x, la deuxième case la valeur de la
coordonnée en y, etc.

1) Ecrire une fonction calculant et retournant la norme d’un vecteur passé en paramètre.
Rappel (pour un vecteur de dimension 3) :
u 
  x 
U =  u y , U = u x + u y + u z
2 2 2

 
 uz 
2) Ecrire une fonction calculant et retournant le produit scalaire de deux vecteurs passés en
paramètre.
Rappel (pour un vecteur de dimension 3) :
 u x   vx 
   
 u y  •  v y  = u x .vx + u y .v y + u z .vz
   
 u z   vz 
3) Ecrire une fonction renvoyant 1 si deux vecteurs (passés en paramètre) sont colinéaires et 0 sinon.
Rappel : deux vecteurs u et v sont colinéaire si et seulement si il existe un réel k tel que
 
u = kv
4) Ecrire une fonction retournant 1 si deux vecteurs (passés en paramètre) sont orthogonaux et 0
sinon.
Rappel : deux vecteurs sont orthogonaux si leur produit scalaire est nul

5) Ecrire un programme principal permettant de tester les fonctions précédentes.

Chapitre 4
Les chaînes de caractères

Séance 1
Exercice 1
1- Ecrire une fonction qui prend en paramètre une chaine de caractères et un caractère. La
fonction retourne le nombre d’occurrence du caractère dans la chaine de caractère.
2- Ecrire le programme principal permettant d’utiliser la fonction (saisie de la chaine et
affichage du résultat).
Exercice 2
1- Écrire une fonction palindrome qui retourne 1 si une chaîne passée en paramètre est un
palindrome (un mot qui est le même qu'on le lise de gauche à droite ou de droite à
gauche) et 0 sinon.
2- Ecrire le programme principal (idem question précédente).
Exemples :
PIERRE n'est pas un palindrome
OTTO est un palindrome
23432 est un palindrome

Exercice 3
1- Écrire une fonction qui convertit toutes les majuscules en minuscules (et vice-versa)
d’une chaine de caractères.
2- Ecrire le programme principal (idem question précédente).

Les seules hypothèses faites sur la table sont :


- Les codes des majuscules sont consécutifs
- Les codes des minuscules sont consécutifs

Exercice 4
Ecrire un programme qui lit deux chaînes de caractères ch1 et ch2 et qui copie la première
moitié de ch1 puis la première moitié de ch2 dans une troisième chaîne ch3. Afficher le
résultat. L’exercice sera résolu en utilisant les fonctions de <string.h>.

Exercice 5
a) Ecrire une fonction qui retourne la longueur du mot le plus long d'une chaîne de
caractères passée en paramètre. Attention la chaîne de caractères peut contenir des
espaces, des apostrophes, des signes de ponctuation …
b) Ecrire le programme principal.

Exercice 6 : fonctions diverses.

a) Ecrire une fonction mystrcat réalisant le même traitement que strcat.


Même question pour strncat
b) Ecrire une fonction differents qui vérifie que tous les caractères d’une chaîne de
caractères sont différents. Dans ce cas, la fonction retourne 1 sinon elle retourne 0.

Exemples :
differents ("abc") retourne 1.
differents ("aba") retourne 0.
differents("aA") retourne 0.

c) Ecrire une fonction compter qui prend en paramètre une chaîne de caractères ch et qui
affiche le nombre d'occurrences des lettres de l'alphabet en ne distinguant pas les
majuscules et les minuscules. On pourra utiliser un tableau abc de taille 26 pour
mémoriser le résultat. Afficher seulement le nombre des lettres qui apparaissent au
moins une fois dans le texte.

Exemple d’affichage après appel à compter("Jeanne") :


La chaîne "Jeanne" contient :
1 fois la lettre 'A'
2 fois la lettre 'E'
1 fois la lettre 'J'
3 fois la lettre 'N'

Séance 2

- Ce sujet s’accompagne d’un programme : TD5.c, disponible au même emplacement sur célène.
- Téléchargez-le et ouvrez-le avec Notepad++
- Le fichier TD5.c contient les différentes fonctions que vous complèterez au cours du TD, ainsi
que le programme principal.
- Avant de passer à la question n+1, vous vous assurerez que la fonction de la question n est
correcte en la testant.

Partie 1 : échauffement
1) Ecrire la fonction longueur_chaine qui retourne le nombre de caractères d’une chaine passée
en paramètre (le caractère \0 ne sera pas compté). Vous n’utiliserez pas de fonction de string.h
pour cette fonction.
2) Ecrire la fonction caractere_present qui retourne 1 si un caractère es présent dans une chaîne
et 0 sinon. La chaîne ainsi que le caractère recherché seront passés en paramètre de la
fonction.
3) Ecrire la fonction sequence_presente qui retourne 1 si une chaîne de caractère est présente
dans une autre chaine de caractères et 0 sinon. Les deux chaînes seront passées en paramètre
de la fonction.
Exemple :
- l’appel sequence_presente("toto","to") retourne 1,
- l’appel sequence_presente("toto","ta") retourne 0.

Partie 2 : cryptographie
L’objectif de cette partie est de mettre en place une méthode simple afin de dissimuler de
l’information en brouillant un message. Pour simplifier, on envisagera uniquement le codage d’un
mot. Vous partirez donc de l’hypothèse que la chaîne de caractère que vous traitez n’est composée que
de lettres (minuscules et/ou majuscules).
Le code à décalage (ou code de César) fait partie des codes les plus faciles à utiliser. Il est basé sur un
principe simple : on décale l'alphabet d'un certain nombre de lettres, ce nombre est appelé clé. Par
exemple, avec un décalage de 5, A devient F, B devient G... Jusqu’à Z qui devient E (il faut donc gérer
la circularité).
4) Ecrire la fonction codage_cesar_3 qui code une chaine de caractère passée en paramètre en
décalant de 3 les lettres dans l’alphabet (la chaine est modifiée).
Exemple : zebre devient cheuh

5) Ecrire la fonction decodage_cesar_3 qui décode un mot codé avec la méthode précédente (la
chaine est modifiée).

6) Généraliser les deux fonctions précédentes avec un décalage quelconque passé en paramètre de la
fonction (fonctions codage_cesar_n et decodage_cesar_n). Vos fonctions forceront un décalage
<1 ou >25 à rester dans la valeur la plus proche de l’intervalle [1,25].
Exemple : si le décalage passé en paramètre est 30, le décalage réalisé sera de 25.

Vous aimerez peut-être aussi