Exercice 01 : Question de Cours (5pts)
1) a) (float)i/j = 1/4 = 0.25
b) (float)(i/j) = (float)(1/4) = 0
c) (float)i/(float)j = (float)1/(float)4 = 0.25
--------
2) Le programme affichera : n=4
--------------
3) a) q = n<p ; q vaudra 1 car n est bien inférieur à p
b) q = n == p ; q vaudra 0 car n n'est pas égal à p
c) q = p % n + p>n ; q vaudra 1 car le reste de la division de p par n est 9%5 = 4 et 9 est bien supérieur à n
d) x = p / n ; x vaudra 1.8
e) x = (p + 0.5)/n ; x vaudra 1.9
f) x = (int)(p + 0.5)/n ; x vaudra 1 car le résultat de (int)(p + 0.5) sera converti en entier avant la division
g) q = n *(p>n?n:p) ; q vaudra 45 car (p>n?n:p) vaudra 9 et n * 9 = 45
----------------------
4) Les erreurs dans le programme sont :
- Dans l'en-tête du fichier, l'orthographe de "stdio.h" est incorrecte. Il faut écrire "stdio.h" au lieu de "studio.h".
- La constante PI est définie incorrectement avec le signe d'égalité = au lieu de l'opérateur de définition #define. Il faut écrire : #define PI 3.14
- Dans la déclaration de la variable "long", le nom est réservé par le compilateur et ne peut pas être utilisé. Il faut utiliser un autre nom, comme "diametre".
- Dans la déclaration des variables "Périm" et "rayon", les accents sont incorrects et ne seront pas reconnus par le compilateur. Il faut écrire "Perim" et "rayon".
- Dans la commande scanf pour lire "rayon", il y a une erreur de syntaxe en ce qui concerne le format du paramètre. Il manque une fermeture de guillemets et il y a une virgule au lieu d'un point-virgule. Il faut écrire : scanf("%f", &rayon);
- Dans la boucle while, l'opérateur de comparaison "!=" est utilisé pour vérifier si PI est égal à 3.14, mais il n'y a pas de moyen de changer la valeur de PI dans la boucle pour qu'elle sorte. La boucle sera donc infinie. Pour résoudre ce problème, il faut enlever la boucle.
Correction :
#include <stdio.h>
#define PI 3.14
int main() {
float rayon, Périm, longueur;
printf("Donner le rayon du cercle :");
scanf("%f", &rayon);
do {
printf("Donner PI :");
scanf("%f", &PI);
} while (PI != 3.14);
//calcul du diamètre de cercle
longueur = 2 * rayon;
//calcul du périmetre
Périm = longueur * PI;
printf("Diametre = %f\nPérimetre = %f", longueur, Périm);
switch (Périm) {
case 50: printf("Cercle 50"); break;
case 100: printf("Cercle 100"); break;
default: printf("Autre cercle");
}
return 0; }
------------------
5) ---------------
5-1) Large = 10, Longueur = 20, P = 0
5-2) Pour que P contienne l'aire du rectangle après l'appel de la fonction Aire, il faut faire les modifications suivantes :
Modifier le nom de la fonction Aire en "Aire_Rectangle" et le retour de la fonction en void à float.
Ajouter un argument pour stocker le résultat de la fonction.
Dans la fonction Aire_Rectangle, il faut changer la ligne C = A * B; en *C = A * B; pour stocker le résultat dans la variable P.
Dans le programme principal, il faut changer l'appel de la fonction en Aire_Rectangle(Large, Longueur, &P); pour passer la référence de P.
Modifier le printf en printf("L'aire du rectangle est %f\n", P);
Voici le code modifié :
#include <stdio.h>
float Aire_Rectangle(float A, float B) {
return A * B;
}
void main() {
float Large = 10, Longueur = 20, P = 0;
P = Aire_Rectangle(Large, Longueur);
printf("L'aire du rectangle est %f\n", P);
}
Exercice 02 : Ecriture d'un Programme C 5pts (1.5+2+1.5)
A)---------------
#include <stdio.h>
#include <math.h>
int main() {
int n, p, i;
long long u_n;
// Demande à l'utilisateur de saisir un entier strictement positif pour n
do {
printf("Entrez un entier strictement positif pour n: ");
scanf("%d", &n);
} while (n <= 0);
// Demande à l'utilisateur de saisir un entier strictement positif pour p
do {
printf("Entrez un entier strictement positif pour p: ");
scanf("%d", &p);
} while (p <= 0);
// Calcul et affichage du nème terme de la suite
u_n = pow(2, n - 1);
printf("Le nème terme de la suite est: %lld\n", u_n);
// Recherche de la valeur de n tel que Un <= p < Un+1
for (i = n; i >= 1; i--) {
if (p >= pow(2, i - 1) && p < pow(2, i)) {
printf("La valeur de n est: %d\n", i);
break;
}
}
return 0;
}
Dans ce programme, nous utilisons une boucle do-while pour demander à l'utilisateur de saisir les valeurs de n et p jusqu'à ce qu'il saisisse des valeurs strictement positives. Ensuite, nous utilisons la fonction pow de la bibliothèque math.h pour calculer la valeur du nème terme de la suite et nous utilisons une boucle for pour trouver la valeur de n en comparant la valeur de p avec les termes successifs de la suite.
U0=1 Un=2*Un-1 Ecrire un unique programme C qui réalise les traitements suivants: 1. Pour un entier n donné strictement positif (gerer le cas ou l'utilisateur ne devra pas entrer de nombre negatif), calculer et afficher le nème terme de cette suite. 2. Calculer la valeur n du premier terme Un tel que pour un entier p donné Un<= p <Un+1 (la valeur de p est entrée au clavier avec p>0). Par exemple : pour p = 5, U2 = 4 et U3 = 8 donc n = 2
--------------------.
B)
#include <stdio.h>
#include <stdbool.h>
#define MAX_N 50
#define MAX_L 10
#define MAX_C 10
int main(void) {
int n, l, c, t[MAX_N], m[MAX_L][MAX_C];
bool found;
printf("Saisir le nombre d'éléments du tableau T: ");
scanf("%d", &n);
printf("Saisir les %d éléments du tableau T: ", n);
for (int i = 0; i < n; i++) {
scanf("%d", &t[i]);
}
printf("Saisir les dimensions de la matrice M (lignes puis colonnes): ");
scanf("%d%d", &l, &c);
printf("Saisir les éléments de la matrice M: \n");
for (int i = 0; i < l; i++) {
for (int j = 0; j < c; j++) {
scanf("%d", &m[i][j]);
}
}
for (int i = 0; i < n; i++) {
found = false;
for (int j = 0; j < l && !found; j++) {
for (int k = 0; k < c && !found; k++) {
if (t[i] == m[j][k]) {
found = true;
}
}
}
if (!found) {
printf("L'élément %d du tableau T n'a pas été trouvé dans la matrice M.\n", t[i]);
return 0;
}
}
printf("Tous les éléments du tableau T figurent dans la matrice M.\n");
return 0;
}
Ce programme utilise un algorithme de boucle double pour parcourir les éléments du tableau t et rechercher leur occurrence dans la matrice m. Si un élément du tableau n'est pas trouvé dans la matrice, le programme affiche un message d'erreur et se termine immédiatement. Sinon, le programme affiche un message indiquant que tous les éléments du tableau figurent dans la matrice.
-----------------
C)
#include <stdio.h>
#include <string.h>
int main() {
char CH1[100], CH2[100];
int i, j, flag = 0;
printf("Entrer la première chaîne CH1: ");
scanf("%s", CH1);
printf("Entrer la seconde chaîne CH2: ");
scanf("%s", CH2);
int l1 = strlen(CH1);
int l2 = strlen(CH2);
for (i = 0; i <= l1 - l2; i++) {
for (j = i; j < i + l2; j++) {
flag = 1;
if (CH1[j] != CH2[j - i]) {
flag = 0;
break;
}
}
if (flag == 1) break;
}
if (flag == 1) {
printf("CH2 est une sous-chaîne de CH1\n");
} else {
printf("CH2 n'existe pas dans CH1\n");
}
return 0;
}
PROBLEME :
#include <stdio.h>
#include <string.h>
#define max 100
1) void LireArticles(char TabArt[max][10], int TabStock[], float TabPrix[], int N)
{
int i;
for (i = 0; i < N; i++)
{
printf("Entrer le code de l'article %d: ", i + 1);
scanf("%s", TabArt[i]);
printf("Entrer la quantité en stock de l'article %d: ", i + 1);
scanf("%d", &TabStock[i]);
printf("Entrer le prix de l'article %d: ", i + 1);
scanf("%f", &TabPrix[i]);
}
}
2)void AfficherArticles(char TabArt[max][10], int TabStock[], float TabPrix[], int N)
{
int i;
printf("Liste des articles:\n");
printf("Code\tQuantité en stock\tPrix\n");
for (i = 0; i < N; i++)
{
printf("%s\t%d\t\t\t%.2f\n", TabArt[i], TabStock[i], TabPrix[i]);
}
}
3)int QuantitéStock(char TabArt[max][10], int TabStock[], char codeart[], int N)
{
int i;
for (i = 0; i < N; i++)
{
if (strcmp(TabArt[i], codeart) == 0)
{
return TabStock[i];
}
}
return -1;
}
4)void AjouterArticle(char TabArt[max][10], int TabStock[], float TabPrix[], char codeart[], int qs, float px, int *N)
{
strcpy(TabArt[*N], codeart);
TabStock[*N] = qs;
TabPrix[*N] = px;
(*N)++;
}
5)
void ApprovisionnerStock(char TabArt[max][10], int TabStock[], char codeart[], int qs, int N)
{
int i, stock;
for (i=0; i<N; i++)
{
if (strcmp(TabArt[i], codeart) == 0)
{
TabStock[i] += qs;
return;
}
}
printf("Article non trouvé\n");
}
6)
void MaxPrix(char TabArt[max][10], float TabPrix[], int N) {
int i;
int indice = 0;
float maxPrix = TabPrix[0];
for (i = 1; i < N; i++) {
if (TabPrix[i] > maxPrix) {
maxPrix = TabPrix[i];
indice = i;
}
}
printf("Code de l'article le plus cher: %s\n", TabArt[indice]);
printf("Prix de l'article le plus cher: %.2f\n", maxPrix);
}
7) void SupprimerArticle(char TabArt[max][10], int TabStock[], float TabPrix[], char code[], int *N) {
int i, j;
int trouve = 0;
for (i = 0; i < *N; i++) {
if (strcmp(TabArt[i], code) == 0) {
trouve = 1;
for (j = i; j < (*N) - 1; j++) {
strcpy(TabArt[j], TabArt[j + 1]);
TabStock[j] = TabStock[j + 1];
TabPrix[j] = TabPrix[j + 1];
}
(*N)--;
break;
}
}
if (!trouve) {
printf("Article avec code %s introuvable\n", code);
}
}
8)------------
#include <stdio.h>
#include <string.h>
#define max 100
void LireArticles(char TabArt[max][10], int TabStock[], float TabPrix[], int N);
void AfficherArticles(char TabArt[max][10], int TabStock[], float TabPrix[], int N);
int QuantitéStock(char TabArt[max][10], int TabStock[], char codeart[], int N);
void AjouterArticle(char TabArt[max][10], int TabStock[], float TabPrix[], char codeart[], int qs, float px, int *N);
void ApprovisionnerStock(char TabArt[max][10], int TabStock[], char codeart[], int qs, int N);
void MaxPrix(char TabArt[max][10], float TabPrix[], int N);
void SupprimerArticle(char TabArt[max][10], int TabStock[], float TabPrix[], char code[], int *N);
int main()
{
char TabArt[max][10];
int TabStock[max];
float TabPrix[max];
char codeart[10], code[10];
int N, qs, QT1, QT2;
float px, PX;
printf("Entrer le nombre d'articles: ");
scanf("%d", &N);
LireArticles(TabArt, TabStock, TabPrix, N);
printf("\nEntrer le code de l'article a approvisionner: ");
scanf("%s", codeart);
printf("Entrer la quantité ajoutée: ");
scanf("%d", &QT1);
ApprovisionnerStock(TabArt, TabStock, codeart, QT1, N);
printf("\nEntrer le code de l'article à ajouter: ");
scanf("%s", code);
printf("Entrer la quantité en stock de l'article: ");
scanf("%d", &QT2);
printf("Entrer le prix de l'article: ");
scanf("%f", &PX);
AjouterArticle(TabArt, TabStock, TabPrix, code, QT2, PX, &N);
for (int i = 0; i < N; i++) {
if (TabStock[i] == 0) {
SupprimerArticle(TabArt, TabStock, TabPrix, TabArt[i], &N);
}
}
printf("\n");
AfficherArticles(TabArt, TabStock, TabPrix, N);
return 0;
}