enetwork20250807006.c

/* (C) David Vajda
 * 2025-08-08
 * Circuit Parallel/Seriell excersize */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N                   16

int main (void) {
    char *resistorval [] = {"10 Ohm", "12 Ohm", "15 Ohm", "18 Ohm", "22 Ohm", "27 Ohm", "33 Ohm", "39 Ohm", "47 Ohm", "56 Ohm", "68 Ohm", "82 Ohm", "100 Ohm", "120 Ohm", "150 Ohm", "180 Ohm", "220 Ohm", "270 Ohm", "330 Ohm", "390 Ohm", "470 Ohm", "560 Ohm", "680 Ohm", "820 Ohm"};

    printf("(C) David Vajda\n");
    printf("2025-08-08\n");
    printf("Circuit Parallel/Seriell excersize\n");


    /* nicht eigener Teil */

    time_t t;
    struct tm *tm_info;

    time(&t);
    tm_info = localtime(&t);

    char date_string[25];
    strftime(date_string, sizeof(date_string), "%Y-%m-%d %H:%M:%S", tm_info);

    printf("%s\n\n", date_string);

    /* bis hierhin */
    srand (time(NULL));
    int i;
    int j;
    int tmp;

    int vertices [N][N];
    int valences [N];

    for (i = 0;  i < N;  i++)
        for (j = 0;  j < N;  j++)
            vertices [i][j] = 0;
    for (i = 0;  i < N;  i++)
        valences [i] = i;


    int a, b;
    for (i = 0;  i < 2048;  i++) {
        tmp = valences [a = (rand () % N)];
        valences [a] = valences [b = (rand () % N)];
        valences [b] = tmp;
    }


    int borders [] = {4, 8, 10, 16};
    int valenceval [] = {3, 4, 6, 2};
    int valencesfinal [N];
    int adj_M [N][N];
    int sum;

    for (i = 0, j = 0;  i < N;  i++) {
        valencesfinal [valences[i]] = valenceval [j];
        if (i > borders [j])
            j++;
    }

    for (i = 0;  i < N;  i++)
        for (j = 0;  j < N;  j++)
            if (adj_M [i][j] != 0)
                adj_M[i][j] = 0;

    sum = 1;
    int rcount=1;
    int count = 3;
    while (sum != 0) {
        sum = 0;
        for (i = 0;  i < N;  i++) {
            if (valencesfinal[i] > 0)
                valencesfinal[i]--;
            for (j = i + 1;  (j < N) && (valencesfinal [j] == 0);  j++);

            if ((valencesfinal [j] != 0) && (j != N)){
                valencesfinal [j] = valencesfinal [j]-1;
                sum = sum + valencesfinal [j];
                adj_M [i][j] = adj_M [j][i] = rcount++;
            }
            sum = sum + valencesfinal[i];
        }
    }


    printf ("folgende Knoten verbinden die Widerstaende (o. a. elektrische Bauelemente):\n\n");
    for (i = 0;  i < N -1;  i++)
        printf ("X%i, ", i);
    printf ("X%i\n\n", N-1);


    printf ("Die Knoten sind durch folgende, folgende eleketrische Komponenten z.B. Widerstaende verbunden\n");
    for (i = 0;  i < N;  i++) {
        for (j = i+1;  j < N;  j++)
            if (adj_M [i][j] != 0)
                printf ("R%i von X%i nach X%i\n",  adj_M[i][j], i, j);
    }

    printf ("\ndie widerstaende haben jeweils folgende werte\n\n");
    for (i = 0;  i < N -1;  i++)
        printf ("R%i: %s, ", i, resistorval [rand () % 26]);
    printf ("R%i: %s, \n\n", N-1,  resistorval [rand () % 26]);



return 0;
}