TP 13 exo1: Add libraries functions already written
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 9 Mar 2017 20:53:57 +0000 (21:53 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 9 Mar 2017 20:53:57 +0000 (21:53 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
TP_13/exo1/lib/array.h
TP_13/exo1/lib/io.c
TP_13/exo1/lib/io.h
TP_13/exo1/lib/sort.c
TP_13/exo1/lib/sort.h
TP_13/exo1/lib/utils.c [new file with mode: 0644]
TP_13/exo1/lib/utils.h [new file with mode: 0644]
TP_13/exo1/src/main.c [moved from TP_13/exo1/src/exo1.c with 100% similarity]

index 1f0be270c59239df881644dce69aa91f3ae5235c..3326460fca7b414e9705de030ff683c441d3e424 100644 (file)
@@ -2,4 +2,5 @@
 #define ARRAY_H
 
 
+
 #endif /* ARRAY_H */
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4af0b66cf4ee147f16e177b9293329055298b466 100644 (file)
@@ -0,0 +1,15 @@
+#include <stdio.h>
+
+#include "io.h"
+
+int prompt_value(const char* msg, int* result) {
+    puts(msg);
+    int retVal = scanf("%d", result);
+    return (retVal == 1) ? 0 : 1;
+}
+
+void display_array(int* array, int size) {
+    for (int i = 0; i < size; i++) {
+        printf("value in array at index[%d]=%d\n", i, array[i]);
+    }
+}
index 56eef2376c3ac654220a76fdbf35eddbeffd3adb..8b2fb6eafe94fd59a1a44b5739b762eb78c4ce6c 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef IO_H
 #define IO_H
 
+int prompt_value(const char* msg, int* result);
 
+void display_array(int* array, int size);
 
 #endif /* IO_H */
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..aef713d8a69db4c9df3dddfda882d349ae06846b 100644 (file)
@@ -0,0 +1,29 @@
+#include "utils.h"
+#include "sort.h"
+
+bool ascending(int a, int b) {
+    return a > b;
+}
+
+bool descending(int a, int b) {
+    return a < b;
+}
+
+static bool sort_first(int* array, int length, criteria_cb criteria) {
+    bool rt = false;
+    for (int i = 0; i < length-1; i++) {
+        if (criteria(array[i], array[i+1])) {
+            swap_int_ptr(&array[i], &array[i+1]);
+            if (!rt) { rt = true; };
+        }
+    }
+    return rt;
+}
+
+/* this function is awaited in the array.c file */
+void sort_array(int* array, int length, criteria_cb criteria) {
+    bool rt;
+    do {
+        rt = sort_first(array, length, criteria);
+   } while (rt);
+}
index 86fd5c48d6803fe1b0b1c1d778d58f4bb745c467..57b51decddee5570580cb92e3b3c8fdcbd4f4c7f 100644 (file)
@@ -1,5 +1,14 @@
 #ifndef SORT_H
 #define SORT_H
 
+#include <stdbool.h>
+
+typedef bool(*criteria_cb)(int a, int b);
+
+/* sort criteria */
+bool ascending(int a, int b);
+bool descending(int a, int b);
+
+void sort_array(int* array, int length, criteria_cb criteria);
 
 #endif /* SORT_H */
diff --git a/TP_13/exo1/lib/utils.c b/TP_13/exo1/lib/utils.c
new file mode 100644 (file)
index 0000000..c48206f
--- /dev/null
@@ -0,0 +1,13 @@
+#include "utils.h"
+
+void swap_int_ptr(int* v1, int* v2) {
+    int tmp = *v1;
+    *v1 = *v2;
+    *v2 = tmp;
+}
+
+void swap_ptr(void* v1, void* v2) {
+    void* tmp = v1;
+    v1 = v2;
+    v2 = tmp;
+}
diff --git a/TP_13/exo1/lib/utils.h b/TP_13/exo1/lib/utils.h
new file mode 100644 (file)
index 0000000..1acc243
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef UTILS_H
+#define UTILS_H
+
+void swap_int_ptr(int* v1, int* v2);
+void swap_ptr(void* v1, void* v2);
+
+#endif /* UTILS_H */
similarity index 100%
rename from TP_13/exo1/src/exo1.c
rename to TP_13/exo1/src/main.c