TD 5 corrige - Emilie Cravero

publicité
PROGRAMMATION EN LANGAGE C
L1
Année 2004 - 2005
Cahier de TD
PROGRAMMATION EN LANGAGE C
L1
Année 2004 - 2005
THEME 1 : VRAI/FAUX, DEFINITION DE STRUCTURES ......................................................... 1
VRAI/FAUX........................................................................................................................................... 1
CHOISISSEZ, POUR LES EXEMPLES SUIVANTS : ..................................................................................... 1
→'......................................................................................... 3
MANIPULATIONS DE BASE : LE '.' ET LA '→
THEME 2 : FONCTIONS ET STRUCTURES .................................................................................. 3
LES OPERATIONS DE ROUTINE : ............................................................................................................... 5
LES OPERATIONS DE TRANSFORMATION :................................................................................................ 5
THEME 3 : THEME DE SYNTHESE : UN PETIT CATALOGUE ASTRONOMIQUE............. 7
THEME 4 : THEME DE SYNTHESE : LES NOMBRES COMPLEXES ...................................... 9
THEME 5 : TABLEAUX DE STRUCTURES, BASES DE DONNEES .......................................... 9
Cahier de TD
PROGRAMMATION EN LANGAGE C
L1
Année 2004 - 2005
Thème 1 : Vrai/faux, définition de structures
VRAI/FAUX
•
Une structure est un type VRAI
•
Une structure est un type défini par l'utilisateur VRAI
•
Une structure a au moins un champ de type entier FAUX
•
Un champ est une structure FAUX
•
Un champ comporte des structures FAUX
•
Une structure comporte un ou des champs VRAI
•
Un champ est défini uniquement par son type FAUX
•
Un champ est défini uniquement par son nom FAUX
•
Un champ peut être de n'importe quel type VRAI
•
On ne peut pas définir de variable dont le type est une structure FAUX
•
L'accès à un champ d'une structure se fait par la syntaxe : '*' FAUX
•
On peut définir un pointeur sur une structure VRAI
choisissez, pour les exemples suivants :
les types et les noms des champs pour les objets listés, et écrivez la définition de la
structure associée (pas plus de 5/6 champs par structure) :
j'en profite pour donner la syntaxe de définition d'un type en algorithmique :
structure nom_du_type
{
type_champ1 nom_champ1;
…
type_champ_n nom_champ_n;
};
par convention typographique, le nom du type commence toujours par 't_'.
•
une adresse postale
structure t_adr_post
{
entier numéro;
caractere *nom_rue;
entier code_postal;
caractere ville[50];
}
Cahier de TD
1
PROGRAMMATION EN LANGAGE C
L1
Année 2004 - 2005
•
un CD musical
structure t_CD_audio
{
caractere titre[30];
entier nb_pistes;
caractere *auteur;
entier annee;
}
•
un client d'une banque
structure t_client
{
caractere *nom, *prenom;
adr_post adresse; // on reprend le type adr_post déjà défini
entier solde_compte;
entier possede_CB;
entier numero_compte;
}
•
un chien (cela peut paraître saugrenu au premier abord…utilité de ce type défini ?
par exemple, pour la gestion d'un cabinet vétérinaire ou de vente/achat de chiens
de race)
structure t_chien
{
caractere nom[20];
t_race race; // t_race peut être un type énuméré par exemple ou
un entier
entier age;
entier num_tatouage;
reel prix_estime;
}
•
une émission télévisée
structure t_emission
{
t_date date_diffus; // on peut définir un type date, toujours
utile
caractere *nom;
entier chaîne;
entier duree;
}
•
un joueur de football
structure t_joueur
{
caractere *nom;
entier nationalite;
entier age;
caractere *poste;
reel salaire;
}
•
une équipe de football
Cahier de TD
2
PROGRAMMATION EN LANGAGE C
L1
Année 2004 - 2005
structure t_f_team
{
caractere *ville;
caractere nom_club[30];
entier annee_creation;
t_joueur effectif[30];
entier classement;
}
Manipulations de base : le '.' et la '→'
Dans les exemples de programme suivants, indiquez quelles écritures sont correctes
syntaxiquement.
structure ordi
{
entier capa;
// capacité de la mémoire
entier freq;
// fréquence du proco
caractere marque[30]; // marque du PC et du processeur
entier hd; // capacité du disque dur
};
programme ordi_struct
ordi mon_pc;
entier hd;
//OK
//OK
afficher(mon_pc); // non, afficher() seulement pour types de base
ordi.capa ← 512; // non, ordi est un nom de type
mon_pc.marque ← "DELL AMD Athlon 2200+"; // NON car mon_pc.marque
// est une chaîne de caracteres, il faut utiliser la fonction copie
// (strcpy)
mon_pc.freq ← 1800; // OK
hd ← 120; //OK
mon_pc.hd ← hd; // OK
Thème 2 : Fonctions et structures
Les fonctions sont très souvent associées aux structures, pour la simple et bonne raison
qu'une structure ne se manipule pas comme une variable de type classique, et il faut donc
prévoir des fonctions pour toutes les opérations classiques que l'on doit réaliser. Nous avons
abordé en cours les nombres complexes, à titre d'exemple, nous allons continuer par un peu
d'algèbre linéaire et son application à un certain domaine de l'informatique qui est l'imagerie
de synthèse.
Cahier de TD
3
PROGRAMMATION EN LANGAGE C
L1
Année 2004 - 2005
L'imagerie de synthèse, utilisée aussi bien dans les trucages de films que dans les jeux
en 3D, est basée sur une représentation 3D d'objets simples (cubes, pyramides, polygones)
que l'on sait assez aisément manipuler. Nous allons donc nous intéresser à cette représentation
en définissant les types dont nous aurons besoin et en listant les fonctions qui peuvent nous
être utiles. Pour cela, nous définirons : des points en …4 dimensions et des matrices 4x4 !
4 dimensions ? Il s'agit juste d'une astuce utilisée pour accélérer quelques calculs.
Définition de points en 3D : un point est défini par ses 3 coordonnées dans l'espace x,y
et z, sa quatrième coordonnée vaut 1.
Ecrivez la définition du type correspondant.
Il y a deux possibilités, la deuxième sera plus intéressante pour les calculs futurs !
structure t_p3d
{
reel x,y,z;
reel ch; // ch : coordonnée homogène
}
ou
structure t_point3d
{
reel coords[4];
}
Une facette de type triangulaire est définie par ses 3 sommets qui sont des points
Ecrivez la définition du type correspondant.
structure t_facette
{
t_point3d sommets[3];
}
ou
structure t_facette
{
t_point3d som1, som2, som3;
}
Enfin, on définit les matrices de transformations (pour animer les objets ou créer les
images en 2D correspondantes) comme des matrices de réels 4x4.
Ecrivez la définition de type correspondant.
structure t_mat
{
reel valeurs[4][4];
}
ou
Cahier de TD
4
PROGRAMMATION EN LANGAGE C
L1
Année 2004 - 2005
structure t_mat
{
reel **valeurs;
}
Les opérations de routine :
Ecrivez les définitions des fonctions permettant de saisir et afficher un point, puis
saisir et afficher une facette. Que constatez-vous ?
On considère que les fonctions de saisie et d'affichage de matrices sont déjà écrites
(ouf).
Les opérations de transformation :
Translation : une translation en 3D est donnée par un vecteur de déplacement (Tx, Ty,
 1 0 0 Tx 


 0 1 0 Ty 
 0 0 1 Tz 



0 valeurs
0 1 Tx, Ty, et Tz et
Ecrire la définition d'une fonction à laquelle on donne les 0trois
Tz). La matrice 4x4 associée en synthèse d'images est :
qui donne la matrice associée
Rotation : une rotation d'angle θ autour de l'axe Ox est donnée par :
0
1

 0 cosθ
 0 sin θ

