Autore |
Discussione  |
|
iperattivo
Utente medio
 
Regione: Puglia
Prov.: Bari
Città: ba
|
Inserito il - 21/01/2006 : 12:32:54
|
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
  

Regione: Puglia
Prov.: Bari
Città: Andria
|
Inserito il - 21/01/2006 : 12:51:23
|
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 |
 |
|
iperattivo
Utente medio
 
Regione: Puglia
Prov.: Bari
Città: ba
|
Inserito il - 21/01/2006 : 12:54:49
|
tu sei sicuro di questo? poi i due messaggi nn vengono visualizzati insieme??? |
ghjkl |
 |
|
silent
Utente assiduo
  

Regione: Puglia
Prov.: Bari
Città: Andria
|
Inserito il - 21/01/2006 : 12:57:00
|
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 - |
 |
|
iperattivo
Utente medio
 
Regione: Puglia
Prov.: Bari
Città: ba
|
Inserito il - 21/01/2006 : 12:59:12
|
ok ora vedo un po... |
ghjkl |
 |
|
silent
Utente assiduo
  

Regione: Puglia
Prov.: Bari
Città: Andria
|
Inserito il - 21/01/2006 : 13:01:56
|
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 - |
 |
|
|
Discussione  |
|
|
|