UFR SMBH, Licence 3 Sciences du Vivant 25 novembre 2016
Examen dinformatique
Seuls documents autorisés : 2 feuilles A4 recto verso manuscrites.
Durée : 2 heures
Question 1 (2 points)
Écrire un algorithme abstrait qui compte combien de fois apparaît le nombre 38 dans un tableau
d’entiers t, et met le résultat dans une variable n. Implémenter cet algorithme en Perl.
Solution:
Algorithme abstrait :
n0
pour tout ide tfaire
si iest égal à 38 alors
nn+1
fin si
fin pour
Traduction en Perl :
$n = 0;
foreach my $i (@t){
if ($i == 38){
$n=$n+1;
}
}
Barême:
algo abstrait : boucle=.5, compteur=.5 implementation : 1
Question 2 (2 points)
On a placé des nombres dans un fichier f(un nombre par
ligne), comme dans l’exemple ci-contre.
Écrire un algorithme abstrait qui lit le fichier fet écrit dans un
fichier gles mêmes nombres, un par ligne, mais divisés par 2.
Implémenter l’algorithme en Perl.
exemple de fichier f
4
3.5
189
fichier g
2
1.75
94.5
Solution:
Algorithme abstrait :
ouvrir une communication F pour lire le fichier f
ouvrir une communication G pour ecrire dans le fichier g
pour tout nde ffaire
enlever les caracteres blancs de n
ecrire n/2 en utilisant G
ecrire un retour chariot en utilisant G
fin pour
fermer la communication F
fermer la communication G
Traduction en Perl :
open(F,’<’,"f");
open(G,’>>’,"g");
while (my $n = <F>){
chomp $n;
print G ($n/2)."\n";
}
close F;
close G;
Barême:
algorithme :lecture ligne a ligne=0.5,ecriture=0.5, implementation :1
Question 3 (2 points)
Écrire l’algorithme abstrait d’une fonction nb_de_fois qui compte dans un tableau combien de fois
apparaît chacun de ses éléments, et renvoie le résultat sous forme d’un tableau associatif. Par exemple,
l’appel nb_de_fois(4,’c’,7,4) renverra le tableau associatif (4 => 2, 7 => 1, ’c’ => 1) car le nombre
4 apparaît 2 fois, et le nombre 7 et le caractère capparaissent 1 fois. Implémenter cet algorithme en Perl.
Solution:
Algorithme abstrait :
fonction nb_de_fois(t: Tableau) :Entier
Tableau associatif hTableau vide
pour tout ede tfaire
si hcontient la clé ealors
ajouter 1 à la valeur associée dans hà la clé e
else
associer la valeur 1 dans hà la clé e
fin si
fin pour
return h
fin
Traduction en Perl :
sub nb_de_fois {
my @t = @_;
my %res = ();
foreach my $e (@t) {
if ($res{$e}){
$res{$e}+=1;
}
else {
$res{$e}=1;
}
}
return %res;
}
Barême:
algo abstrait : boucle=.5, conditionnelle=.5 implementation : boucle=.5, conditionnelle=.5
Question 4 (2 points)
Écrire une fonction decouper_en_codons qui découpe une séquence de nucléotides en codons (suites de
trois lettres A,C,T, ou G). Cette fonction prend comme argument une chaîne de caractères (représentant la
séquence de nucléotides) et renvoie un tableau de chaînes de caractères de trois caractères (les codons).
Solution:
sub decouper_en_codons {
my $s = $_[0];
my @t = ($s =~ m/[ATCG]{3}/g); # ou simplement m/.../g
Page 2
return @t;
}
Barême:
fonction qui renvoie un tableau :1, m : 1
Question 5 (1 point)
À l’aide des fonctions précédentes, écrire une fonction compte_codons qui donne la fréquence d’appa-
rition des diérents codons présents dans une séquence. Cette fonction renvoie un tableau associatif
dans lequel est associé à chaque codon présent dans la séquence le nombre de fois où il apparaît.
Solution:
sub compte_codons {
my $s = $_[0];
return nb_de_fois(decouper_en_codons($s))
}
Barême:
fonction+arguments :0.5,appels de fonction :0.5
Question 6 (2 points)
La séquence de reconnaîssance de l’enzyme de restriction HpyF10VI est constituée d’un G, suivi d’un
C, suivi de 7 nucléotides (n’importe lesquels), suivi d’un G et d’un C. Combien de mots comporte ce
langage ? Donner un exemple de mot de ce langage. Donner l’expression régulière correspondante.
Solution:
Ce langage comporte 47=16 384 mots. L ={GCAGGGGCCGC,GCAAGTGCCGC, . . . }
regex =GC[ACTG]{7}GC
Barême:
langage : exemple =.5, nb mots=.5, regex :1
Question 7 (2 points)
L’enzyme HpyF10VI découpe la séquence d’ADN après la septième lettre du site de reconnaissance.
Écrire une fonction decoupe qui prend comme argument une séquence d’ADN et qui renvoie la séquence
découpée sous forme d’un tableau de deux éléments. Par exemple, l’instruction
my @t = decoupe("TTCDAAGGCAGGGGCCGCA");
doit placer dans le tableau tdeux éléments : "TTCDAAGGCAGGGG" et "CCGCA".
Solution:
sub decoupe {
my @t = ();
if ($_[0] =~ m/(.*GC[ACTG]{5})([ACTG]{2}GC.*)/){
@t = ($1,$2);
}
return @t;
}
Barême:
m :.5,parentheses :.5,retour tableau :1
Question 8 (3 points)
Page 3
On a placé dans les fichiers C.pm et test.pl les instructions
ci-contre. Les fichiers sont dans le même répertoire.
Que se passe-t-il lorsque test.pl est exécuté ? Pourquoi ?
Qu’est-ce qui est aché si on enlève l’instruction use strict ?
Pourquoi ? Modifier le fichier test.pl pour que soit aché le
contenu de la variable adéclarée dans le fichier C.pm.
fichier C.pm
package C;
our $a = 3;
1;
fichier test.pl
use C;
use strict;
print $a;
Solution:
Lorsque test.pl est exécuté, une erreur est levée, car la présence du pragma use strict force à
qualifier toutes les variables par leur espace de nom.
Si on enlève use strict, rien n’est aché car la ligne print $a demande l’achage du contenu de la
variable scalaire adu paquetage par défaut (main), et cette variable n’a pas été définie (valeur undef).
Pour acher le contenu de la variable adéclarée dans le fichier C.pm, il faut exécuter l’instruction
print $C::a ;
Barême:
1 pt par question
Page 4
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !