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

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista Inserisci Faccine
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Smilies
Approvazione [^] Arrabbiato [:(!] Bacio [:X] Bevuta [:273]
Caldo [8D] Compiaciuto [8)]    
compleanno [:269]
Davvero Felice [:D] Diavoletto [}:)] Disapprovazione [V] Domanda [?]
Felice [:)] Fumata [:29] Goloso [:P] Imbarazzato [:I]
Infelice [:(] Morte improvvisa da [:62]
Morto [xx(] Occhio Nero [B)] Occhiolino [;)] Palla 8 [8]
pc [:205]    
Riproduzione [:76]
Scioccato [:O]      

   Allega file
  Clicca qui per inserire la tua firma nel messaggio.
Clicca qui per sottoscrivere questa Discussione.
    

V I S U A L I Z Z A    D I S C U S S I O N E
iperattivo 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;
}
5   U L T I M E    R I S P O S T E    (in alto le più recenti)
silent 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
iperattivo Inserito il - 21/01/2006 : 12:59:12
ok ora vedo un po...
silent Inserito il - 21/01/2006 : 12:57:00
no, fai una prova e vedi, io l'ho fatta e mi esce il risultato richiesto
iperattivo Inserito il - 21/01/2006 : 12:54:49
tu sei sicuro di questo? poi i due messaggi nn vengono visualizzati insieme???
silent 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;

Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,08 secondi.

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