Re: Neuer Automaten Generator

Ich habe aber bei der Fernuni Hagen, gleich noch was phantastisches gefunden. Eine Vorlage, wie man Schaltnetze zeichnet. Das ist sehr praktisch. Dann sehen sie in Zukunft gescheiht aus. Im Gegensatz zum Automaten ist das aber nicht mehr trivial.

Ich habe einen besseren Code erschaffen

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

#define EMPTY_Z -1
#define UNINIT_Z -2

int main (void) {
    time_t t;
    int i, j;
    int z [4][2];
    int flag;

    srand ((unsigned)time (\&amp;t));


    for (i = 0;  i < 4;  i++) {
        z [i][0] = i;
        z [i][1] = i;
    }
    flag = 0;
    while (!flag) {
        for (i = 0;  i < 4;  i++) {
            for (j = i + 1;  j < 4;  j++) {
                if ((rand () % 32) > 16) {
                    t = z [j][0];
                    z [j][0] = z[i][0];
                    z [i][0] = t;
                }
            }
        }
        for (i = 0;  i < 4;  i++) {
            for (j = i + 1;  j < 4;  j++) {
                if ((rand () % 16) < 8) {
                    t = z [j][1];
                    z [j][1] = z[i][1];
                    z [i][1] = t;
                }
            }
        }
        flag = 1;
        for (i = 0;  i < 4;  i++)
            if ((z[i][0] == z[i][1]) \&amp;\&amp; (z[i][1] == i)) {
                flag = 0;
            }

    }

printf("\documentclass{article}n");
printf("\usepackage[utf8]{inputenc}n");
printf("\usepackage{pgf, tikz}n");
printf("\usetikzlibrary{arrows , automata , positioning}n");
printf("\begin{document}nn");


printf("\begin{center}n");
printf("\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.5cm]n");
printf("%Knotenn");
printf("\node (0) [state, thick] {0};n");
printf("\node (1) [state, thick, right of= 0] {1};n");
printf("\node (2) [state, thick, right of= 1] {2};n");
printf("\node (3) [state, thick, below of= 1] {3};nn");

printf("%Verbindungenn");
printf("\path[thick,->]n");


for (i = 0;  i < 4;  i++) {
        j = 0;
        fprintf(stderr, "%in", z [i][0]);
        if (z [i][j] == i)
            printf ("(%i) edge [loop above] node {%i/%i} (%i)n", i, j, rand () % 4, z[i][j]);
        else
            printf ("(%i) edge node {%i/%i} (%i)n", i, j, rand () % 4, z[i][j]);
        j = 1;
        if (z [i][j] == i)
            printf ("(%i) edge [loop] node {%i/%i} (%i)n", i, j, rand () % 4, z[i][j]);
        else
            printf ("(%i) edge [bend angle=15, bend left,below] node {%i/%i} (%i)n", i, j, rand () % 4, z[i][j]);
}
printf(";n");
printf("\end{tikzpicture}n");
printf("\end{center}n");
printf("\end{document}n");


return 0;
}

Image test11

Image test12

Image test13

Image test14