Vous êtes sur la page 1sur 6

INF1005A

Examen final

Hiver 2010

QUESTION 1 (4.5 points) Virus informatique


Ayant t presque limin par votre puissant antivirus du TD4, le vers (virus) sest mut et propag
vers un serveur de base de donnes qui contient de multiples fichiers textes sur la comptabilit de
luniversit. Chacun de ces fichiers textes ne contenait originalement que des nombres. Cependant,
le virus est venu introduire dans les fichiers textes des phrases bidon qui dbutent toutes par un
caractre autre quun nombre. Les caractristiques des fichiers infects sont les suivantes :
les fichiers sont de type texte;
le nombre de lignes quils contiennent est inconnu;
chaque ligne dbute par un caractre (char) qui nest pas un espace;
le virus ne modifie pas les phrases dj prsentes dans le fichier original;
chaque ligne ajoute par le virus dbute par une lettre.
Exemple dun fichier infect :
Les 953 Rondeau marchaient le dos rond vitant les ronds deau.
1321 34567 1765524443 187
Je suis en place devant la banque murmura lhomme habill de noir.
989595898 9655444 9552
Marc-Andr fut le dernier arriv malgr quil ft parti le premier.
.
.
Exemple du fichier une fois nettoy :
1321 34567 1765524443 187
989595898 9655444 9552
.
.
Afin daider les administrateurs reconstituer les fichiers infects, on vous demande de crer la
fonction Nettoyer() en MATLAB qui reoit en paramtre un nom de fichier infect et qui y retire
toutes les lignes qui ne dbutent pas par un nombre. Vous devez donc analyser, ligne par ligne, le
contenu du fichier infect et, selon le contenu de la ligne, la garder ou la retirer du fichier.
Attention, une fois que le contenu du fichier infect est nettoy, vous ne devez pas crer un
nouveau fichier, mais plutt craser le fichier portant le nom pass en paramtre avec le contenu
dsinfect. Noubliez pas de fermer tous les fichiers qui ont t ouverts. En cas derreur lors de
louverture des fichiers, le programme doit sarrter par lutilisation de la fonction error() avec un
message appropri.
Rappels :
(1) char(48:57) donne '0123456789'
(2) str2num('abc') donne []
NB : Lutilisation de fclose('all') est interdite

Page 1 de 6

INF1005A

Examen final

QUESTION 2 (8 points) Vive les vacances !

Hiver 2010

Cest le temps des vacances dt et vous voulez faire une surprise votre tre cher en planifiant
un voyage en juillet. Pour vous aider, crez un programme MATLAB pour sauvegarder les
informations sur les diffrents forfaits disponibles dans un fichier binaire. Chaque forfait est
identifi par les informations suivantes :
la ville de destination,

la compagnie arienne,

le jour de dpart,

le jour de retour,

le prix par personne.

A) (1.5 pt) Dcrivez et expliquez comment vous sauvegarderez les informations dans un fichier
binaire (les donnes, le type de chaque donne, leur ordre, etc.). Votre fichier doit
avoir un format qui permet sa relecture. Vous devrez respecter ce format lors de
lcriture et de la lecture du fichier dans les questions B) et C).
B) (3 pts)

crivez la fonction ajouterDestination() qui reoit en paramtre le nom du fichier


binaire avec son extension (chane de caractres) et un nombre variable de forfaits.
Chaque forfait est un ensemble de cellules de taille 1x5 (une ligne et 5 colonnes) qui
contient les 5 informations dans lordre prsent ci-haut. Votre fonction doit dabord
vrifier que le nom du fichier ainsi quau moins 1 forfait soient prsents. Il doit
galement sassurer que chaque forfait reu en paramtre contienne le bon nombre
dinformations.
Ensuite, votre fonction doit crire cette information en format binaire dans le fichier
dont le nom a t reu en paramtre. De plus :
sil y a un problme avec le nombre de paramtres, votre fonction retourne -1,
sil y a un problme avec louverture du fichier binaire, cette fonction retourne -2,
autrement, si tout se droule correctement, cette fonction retourne 1.