0
0

0
− sin θ
cosθ
0
0

0
0

1 
Ecrire la définition d'une fonction à laquelle on donne la valeur θ et qui donne la
matrice associée
Homothétie : une homothétie de facteur k par rapport à l'origine est donnée par :
k

0
0

0

0
k
0
0
0
0
k
0
0

0
0

1 
Ecrire la définition d'une fonction à laquelle on donne la valeur k et qui donne la
matrice associée.
Composition : pour effectuer la rotation autour d'un axe horizontal quelconque d'un
point P représenté par un vecteur à 4 coordonnées X, on doit lui appliquer : une translation (de
matrice T) , une rotation autour de l'axe Ox (de matrice R), puis la translation inverse (de
Cahier de TD
5
PROGRAMMATION EN LANGAGE C
L1
Année 2004 - 2005
matrice T'). on obtient le point Y donné par Y = T'.R.T.X (le . dénote la multiplication entre
matrices).
Ecrire les définitions d'une fonction faisant le produit de deux matrices 4x4, et d'une
fonction faisant la multiplication d'une matrice 4x4 par un vecteur à 4 coordonnées. En
réfléchissant un peu, vous pourrez n'écrire qu'une fonction.
Note : le fait que les matrices soient des matrices 4x4 permet de faire facilement ces
calculs.
Les opérations de rendu à l'écran : perspectives et projections
Enfin, pour effectuer le rendu d'un objet 3D (une facette par exemple), il faut effectuer
une projection de cet objet 3D sur la surface de l'écran, qui est une surface 2D. Pour cela, il
existe plusieurs techniques, parmi lesquelles la projection cavalière, qui ne tient pas compte
de la perspective, et la projection perspective.
Exemple de la projection cavalière :
xe
Oe
z
O
y
α
x
ye
Oe est l'origine pour l'écran : (0,0) en haut à gauche, xe et ye sont les coordonnées 2D
à l'écran, celles que vous manipulez par exemple avec gotoxy(). O est l'origine des axes pour
les objets 3D, x, y et z sont les axes de coordonnées pour les objets 3D. En admettant que le
point O sera situé au milieu de l'écran, et que la taille de l'écran est de 1024x768, quelles
seront les coordonnées, sur l'écran, résultant de la projection de ce point O ?
On cherche maintenant à calculer les coordonnées Xe et Ye à l'écran résultant de la
projection cavalière d'un point 3D de coordonnées X, Y et Z : Faire une projection cavalière
revient à faire une multiplication par une matrice…Ecrivez la définition d'une fonction qui
prend en entrée un angle α, et qui calcule la matrice de projection cavalière Pcav associée.
(pour procéder petit à petit, prenez le cas où seule la coordonnée X du point 3D n'est
pas nulle, puis faites de même avec Y et Z). Vous devriez trouver :
Pcav =  cos α

 sin α
