Cześć,
mam problem z programem odwzorowującym działanie automatu skończonego. Pokrótce mówiąc, jako znaki do taśmy (wektora) program ma pobierać wartości z *argv[]. Kompiluje się bez problemu, jednak przy próbie uruchomienia wyświetla się błąd - naruszenie ochrony pamięci (core dumped). Nie wiem, co robię źle, próbowałem różnych kombinacji, niestety bez skutku, dlatego zdecydowałem się poprosić Was o pomoc. Poniżej kod, za wszelkie rady z góry dziękuję :). Jeśli coś jest niejasne - pytajcie.
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
char q0 = '1';
char q1 = '2';
char q2 = '3';
char q3 = '4';
char stan = q0;
char tasma[argc - 1];
int i, n;
for (n = 1; n <= argc; ++n) /*Pobiera do tasmy wartosci z *argv[] */
{
tasma[n - 1] = atoi(argv[n]);
}
for (i = 0; i <= argc; ++i)
{
switch (stan)
{
case '1':
switch (tasma[i])
{
case '0':
stan = q1;
printf(" -> q1");
break;
case '1':
stan = q2;
printf(" -> q2");
break;
}
case '2':
switch (tasma[i])
{
case '0':
stan = q3;
printf(" -> q3");
break;
case '1':
stan = q1;
printf(" -> q1");
break;
}
case '3':
switch (tasma[i])
{
case '0':
stan = q0;
printf(" -> q0");
break;
case '1':
stan = q3;
printf(" -> q3");
break;
}
case '4':
switch (tasma[i])
{
case '0':
stan = q1;
printf(" -> q1");
break;
case '1':
stan = q2;
printf(" -> q2");
break;
}
}
switch (stan)
{
case '1':
printf ("\nStan koncowy to q0\n");
case '2':
printf ("\nStan koncowy to q1\n");
case '3':
printf ("\nStan koncowy to q2. Ciag zostal zaakceptowany.\n");
case '4':
printf ("\nStan koncowy to q3\n");
}
return 0;
}
}