Exemples dexcution :
Appel avec une destination

Page 2 de 6

INF1005A

Examen final

Hiver 2010

Appel avec deux destinations

NB : Lutilisation de fclose('all') est interdite


C) (3.5 pts) crivez une fonction analyseDestination() qui reoit en paramtre le nom dun
fichier binaire cr en B) et qui retourne aprs analyse la ville de destination la moins
chre ainsi que son prix parmi tous les forfaits dans le fichier. Votre fonction doit
vrifier que son appel a t effectu avec le bon nombre de paramtres.
Exemple dexcution :

NB : Lutilisation de fclose('all') est interdite

Page 3 de 6

INF1005A

Examen final

Hiver 2010

QUESTION 3 (4.5 points) Lancement dune fuse dans lespace


Poly-Nasa dsire envoyer dans lespace une fuse automatise (sans pilote) dans le but de
dcouvrir de nouvelles plantes lointaines. Une fuse est caractrise par sa force de propulsion FF
(en Newton) et sa masse MF (en kg). Pour quune fuse puisse dcoller, sa force de propulsion FF
doit tre suprieure la force gravitationnelle de la terre. Pour simplifier, nous supposons que la
force de propulsion de la fuse FF est constante jusqu latteinte de lexosphre. La force
gravitationnelle FG (en Newton) est donne par FG M F * g A o MF est la masse de la fuse en kg
et gA est lacclration gravitationnelle en m/s2. Plus la fuse gagne en altitude (sloigne de la
Terre), plus lacclration gravitationnelle diminue et par consquent la force gravitationnelle
diminue. Plus prcisment, lacclration gravitationnelle suit approximativement la loi suivante :

g A g 1 3.92 10 7 A

o A est laltitude en mtres de la fuse


g est lacclration gravitationnelle au niveau de la mer (9.8 m/s2)
gA est lacclration gravitationnelle A mtres daltitude
Pour permettre aux experts de Poly-Nasa de surveiller le lancement, la fuse envoie
priodiquement ( chaque instant t) des donnes vers la centrale qui seront ensuite traites et
affiches sous diffrents formats.
Afin de bien planifier le lancement, on vous demande de mettre en place un simulateur qui
recueille chaque instant t laltitude de la fuse et qui permettra de bien voir la trajectoire de la
fuse en temps rel jusqu latteinte de lexosphre (500 000 m daltitude). Le simulateur calcule,
chaque intervalle de temps t (constant), la distance parcourue par la fuse (d) durant cet
intervalle. Laltitude totale atteinte par la fuse (distance totale parcourue) est donc obtenue en
effectuant la somme de tous les d. La distance parcourue par une fuse durant un intervalle de
temps t est donne par la formule suivante :
d

1
FF FG t 2
2

O d est la distance (altitude) parcourue en mtres durant lintervalle t


FF est la force de propulsion de la fuse en Newton (constante)
FG est la force gravitationnelle de la Terre en Newton qui dpend de laltitude de la fuse
calcule lors du dernier chantillonnage
t est lintervalle de temps en seconde
A) (4 pts)

On vous demande de crer la fonction LancerFusee() qui utilise les fonctions de


temps de MATLAB dans le but de montrer la trajectoire de la fuse en temps rel.
Plus prcisment, la fonction reoit en paramtre lintervalle dchantillonnage en
secondes (t) ainsi que la force de propulsion (en Newton) et le poids (en kg) dune
fuse. chaque intervalle dchantillonnage (t), la fonction doit rafficher la
trajectoire de la fuse en traant un graphe de laltitude de la fuse (en mtres) en
fonction du temps en secondes qui sest coul depuis le lancement de la fuse. La
Page 4 de 6

INF1005A

Examen final

Hiver 2010

