Programmation impérative : TP 4


Piles

  1. Proposez une fonction d'affichage d'une pile d'int (base à droite, largeur constante) et les fonctions sur les piles mentionnées en cours :
  2. Vous devez utiliser ces fonctions dans la suite pour toute manipulation des piles.
  3. Proposez une fonction qui duplique l'élément à son sommet (on trouve donc ensuite cet élément au sommet et à l'étage juste en dessous ; la pile a gagné un élément).
  4. On souhaite écrire une fonction qui calcule la factorielle d'un int à l'aide d'une pile.
    1. Proposez une fonction qui empile son sommet puis celui-ci moins 1 .
      Par exemple si une pile contient k éléments et que son sommet est n, au sortir de la fonction la pile aura k+1 éléments, son sommet sera n-1 et l'étage en dessous du sommet contiendra n.
    2. Proposez une fonction qui retourne le produit de tous les éléments d'une pile (éléments de type int) passée en paramètre.
    3. Proposez une fonction qui retourne la factorielle d'un int à l'aide (entre autre) des deux fonctions précédentes. Vous afficherez la pile à chaque étape.
  5. On souhaite écrire une fonction qui calcule la factorielle d'un int à l'aide d'une pile mais de manière un peu différente.
    1. Proposez une fonction qui a pour effet d'empiler le produit des deux premiers éléments accessibles d'une pile (éléments de type int) puis l'ancien sommet moins 1.
      Par exemple si une pile contient k éléments, que son sommet est n et l'étage en dessous du sommet m, au sortir de la fonction la pile aura k éléments, son sommet sera n-1 et l'étage en dessous du sommet contiendra n*m.
    2. Proposez une fonction qui retourne la factorielle d'un int à l'aide (entre autre) de la fonction précédente. Vous afficherez la pile à chaque étape.
  6. Quelle différence constatez-vous entre ces deux méthodes ?

Allocations

Vous avez besoin dans la suite de la bibliothèque stdlib.h.

N'hésitez pas à utiliser scanf dans main pour faciliter l'entrée de vos tableaux et valeurs. Un bon exercice consiste à demander à l'utilisateur une taille de tableau puis autant de valeurs à entrer dans les cases qu'il est nécessaire. Ce n'est toutefois pas nécéssaire pour la suite dans un premier temps.

  1. Proposez une fonction qui sur la donnée de deux double, et seulement deux, retourne un pointeur sur un double de la valeur maximale des deux paramètres.
  2. Proposez une fonction qui sur la donnée de deux tableaux ta, tb de même taille size (donc trois paramètres) retourne un pointeur sur leur vecteur de différences.
  3. On souhaite obtenir un tableau trié contenant les mêmes valeurs qu'un tableau t passé en paramètre sans modifier ce dernier. Proposez une fonction qui retourne un pointeur sur un tel tableau trié.
  4. Proposez une fonction qui retourne un pointeur sur un tableau trié des éléments en commun dans deux tableaux ta et tb de tailles respectives sa et sb.