Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 INFORMATICA - Primo Anno
 Linguaggi di programmazione
 AIUTO IMPORTANTE AUTOMA
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

iperattivo
Utente medio


Regione: Puglia
Prov.: Bari
Città: ba


Inserito il - 21/01/2006 : 12:32:54  Mostra Profilo  Visita l'Homepage di iperattivo Invia a iperattivo un Messaggio Privato  Rispondi Quotando
Ragazzi ho un piccolo problema circa l’implementazione degli automi in linguaggio c.
Si tratta di un automa definito su un alfabeto X={0,1}.”traccia 31 ottobre 2005 presente sul sito di Lops”.
La traccia richiede che al termine dell’esecuzione per le stringhe non accettate debba essere riportata la motivazione ed in particolare tra le seguenti:
1.si e’ giunti nello stato pozza
2.si e’ giunti ad uno stato non finale
3.la stringa contiene simboli esterni all’alfabeto.
Per quanto riguarda gli stati nn finali nn ci sono problemi.Il mio dubbio sorge quando devo trattare gli altri due casi e cioè se quando inserisco un simbolo esterno all’alfabeto vado o meno nello stato pozza quindi oltre al terzo messaggio devo inserire anche il primo.Di seguito sono inserite entrambe le realizzazioni,una delle quali sicuramente è inesatta rispetto alle richieste della traccia.In ogni caso se ci sono altre cose poco giuste fatemi sapere;GRAZIE.

#include <stdio.h>
#include <stdlib.h>
#define MAX_LENGTH 100

int scan(char* s)
{int i=0;
enum{q0,q1,q2,q3,q4,pozza}current_state=q0;
while((s[i]!='\n' && s[i]!='\0')&& current_state!=pozza)
{
switch(current_state)
{
case q0:
if(s[i]=='1')
current_state=q0;
else if(s[i]=='0')
current_state=q1;
else
{current_state = pozza;
printf("la stringa contiene simboli esterni all'alfabeto");
}
break;

case q1:
if(s[i]=='0')
current_state=q2;
else
{current_state=pozza;
printf("\nla stringa contiene simboli esterni all'alfabeto");
}
break;

case q2:
if(s[i]=='1')
current_state=q3;
else if(s[i]=='0')
current_state =q2;
else
{current_state = pozza;
printf("\nla stringa contiene simboli esterni all'alfabeto");
}
break;

case q3:
if(s[i]=='1')
current_state =q4;
else if(s[i]=='0')
current_state=q1;
else
{current_state = pozza;
printf("\nla stringa contiene simboli esterni all'alfabeto");
}
break;

case q4:
if(s[i]=='1')
current_state=q4;
else if(s[i]== '0')
current_state=q4;
else
{current_state = pozza;
printf("\nla stringa contiene simboli esterni all'alfabeto");
}
break;

}
++i;
}
if(current_state==pozza)
printf("\nsi e' giunti nello stato pozza\n");
else if (current_state == q0 || current_state == q1 || current_state == q2 || current_state == q3 )
printf("\nsi e' giunti ad uno stato nn finale\n");
return(current_state == q4);
}

int main(int argc, char* argv[])
{
char buffer[MAX_LENGTH+1];
char* filename = argv[1];
FILE* file;

file = fopen(filename,"r");
if (file == NULL)
{
printf("file inesistente");
return -1;
}


while (!feof(file))
{
if (scan(fgets(buffer,MAX_LENGTH,file)))
printf("%s RICONOSCIUTO\n", buffer);
else
printf("%s NON RICONOSCIUTO\n", buffer);
}

fclose(file);
system("PAUSE");
return 0;
}


OPPURE

#include <stdio.h>
#include <stdlib.h>
#define MAX_LENGTH 100

int scan(char* s)
{int i=0;
enum{q0,q1,q2,q3,q4,pozza}current_state=q0;
while((s[i]!='\n' && s[i]!='\0')&& current_state!=pozza)
{
switch(current_state)
{
case q0:
if(s[i]=='1')
current_state=q0;
else if(s[i]=='0')
current_state=q1;
else
{
printf("la stringa contiene simboli esterni all'alfabeto");
}
break;

case q1:
if(s[i]=='0')
current_state=q2;
else if (s[i]=='1')
current_state=pozza;
else
{
printf("\nla stringa contiene simboli esterni all'alfabeto");
}
break;

case q2:
if(s[i]=='1')
current_state=q3;
else if(s[i]=='0')
current_state =q2;
else
{
printf("\nla stringa contiene simboli esterni all'alfabeto");
}
break;

case q3:
if(s[i]=='1')
current_state =q4;
else if(s[i]=='0')
current_state=q1;
else
{
printf("\nla stringa contiene simboli esterni all'alfabeto");
}
break;

case q4:
if(s[i]=='1')
current_state=q4;
else if(s[i]== '0')
current_state=q4;
else
{
printf("\nla stringa contiene simboli esterni all'alfabeto");
}
break;

}
++i;
}
if(current_state==pozza)
printf("\nsi e' giunti nello stato pozza\n");
else if (current_state == q0 || current_state == q1 || current_state == q2 || current_state == q3 )
printf("\nsi e' giunti ad uno stato nn finale\n");
return(current_state == q4);
}

int main(int argc, char* argv[])
{
char buffer[MAX_LENGTH+1];
char* filename = argv[1];
FILE* file;

file = fopen(filename,"r");
if (file == NULL)
{
printf("file inesistente");
return -1;
}


while (!feof(file))
{
if (scan(fgets(buffer,MAX_LENGTH,file)))
printf("%s RICONOSCIUTO\n", buffer);
else
printf("%s NON RICONOSCIUTO\n", buffer);
}

fclose(file);
system("PAUSE");
return 0;
}

ghjkl

silent
Utente assiduo

tartaruga


Regione: Puglia
Prov.: Bari
Città: Andria


Inserito il - 21/01/2006 : 12:51:23  Mostra Profilo  Visita l'Homepage di silent Invia a silent un Messaggio Privato  Rispondi Quotando
la prima realizzazione è giusta solo che dovresti modificare le case di q1 e q4 così:

case q1:
if(s[i]=='0')
current_state=q2;
else if (s[i] != 1)
{printf("\nla stringa contiene simboli esterni all'alfabeto");
current_state==pozza;
}
break;

case q4:
if (s[i]=='0' || s[i]=='1')
current_state=q4;
else
{printf("\nla stringa contiene simboli esterni all'alfabeto");
current_state==pozza;
}
break;

Rivoluzione? Rivoluzione? Per favore, non parlarmi tu di rivoluzione! Io so benissimo cosa sono e come cominciano: c'e qualcuno che sa leggere i libri che va da quelli che non sanno leggere i libri, che poi sono i poveracci, e gli dice: << Oh, oh, e' venuto il momento di cambiare tutto >> [...] Io so quello che dico, ci son cresciuto in mezzo, alle rivoluzioni. Quelli che leggono i libri vanno da quelli che non leggono i libri, i poveracci, e gli dicono: << Qui ci vuole un cambiamento! >> e la povera gente fa il cambiamento. E poi i piu' furbi di quelli che leggono i libri si siedono intorno a un tavolo, e parlano, parlano, e mangiano. Parlano e mangiano! E intanto che fine ha fatto la povera gente? Tutti morti! Ecco la tua rivoluzione! Quindi per favore, non parlarmi piu' di rivoluzione...E porca troia, lo sai che succede dopo? Niente...tutto torna come prima". Juan Miranda - Giù la testa -

Modificato da - silent in data
Torna all'inizio della Pagina

iperattivo
Utente medio


Regione: Puglia
Prov.: Bari
Città: ba


Inserito il - 21/01/2006 : 12:54:49  Mostra Profilo  Visita l'Homepage di iperattivo Invia a iperattivo un Messaggio Privato  Rispondi Quotando
tu sei sicuro di questo? poi i due messaggi nn vengono visualizzati insieme???

ghjkl
Torna all'inizio della Pagina

silent
Utente assiduo

tartaruga


Regione: Puglia
Prov.: Bari
Città: Andria


Inserito il - 21/01/2006 : 12:57:00  Mostra Profilo  Visita l'Homepage di silent Invia a silent un Messaggio Privato  Rispondi Quotando
no, fai una prova e vedi, io l'ho fatta e mi esce il risultato richiesto

Rivoluzione? Rivoluzione? Per favore, non parlarmi tu di rivoluzione! Io so benissimo cosa sono e come cominciano: c'e qualcuno che sa leggere i libri che va da quelli che non sanno leggere i libri, che poi sono i poveracci, e gli dice: << Oh, oh, e' venuto il momento di cambiare tutto >> [...] Io so quello che dico, ci son cresciuto in mezzo, alle rivoluzioni. Quelli che leggono i libri vanno da quelli che non leggono i libri, i poveracci, e gli dicono: << Qui ci vuole un cambiamento! >> e la povera gente fa il cambiamento. E poi i piu' furbi di quelli che leggono i libri si siedono intorno a un tavolo, e parlano, parlano, e mangiano. Parlano e mangiano! E intanto che fine ha fatto la povera gente? Tutti morti! Ecco la tua rivoluzione! Quindi per favore, non parlarmi piu' di rivoluzione...E porca troia, lo sai che succede dopo? Niente...tutto torna come prima". Juan Miranda - Giù la testa -
Torna all'inizio della Pagina

iperattivo
Utente medio


Regione: Puglia
Prov.: Bari
Città: ba


Inserito il - 21/01/2006 : 12:59:12  Mostra Profilo  Visita l'Homepage di iperattivo Invia a iperattivo un Messaggio Privato  Rispondi Quotando
ok ora vedo un po...

ghjkl
Torna all'inizio della Pagina

silent
Utente assiduo

tartaruga


Regione: Puglia
Prov.: Bari
Città: Andria


Inserito il - 21/01/2006 : 13:01:56  Mostra Profilo  Visita l'Homepage di silent Invia a silent un Messaggio Privato  Rispondi Quotando
solo nel caso in cui scriverai simboli diversi da 0 e 1 visualizzerà due messaggi, ma comunque l'esercizio è corretto

Rivoluzione? Rivoluzione? Per favore, non parlarmi tu di rivoluzione! Io so benissimo cosa sono e come cominciano: c'e qualcuno che sa leggere i libri che va da quelli che non sanno leggere i libri, che poi sono i poveracci, e gli dice: << Oh, oh, e' venuto il momento di cambiare tutto >> [...] Io so quello che dico, ci son cresciuto in mezzo, alle rivoluzioni. Quelli che leggono i libri vanno da quelli che non leggono i libri, i poveracci, e gli dicono: << Qui ci vuole un cambiamento! >> e la povera gente fa il cambiamento. E poi i piu' furbi di quelli che leggono i libri si siedono intorno a un tavolo, e parlano, parlano, e mangiano. Parlano e mangiano! E intanto che fine ha fatto la povera gente? Tutti morti! Ecco la tua rivoluzione! Quindi per favore, non parlarmi piu' di rivoluzione...E porca troia, lo sai che succede dopo? Niente...tutto torna come prima". Juan Miranda - Giù la testa -
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,19 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000