• Aucun résultat trouvé

Licence Informatique 1ère année Algorithmique et Programmation Examen – 18/05/2020 - 1h30

N/A
N/A
Protected

Academic year: 2021

Partager "Licence Informatique 1ère année Algorithmique et Programmation Examen – 18/05/2020 - 1h30"

Copied!
3
0
0

Texte intégral

(1)

Licence Informatique 1ère année

Algorithmique et Programmation Examen – 18/05/2020 - 1h30

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

Exercice 1 (10 points) : les hôpitaux veulent un logiciel pour gérer les patients aux urgences. Chaque patient est décrit par son numéro de sécurité sociale (chaine de caractères), son âge, et un indice ESI (Emergency Severity Index) qui indique à quel point le cas du patient est urgent. L'ESI va de 1 (urgence absolue) à 5 (pas urgent).

a- Écrire la déclaration d'un enregistrement pour représenter les patients dans le logiciel. (1 point) b- Écrire un programme qui crée un tableau de 100 enregistrements représentant des patients, avec pour numéro de sécurité aléatoire "n1", "n2", ..., "n100", un âge aléatoire compris entre 0 et 120 et un ESI aléatoire entre 1 et 5. On suppose qu'il existe une fonction entier random(entier e) qui renvoie un entier entre 0 et e inclus. (2 points)

c- Écrire une fonction qui prend en paramètre un tableau de patients et un indice ESI (entier) et renvoie le numéro de sécurité sociale du patient le plus agé ayant cet indice. Si aucun patient n'a cet indice, la fonction renvoie une chaine vide. (3,5 points)

d- Le patient à traiter en priorité est, parmi ceux qui ont l'indice ESI le moins élevé, celui qui est le plus vieux. Écrire une fonction qui prend en paramètre un tableau de patients et renvoie le numéro de sécu du patient à traiter en priorité. (3,5 points)

Exercice 2 (10 points) : dans un autre logiciel, qui gère les sorties de l'hôpital, on a un tableau d'entiers représentant les motifs de sortie des patients, avec 3 valeurs possibles :

0 : le patient est mort, 1 : le patient a guéri avec des séquelles, 2 : le patient a guéri sans séquelle On veut trier le tableau d'entiers de la façon suivante : on commence par compter le nombre de 0, de 1 et de 2 dans le tableau. Puis on remplit le tableau avec autant de 0, puis de 1, puis de 2 qu'on en a trouvés en comptant. Par exemple, si le tableau est [0,2,1,1,2,0,1,2,0,2], on compte trois 0, trois 1 et quatre 2, et on remplit le tableau ainsi [0,0,0,1,1,1,2,2,2,2].

a- Écrire une fonction qui prend en paramètre un tableau d'entiers entre 0 et 2 et le tri par cette méthode. (5 points)

b- Donner le paramètre de complexité de la fonction. Indiquer quel est le cas au pire s'il existe.

Calculez la complexité de l'algorithme, dans le cas au pire s'il existe, dans le cas général sinon. Le calcul de la complexité doit être justifié, sinon il ne sera pas pris en compte. (4 points)

c- Si, au lieu d'avoir 3 valeurs possibles dans le tableau (0,1 et 2), on avait toutes les valeurs possibles entre 0 et un entier x donné, quelle serait la complexité ? (1 point)

(2)

CO RR

EC TIO N

Exercice 1

enregistrement Patient chaine secu;

entier age, ESI;

finenregistrement programme P

Patient t[100];

entier i;

début

pour (i allant de 0 à 99 pas de 1) faire t[i].secu <- "n"+i;

t[i].age <- random(120);

t[i].ESI <- 1+random(4);

fin pour fin

fonction avec retour chaine plusVieux(Patient t[], entier taille, entier esi) entier age, i, n;

début

age <- -1;

pour (i allant de 0 à taille-1 pas de 1) faire si (t[i].ESI=esi ET t[i].age>age) alors

n <- i;

age <- t[i].age;

finsi finpour

si (age=-1) retourne "";

sinon retourne t[n].secu;

fin

fonction avec retour chaine prioritaire(Patient t[], entier taille) entier i,esiMin;

début

esiMin <- 5;

pour (i allant de 0 à taille-1 pas de 1) faire si (t[i].ESI<esiMin) alors

esiMin <- t[i].ESI;

finsi finpour

retourne plusVieux(t,taille,esiMin);

fin

Exercice 2

fonction sans retour tri(entier t[], entier taille) entier i,j,k;

entier nb[3];

début

nb <- {0,0,0};

pour (i allant de 0 à taille-1 pas de 1) faire nb[t[i]] <- nb[t[i]]+1;

finpour k <- 0;

pour (i allant de 0 à 2 pas de 1) faire

pour (j allant de 0 à nb[i]-1 pas de 1) faire t[k] <- i;

k <- k+1;

finpour finpour

fin

(3)

CO RR

EC TIO N

Le paramètre de complexité est la taille du tableau. Il n'y a pas de cas au pire. La première boucle pour s'exécute en temps linéaire (O(n)). Au premier tour de la deuxième, on fera un nombre de tours de la boucle égal au nombre de 0, puis un nombre de tours de boucles égal au nombre de 1, puis au nombre de 2. Comme il n'y a que des 0, 1 et 2 dans le tableau, le nombre total de tours de boucles de la boucle interne sera égal à la taille du tableau. Ce tri est donc linéaire.

Ce raisonnement vaut si on augmente le nombre de valeurs possibles, donc ce tri est toujours linéaire.

Références

Documents relatifs

3.1 Compléter la classe Dessin1 qui représente une interface affichant des points (sous forme de petits cercles) de façon persistante (les points ne doivent pas disparaitre quand

- 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

Chaque mois, les citoyens ayant un revenu mensuel supérieur à 850 euros payent à l'état un impôt sur le revenu égal à 14% de leurs revenus.. En plus, tous les citoyens payent à

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

Ces cotisant ont aussi une méthode qui calcule leur pension de retraite, égale à 75% du salaire moyen (somme des salaires / mois), plus le montant du compte pénibilité, moins 10%