Vous êtes sur la page 1sur 16

Rapport du séance de TP n°2

Le travail demandé est de créer un programme Cqui permet a l’utilisateur de


manipuler un tableau d’entier en utilisant des pointeurs

1. Initialisation dutableau en utilisant un pointeur :


Ici, l’utilisatuer va saisir la taille du tableau et leeéléments du tableau, puisleprogramme
l’initialise en utilisant un pointeur.

#include <stdio.h>
#include <stdlib.h>

int main()
{

int taille;
int trouve ,i, index, NV;

printf("donner la taille du tableau: \n");


scanf("%d",&taille);
int T[taille];

// Initialisation du tableau en utilisant des pointeurs

for(i=1;i<=taille;i++)
{
printf("saisir le %d element du tableau :\n",i);
scanf("%d",T+i);

2. Affichage du tableau en utilisant des pointeurs:


leprogramme va afficher tousleséléments du tableau sur l’écran (en utilisant les pointeurs
toujours)

// Affichage du tableau en utilisant des pointeurs

printf("Contenu du tableau :\n");


for(i=1;i<=taille;i++){
printf("T[%d]=%d",i,*(T+i));
}
3. La recherche d’un élément :
L’utilisateur va saisir unélément a rechercher, puisleprogramme affichera son index dans le
tableau s’il est trouvé, sinonil va afficher un message indiquant qu’il n’est pas présent

// Recherche d'un élément

printf("\n saisir l'element a chercher :\n");


int x;
scanf("%d",&x);
trouve=0;
for(i=1;i<=taille;i++)
{
if(T[i]==x )
{printf("l'index de l'element %d est %d :\n",x,i);
trouve=1;
}}

if(trouve==0){
printf("l'element %d n est pas present \n",x);
}

4. Modification d’un élément :


Finalement, l’utilisateur va saisir un index et une nouvelle valeur, puisleprogramme va changer
l’élément du tableau choisi avec la nouvelle valeur

// Modification d'un élément

printf("saisir un index :
\n");scanf("%d",&index);
printf("saisir un nouvelle valeur
:\n");scanf("%d",&NV);
*(T+index)= NV;
printf("Element a l'index %d mis a jour avec la nouvelle valeur
%d.\n", index, NV);

// Réaffichage du tableau après la modification

printf("Contenu du tableau apres modification :\n");


for(i=1;i<=taille;i++){
printf("T[%d]=%d",i,*(T+i));
}
Le code complet

#include <stdio.h>
#include <stdlib.h>

int main()
{

int taille;
int trouve ,i, index, NV;

printf("donner la taille du tableau: \n");


scanf("%d",&taille);
int T[taille];

// Initialisation du tableau en utilisant des pointeurs

for(i=1;i<=taille;i++)
{
printf("saisir le %d element du tableau :\n",i);
scanf("%d",T+i);

// Affichage du tableau en utilisant des pointeurs

printf("Contenu du tableau :\n");


for(i=1;i<=taille;i++){
printf("T[%d]=%d",i,*(T+i));
}
printf("\n");

// Recherche d'un élément

printf("\n saisir l'element a chercher :\n");


int x;
scanf("%d",&x);
trouve=0;
for(i=1;i<=taille;i++)
{
if(T[i]==x )
{printf("l'index de l'element %d est %d :\n",x,i);
trouve=1;
}}

if(trouve==0){
printf("l'element %d n est pas present \n",x)
}
// Modification d'un élément

printf("saisir un index : \n");


scanf("%d",&index);
printf("saisir un nouvelle valeur :\n");
scanf("%d",&NV);
*(T+index)= NV;
printf("Element a l'index %d mis a jour avec la nouvelle valeur %d.\n",
index, NV);

// Réaffichage du tableau après la modification

printf("Contenu du tableau apres modification :\n");


for(i=1;i<=taille;i++){
printf("T[%d]=%d",i,*(T+i));
}
return 0;
}

Compilation du code :
Rapport du séance de TP n°3

Le travail demandé est de créer un programme C qui permet à l’utilisateur de saisir


deux tableaux d’entiers de tailles différentes. Ensuite, le programme doit fusionner ces
deux tableaux dans un nouveau tableau alloué dynamiquement.

1. Initialisation des deux tableaux d’entiers :


Ici, l’utilisatuer va saisir la taille des deux tableaux ainsi que les éléments :

#include <stdio.h>
#include <stdlib.h>

int main() {
int M, N, i;

// Saisie de la taille du premier tableau


printf("Veuillez saisir la taille du premier tableau :
");
scanf("%d", &M);
int TAB1[M];

// Saisie des éléments du premier tableau


printf("Veuillez saisir les éléments du premier tableau
:\n");
for (i = 0; i < M; i++) {
printf("Element %d : ", i);
scanf("%d", &TAB1[i]);
}

// Saisie de la taille du deuxième tableau


printf("Veuillez saisir la taille du deuxième tableau :
");
scanf("%d", &N);
int TAB2[N];

// Saisie des éléments du deuxième tableau


printf("Veuillez saisir les éléments du deuxième
tableau :\n");
for (i = 0; i < N; i++) {
printf("Element %d : ", i);
scanf("%d", &TAB2[i]);
}
2. Allocation dynamique pour le tableau fusionné :
En utilisant la fonction malloc on va allouer dynamiquement de mémoire pour fusionner les deux
tableaux précédents dans un nouveau

// Allocation dynamique pour le tableau fusionné


int *T = (int *)malloc((N + M) * sizeof(int));
if (T == NULL) {
printf("Erreur d'allocation mémoire.\n");
exit(1);
}

3. Copie des éléments du premier tableau dans le tableau fusionné :

// Copie des éléments du premier tableau dans le tableau


fusionné
for (i = 0; i < M; i++) {
T[i] = TAB1[i];
}

4. Copie des éléments du deuxiéme tableau dans le tableau fusionné :

// Copie des éléments du deuxième tableau dans le tableau


fusionné
for (i = 0; i < N; i++) {
T[M + i] = TAB2[i];
}

5. Affichage du tableau fusionné et libration du mémoire:

// Affichage du tableau fusionné


printf("Tableau fusionné :\n");
for (i = 0; i < N + M; i++) {
printf("%d ", T[i]);
}
printf("\n");
}
// Libération de la mémoire
free(T);
Le code complet
#include <stdio.h>
#include <stdlib.h>

int main() {
int M, N, i;

// Saisie de la taille du premier tableau


printf("Veuillez saisir la taille du premier tableau : ");
scanf("%d", &M);
int TAB1[M];

// Saisie des éléments du premier tableau


printf("Veuillez saisir les éléments du premier tableau
:\n");
for (i = 0; i < M; i++) {
printf("Element %d : ", i);
scanf("%d", &TAB1[i]); .
}

// Saisie de la taille du deuxième tableau


printf("Veuillez saisir la taille du deuxième tableau : ");
scanf("%d", &N);
int TAB2[N];

// Saisie des éléments du deuxième tableau


printf("Veuillez saisir les éléments du deuxième tableau
:\n");
for (i = 0; i < N; i++) {
printf("Element %d : ", i);
scanf("%d", &TAB2[i]);
}

// Allocation dynamique pour le tableau fusionné


int *T = (int *)malloc((N + M) * sizeof(int));
if (T == NULL) {
printf("Erreur d'allocation mémoire.\n");
exit(1);
}

else {

// Copie des éléments du premier tableau dans le tableau


fusionné
for (i = 0; i < M; i++) {
T[i] = TAB1[i];
}

// Copie des éléments du deuxième tableau dans le tableau


fusionné
for (i = 0; i < N; i++) {
T[M + i] = TAB2[i];
}
// Affichage du tableau fusionné
printf("Tableau fusionné :\n");
for (i = 0; i < N + M; i++) {
printf("%d ", T[i]);
}
printf("\n");
}
// Libération de la mémoire
free(T);

return 0;
}

Compilation du code :
Rapport de la séance de TP n°4

Le travail demandé est de créer un programme qui permet à l’utilisateur de gérer


un système de stock de produits en ajoutant de nouveaux produits au stock, en
visualisant le stock actuel et en quittant le programme proprement. Il utilise
realloc pour redimensionner dynamiquement le tableau de stock lorsque de
nouveaux produits sont ajoutés.

1. Allocation initiale des tableaux :


Au début du programme, nous allouons de la mémoire pour stocker les noms des produits et
leurs quantités.
Nous utilisons malloc pour allouer de la mémoire pour les noms des produits et
sizeof(char*) pour indiquer la taille d'un pointeur vers un caractère, et pour les quantités,
nous utilisons malloc avec sizeof(int).

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
char **produits = NULL; // Tableau de pointeurs vers les noms des
produits
int *quantities = NULL; // Tableau pour stocker les quantités des
produits
int capacity = 10; // Capacité initiale du stock
int i,count = 0; // Taille actuelle du stock
char choice; // Variable pour stocker le choix de l'utilisateur

// Allocation initiale des tableaux


produits = (char**)malloc(capacity * sizeof(char*));
quantities = (int*)malloc(capacity * sizeof(int));
if (produits == NULL || quantities == NULL) {
printf("Erreur d'allocation de mémoire.\n");
free(produits);
free(quantities);
return 1; // Quitter le programme avec un code d'erreur
Nous affichons un menu proposant des options à l'utilisateur (ajouter un produit, afficher le
stock, quitter).
Nous utilisons une boucle do-while pour permettre à l'utilisateur de sélectionner des options
du menu. Cette boucle continue jusqu'à ce que l'utilisateur choisisse de quitter le programme.

do {
printf("\nMenu:\n");
printf("1. Ajouter un produit\n");
printf("2. Afficher le stock\n");
printf("3. Quitter\n");
printf("Choix: ");
scanf(" %c", &choice);

} while (choice != '3');

2. Ajout d’un produit :

Lorsque l'utilisateur choisit d'ajouter un produit, nous vérifions si la capacité actuelle du stock
est suffisante pour accueillir un nouveau produit. Si la capacité est insuffisante, nous utilisons
realloc pour redimensionner le tableau de noms et de quantités.

switch (choice) {
case '1': // Ajouter un produit
{
// Vérifier si le stock est plein
if (count == capacity) {

capacity *= 2;
char **temp_names = realloc(produits, capacity * sizeof(char*));
int *temp_quantities = realloc(quantities, capacity * sizeof(int));
if (temp_names == NULL || temp_quantities == NULL) {
printf("Erreur d'allocation de mémoire.\n");
free(produits);
free(quantities);
return 1; // Quitter le programme avec un code d'erreur
}
produits = temp_names;
quantities = temp_quantities;
}
Nous allouons dynamiquement de la mémoire pour stocker le nom du produit à l'aide de
malloc. Le nom est saisi par l'utilisateur à l'aide de scanf.

// Allouer dynamiquement de la mémoire


produits[count] = (char*)malloc(50 * sizeof(char));
if (produits[count] == NULL) {
printf("Erreur d'allocation de mémoire.\n");
free(produits);
free(quantities);
return 1;
// Quitter le programme avec un code d'erreur
}

Nous demandons également à l'utilisateur de saisir la quantité du produit. Les informations sur
le produit (nom et quantité) sont ajoutées aux tableaux de noms et de quantités, respectivement.

// Demander le nom et la quantité du produit


printf("Entrez le nom du produit: ");
scanf("%s", produits[count]);
printf("Entrez la quantite du produit: ");
scanf("%d", &quantities[count]);
count++;

printf("Produit ajoute avec succes.\n");


}
break;

3. Affichage de stock :

Lorsque l'utilisateur choisit d'afficher le stock, nous vérifions d'abord s'il y a des produits dans le
stock. Si le stock est vide, un message approprié est affiché.

case '2': // Afficher le stock


{
if (count == 0) {
printf("Le stock est vide.\n");
}
Sinon, nous parcourons les tableaux de noms et de quantités pour afficher chaque produit avec
son nom et sa quantité correspondante.

else {
printf("Stock:\n");
for (i = 0; i < count; i++) {
printf("%d. %s: %d\n", i+1, produits[i], quantities[i]);
}
}
}
break;

4. Quitter le programme :
Lorsque l'utilisateur choisit de quitter le programme, nous affichons un message de départ.

case '3': // Quitter le programme


printf("Au revoir.\n");
break;
default:
printf("Choix invalide. Veuillez reessayer.\n");
break;
*
}

5. Libération la mémoire allouée pour les noms des produits :


Nous libérons ensuite la mémoire allouée dynamiquement pour les noms des produits en
utilisant free pour chaque nom, puis nous libérons la mémoire allouée pour les tableaux de
noms et de quantités en utilisant free.

// Libérer la mémoire allouée pour les noms des produits


for (i = 0; i < count; i++) {
free(produits[i]);
}
free(produits);
free(quantities);

return 0; // Fin du programme


}
Le code complet :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
char **produits = NULL; // Tableau de pointeurs vers les noms des
produits
int *quantities = NULL; // Tableau pour stocker les quantités des
produits
int capacity = 10; // Capacité initiale du stock
int i,count = 0; // Taille actuelle du stock
char choice; // Variable pour stocker le choix de l'utilisateur

// Allocation initiale des tableaux


produits = (char**)malloc(capacity * sizeof(char*));
quantities = (int*)malloc(capacity * sizeof(int));
if (produits == NULL || quantities == NULL) {
printf("Erreur d'allocation de mémoire.\n");
free(produits);
free(quantities);
return 1; // Quitter le programme avec un code d'erreur
}

do {
printf("\nMenu:\n");
printf("1. Ajouter un produit\n");
printf("2. Afficher le stock\n");
printf("3. Quitter\n");
printf("Choix: ");
scanf(" %c", &choice);

switch (choice) {
case '1': // Ajouter un produit
{
// Vérifier si le stock est plein
if (count == capacity) {
// Réallouer la mémoire pour agrandir le stock
capacity *= 2;
char **temp_names = realloc(produits, capacity *
sizeof(char*));
int *temp_quantities = realloc(quantities, capacity *
sizeof(int));
if (temp_names == NULL || temp_quantities == NULL) {
printf("Erreur d'allocation de mémoire.\n");
free(produits);
free(quantities);
return 1; // Quitter le programme avec un
code d'erreur
}
produits = temp_names;
quantities = temp_quantities;
}
// Allouer dynamiquement de la mémoire pour le nom du produit
produits[count] = (char*)malloc(50 * sizeof(char));
if (produits[count] == NULL) {
printf("Erreur d'allocation de mémoire.\n");
free(produits);
free(quantities);
return 1;
// Quitter le programme avec un code d'erreur
}

// Demander le nom et la quantité du produit


printf("Entrez le nom du produit: ");
scanf("%s", produits[count]);
printf("Entrez la quantite du produit: ");
scanf("%d", &quantities[count]);
count++;

printf("Produit ajoute avec succes.\n");


}
break;
case '2': // Afficher le stock
{
if (count == 0) {
printf("Le stock est vide.\n");
} else {
printf("Stock:\n");
for (i = 0; i < count; i++) {
printf("%d. %s: %d\n", i+1, produits[i], quantities[i]);
}
}
}
break;
case '3': // Quitter le programme
printf("Au revoir.\n");
break;
default:
printf("Choix invalide. Veuillez reessayer.\n");
break;
}

} while (choice != '3');

// Libérer la mémoire allouée pour les noms des produits


for (i = 0; i < count; i++) {
free(produits[i]);
}
free(produits);
free(quantities);

return 0; // Fin du programme sans erreur


}
Compilation du code :

Vous aimerez peut-être aussi