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


TD n°2 – Tableaux (suite), Types élaborés

EXERCICE 1

1.1. Ecrire un algorithme Somme qui calcule la somme des éléments d'un tableau de réels à deux dimensions p et q.
1.2. Ecrire en C une fonction qui implémente cet algorithme.
1.3. Ecrire en C une fonction Moyenne qui calcule la moyenne d'un tableau de réels à deux dimensions p et q.
1.4. Ecrire un algorithme qui remplace dans un Tableau d'entiers naturels à deux dimensions toutes les valeurs inférieures à la moyenne par des 0.

EXERCICE 2

On donne l'algorithme suivant :
Algorithme DiaSomme
Donnée : un tableau T à deux dimensions p et q.
Résultat : la valeur k...
k← 0;
Pour i de 1 à p faire
  Pour j de 1 à q faire
    Si i=j alors k← k+T[i,j].
 
2.1. A quoi correspond la valeur k ? En quoi cet algorithme diffère-t-il de celui de l'exercice précédent ?
2.2. Ecrire en conséquence un autre algorithme donnant comme DiaSomme, mais plus simplement et rapidement, la valeur k.

EXERCICE 3

On veut programmer en C la gestion de l'adressage IP-V4.

3.1. Définir un type énuméré ClasseIP qui définit les différentes classes d'adresse IP : A, B, C, autre.
3.2. Définir un type structuré AdresseIP correspondant à une adresse IP, un objet de ce type contiendra un champ A pour les quatres octets de l'adresse IP et un champ K pour la classe de cette adresse.
3.3. Définir une fonction donnerClasseIP qui retourne la classe d'une adresse IP.
3.4. Définir une fonction saisirIP qui retourne une adresse IP saisie par l'utilisateur. Cette fonction devra s'assurer que les quatre valeurs saisies sont bien dans l'intervalle entier [0..255]. (Que faire quand une saisie est incorrecte ?) La classe de cette l'adresse IP saisie sera calculée par la fonction donnerClasseIP.
3.5. A faire hors TD : Ecrire un algorithme puis une fonction C correspondante masquageIP qui, à partir d'une adresse IP et d'un masque de sous-réseaux passés en paramètre, retourne le résultat du masquage. Utiliser cette fonction pour déterminer la partie sous-réseau et la partie machine de l'adresse IP lue.
N.B. cf les opérateurs sur les bits.
3.6. A faire hors TD : Ecrire un programme qui propose un menu pour gérer l'adressage IP...

EXERCICE 4

4.1. Définir un type structuré Date composé d'un jour, d'un mois et d'une année.
4.2. Ecrire une fonction estBissextile qui indique si l'année d'une Date donnée est bissextile.
N.B. déjà vu ?
4.3. Ecrire une fonction qui vérifie si les valeurs d'une date sont valides : jour entre 1 et 28 à 31 selon les mois et les années, mois entre 1 et 12.
4.4. Ecrire une fonction quantieme qui indique le numéro d'ordre d'un jour dans l'année (en tenant compte des années bissextiles).
4.5. On voudrait ajouter au type Date un champ indiquant le jour de la semaine correspondant à cette date. Comment pourrait-on définir le type jourDeSemaine ? Modifier la définition du type date en conséquence.
4.6. Si on sait que le premier janvier 1700 était un vendredi, quelle(s) fonction(s) pourrait-on créer pour déterminer le jour de la semaine pour n'importe quelle date valide depuis 1700 ?

*EXERCICE 5   A faire hors TD

Pour cet exercice, chaque algorithme correspondant à une fonction de C (y compris main) sera noté en commentaire dans le code source avant la fonction.

On veut construire un programme en C pour le calcul de coefficients binomiaux avec le triangle de Pascal. Ce triangle sera représenté par un tableau à deux dimensions sur le modèle ci-dessous pour un degré n=8.
1
11
121
133 1
146 4 1
1510105 1
161520156 1
172135352171
 
5.1. On représente une ligne du triangle de Pascal par un tableau de taille n. Définir un type LignePascal correspondant. Comment gérera-t-on le fait que la fin du tableau n'est pas utilisée dans toutes les lignes ?
5.2. Ecrire une fonction AuSuivant qui :
– prend en paramètre une LignePascal LignePrecedente, représentant une ligne du tableau de Pascal.
– construit la ligne suivante LigneSuivante. Pour cette construction chaque élément de LigneSuivante est constitué de la somme des deux éléments de LignePrecedente d'indice immédiatement inférieur. On s'assurera que LigneSuivante contienne bien un 1 dans la première case et la dernière case utile, sur le modèle de l'exemple ci-dessus.
5.3. Définir un type TableauPascal comme un tableau à deux dimensions dont la taille maximale sera définie par une macro-instruction.
5.4. Ecrire une fonction ConstruireTableau qui utilise la fonction AuSuivant pour stocker dans un TableauPascal un triangle de Pascal.
5.5. Ecrire une procédure qui affiche un triangle de Pascal.
5.6. Ecrire un programme permettant de tester ces fonctionnalités.