Faculté des Sciences de Kénitra
Dépt. d’Informatique
Algorithmique et programmation en C++
TD N° 4 : Les pointeurs
Exercice 1
Ecrire un programme qui lit deux tableaux A et B et leurs dimensions N et M au clavier et qui
ajoute les éléments de B à la fin de A. Utiliser le formalisme pointeur à chaque fois que cela
est possible.
Solution :
#include <stdio.h>
main()
{
/* Déclarations */
int A[100], B[50]; /* tableaux */
int N, M; /* dimensions des tableaux */
int I; /* indice courant */
/* Saisie des données */
printf("Dimension du tableau A (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Elément %d : ", I);
scanf("%d", A+I);
}
printf("Dimension du tableau B (max.50)
(max : ");
scanf("%d", &M );
for (I=0; I<M; I++)
{
printf("Elément %d : ", I);
scanf("%d", B+I);
}
/* Affichage des tableaux */
printf("Tableau donné A :\n");
:
for (I=0; I<N; I++)
printf("%d ", *(A+I));
*(A+I)
printf("\n");
printf("Tableau
f("Tableau donné B :\n");
:
for (I=0; I<M; I++)
printf("%d ", *(B+I));
*(B+I)
printf("\n");
/* Copie de B à la fin de A */
for (I=0; I<M; I++)
*(A+N+I) = *(B+I);
/* Nouvelle dimension de A */
N += M;
/* Edition du résultat */
printf("Tableau résultat A :\n");
:
for (I=0; I<N; I++)
printf("%d ", *(A+I));
*(A+I)
printf("\n");
return 0;
}
Pr. Yassine Rhazali Algorithmique et programmation
Faculté des Sciences de Kénitra
Dépt. d’Informatique
Exercice 2
Ecrire un programme qui lit un entier X et un tableau A du type int au clavier et élimine toutes les
occurrences de X dans A en tassant les éléments restants. Le programme utilisera les pointeurs P1 et
P2 pour parcourir le tableau.
Solution :
#include <stdio.h>
main()
{
/* Déclarations */
int A[50]; /* tableau donné */
int N; /* dimension du tableau */
int X; /* valeur à éliminer */
int *P1, *P2; /* pointeurs d'aide */
/* Saisie des données */
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
for (P1=A; P1<A+N; P1++)
{
printf("Elément %d : ", P1-A);
P1
scanf("%d", P1);
}
printf("Introduire l'élément X à éliminer du tableau : ");
scanf("%d", &X );
/* Affichage du tableau */
for (P1=A; P1<A+N; P1++)
printf("%d ", *P1);
printf("\n");
/* Effacer toutes les occurrences de X et comprimer : */
/* Copier tous les éléments de P1 vers P2 et augmenter */
/* P2 pour tous les éléments différents de X. */
for (P1=P2=A; P1<A+N; P1++)
{
*P2 = *P1;
if (*P2 != X)
P2++;
}
/* Nouvelle dimension de A */
N = P2-A;
/* Edition du résultat */
for (P1=A; P1<A+N; P1++)
printf("%d ", *P1);
printf("\n");
return 0;
}
Exercice 3
Ecrire un programme qui range les éléments d'un tableau A du type int dans l'ordre inverse.
Le programme utilisera des pointeurs P1 et P2 et une variable numérique AIDE pour la
permutation des éléments.
Solution :
Pr. Yassine Rhazali Algorithmique et programmation
Faculté des Sciences de Kénitra
Dépt. d’Informatique
#include <stdio.h>
main()
{
/* Déclarations */
int A[50]; /* tableau donné */
int N; /* dimension du tableau */
int AIDE; /* pour la permutation */
int *P1, *P2; /* pointeurs d'aide */
/* Saisie des données */
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
for (P1=A; P1<A+N; P1++)
{
printf("Elément %d : ", P1-A);
P1
scanf("%d", P1);
}
/* Affichage du tableau */
for (P1=A; P1<A+N; P1++)
printf("%d ", *P1);
printf("\n");
/* Inverser le tableau */
for (P1=A,P2=A+(N-1);
1); P1<P2; P1++,P2--)
P1++,P2
{
AIDE = *P1;
*P1 = *P2;
*P2 = AIDE;
}
/* Edition du résultat */
for (P1=A; P1<A+N; P1++)
printf("%d ", *P1);
printf("\n");
return 0;
}
Exercice 4
Ecrire un programme qui lit deux tableaux d'entiers A et B et leurs dimensions N et M au
clavier et qui ajoute les éléments de B à la fin de A. Utiliser deux pointeurs PA et PB pour le
transfer et afficher le tableau résultant A.
Solution :
#include <stdio.h>
main()
{
/* Déclarations */
int A[100], B[50]; /* tableaux */
int N, M; /* dimensions des tableaux */
int *PA,*PB; /* pointeurs d'aide */
/* Saisie des données */
printf("Dimension du tableau A (max.50) : ");
scanf("%d", &N );
for (PA=A; PA<A+N; PA++)
{
printf("Elément %d : ", PA-A);
PA
scanf("%d", PA);
}
printf("Dimension du tableau B (max.50) : ");
scanf("%d", &M );
Pr. Yassine Rhazali Algorithmique et programmation
Faculté des Sciences de Kénitra
Dépt. d’Informatique
for (PB=B; PB<B+M; PB++)
{
printf("Elément %d : ", PB-B);
PB
scanf("%d", PB);
}
/* Affichage des tableaux */
printf("Tableau donné A :\n");
:
for (PA=A; PA<A+N; PA++)
printf("%d ", *PA);
printf("\n");
printf("Tableau donné B :\n");
:
for (PB=B; PB<B+M; PB++)
printf("%d ", *PB);
printf("\n");
/* Copier B à la fin de A */
for (PA=A+N,PB=B ; PB<B+M ; PA++,PB++)
*PA = *PB;
/* Nouvelle dimension de A */
N += M;
/* Edition du résultat */
printf("Tableau résultat A :\n");
:
for (PA=A; PA<A+N; PA++)
printf("%d ", *PA);
printf("\n");
return 0;
}
Pr. Yassine Rhazali Algorithmique et programmation