/* (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;
}