Commit 0da292d6 authored by orestis.malaspin's avatar orestis.malaspin

ajout push dans les fonctions faillibles

parent 63863cbb
Pipeline #12696 passed with stage
in 29 seconds
......@@ -86,19 +86,19 @@ Puis il faudra implémenter les fonctions suivantes:
1. Une fonction `lst_vector_init()`{.C} qui alloue et retourne un vecteur vide.
2. Une fonction `lst_vector_length(lst_vector *v)`{.C} qui retourne la longueur d'un vecteur.
3. Une fonction `lst_vector_push(lst_vector *v, void *element)`{.C} qui ajoute `element` au début du vecteur.
4. La fonction `lst_vector_pop(lst_vector *v)`{.C} qui retire le premier élément du vecteur passé en argument et le retourne.
5. La fonction `lst_vector_set(lst_vector *v, int index, void *element)`{.C} qui assigne la `index`-ème valeur du vecteur à la valeur de `element` et retourne le vecteur.
6. La fonction `lst_vector_get(lst_vector *v, int index)`{.C} qui retourne le `index`-ème élément du vecteur (sans le retirer du vecteur).
7. La fonction `lst_vector_remove(lst_vector *v, int index)`{.C} qui retire le `index`-ème élément du vecteur et le retourne.
8. La fonction `lst_vector_insert(lst_vector *v, void *element, int index)`{.C} qui insère `element` au `index`-ème indice du vecteur et retourne le vecteur.
9. La fonction `lst_vector_empty(lst_vector *v)`{.C} qui vide un vecteur et libère la mémoire.
3. Une fonction `lst_vector_push(lst_vector *v, void *element)`{.C} qui ajoute `element` au début du vecteur et le retourne.
4. Une fonction `lst_vector_pop(lst_vector *v)`{.C} qui retire le premier élément du vecteur passé en argument et le retourne.
5. Une fonction `lst_vector_set(lst_vector *v, int index, void *element)`{.C} qui assigne la `index`-ème valeur du vecteur à la valeur de `element` et retourne le vecteur.
6. Une fonction `lst_vector_get(lst_vector *v, int index)`{.C} qui retourne le `index`-ème élément du vecteur (sans le retirer du vecteur).
7. Une fonction `lst_vector_remove(lst_vector *v, int index)`{.C} qui retire le `index`-ème élément du vecteur et le retourne.
8. Une fonction `lst_vector_insert(lst_vector *v, void *element, int index)`{.C} qui insère `element` au `index`-ème indice du vecteur et retourne le vecteur.
9. Une fonction `lst_vector_empty(lst_vector **v)`{.C} qui vide un vecteur, libère la mémoire et met la tête à `NULL`{.C}.
Puis implémenter également deux fonctions un peu plus complexes syntaxiquement.
10. La fonction `lst_vector_map(lst_vector *v, void *(*f)(void *))`{.C} qui itère sur tous les éléments du vecteur `v`, leur applique
10. Une fonction `lst_vector_map(lst_vector *v, void *(*f)(void *))`{.C} qui itère sur tous les éléments du vecteur `v`, leur applique
la fonction `f`, et retourne un nouveau vecteur avec le résultat.
11. La fonction `lst_vector_filter(lst_vector *v, bool (*f)(void *))`{.C} applique le prédicat `f` sur tous les
11. Une fonction `lst_vector_filter(lst_vector *v, bool (*f)(void *))`{.C} applique le prédicat `f` sur tous les
éléments d'un vecteur et retourne ceux qui le satisfont dans un nouveau vecteur.
Afin d'utiliser les fonctions `lst_vector_map()`{.C} et `lst_vector_filter()`{.C} vous devez écrire deux fonctions. La première, `square`{.C},
......@@ -108,7 +108,9 @@ vérifiera si `element` est pair. Vous pouvez implémenter d'autres fonctions si
## La gestion des erreurs
Un certain nombre de fonctions peuvent échouer (`get`, `set`, `pop`, ...). Dans ce cas, il suffit de retourner un vecteur `NULL`.
Un certain nombre de fonctions peuvent échouer (`push`[^2], `get`, `set`, `pop`, ...). Dans ce cas, il suffit de retourner un vecteur `NULL`.
Cette façon de faire ne donne pas une très grande granularité aux erreurs possibles, mais est
bien plus simple.
## Tests
......@@ -118,4 +120,5 @@ En fait, si vous le souhaitez, vous pouvez commencer par écrire les tests pour
et petit à petit écrire le code pour que les tests passent! Cela s'appelle le "test-driven-development"
en bon français.
[^1]: Le but ici est de vous exercer à utiliser une liste chaînée.
\ No newline at end of file
[^1]: Le but ici est de vous exercer à utiliser une liste chaînée.
[^2]: La seule façon pour que `push` échoue est si le vecteur est `NULL`{.C}.
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment