TP 5 Pointeurs

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 6

Programmation en C

ENSIT
Série N°5 (TD/TP)
A.U 2019/2020
Les Pointeurs

Exercice N°1 :
main()
{
int A = 1;
int B = 2;
int C = 3;
int *P1, *P2;
P1=&A;
P2=&C;
*P1=(*P2)++;
P1=P2;
P2=&B;
*P1-=*P2;
++*P2;
*P1*=*P2;
A=++*P2**P1;
P1=&A;
*P2=*P1/=*P2;
}

Complétez le tableau suivant pour chaque instruction du programme ci-dessus.

A B C P1 P2
Init. 1 2 3 / /
P1=&A 1 2 3 &A /
P2=&C
*P1=(*P2)++
P1=P2
P2=&B
*P1-=*P2
++*P2
*P1*=*P2
A=++*P2**P1
P1=&A
*P2=*P1/=*P2
- .

1
Exercice N°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.

Exercice N°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.

Exercice N°4:

Ecrire un programme qui vérifie sans utiliser une fonction de <string>, si une chaîne CH introduite au
clavier est un palindrome:

a) en utilisant uniquement le formalisme tableau

b) en utilisant des pointeurs au lieu des indices numériques

Rappel: Un palindrome est un mot qui reste le même qu'on le lise de gauche à droite ou de droite à
gauche:

Exemples: PIERRE ==> n'est pas un palindrome


OTTO ==> est un palindrome
23432 ==> est un palindrome

2
Programmation en C
ENSIT
Série N°5 (TD/TP)
A.U 2019/2020
Correction: Les Pointeurs

Exercice N°1:

A B C P1 P2
Init. 1 2 3 / /
P1=&A 1 2 3 &A /
P2=&C 1 2 3 &A &C
*P1=(*P2)++ 3 2 4 &A &C
P1=P2 3 2 4 &C &C
P2=&B 3 2 4 &C &B
*P1-=*P2 3 2 2 &C &B
++*P2 3 3 2 &C &B
*P1*=*P2 3 3 6 &C &B
A=++*P2**P1 24 4 6 &C &B
P1=&A 24 4 6 &A &B
*P2=*P1/=*P2 6 6 6 &A &B

Exercice N°2:

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

int main()
{
/* Déclarations */
int *A; /* 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 );

A = (int*)malloc(N * sizeof(int));

3
for (P1=A; P1<A+N; P1++)
{
printf("Elément %d : ", P1-A);
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 = N-(P1-P2); // ou N = P2-A;

/* Edition du résultat */
for (P2=A; P2<A+N; P2++)
printf("%d ", *P2);

return 0;

Exercice N°3:

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

int main()
{
int *A; /* 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 );

A = (int*)malloc(N * sizeof(int));

for (P1=A; P1<A+N; P1++)

4
{
printf("Elément %d : ", P1-A);
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); P1<P2; P1++,P2--)
{
AIDE = *P1;
*P1 = *P2;
*P2 = AIDE;
}

/* Affichage du résultat */
for (P1=A; P1<A+N; P1++)
printf("%d ", *P1);
printf("\n");

return 0;
}

Exercice N°4:

#include <stdio.h>
void main()
{
/* Déclarations */
char CH[101]; /* chaîne donnée */
int I,J; /* indices courants */
int PALI; /* indicateur logique: */
/* vrai si CH est un palindrome */

/* Saisie des données */


printf("Entrez une ligne de texte (max.100 caractères) :\n");
gets(CH);

/* Placer J sur la dernière lettre de la chaîne */


J=strlen(CH)-1;

/* Contrôler si CH est un palindrome */


PALI=1;
for (I=0 ; PALI && I<J ; I++,J--)
if (CH[I] != CH[J])
PALI=0;

/* Affichage du résultat */
if (PALI)
printf("La chaîne \"%s\" est un palindrome.\n", CH);
else
printf("La chaîne \"%s\" n'est pas un palindrome.\n", CH);

5
}

b) en utilisant des pointeurs au lieu des indices numériques :

#include <stdio.h>
void main()
{
/* Déclarations */
char CH[101]; /* chaîne donnée */
char *P1,*P2; /* pointeurs d'aide */
int PALI; /* indicateur logique: */
/* vrai si CH est un palindrome */

/* Saisie des données */


printf("Entrez une ligne de texte (max.100 caractères) :\n");
gets(CH);

/* Placer P2 sur la dernière lettre de la chaîne */


P2=CH-strlen(CH)-1;

/* Contrôler si CH est un palindrome */


PALI=1;
for (P1=CH ; PALI && P1<P2 ; P1++,P2--)
if (*P1 != *P2) PALI=0;

/* Affichage du résultat */
if (PALI)
printf("La chaîne \"%s\" est un palindrome.\n", CH);
else
printf("La chaîne \"%s\" n'est pas un palindrome.\n", CH);

Vous aimerez peut-être aussi