TP 13 exo1: Implement more asked features and test them
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 13 Mar 2017 21:08:42 +0000 (22:08 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 13 Mar 2017 21:08:42 +0000 (22:08 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
TP_13/exo1/lib/io.c
TP_13/exo1/lib/io.h
TP_13/exo1/lib/sort.c
TP_13/exo1/src/main.c

index 2df513416d4358bf9965d32bf1e58e5f5d15352c..1217750eb86ffd271cf1507af174e9dbf5a7aeb7 100644 (file)
@@ -1,6 +1,7 @@
 #include <stdio.h>
 
 #include "io.h"
+#include "array.h"
 
 int prompt_value(const char* msg, int* result) {
     puts(msg);
@@ -8,10 +9,27 @@ int prompt_value(const char* msg, int* result) {
     return (retVal == 1) ? 0 : 1;
 }
 
+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]);
+    }
+    if (errno == 0) {
+        return array;
+    } else {
+        return NULL;
+    }
+}
+
 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]);
+    if (array != NULL) {
+        printf("--array begin--\n");
+        for (int i = 0; i < size; i++) {
+            printf("value in array at index[%d]=%d\n", i, array[i]);
+        }
+        printf("--array end--\n");
+    } else {
+        printf("--array NULL--\n");
     }
-    printf("--array end--\n");
 }
index 8b2fb6eafe94fd59a1a44b5739b762eb78c4ce6c..21a33e08fc00879ae724cedeabe84aaeddc3d718 100644 (file)
@@ -2,6 +2,7 @@
 #define IO_H
 
 int prompt_value(const char* msg, int* result);
+int* prompt_array(int array[], unsigned* size);
 
 void display_array(int* array, int size);
 
index 70a766b505773ba6e14823aef9b194c9c55c0b95..f8917ea5ab6987bb96ccc9909f5bbdfa6f0d1cb8 100644 (file)
@@ -10,11 +10,13 @@ bool descending(int a, int b) {
 }
 
 bool ascending_and_even(int a, int b) {
-    return (ascending(a, b) && (a % 2 == 0));
+    return (((a % 2 != 0) && (b % 2 == 0)) || ((a % 2 == 0) && (b % 2 == 0) && ascending(a, b)) \
+                || ((a % 2 != 0) && (b % 2 != 0) && ascending(a, b)));
 }
 
 bool ascending_and_odd(int a, int b) {
-    return (ascending(a, b) && (a % 2 != 0));
+    return (((a % 2 == 0) && (b % 2 != 0)) || ((a % 2 == 0) && (b % 2 == 0) && ascending(a, b)) \
+                || ((a % 2 != 0) && (b % 2 != 0) && ascending(a, b)));
 }
 
 static bool sort_first(int* array, unsigned length, criteria_cb criteria) {
index 41facd6323e042f6cfea518592381c27b4066826..ea4abc39e67b739c04fcba45a5f142a0f2a31491 100644 (file)
@@ -7,17 +7,15 @@
 
 int main() {
     int* tab = NULL;
-    unsigned tab_size = 11;
-    tab = create_tab(tab, tab_size);
+    unsigned tab_size = 0;
+
+    tab = prompt_array(tab, &tab_size);
 
     printf("%d\n", tab_size);
 
     display_array(tab, tab_size);
 
-    tab_size = 20;
-    tab = resize_tab(tab, tab_size);
-
-    printf("%d\n", tab_size);
+    sort_tab(tab, tab_size, ascending_and_odd);
 
     display_array(tab, tab_size);