X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=TP_13%2Fexo1%2Flib%2Fio.c;h=989e746aa237cd90d18c0b3861427deefd5f1bf2;hb=475ee86d70921638c700bc0934441c7fe2c905d1;hp=2df513416d4358bf9965d32bf1e58e5f5d15352c;hpb=34f864c6720b5e480db66430a218e2fd54743ce7;p=TD_C.git diff --git a/TP_13/exo1/lib/io.c b/TP_13/exo1/lib/io.c index 2df5134..989e746 100644 --- a/TP_13/exo1/lib/io.c +++ b/TP_13/exo1/lib/io.c @@ -1,6 +1,9 @@ #include +#include #include "io.h" +#include "array.h" +#include "utils.h" int prompt_value(const char* msg, int* result) { puts(msg); @@ -8,10 +11,95 @@ int prompt_value(const char* msg, int* result) { return (retVal == 1) ? 0 : 1; } -void display_array(int* array, int size) { - printf("--array begin--\n"); - for (int i = 0; i < size; i++) { - printf("value in array at index[%d]=%d\n", i, array[i]); +int* prompt_array(int array[], unsigned* size) { + int errno = prompt_value("Taille du tableau?", (int*)size); + array = create_tab(array, *size); + for (unsigned i = 0; i < *size; i++) { + errno += prompt_value("Valeur?", &array[i]); + } + /* error might have occured */ + handle_prompt_error(errno); + return array; +} + +void display_choice_menu() { + printf("\n=== Menu ===\n\n"); + printf("1) Saisir puis concatener un autre tableau.\n"); + printf("2) Trier le tableau.\n"); + printf("3) Afficher le tableau.\n"); + printf("4) Compter le nombre d'occurence d'un entier dans le tableau.\n"); + printf("5) Quitter.\n"); +} + +int* do_concat(int array[], unsigned* size) { + int* tab_to_concat = NULL; + unsigned tab_to_concat_size = 0; + printf("\n=== Saisie d'un tableau ===\n\n"); + tab_to_concat = prompt_array(tab_to_concat, &tab_to_concat_size); + int* tab_concat = concat_tab(array, *size, tab_to_concat, tab_to_concat_size); + *size += tab_to_concat_size; + free_tab(array); + free_tab(tab_to_concat); + return tab_concat; +} + +void do_sort(int array[], unsigned size) { + int errno = 0; + int choice = 0; + bool done = false; + criteria_cb criteria; + + printf("\n=== Menu de tri ===\n\n"); + printf("1) Croissant.\n"); + printf("2) Decroissant.\n"); + printf("3) Croissant pairs en premier.\n"); + printf("4) Croissant impairs en premier.\n"); + do { + errno = prompt_value("Choix?", &choice); + handle_prompt_error(errno); + done = true; + if (1 > choice || 4 < choice) { + printf("\nFaire un choix compris entre 1 et 4\n"); + done = false; + } + } while (!done); + switch (choice) { + case 1: + criteria = ascending; + break; + case 2: + criteria = descending; + break; + case 3: + criteria = ascending_and_even; + break; + case 4: + criteria = ascending_and_odd; + break; + default: + criteria = ascending; + break; + } + sort_tab(array, size, criteria); +} + +void do_count(int array[], unsigned size) { + int errno = 0; + int search_value = 0; + + errno = prompt_value("\nValeur a chercher?", &search_value); + handle_prompt_error(errno); + printf("La valeur %d est presente %d fois dans le tableau\n", search_value, count_tab_element(array, size, search_value)); +} + +void display_array(int array[], unsigned size) { + if (array != NULL) { + printf("\n--array begin--\n"); + for (unsigned i = 0; i < size; i++) { + printf("value in array at index[%d]=%d\n", i, array[i]); + } + printf("--array end--\n"); + } else { + printf("\n--array NULL--\n"); } - printf("--array end--\n"); }