Ich habe eine neue Möglichkeit gefunden, Automaten und Zustandsdiagramme zu zeichnen. Mit LaTeX
das Lustige ist, ich kann jetzt meinen generator für C, für meine Automaten nehmen und LaTeX Quelltext erzeugen lassen. Dann habe ich den Automat vor mir. Ich stelle es gleich vor.
In LaTeX fängt das so an
Code: Alles auswählen
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgf, tikz}
\usetikzlibrary{arrows , automata , positioning}
\begin{document}
Hier das C-Programm
Code: Alles auswählen
#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][4];
int v;
int k, l;
int n;
srand ((unsigned)time (&t));
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++)
z [i][j] = j;
}
for (n = rand () % 100; n >= 0; n--) {
for (i = 0; i < 4; i++) {
if ((rand () % 2) == 0) {
for (k = 0; k < 4; k++) {
for (l = k + 1; l < 4; l++) {
if (z[i][l] > z[i][k]) {
t = z [i][l];
z [i][l] = z[i][k];
z [i][k] = t;
}
}
}
}
else {
for (k = 0; k < 4; k++) {
for (l = k + 1; l < 4; l++) {
if (z[i][l] < z[i][k]) {
t = z [i][l];
z [i][l] = z[i][k];
z [i][k] = t;
}
}
}
}
}
for (j = 0; j < 4; j++) {
if ((rand () % 2) == 0) {
for (k = 0; k < 4; k++) {
for (l = k + 1; l < 4; l++) {
if (z[l][j] > z[k][j]) {
t = z [l][j];
z [l][j] = z[k][j];
z [k][j] = t;
}
}
}
}
else {
for (k = 0; k < 4; k++) {
for (l = k + 1; l < 4; l++) {
if (z[l][j] < z[k][j]) {
t = z [l][j];
z [l][j] = z[k][j];
z [k][j] = t;
}
}
}
}
}
}
/*
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++)
printf ("%i ", z[i][j]);
printf ("\n");
}
printf ("Zustand\tEingabe\tAusgabe\tFolgezustand\n");
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++)
printf ("%i\t\t%i\t\t%i\t\t%i\n", i, j, rand () % 4, z[i][j]);
}*/
printf("\\documentclass{article}\n");
printf("\\usepackage[utf8]{inputenc}\n");
printf("\\usepackage{pgf, tikz}\n");
printf("\\usetikzlibrary{arrows , automata , positioning}\n");
printf("\\begin{document}\n\n");
printf("\\begin{center}\n");
printf("\\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.5cm]\n");
printf("\%Knoten\n");
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};\n\n");
printf("\%Verbindungen\n");
printf("\\path[thick,->]\n");
for (i = 0; i < 4; i++) {
j = 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]);
j = 2;
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 right,below] node {%i/%i} (%i)\n", i, j, rand () % 4, z[i][j]);
j = 3;
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,above] node {%i/%i} (%i)\n", i, j, rand () % 4, z[i][j]);
}
/*
printf("(1) edge node {1/0} (2)\n");
printf("(1) edge [bend angle=15, bend left] node {0/0} (4)\n\n");
printf("(2) edge [bend angle=15, bend left,pos=0.4] node {0/0}(3)\n");
printf("(2) edge node {1/0} (4)\n\n");
printf("(3) edge [bend angle=15, bend left,below] node {0/0} (2)\n");
printf("(3) edge [bend angle=35, bend right, above] node {1/0} (1)\n\n");
printf("(4) edge [right] node {1/0} (3)\n");
printf("(4) edge [bend angle=15, bend left] node {0/0} (1)\n");*/
printf(";\n");
printf("\\end{tikzpicture}\n");
printf("\\end{center}\n");
printf("\\end{document}\n");
return 0;
}
Code: Alles auswählen
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgf, tikz}
\usetikzlibrary{arrows , automata , positioning}
\begin{document}
\begin{center}
\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.5cm]
%Knoten
\node (0) [state, thick] {0};
\node (1) [state, thick, right of= 0] {1};
\node (2) [state, thick, right of= 1] {2};
\node (3) [state, thick, below of= 1] {3};
%Verbindungen
\path[thick,->]
(0) edge node {0/0} (1)
(0) edge [loop above] node {1/3} (0)
(0) edge [bend angle=15, bend right,below] node {2/2} (3)
(0) edge [bend angle=15, bend left,above] node {3/2} (3)
(1) edge [loop above] node {0/1} (1)
(1) edge [loop above] node {1/1} (1)
(1) edge [bend angle=15, bend right,below] node {2/2} (3)
(1) edge [bend angle=15, bend left,above] node {3/1} (3)
(2) edge [loop above] node {0/0} (2)
(2) edge [loop above] node {1/1} (2)
(2) edge [bend angle=15, bend right,below] node {2/2} (1)
(2) edge [bend angle=15, bend left,above] node {3/2} (0)
(3) edge node {0/3} (2)
(3) edge [bend angle=15, bend left,below] node {1/1} (2)
(3) edge [bend angle=15, bend right,below] node {2/0} (0)
(3) edge [bend angle=15, bend left,above] node {3/3} (0)
;
\end{tikzpicture}
\end{center}
\end{document}
Hier noch eine
Code: Alles auswählen
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgf, tikz}
\usetikzlibrary{arrows , automata , positioning}
\begin{document}
\begin{center}
\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.5cm]
%Knoten
\node (0) [state, thick] {0};
\node (1) [state, thick, right of= 0] {1};
\node (2) [state, thick, right of= 1] {2};
\node (3) [state, thick, below of= 1] {3};
%Verbindungen
\path[thick,->]
(0) edge [loop above] node {0/3} (0)
(0) edge [bend angle=15, bend left,below] node {1/3} (3)
(0) edge [bend angle=15, bend right,below] node {2/0} (1)
(0) edge [bend angle=15, bend left,above] node {3/1} (3)
(1) edge [loop above] node {0/0} (1)
(1) edge [bend angle=15, bend left,below] node {1/1} (2)
(1) edge [loop right] node {2/2} (1)
(1) edge [bend angle=15, bend left,above] node {3/3} (3)
(2) edge [loop above] node {0/1} (2)
(2) edge [loop above] node {1/3} (2)
(2) edge [bend angle=15, bend right,below] node {2/1} (1)
(2) edge [bend angle=15, bend left,above] node {3/1} (0)
(3) edge node {0/3} (2)
(3) edge [bend angle=15, bend left,below] node {1/0} (0)
(3) edge [loop right] node {2/2} (3)
(3) edge [bend angle=15, bend left,above] node {3/1} (0)
;
\end{tikzpicture}
\end{center}
\end{document}
https://davidvajda.de/david4/2024-01-24/test.pdf
https://davidvajda.de/david4/2024-01-24/test3.pdf