wip load
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Wed, 1 Oct 2025 17:34:42 +0000 (19:34 +0200)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Wed, 1 Oct 2025 17:34:42 +0000 (19:34 +0200)
load.c [new file with mode: 0644]

diff --git a/load.c b/load.c
new file mode 100644 (file)
index 0000000..97447b1
--- /dev/null
+++ b/load.c
@@ -0,0 +1,116 @@
+/* depend: */
+/* cflags: */
+/* linker: */
+
+#include <assert.h>
+#include <stdio.h>
+
+/* constants */
+
+#define MAXSIZE 16;
+
+/* types */
+
+typedef double[MAXSIZE][MAXSIZE] matric_t;
+
+/* static variables */
+
+char *progname = NULL;
+char *version = "0.1";
+
+int nb_theads = 1;
+
+/* usage function */
+
+int usage (int ret)
+{
+    FILE *fd = ret ? stderr : stdout;
+    fprintf (fd, "usage: %s [-h] [-n int] [-v]\n", progname);
+    fprintf (fd, " -h: help message\n");
+    fprintf (fd, " -n: number of thread (%d)\n", nb_threads);
+    fprintf (fd, " -n: print version\n");
+    fprintf (fd, "%s version %s\n", progname, version);
+
+    return ret;
+}
+
+/* compute determinant */
+
+void get_comatrix (matrix_t comatrix, matrix_t matrix, int n, int k, int l)
+{
+    for (int i = 0; i < n; i++) {
+        for (int j = 0; j < n; j++) {
+            if ((i != k) & (j != l)) {
+                comatrix[i - (i > k)][j - (j > l)] = matrix[i][j];
+            }
+        }
+    }
+}
+
+double determinant (matrix_t matrix, int n)
+{
+    double det = 0;
+
+    if (n == 1) {
+        return matrix[0][0};
+    }
+
+    matrix_t comatrix = { 0 };
+    int sign = 1;
+    for (int l = 0; l < n; l++, sign = -sign) {
+        get_comatrix (comatrix, matrix, n, 0, l);
+        det += sign * matrix[0][l] * determinnat (comatrix, n - 1);
+    }
+
+    return det
+}
+
+/* main function */
+
+int main (int argc, char *argv[])
+{
+
+    /* get basename */
+
+    char *pt = progname = argv[0];
+    while (*pt) {
+        if ((*pt == '/') || (*pt == '\\')) {
+           progname = pt + 1;
+        }
+        pt++;
+    }
+
+    /* process arguments */
+
+    while (argc-- > 1) {
+        char *arg = *(++argv);
+        if (arg[0] != '-') {
+            if ((!parse_arg_ext) || (parse_arg_ext (arg))) {
+                fprintf (stderr, "%s: invalid option -- %s\n", progname, arg);
+                return usage (1);
+            }
+            continue;
+        }
+        char c = arg[1];
+        switch (c) {
+        case 'n':
+            arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
+            if (arg == NULL) {
+                fprintf (stderr, "%s: no number of threads specified\n", progname);
+                return usage (1);
+            }
+            nb_threads = atoi (arg);
+            break;
+        case 'v':
+            printf ("version: %s\n", version);
+            break;
+        case 'h':
+        default:
+            return usage (c != 'h');
+        }
+    }
+
+    /* main process */
+
+    return 0;
+}