• Aucun résultat trouvé

Licence Informatique 1ère année Algorithmique et Programmation Examen – 01/07/2020 - 2h00

N/A
N/A
Protected

Academic year: 2021

Partager "Licence Informatique 1ère année Algorithmique et Programmation Examen – 01/07/2020 - 2h00"

Copied!
3
0
0

Texte intégral

(1)

Licence Informatique 1ère année

Algorithmique et Programmation Examen – 01/07/2020 - 2h00

Les notes de cours, TD et TP sont (forcément) autorisées.

Exercice 1 (8 points) : le gouvernement veut développer une application pour smartphone permettant aux utilisateurs de savoir si les personnes autour d'elles sont infectées par un virus. Chaque utilisateur est représenté dans le programme par un pseudonyme, une position (deux réels, latitude et longitude) et le fait qu'il soit infecté ou pas.

a- Écrire la déclaration d'un enregistrement pour représenter les utilisateurs dans le logiciel. (1 point) b- Écrire une fonction qui prend en paramètre le tableau des utilisateurs et une position et renvoie vrai si un utilisateur infecté se trouve à moins de 10m de la position. On suppose qu'il existe une fonction avec retour réel dist(réel lat1, réel lon1, réel lat2, réel lon2) qui renvoie la distance, en mètres, entre les positions {lat1,lon1} et {lat2,lon2}. (3,5 points)

c- Écrire une fonction qui prend en paramètre le tableau des utilisateurs et renvoie le nombre d'utilisateurs situés entre les latitudes d'Amiens 49.9°, et de Creil 49.25°. (3,5 points)

Exercice 2 (12 points) : on veut gérer un dictionnaire sous forme de tableau. On suppose qu'il existe un tableau DICO de chaines de caractères rempli avec tous les mots du dictionnaire, et trié dans l'ordre lexicographique (l'ordre alphabétique). On veut effectuer une recherche de mot par index, en utilisant un tableau de 26 cases, qui, pour chaque caractère de l'alphabet, donne l'indice du premier mot commençant par ce caractère dans DICO. Par exemple, le tableau d'index suivant indique que les mots situés entre les indices 0 et 11 commencent par 'a', ceux entre 12 et 14 commencent par 'b', ceux entre 15 et 22 commencent par 'c, et ainsi de suite.

0 12 15 23 .. .. .. ..

On suppose que ce tableau INDEX existe et est déjà rempli. On suppose aussi que les deux fonctions suivantes existent :

- fonction avec retour caractère prem(chaine c) // renvoie le premier caractère de c

- fonction avec retour caractère suivant(caractère c) // renvoie le caractère qui suit c dans l'alphabet (et NULL si c='z').

2.1 Écrire un programme qui, à partir d'un mot lu au clavier, affiche "TROUVÉ" s'il est dans le dictionnaire et "NON TROUVÉ" sinon. Il faut obligatoirement utiliser le tableau INDEX pour déterminer les indices entre lesquels on va chercher le mot dans le tableau DICO. (5 points)

2.2 Indiquez quel est le paramètre de complexité du programme, quel est le cas au pire s'il existe et calculez la complexité du programme, dans le cas au pire s'il existe, dans le cas général sinon. (5 points)

2.3 Expliquez comment on pourrait améliorer la recherche de mots dans le tableau DICO en diminuant le temps de calcul. (2 points)

(2)

CO RR

EC TIO N

Exercice 1

enregistrement Utilisateur chaine pseudo;

réel lat, lon;

booléen infecté;

finenregistrement

fonction avec retour booléen pasLoin(Utilisateur t[], réel la, réel lo, entier taille)

entier i, n;

booléen b;

début

b <- faux;

i <- 0;

tantque (i<taille ET non b) faire

si (t[i].infecté ET dist(la,lo,t[i].lat,t[i].lon)<=10) alors b <- vrai;

sinon

i <- i+1;

finsi fintantque retourne b;

fin

fonction avec retour entier entre(Utilisateur t[], entier taille) entier i,n;

début

n <- 0;

pour (i allant de 0 à taille-1 pas de 1) faire si (t[i].lat<=49.9 ET t[i].lat>=49.25) alors

n <- n+1;

finsi finpour retourne n;

fin

Exercice 2

// on suppose que les opérations arithmétiques s'appliquent aux caractères programme dico

entier i,j,k;

chaine mot;

booléen trouve;

début

écrire "saisissez le mot";

lire mot;

i <- INDEX[prem(mot)-'a']

si (prem(mot)='z') alors j <- DICO.longueur-1;

sinon

j <- INDEX[prem(mot)-'a'+1];

finsi

trouve <- faux;

k <- i;

tantque (k<j ET non b) faire si (DICO[k]=mot) alors trouve <- vrai;

sinon

k <- k+1;

finsi fintantque

si (trouve) alors

(3)

CO RR

EC TIO N

écrire "TROUVÉ";

sinon

écrire "NON TROUVÉ"

finsi fin

Le paramètre de complexité est le nombre de mots commençant par le même caractère que le mot à trouver. Le cas au pire est quand le mot n'est pas dans le DICO. Dans ce cas, trouver les indices i et j se fait en temps constant, et la recherche dans DICO se fait en temps linéaire, donc au final, le programme s'exécute en temps linéaire.

On pourrait aller plus vite en faisant une recherche dichotomique, soit dans tout le tableau DICO, soit juste dans la section du tableau qui contient les mots commençant par le même caractère que le mot à trouver. Dans ce cas, la complexité serait logarithmique.

Références

Documents relatifs

- si l'objet qui a appelé la méthode iterator() n'est pas une instance de TelecomCompany, l'itérateur ne parcourt que les contacts qui ne sont pas sur liste rouge.. Écrire des

Toutes les personnes qu'on veut afficher, en plus d'être des Displayable doivent avoir une direction et une vitesse. De plus, les personnes s'affichent sous forme d'un rond complété

Par exemple, pour trouver un entier dans un arbre, on devra faire un parcours exhaustif dans le cas d'un arbre général, alors qu'un parcours dichotomique suffira pour un arbre

On peut par exemple considérer que la vitesse d'un bateau est celle du courant local, plus un pourcentage de celle du vent selon l'angle entre le cap du bateau et la direction du

En outre, les acronymes doivent avoir une méthode String getSigle() qui renvoie la chaine de caractères constituée par les premières lettres de chacun des mots (NB : la méthode

Proposez une stratégie gloutonne pour rendre la monnaie dans ce système monétaire en essayant de limiter le nombre de pièces utilisées.. On suppose que le nombre de pièces

L’objectif du cours est triple : (1) program- mer en java, (2) maˆıtriser les bases de l’algorithmique sur des structures dynamiques (listes, arbres) et (3) introduire quelques

(prendre rendez-vous avec madame Janick si