0% ont trouvé ce document utile (0 vote)
27 vues6 pages

M202 Chapitre11

Ce document présente un ensemble d'exercices pratiques sur les coroutines en Kotlin, abordant des concepts tels que la création de chaînes de caractères aléatoires, le calcul de factorielles, et la gestion des exceptions. Les exercices incluent l'utilisation de threads et de coroutines pour diverses tâches, ainsi que des techniques de recherche et d'annulation. Les étudiants sont également invités à développer des fonctions de recherche dans un fichier CSV et à mesurer les performances de différentes méthodes de recherche.

Transféré par

abdo.bissari
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
27 vues6 pages

M202 Chapitre11

Ce document présente un ensemble d'exercices pratiques sur les coroutines en Kotlin, abordant des concepts tels que la création de chaînes de caractères aléatoires, le calcul de factorielles, et la gestion des exceptions. Les exercices incluent l'utilisation de threads et de coroutines pour diverses tâches, ainsi que des techniques de recherche et d'annulation. Les étudiants sont également invités à développer des fonctions de recherche dans un fichier CSV et à mesurer les performances de différentes méthodes de recherche.

Transféré par

abdo.bissari
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Développement digital - Option Applications Mobiles

Anouar DERDOURI
Module 202 - Programmation sous Android
Chapitre 11 - Coroutines
Travaux pratiques 1

[Link] Coroutines → Explore what are coroutines in kotlin. Threads vs.


Coroutines

Exercice 1 :

Écrivez un programme qui demande à l’utilisateur un entier length et qui crée un thread qui
permet de créer une chaine de caractères aléatoire de longueur length, sachant que la chaine
ne peut pas contenir des caractères en double. La chaine doit contenir les caractères a ... z,
A … Z et 0 … 9.

fun main() {
print("The length of the password: ")
val length = readln().toInt()

thread {
// Todo …
}

print("The random password is: ")


}

Exercice 2 :

Faites l’exercice précédent en utilisant une coroutine au lieu du thread.

Exercice 3 :

Ressources / Ex03 / Todo.mp4

Indication :
Pensez à utiliser "\r"

[Link] Coroutine Builders → launch, async, and runBlocking along with


GlobalScope companion object

Exercice 4 :

En utilisant launch créez une coroutine qui calcule la factorielle d’un entier n saisi par

Page 1 sur 6
Développement digital - Option Applications Mobiles
Anouar DERDOURI
Module 202 - Programmation sous Android
Chapitre 11 - Coroutines
Travaux pratiques 1

l’utilisateur.

n ? 15
Factorial(15) = 2004310016

Exercice 5 :

En utilisant async créez une coroutine qui calcule la somme S(n) des factorielles de 0 jusqu’à
n:
S(n) = 0! + 1! + … + n!

n ? 9
S(9) = 409112

Exercice 6 :

Soit le tableau suivant :

val array = Array(10) { (1..100).random() }

▪ En utilisant launch, lancez une première coroutine qui calcule la somme des
éléménts de la première moitié de array.
▪ En utilisant async, lancez une deuxième coroutine qui calcule la somme des éléments
de la deuxième moitié de array.
▪ Afficher la somme des éléments de array comme suit :

45 + 87 + 74 + 10 + 15 + 44 + 1 + 51 + 81 + 69 = 477

[Link] Coroutine Cancellation → Cooperative cancellation, Handle


Exceptions and Timeouts

Exercice 7 :

Nous souhaitons incrémenter un compteur pendant une seconde, l’objectif est de connaitre
la valeur qu’il va atteindre.
Pour cela lancez une première coroutine qui incrémente le compteur infiniment, et une
deuxième coroutine qui annule la première au bout d’une seconde.

Page 2 sur 6
Développement digital - Option Applications Mobiles
Anouar DERDOURI
Module 202 - Programmation sous Android
Chapitre 11 - Coroutines
Travaux pratiques 1

Compteur = 7215418