fonction raffiche la courbe tant que la fuse na pas atteint lexosphre


500 000 mtres daltitude. Par exemple, si lintervalle dchantillonnage est de
1 seconde, la fonction devra chaque seconde calculer laltitude de la fuse et
afficher la trajectoire de la fuse depuis son lancement.

Plus prcisment, la fonction doit respecter ce qui suit :


La fuse part du niveau de la mer (altitude 0 mtre) 0 seconde.
La fonction doit vrifier que lintervalle dchantillonnage ainsi que la force de
propulsion et la masse de la fuse soient prsents. Elle doit vrifier que la force de
propulsion de la fuse soit plus grande que la force gravitationnelle au niveau de la
mer (gA = 9.8 m/s2).
chaque instant t, la fonction doit enregistrer le temps qui sest coul en
secondes depuis le lancement de la fuse dans une matrice et laltitude courante de
la fuse (en mtre) dans une autre matrice pour ensuite tracer la trajectoire dans un
graphique. Par exemple, pour un intervalle dchantillonnage de 0.5s, nous aurons
une matrice temps = [0 0.5 1 1.5 2 2.5 ] et une matrice altitude qui donne
laltitude (distance totale parcourue) de la fuse au temps dfini par la matrice
temps, altitude = [0 10 45 100 300 900 ].
Lchantillonnage se termine lorsque la fuse a atteint lexosphre (500 000 m).
La courbe dans le graphique doit tre tirete, de couleur rouge et avec un marqueur
de symbole +. Ajoutez galement un titre au graphique et aux deux axes.
La fonction ne retourne rien.
Exemple du rsultat suite lappel de la fonction avec les paramtres :
Intervalle dchantillonnage (t) = 1 seconde
Force de propulsion de la fuse (FF) = 10 000 Newton
Masse de la fuse (MF) = 500 kg

Temps coul=1s

Temps coul=2s

Temps coul=8s

B) (0.5 pt) On vous demande ensuite dappeler la fonction crite en A) pour simuler le lancement
de la fuse Poly-Spout qui a une force de propulsion de 1421010 Newton et une
masse de 145000 kg. Utilisez un intervalle dchantillonnage de 0.5 seconde.

Page 5 de 6

INF1005A

Examen final

Hiver 2010

QUESTION 4 (3 points) La question 1 million de dollars


Votre ami vient dtre choisi par Poly-Loto pour participer la version qubcoise de Who wants
to be a millionnaire o le participant rpond une srie de 10 questions. Par manque de budget,
si le participant se trompe une seule question, il est limin et repart les mains vides. Votre ami a
su rpondre correctement aux 9 premires questions, mais voil quon lui demande la question
suivante :
Quel nombre parmi ceux-ci contient le plus de bit gal 1 dans la reprsentation donne dans
MATLAB:
1) single(12.25)

2) uint8(-121)

3) int16(-160)

Sachant que vous avez suivi le cours dINF1005A, votre ami utilise le tlphone pour vous
demander de lui donner la reprsentation binaire de chacun des trois nombres en respectant le bon
nombre de bits pour chacun des types. Afin de laider dans sa qute pour devenir millionnaire,
rpondez aux questions suivantes (attention, si vous vous trompez, vous pourriez le perdre comme
ami ) :
A) (0.75 pt) Pour chacun des 3 types ci-haut (single, uint8, int16), prcisez le format utilis par
MATLAB pour le reprsenter en mmoire (votre choix se limite nombre binaire non
sign, IEEE754 ou complment 2).
B) (0.75 pt) Pour chacun des 3 types ci-haut (single, uint8, int16), donnez le nombre de bits quil
occupe en mmoire.
C) (1.5 pt) Pour chacun des 3 nombres ci-haut, vrifiez que le nombre fait partie de lintervalle
admissible pour son type, et si oui, convertissez-le en binaire sous le format spcifi.

Passez un bel t!

Page 6 de 6

Vous aimerez peut-être aussi