From 4b810f05fcd22b7e0ca80e407d90ed0142c57bd4 Mon Sep 17 00:00:00 2001
From: "dario.genga" <dario.genga@etu.hesge.ch>
Date: Tue, 25 Jan 2022 15:58:42 +0100
Subject: [PATCH] Add finished ex3

---
 ex3/ex3.c | 36 +++++++++++++++++++++---------------
 1 file changed, 21 insertions(+), 15 deletions(-)

diff --git a/ex3/ex3.c b/ex3/ex3.c
index 4495373..ea44611 100644
--- a/ex3/ex3.c
+++ b/ex3/ex3.c
@@ -6,7 +6,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <stdbool.h>
 
 typedef struct list_t {
     int *value;
@@ -40,17 +39,31 @@ list *push(list *li, int *value, int *index) {
     return new;
 }
 
+void print_pascal(list *li, int pascal_size) {
+    list *current = li;
+    for (int i = 0; i < pascal_size; i++) {
+        if (current != NULL) {
+            printf("%d ", *current->value);
+            current = current->next;
+        }
+    }
+    printf("\n");
+}
+
 list *create_pascal_triangle(list *li, int pascal_size, int size_to_compute, int remaining_step) {
     if (remaining_step == 0 && size_to_compute == pascal_size) {
+        // End of the recursion
+        print_pascal(li, pascal_size);
         return li;
     }
     if (remaining_step == 0 && size_to_compute != pascal_size) {
-        create_pascal_triangle(li, pascal_size, size_to_compute + 1, size_to_compute + 1);
-        return li;
+        // Start calculating the next row
+        return create_pascal_triangle(li, pascal_size, size_to_compute + 1, size_to_compute + 1);
     }
 
     int index = *li->index + 1;
     if (remaining_step == 1 || remaining_step == size_to_compute) {
+        // Add the default value and the start and end of each rows
         int default_value = 1;
         li = push(li, &default_value, &index);
     } else {
@@ -58,6 +71,7 @@ list *create_pascal_triangle(list *li, int pascal_size, int size_to_compute, int
         list *current = li;
         int current_index = 0;
 
+        // Compute the value by searching the numbers at top and top left
         while (*current->index > *li->index - size_to_compute) {
             if (*current->index == *li->index - (size_to_compute - 1) ||
                 *current->index == *li->index - (size_to_compute - 2)) {
@@ -71,18 +85,8 @@ list *create_pascal_triangle(list *li, int pascal_size, int size_to_compute, int
     return create_pascal_triangle(li, pascal_size, size_to_compute, remaining_step - 1);
 }
 
-void print_pascal(list *li, int pascal_size) {
-    list *current = li;
-    for (int i = 0; i < pascal_size; i++) {
-        if (current != NULL) {
-            printf("%d ", *current->value);
-            current = current->next;
-        }
-    }
-    printf("\n");
-}
-
 int main() {
+    // Initialize the program
     int default_value = 1;
     int default_index = 0;
 
@@ -90,14 +94,16 @@ int main() {
     li->value = &default_value;
     li->index = &default_index;
 
+    // Get the pascal size from user
     int pascal_size;
     scanf("%d", &pascal_size);
 
+    // Create the triangle
     if (pascal_size > 1) {
         li = create_pascal_triangle(li, pascal_size, 2, 2);
     }
-    print_pascal(li, pascal_size);
 
+    // Free the memory and exit the program
     destroy(li);
     return EXIT_SUCCESS;
 }
-- 
GitLab