| Autore |
Discussione  |
|
|
Kevin82
Nuovo Utente

Regione: Calabria
Prov.: Cosenza
Città: Rossano
|
Inserito il - 10/06/2005 : 18:17:27
|
raga vi allego le soluzioni dei 3 quesiti che Lops e Colleghi vi hanno dato allo scorso appello di Linguaggi Scusate il ritardo Prova di laboratorio di Linguaggi di Programmazione [durata 60 min.] Appello – 30 Maggio 2005 - A.A. 2004/05
Implementare in linguaggio C il seguente automa, definito sull’alfabeto X = A #61640; N #61640; {.}, dove A è l’insieme delle lettere minuscole ed N è l’insieme delle cifre decimali.
Modalità di consegna: Salvare il programma sorgente in una cartella sul desktop utilizzando come nome della cartella e del file sorgente il corso (A,B,C), cognome, nome e numero di matricola
Codice #include <stdio.h> #include <stdlib.h>
#define MAX_LENGTH 100
int scan(char* s) { enum {Q0,Q1,Q2,Q3,Q4,Q5,POZZA} current_state = Q0; int i = 0; while ((s[i]!='\0' && s[i]!='\n') && current_state != POZZA) { switch(current_state) { case Q0: if ((s[i] >= 'a' && s[i] <= 'z')||(s[i] >= 'A' && s[i] <= 'Z')) current_state =Q1; else current_state = POZZA; break; case Q1: if (s[i] >= '1' && s[i] <= '9') current_state =Q2; else if (s[i] == '.') current_state = Q5; else current_state = POZZA; break; case Q2: if ((s[i] >= 'a' && s[i] <= 'z')||(s[i] >= 'A' && s[i] <= 'Z')) current_state=Q3; else current_state=POZZA; break; case Q3: if(s[i] >= '1' && s[i] <= '9') current_state=Q4; else current_state=POZZA; break; case Q4: if ((s[i] >= 'a' && s[i] <= 'z')||(s[i] >= 'A' && s[i] <= 'Z')) current_state=Q1; else current_state=POZZA; break; case Q5: if (s[i] >= '1' && s[i] <= '9') current_state=Q5; else current_state=POZZA; break;
} ++i; } return (current_state ==Q5); }
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; } Codice funzione di scan int scan(char* s) { enum {Q0,Q1,Q2,Q3,Q4,POZZA} current_state = Q0; int i = 0; while ((s[i]!='\0' && s[i]!='\n') && current_state != POZZA) { switch(current_state) {
case Q0: if (s[i] >= '1' && s[i] <= '9') current_state =Q3; else if ((s[i] >= 'a' && s[i] <= 'z')||(s[i] >= 'A' && s[i] <= 'Z')) current_state = Q1; else current_state = POZZA; break; case Q1: if ((s[i] >= 'a' && s[i] <= 'z')||(s[i] >= 'A' && s[i] <= 'Z')) current_state=Q2; else current_state=POZZA; break; case Q2: if((s[i] >= 'a' && s[i] <= 'z')||(s[i] >= 'A' && s[i] <= 'Z')) current_state=Q0; else current_state=POZZA; break; case Q3: if (s[i] >= '1' && s[i] <= '9') current_state=Q4; else current_state=POZZA; break; case Q4: if (s[i] >= '1' && s[i] <= '9') current_state=Q0; else current_state=POZZA; break;
} ++i; } return (current_state ==Q0); }
Prova di laboratorio di Linguaggi di Programmazione [durata 60 min.] Appello – 30 Maggio 2005 - A.A. 2004/05
Implementare in linguaggio C il seguente automa, definito sull’alfabeto X = A #61640; N #61640; {@}, dove A è l’insieme delle lettere maiuscole ed N è l’insieme delle cifre ottali (le cifre comprese tra 0 e 7).
Modalità di consegna: Salvare il programma sorgente in una cartella sul desktop utilizzando come nome della cartella e del file sorgente il corso (A,B,C), cognome, nome e numero di matricola (Esempio: lo studente Rossi Mario del corso C, matricola 999999, chiamerà cartella e file C_Rossi_Mario_999999).
Codice della funzione di scan int scan(char* s) { enum {Q0,Q1,Q2,Q3,Q4,POZZA} current_state = Q0; int i = 0; while ((s[i]!='\0' && s[i]!='\n') && current_state != POZZA) { switch(current_state) {
case Q0: if (s[i] >= 'A' && s[i] <= 'Z') current_state =Q1; else current_state = POZZA; break; case Q1: if (s[i] >= '0' && s[i] <= '7') current_state =Q1; else if (s[i]=='@') current_state=Q2 ; else current_state = POZZA; break; case Q2: if (s[i] >= 'A' && s[i] <= 'Z') current_state =Q3; else current_state = POZZA; break; case Q3: if (s[i] >= '0' && s[i] <= '7') current_state =Q3; else current_state = POZZA; break;
} ++i; } return (current_state ==Q3); }
|
Kevin82 |
|
|
rel
Utente assiduo
  

|
Inserito il - 10/06/2005 : 20:39:19
|
Ovviamente per una migliore valutazione tutto il codice va correttamente indentato e commentato!  {come sono professionale oramai.. } |
Modificato da - rel in data |
 |
|
|
rel
Utente assiduo
  

|
Inserito il - 11/06/2005 : 16:30:41
|
| Rispondendo alla tua domanda nel messaggio pvt mi son scordato di dirti che è migliore la valutazione anche se usi funzioni come isdigit, isalnum (quelle incluse in ctype.h insomma) al posto di scrivere (c>='A' && c<='Z')! Ciao |
 |
