0% ont trouvé ce document utile (0 vote)
30 vues5 pages

TP4 Prog C

Le document présente un exercice de programmation en C sur la manipulation de matrices à l'aide de fonctions pour allouer, remplir, afficher et libérer une matrice. Il inclut également une fonction pour calculer la somme de deux matrices. Des exemples de code sont fournis pour illustrer chaque fonction.

Transféré par

fatimaidbalahcen31
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 DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
30 vues5 pages

TP4 Prog C

Le document présente un exercice de programmation en C sur la manipulation de matrices à l'aide de fonctions pour allouer, remplir, afficher et libérer une matrice. Il inclut également une fonction pour calculer la somme de deux matrices. Des exemples de code sont fournis pour illustrer chaque fonction.

Transféré par

fatimaidbalahcen31
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 DOCX, PDF, TXT ou lisez en ligne sur Scribd

UNIVERSITE IBN ZOHR – AGADIR Année Universitaire : 2024-

2025
Ecole Nationale des Sciences Appliquées Filière : AP 2
Prof. Abenaou A.

TP N4
Programmation C

Exercice
Ecrire un programme qui permet de manipuler les matrices (tableau
bidimensionnel). Le programme doit contenir les fonctions suivantes :

Manipulation 1
-allouerMatrice(int nl, int nc): pour allouer dynamiquement un
tableau 2D en utilisant un pointeur double (int**).
-remplirMatrice(int** matrice, int nl, int nc): pour lire
les valeurs à partir du clavier.
-afficherMatrice(int** matrice, int nl, int nc): pour
afficher la matrice sous forme de tableau.
-libererMatrice(int** matrice, int nl): pour libère la mémoire
allouée.

Manipulation 2

Exploiter les fonctions élaborées dans la manipulation 1 pour créer un


programme contenant une nouvelle fonction somMatrice(int**
matrice1, int** matrice2, nl, int nc) qui permet de calculer la
somme de deux matrices.
Corrigé
// Manipulation 1

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

// Fonction pour allouer dynamiquement une matrice de taille nl x nc


int** allouerMatrice(int nl, int nc) {
int** matrice = (int**)malloc(nl * sizeof(int*));
if (matrice == NULL) {
printf("Erreur d'allocation !\n");
exit(EXIT_FAILURE);
}
for (int i = 0; i <nl; i++) {
matrice[i] = (int*)malloc(nc * sizeof(int));
// *(matrice+i)= (int*)malloc(nc * sizeof(int));
if (matrice[i] == NULL) {
printf("Erreur d'allocation !\n");
exit(EXIT_FAILURE);
}
}
return matrice;
}

// Fonction pour la lecture des valeurs à partir du clavier


void remplirMatrice(int** matrice, int nl, int nc) {
for (int i = 0; i < nl; i++) {
for (int j = 0; j < nc; j++) {
printf("matrice[%d][%d]=",i,j);
scanf("%d",*(matrice+i)+j);
// scanf("%d",matrice[i]+j);
}
}
}

// Fonction pour afficher la matrice


void afficherMatrice(int** matrice, int nl, int nc) {
for (int i = 0; i < nl; i++) {
for (int j = 0; j < nc; j++) {
printf("matrice[%d][%d]=%d ",i,j,*(*(matrice+i)+j));
// printf("matrice[%d][%d]=%d ",i,j,matrice[i][j]);
}
printf("\n");
}
}

// Fonction pour libérer la mémoire allouée


void libererMatrice(int** matrice, int nl) {
for (int i = 0; i < nl; i++) {
free(matrice[i]);
}
free(matrice);
}

int main() {
int ligne, colonne;
printf("Entrez le nombre de lignes : ");
scanf("%d", &ligne);
printf("Entrez le nombre de colonnes : ");
scanf("%d", &colonne);

// Allocation dynamique
int** matrice = allouerMatrice(ligne, colonne);

// Lecture des valeurs et affichage de la matrice


remplirMatrice(matrice, ligne, colonne);
printf("\nMatrice générée :\n");
afficherMatrice(matrice, ligne, colonne);

// Libération de la mémoire
libererMatrice(matrice, ligne);
return 0;
}

// Manipulation 2
#include <stdio.h>
#include <stdlib.h>

// Fonction pour allouer dynamiquement une matrice de taille nl x nc


int** allouerMatrice(int nl, int nc) {
int** matrice = (int**)malloc(nl * sizeof(int*));
if (matrice == NULL) {
printf("Erreur d'allocation !\n");
exit(EXIT_FAILURE);
}
for (int i = 0; i <nl; i++) {
matrice[i] = (int*)malloc(nc * sizeof(int));
// *(matrice+i)= (int*)malloc(nc * sizeof(int));
if (matrice[i] == NULL) {
printf("Erreur d'allocation !\n");
exit(EXIT_FAILURE);
}
}
return matrice;
}

// Fonction pour la lecture des valeurs à partir du clavier


void remplirMatrice(int** matrice, int nl, int nc) {
for (int i = 0; i < nl; i++) {
for (int j = 0; j < nc; j++) {
printf("matrice[%d][%d]=",i,j);
scanf("%d",*(matrice+i)+j);
// scanf("%d",matrice[i]+j);
}
}
}

// Fonction pour afficher la matrice


void afficherMatrice(int** matrice, int nl, int nc) {
for (int i = 0; i < nl; i++) {
for (int j = 0; j < nc; j++) {
printf("matrice[%d][%d]=%d ",i,j,*(*(matrice+i)+j));
// printf("matrice[%d][%d]=%d ",i,j,matrice[i][j]);
}
printf("\n");
}
}

int ** somMatrice(int** matrice1, int** matrice2, int nl, int nc) {

int i,j;
int **matrice3 = allouerMatrice(nl,nc);
for(i=0;i<nl;i++)
for(j=0;j<nc;j++)
*(*(matrice3+i)+j)=*(*(matrice1+i)+j)+*(*(matrice2+i)+j);

return matrice3;
}
// Fonction pour libérer la mémoire allouée
void libererMatrice(int** matrice, int nl) {
for (int i = 0; i < nl; i++) {
free(matrice[i]);
}
free(matrice);
}

int main() {
int ligne, colonne;
printf("Entrez le nombre de lignes : ");
scanf("%d", &ligne);
printf("Entrez le nombre de colonnes : ");
scanf("%d", &colonne);

// Allocation dynamique
int** matrice1 = allouerMatrice(ligne, colonne);
int** matrice2 = allouerMatrice(ligne, colonne);
int** matrice3;
// Lecture des matrices
printf("\n Remplir la matrice 1\n");
remplirMatrice(matrice1, ligne, colonne);
printf("\n Remplir la matrice 2\n");
remplirMatrice(matrice2, ligne, colonne);
printf("\n Calcul de la somme des matrices :\n");
matrice3=somMatrice(matrice1,matrice2,ligne,colonne);
printf("\n Affichage du résultat :\n");
afficherMatrice(matrice3, ligne, colonne);
// Libération de la mémoire
libererMatrice(matrice1, ligne);
libererMatrice(matrice2, ligne);
libererMatrice(matrice3, ligne);
return 0;
}

Vous aimerez peut-être aussi