IUT R&T - 1ère année - Informatique
Programmation et algorithmique 2


TD n°5 - Allocation dynamique

EXERCICE 1

1.1. Ecrire un algorithme SeriesCroissantes qui affiche les séries croissantes trouvées dans une suite d'entiers T, selon le modèle donné par l'exemple ci-dessous.
Suite T : (4, 5, 34, 11, 16, 12, -17, -3, 0, 25)
Series croissantes de T :
  serie 1 : (4, 5, 34).
  serie 2 : (11, 16)
  serie 3 : (12)
  serie 4 : (-17, -3, 0, 25)


1.2. Ecrire en C la fonction correspondante, qui retournera le nombre de séries affichées.

1.3. Compléter cette fonction par un programme qui :
– demande à l'utilisateur une taille n de tableau,
– crée dynamiquement (avec malloc) un tableau T de n entiers,
– utilise une fonction saisir pour remplir le tableau alloué avec n valeurs saisies par l'utilisateur. Cette fonction saisir retournera 0 s'il n'y a pas eu de problème et −1 sinon,
– affiche les séries croissantes de T,
– libère l'espace mémoire alloué à T et termine.
N.B. Le programme devrait fonctionner dans toutes les situations...

EXERCICE 2

Dans cet exercice, on n'utilisera pas les fonctions fournies par la bibliothèque string.h. Chaque fonction C sera précédée d'un commentaire contenant sa description algorithmique.

2.1. Ecrire en C une fonction Separe qui sépare les caractères d'une chaine S, en plaçant les caractères de positions impaires dans une chaine Simpair et les caractères de positions paires dans une chaine Spair. Spair et Simpair seront créées par allocation dynamique (leurs tailles sont fonctions de celle de S...).
Exemple :
  S : "Les gaulois vont partir en vacances"
  Simpair : "Lsguosvn atre aacs"
  Spair : "e ali otpri nvcne"

2.2. Ecrire le programme principal permettant de tester cette fonction de découpage à partir d'une chaine définie en début de programme.

EXERCICE 3 (à faire hors TD)
On veut améliorer la solution de l'exercice 1 en conservant les séries obtenues pour une suite T de taille n.

3.1. Créer pour cela un tableau S[n][n] à deux dimensions, où chaque S[i][j] correspondra (s'il existe) au (j+1)-ième élément de la série (i+1).
Dans l'exemple donné, S[0][2]=34, S[3][3]=0, S[4] n'existe pas ni S[0][3].
Modifier le programme pour qu'il construise un tel tableau, en conservant les indices des limites utiles.

3.2. Ce tableau S est maintenant construit dynamiquement en ne créant que le nombre utile de cases.
N.B. Question plus difficile.