Remarque : Le résultat que j’ai obtenu peut-être différent du votre.

Exercice 8 :

1. Ajoutez la fonction terme qui retourne le terme Un de la suite de Syracuse définie


somme suit :

U0 = valeur
Un = Un-1 / 2, Si Un - 1 est pair
Un = 3 * Un-1 + 1, Si Un - 1 est impair

2. Ajoutez La fonction tempsDeVol retourne le plus petit indice n tel que : Un = 1.


Il est de 17 pour la suite de Syracuse 15, et de 46 pour la suite de Syracuse 127.
Remarque :
La conjecture de Syracuse affirme que pour tout entier valeur > 0, il existe un indice n
tel que Un = 1.
Technique à utiliser :
Étape 1. On déclare une variable n initialisé à 0.
Étape 2. On lance une coroutine.
Étape 3. On vérifie que terme(n) = 1.
Étape 4. Si oui, on annule la coroutine et on retourne n.
Étape 5. Sinon on incrémente n et on refait les étapes à partir de l’étape 3.

Exercice 9 :

Faites l’exercice 6 en utilisant withTimeOut.

Exercice 10 :

Ressources / Ex10 / Todo.mp4

La suite de Fibonacci est définie comme suit :

Page 3 sur 6
Développement digital - Option Applications Mobiles
Anouar DERDOURI
Module 202 - Programmation sous Android
Chapitre 11 - Coroutines
Travaux pratiques 1

U0 = 1
U1 = 1
Un = Un - 1 + Un - 2, Si n >= 2

[Link] Coroutines → Composing Suspending Functions - Sequential,


Concurrent and Lazy Execution

Exercice 11 :

1. Développez la suspending fonction linearSearch(list: List<Int>, value: Int): Int qui


cherche l’indice de value dans list en implémentant l’algorithme de recherche
séquentielle.
2. Développez la suspending fonction binarySearch(list: List<Int>, value: Int): Int qui
cherche l’indice de value dans list en implémentant l’algorithme de recherche
dichotomique.
On suppose que le tableau est trié dans l’ordre croissant.
3. Soit le code suivant :

val list = Array(1_000_000) { (1..1_000_000).random() }.sortedArray().distinct()


val value = list[[Link]()]

Mesurer le temps nécessaire pour effectuer rechercher value dans array en utilisant les
fonctions précédentes.

Linear time = 11ms


Binary time = 1ms

[Link] Dispatchers, CoroutineContext and CoroutineScope

Exercice 12 :

1. Exécutez le code suivant :

import [Link].*
import [Link]

@OptIn(ExperimentalStdlibApi::class)
fun main() {

Page 4 sur 6
Développement digital - Option Applications Mobiles
Anouar DERDOURI
Module 202 - Programmation sous Android
Chapitre 11 - Coroutines
Travaux pratiques 1

val name: CoroutineContext = CoroutineName("C1")


val dispatcher: CoroutineContext = [Link]

runBlocking(name + dispatcher) {
println(this)
println([Link])
println([Link][CoroutineName])
println([Link][CoroutineDispatcher])
}
}

2. Qui ce que vous remarquez ?

Exercice 13 :

Soit le fichier suivant :

Ressources / Ex13 / [Link]

1. Développez la suspending fonction search(word: String): List<Pair<String, String>>


qui cherche les définitions de word dans le fichier.
2. Écrivez une fonction de test qui exploite la fonction précédente.

Word: aaaa
(No definition)

Word: aline
- v. t. To range or place in a line; to bring into line; to align.

Page 5 sur 6
Développement digital - Option Applications Mobiles
Anouar DERDOURI
Module 202 - Programmation sous Android
Chapitre 11 - Coroutines
Travaux pratiques 1

Word: aback
- adv. Toward the back or rear; backward.
- adv. Behind; in the rear.
- adv. Backward against the mast; -- said of the sails when pressed by the wind.
- n. An abacus.

Page 6 sur 6

Vous aimerez peut-être aussi