|
|
falco_85
Utente giovane

Regione: Puglia
Prov.: Bari
|
Inserito il - 12/06/2005 : 20:56:54
|
| ma sarebbe ancora meglio se potessi vedere gli automi,così magari ci capirei qualcosa |
 |
|
|
rel
Utente assiduo
  

|
Inserito il - 13/06/2005 : 09:32:39
|
| ? |
 |
|
|
lops
Nuovo Utente
|
Inserito il - 13/06/2005 : 13:36:21
|
Attenzione alle richieste delle diverse tracce:
La traccia n. 1 ad esempio chiede di accettare lettere minuscole e cifre decimali. L'automa riportato è sbagliato poichè accetta sia lettere minuscole che maiuscole, e come cifre non accetta lo zero, che invece è una cifra decimale.
Saluti
Citazione: Messaggio inserito da Kevin82
raga vi allego le soluzioni dei 3 quesiti che Lops e Colleghi vi hanno dato allo scorso appello di Linguaggi Scusate il ritardo Prova di laboratorio di Linguaggi di Programmazione [durata 60 min.] Appello – 30 Maggio 2005 - A.A. 2004/05
Implementare in linguaggio C il seguente automa, definito sull’alfabeto X = A #61640; N #61640; {.}, dove A è l’insieme delle lettere minuscole ed N è l’insieme delle cifre decimali.
Modalità di consegna: Salvare il programma sorgente in una cartella sul desktop utilizzando come nome della cartella e del file sorgente il corso (A,B,C), cognome, nome e numero di matricola
Codice #include <stdio.h> #include <stdlib.h>
#define MAX_LENGTH 100
int scan(char* s) { enum {Q0,Q1,Q2,Q3,Q4,Q5,POZZA} current_state = Q0; int i = 0; while ((s[i]!='\0' && s[i]!='\n') && current_state != POZZA) { switch(current_state) { case Q0: if ((s[i] >= 'a' && s[i] <= 'z')||(s[i] >= 'A' && s[i] <= 'Z')) current_state =Q1; else current_state = POZZA; break; case Q1: if (s[i] >= '1' && s[i] <= '9') current_state =Q2; else if (s[i] == '.') current_state = Q5; else current_state = POZZA; break; case Q2: if ((s[i] >= 'a' && s[i] <= 'z')||(s[i] >= 'A' && s[i] <= 'Z')) current_state=Q3; else current_state=POZZA; break; case Q3: if(s[i] >= '1' && s[i] <= '9') current_state=Q4; else current_state=POZZA; break; case Q4: if ((s[i] >= 'a' && s[i] <= 'z')||(s[i] >= 'A' && s[i] <= 'Z')) current_state=Q1; else current_state=POZZA; break; case Q5: if (s[i] >= '1' && s[i] <= '9') current_state=Q5; else current_state=POZZA; break;
} ++i; } return (current_state ==Q5); }
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; } Codice funzione di scan int scan(char* s) { enum {Q0,Q1,Q2,Q3,Q4,POZZA} current_state = Q0; int i = 0; while ((s[i]!='\0' && s[i]!='\n') && current_state != POZZA) { switch(current_state) {
case Q0: if (s[i] >= '1' && s[i] <= '9') current_state =Q3; else if ((s[i] >= 'a' && s[i] <= 'z')||(s[i] >= 'A' && s[i] <= 'Z')) current_state = Q1; else current_state = POZZA; break; case Q1: if ((s[i] >= 'a' && s[i] <= 'z')||(s[i] >= 'A' && s[i] <= 'Z')) current_state=Q2; else current_state=POZZA; break; case Q2: if((s[i] >= 'a' && s[i] <= 'z')||(s[i] >= 'A' && s[i] <= 'Z')) current_state=Q0; else current_state=POZZA; break; case Q3: if (s[i] >= '1' && s[i] <= '9') current_state=Q4; else current_state=POZZA; break; case Q4: if (s[i] >= '1' && s[i] <= '9') current_state=Q0; else current_state=POZZA; break;
} ++i; } return (current_state ==Q0); }
Prova di laboratorio di Linguaggi di Programmazione [durata 60 min.] Appello – 30 Maggio 2005 - A.A. 2004/05
Implementare in linguaggio C il seguente automa, definito sull’alfabeto X = A #61640; N #61640; {@}, dove A è l’insieme delle lettere maiuscole ed N è l’insieme delle cifre ottali (le cifre comprese tra 0 e 7).
Modalità di consegna: Salvare il programma sorgente in una cartella sul desktop utilizzando come nome della cartella e del file sorgente il corso (A,B,C), cognome, nome e numero di matricola (Esempio: lo studente Rossi Mario del corso C, matricola 999999, chiamerà cartella e file C_Rossi_Mario_999999).
Codice della funzione di scan int scan(char* s) { enum {Q0,Q1,Q2,Q3,Q4,POZZA} current_state = Q0; int i = 0; while ((s[i]!='\0' && s[i]!='\n') && current_state != POZZA) { switch(current_state) {
case Q0: if (s[i] >= 'A' && s[i] <= 'Z') current_state =Q1; else current_state = POZZA; break; case Q1: if (s[i] >= '0' && s[i] <= '7') current_state =Q1; else if (s[i]=='@') current_state=Q2 ; else current_state = POZZA; break; case Q2: if (s[i] >= 'A' && s[i] <= 'Z') current_state =Q3; else current_state = POZZA; break; case Q3: if (s[i] >= '0' && s[i] <= '7') current_state =Q3; else current_state = POZZA; break;
} ++i; } return (current_state ==Q3); }
|
 |
|
| |
Discussione  |
|
|
|