Cahier de TD
− cos α
sin α
512 

− 1 384 
0
6
PROGRAMMATION EN LANGAGE C
L1
Année 2004 - 2005
Vous avez maintenant toutes les fonctions nécessaires pour démarrer un petit moteur
3D !
Thème 3 : Thème de synthèse : un petit catalogue astronomique
On cherche maintenant à créer une petite base de données contenant des informations
sur quelques étoiles de notre galaxie et sur le système solaire.
Nous allons dissocier deux types d'objets : les étoiles, qui a priori sont relativement
solitaires les unes par rapport aux autres, et qui n'ont pas d'interaction (ou si peu), et les
satellites, qui sont des objets dépendant d'un objet plus massif. Ainsi, la Terre est un satellite
du soleil, la lune est un satellite de la Terre, Mars est un satellite du soleil, et Phobos et
Deimos sont deux (et les deux seuls) satellites de Mars.
Pour les étoiles, on stockera : leur type spectral (parmi O, B, A, F ,G, K, M, Special),
leur masse (en nombre de masse solaires), leur diamètre (en nombre de diamètres solaires),
leur distance en soleil (en années lumière) et leur(s) satellite(s). Certaines de ces données
peuvent être inconnues, elles sont notées N/A (Not Available)
Pour les satellites, on stockera : leur nom, leur rayon (en nombre de rayon terrestre),
leur masse (en nombre de masse terrestre), leur distance (moyenne) à l'astre duquel il gravite
(en km); la durée du jour et la durée de l'année, (en nombre de jours terrestres et/ou en heures)
et leurs satellites éventuels…Certaines de ces données peuvent être inconnues
Cahier de TD
7
PROGRAMMATION EN LANGAGE C
L1
Année 2004 - 2005
Pour information : voici les informations concernant quelques planètes et satellites du
système solaire.
Nom
rayon
masse
distance
jour
année
Satellites
Mercure
0.38
0,055
57.9.106
58 j 16 h
88 j
0
Venus
0.95
0.815
108.2.106
243 j
225 j
0
Terre
1
1
150.106
1j
365 j
1
Mars
0.53
0.107
229.106
24 h 37 mn
1.88 an
2
Jupiter
11.21
317.9
779.4.106
9 h 55 mn
11.87 an
63
Saturne
9.45
95.2
1433.9.106 10 h 39 mn
29.48 an
31
Uranus
4.01
14.6
2877.2.106 15 h 35 mn
84.70 an
27
164.90 an
13
247.85 an
1
6
Neptune
3.96
17.2
4504.4.10
18 h 25 mn
Pluton
0.18
0.003
5872.3.106 153 h 16 mn
Quelques étoiles (dont un monstre…)
Nom
type
Masse
diamètre
Distance
Satellites
Betelgeuse
M
20
662
427
N/A
Rigel
B
17
62
733
N/A
Procyon
F
1.78
1.443
11.41
N/A
Cygnus X-1 A
B
25
20
7200
N/A
Cygnus X-1 B
Special
12
0.0000518
7200
N/A
Capella
G
3
10.8
42.2
N/A
Vega
A
3.07
3.151
25.30
N/A
Sol
G
1
1
0
9
Aldebaran
K
2.5
51.5
65.1
N/A
Définissez les types : étoiles et satellite
Ecrivez les fonctions suivantes :
Affichage des valeurs relatives à un satellite, en incluant le nom de ses propres
satellites
Affichage des valeurs relatives à une étoile, en incluant les valeurs relatives à ses
satellites
Cahier de TD
8
PROGRAMMATION EN LANGAGE C
L1
Année 2004 - 2005
Calcul de la densité d'une planète, calcul de la densité d'une étoile (prenez comme
exemple Sol et Cygnus X-1 B pour application numérique…) en kg/cm3
Données numériques :
Masse de la terre : 5,9.1024 kg
Diamètre de la terre : 12 700 km
Masse du soleil : 2.1030 kg
Diamètre du soleil : 1 390 000 km
Définissez un tableau stockant les informations sur toutes les étoiles disponibles : et
écrivez les fonctions suivantes : recherche par nom, par type spectral, affichage de tous les
satellites d'une étoile, saisie d'une nouvelle étoile et insertion dans le tableau : vous avez
programmé le début d'une base de données !
Cet exercice sera continué en TP.
Thème 4 : thème de synthèse : les nombres complexes
Nous allons écrire un module complet pour traiter la majorité des opérations sur les
nombres complexes
Fonctions : saisie
Somme, soustraction, multiplication, conjugaison, module, division
iθ
Ecriture sous forme ρ .e
Définir le type permettant de stocker un complexe sous cette forme, puis une fonction
permettant de convertir une forme dans une autre. Ecrire la fonction de division pour deux
complexes écrits sous forme ρ .eiθ
Ecrire une fonction de saisie pour un complexe sous cette forme, en faisant bien
attention à la validité des valeurs rentrées.
Ecrire une fonction calculant une racine n-ième d'un complexe.
Cet exercice sera continué en TP
Thème 5 : tableaux de structures, bases de données
Les bases de données sont des moyens de stocker de nombreuses informations qui sont
en relation les unes avec les autres. Pour créer une base de données, il est très souvent
nécessaire d'identifier les différents objets qui seront modélisés et stockés, pour éviter de
Cahier de TD
9
PROGRAMMATION EN LANGAGE C
L1
Année 2004 - 2005
stocker des informations de manière redondante. Nous allons simuler une petite base de
données cinématographique contenant des films.
Découpage et organisation des données :
Pour chaque film, il faudra stocker :
•
Son titre
•
Son année de sortie
•
Son réalisateur
•
Ses acteurs principaux (de 1 à 4)
•
Sa durée en minutes
•
Un ou plusieurs genres, parmi : Action, Horreur, Comédie, Documentaire, Policier,
Drame, Animation, Science-Fiction (un film a au maximum 2 genres)
Pour chaque réalisateur et chaque acteur, il faudra stocker :
•
Son nom
•
Son prénom
•
Sa date de naissance
•
Sa nationalité
Une telle base de données peut être interrogée ou traitée par ce que l'on appelle des
requêtes. Par exemple, on peut demander à afficher tous les éléments d'un film, à créer ou
supprimer un film, à modifier certaines informations.
Une opération classique consiste, par exemple, à établir toute la filmographie d'un
acteur ou d'un réalisateur. Pour cela, est-il nécessaire de stocker, pour chaque réalisateur ou
acteur, l'ensemble des films associés ?
De la même manière, un réalisateur ou acteur a souvent plusieurs films à son actif. Par
exemple, David Fincher (né le10 mai 1962 à Denver, aux USA) a réalise Fight Club, Seven et
The Game, entre autres. Est-il nécessaire, pour chacun des films cités, de stocker à chaque
fois ces informations sur le réalisateur ? Comment pourrait-on éviter de dupliquer ces
informations ?
Définissez les types : film, acteur, réalisateur.
Ecrivez les définitions de 3 tableaux : un comportant des films, un comportant les
réalisateurs, un comportant les acteurs.
Cahier de TD
10
PROGRAMMATION EN LANGAGE C
L1
Année 2004 - 2005
Ecrire les fonctions suivantes :
Affichage des informations relatives à un film
exemple de résultat demandé :
Fiche FILM
Fight Club (1999)
Réalisateur : David Fincher
Acteurs : Brad Pitt, Edward Norton, Helena Bonham Carter
Durée : 2h15
Genre : Action
Affichage d'un acteur ou réalisateur
Exemple de résultat demandé
Fiche REALISATEUR
Nom : David Fincher
Date de naissance : 10 mai 1962
Nationalité : américaine
Recherche d'un film par son nom, et affichage si le film existe
Liste des titres de film par genre
Exemple de résultat demandé :
Entrez le genre : Action
Résultats :
Fight Club (1999)
Matrix (1999)
Doberman (1996)
Filmographie d'un acteur ou réalisateur :
Exemple de résultat demandé :
Entrez le nom de l'acteur : Spacey
Résultats : Spacey (Kevin)
Seven (1995)
Usual Suspects (1994)
American Beauty (1999)
Minuit dans le jardin du bien et du mal (1997)
Terre Neuve (2001)
Cahier de TD
11
Téléchargement