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
 dfa

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
titty2008 Inserito il - 04/09/2008 : 11:08:20
ho provato a compilare questo programma:
#include<stdio.h>
#include<stdlib.h>

#define MAX_LENGTH 100

int scan(char* s)
{
enum {S, A, B, C, D, POZZA}current_state=S;
int i=0;

while ((s[i] != '\0' && s[i] != '\n') && current_state != POZZA)
{
switch(current_state)
{
case S:
if (s[i]== '1' )
current_state = S;
else if (s[i] == '0')
current_state = A;
else
{
printf("\n la stringa contiene simboli esterni all'alfabeto! \n");
current_state = POZZA;
}
break;

case A:
if (s[i]== '0' )
current_state = B;
else if (s[i] != '1')
printf("\n la stringa contiene simboli esterni all'alfabeto! \n");
else
current_state = POZZA;
break;

case B:
if (s[i]== '0' )
current_state = B;
else if (s[i] == '1')
current_state = C;
else
{
printf("\n la stringa contiene simboli esterni all'alfabeto! \n");
current_state = POZZA;
}
break;

case C:
if (s[i]== '0' )
current_state = A;
else if (s[i] == '1')
current_state = D;
else
{
printf("\n la stringa contiene simboli esterni all'alfabeto! \n");
current_state = POZZA;
}
break;

case D:
if (s[i]== '0' || s[i] == '1' )
current_state = D;
else
{
printf("\n la stringa contiene simboli esterni all'alfabeto! \n");
current_state = POZZA;
}
break;
}
++i;
}
if (current_state == POZZA)
printf ("\n Si è giunti nello stato pozza! \n");
else if (current_state == S || current_state == A || current_state == B || current_state == C)
printf("\n Si è giunti ad uno stato non finale \n");
return(current_state == D);
}

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

file = fopen("c:\Documents and Settings\alicetuttoincluso\Desktop\dfa.txt","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;
}

non mi da nessuno errore, ma perchè non me lo esegue?
sicuramente faccio qualche errore con i file, c'è qualcuno che mi può spiegare l'errore?
tra l'altro questo è una delle soluzioni di un esame di laboratorio messa in rete...
grazie e ciao a tutti...
12   U L T I M E    R I S P O S T E    (in alto le più recenti)
titty2008 Inserito il - 09/09/2008 : 09:33:45
ma io al prof non glielo invio così, gli scriverò filename... è normale... qui lo sto scrivendo a voi per farvi capire come io apro il file, ancora sto commetendo qualche errore, dato che il programma non gira come dovrebbe... e secondo me gli errori che commetto sono proprio nella gestione dei file...
Stewie83 Inserito il - 09/09/2008 : 02:46:17
spiegami perchè hai modificato l'inserimento del file in input passandogli il path del tuo computer...sai che se lo invii al prof così come lo stai facendo te non gli funzionerà mai!!!!
titty2008 Inserito il - 08/09/2008 : 10:36:47
lo so, sono molto stressante, ma il professore questa settimana non c'è, e non so a chi chiedere ogni mio dubbio... e non mi va di aspettare senza far niente fino a martedì prossimo...
qui vi inserisco il programma che verifica se una grammatica è C.F.

/*
GrammarReader
v. 1.2.2
Corrado Mencar, Pasquale Lops
*/

#include <stdio.h>

#define MAX_WORD_LENGTH 100
#define MAX_PRODUCTIONS 100

// Definizione dei tipi ------------------------------------------------------*/

typedef char Symbol;

typedef struct
{
Symbol word [MAX_WORD_LENGTH];
unsigned length;
} Word;

typedef struct
{
Word left;
Word right;
} Production;

typedef struct
{
Production productions[MAX_PRODUCTIONS];
unsigned numprod;
} Grammar;

// Procedure di riconoscimento dei simboli -----------------------------------*/

int is_terminal(Symbol s)
{
//return (islower(s));
return (s >= 'a') && (s <= 'z');
}

int is_nonterminal(Symbol s)
{
//return (isupper(s));
return (s >= 'A') && (s <= 'Z');
}

int is_prodsym(Symbol s)
{
return (s == '>');
}

int is_prodsep(Symbol s)
{
return (s == '\n');
}


/* Lettura di simboli da file ------------------------------------------------*/

Symbol read_sym(FILE* file)
{
Symbol s;

// fscanf(file,"%c",&s);

//questo ciclo permette di saltare la lettura di spazi tra i simboli
do
s = getc(file);
while (s==' ');

return s;
}

Production* add_new_production(Grammar *g)
{
Production* p;
p = &(g->productions[g->numprod++]);
p->left.length = 0;
p->right.length = 0;

return p;
}


void add_symbol(Word *w, Symbol s)
{
w->word[w->length++] = s;
}


// Procedura di acquisizione di una grammatica da un file --------------------*/

Grammar* load_grammar(FILE* file, Grammar* g)
{
enum States {START,LEFT,RIGHT,ERROR};
/* START = Scansione di una nuova produzione [F]
LEFT = Scansione della parte sinistra
RIGHT = Scansione della parte destra [F]
ERROR = Errore di scansione
*/
enum States current_state = START; // Stato iniziale
Symbol s;
Production* p;

g->numprod = 0; // Inizializza la grammatica

while (current_state != ERROR && !feof(file))
{
s = read_sym(file);
if (feof(file)) break;
switch(current_state)
{
case START:
if (is_terminal(s) || is_nonterminal(s))
{
current_state = LEFT;

//p = &(g->productions[g->numprod++]);
//p->left.length = 0;
p = add_new_production(g);
add_symbol(&p->left,s);
//L'istruzione precedente corrisponde a p->left.word[p->left.length++] = s;
}
else if (is_prodsep(s))
{
current_state = START;
}
else
current_state = ERROR;
break;
case LEFT:
if (is_terminal(s) || is_nonterminal(s))
{
current_state = LEFT;
add_symbol(&p->left,s);
}
else if (is_prodsym(s))
{
current_state = RIGHT;
}
else
current_state = ERROR;
break;
case RIGHT:
if (is_terminal(s) || is_nonterminal(s))
{
current_state = RIGHT;
add_symbol(&p->right,s);
}
else if (is_prodsep(s))
{
current_state = START;
}
else
current_state = ERROR;
break;
}
}

if (current_state == START || current_state == RIGHT)
return g;
else
return NULL;

}

// Procedure di stampa

void print_sym (Symbol s)
{
printf("%c ",s);
}


void print_word (Word* w)
{
int i;

for (i=0; i<w->length; i++)
print_sym(w->word[i]);
}

void print_production (Production* p)
{
print_word(&p->left);
printf (" --> ");
print_word(&p->right);
}

void print_grammar(Grammar* g)
{
int i;

if (g == NULL)
printf ("Errore! Grammatica non valida! \n");
else
{
printf ("Numero di produzioni: %d\n", g->numprod);
for (i=0; i<g->numprod; i++)
{
print_production(&g->productions[i]);
printf ("\n");
}
}
}

// CF
int is_contextfreeproduction(Production* p)
{
if (p->left.length==1 && is_nonterminal(p->left.word[0]))
return 1;
else return 0;
}


int is_contextfreegrammar(Grammar* g)
{
int i=0;
if (g == NULL)
{
printf ("Errore: grammatica non valida \n");
return 0;
}
for (i=0; i < g->numprod; i++)
if (!is_contextfreeproduction(&g->productions[i]))
return 0;
return 1;
}


// MAIN ------------------------------------------------------------------------

int main(int argc, char *argv[])
{
char* filename = argv[1];
FILE* gram_file;
Grammar grammar;

// controlla se è stato inserito il nome del file

if ("c:Documents and SettingsalicetuttoinclusoDesktopcf.txt" == 0)
{
printf("nome file non specificato \n");
return -1;
}

// apertura del file contenente la grammatica

gram_file = fopen("c:Documents and SettingsalicetuttoinclusoDesktopcf.txt","r");
if (gram_file == NULL)
{
printf("nome di file errato\n");
return -1;
}

print_grammar(load_grammar(gram_file,&grammar));

fclose(gram_file);

return 0;

}



quando lo eseguo mi visualizza: il numero di produzioni è 4 e mi elenca le 4 produzioni che avevo inserito nel file di testo.
cosa c'è di sbagliato?
ho provato a inserire una grammatica non CF, ma comunque me la visualizza e non mi da nessun messaggio di errore...
grazie ciao
titty2008 Inserito il - 08/09/2008 : 10:05:04
ho provato a fare un altro esercizio e questo me lo esegue... mi dice file inisistente... ora il problema è di creare il file di testo...
e poi non riesco capire perchè questo va e quello che ho scritto a voi qui no... mi esce la maschera con scritto: si è verificato un errore nell'apertura del file. il file verrà chiuso...
bohhhhhh....
va beh, cmq grazie grazie e grazie...
titty2008 Inserito il - 08/09/2008 : 09:52:03
io non so perchè ma a me nn esegue un bel niente... vi ringrazio tantissimo per la collaborazione, siete stati veramente tato gentili...
un ultimo favore...
vi ripeto, mi dispiace se vi possono sembrare domande molto stupide...
ma io il file di testo come lo creo? nel senso: se si tratta di grammar reader inserisco delle produzioni del tipo: S>Ab, ecc..
ma in questo caso come si fa?
grazie ancora tantissimo...
Stewie83 Inserito il - 06/09/2008 : 04:43:08
lascia perdere i consigli di X500....è più facile di quanto tu possa immaginare....

Basta che trascini con il mouse il file .txt da provare direttamente sul file eseguibile .exe e va che è una meraviglia....

P.S:fammi sapere!...per il caffè
X500 Inserito il - 05/09/2008 : 13:16:59
Ed eccoti uno screen del tuo programma:

Immagine:

25,48 KB
Saluti
X500 Inserito il - 05/09/2008 : 13:10:46
Comunque io ho apportato una modifica.. qui:

file = fopen("c:Documents and SettingsalicetuttoinclusoDesktopdfa.txt","r");

Gli "\" sono sbagliati.. Non è un percorso valido quello che hai inserito.

Devi mettere al loro posto questi qua --> "/" (vale la stessa cosa anche per java)

Poi riprova ad eseguire il programma sotto Dos.

A me il programma dava come risultato "file inesistente" ossia entrava in questo controllo qui:

if (file == NULL)
{
printf("file inesistente");
return -1;
}

titty2008 Inserito il - 05/09/2008 : 09:40:21
ti ringrazio tantissimo, sei stato veramente gentile, anche se comunque non lo esegue lo stesso... ho fatto tutto quello che mi hai indicato, ma niente! quando lo vado a dare in esecuzione, è come se non vedesse niente...
eppure è strano, perchè questo esercizio è un esercizio svolto, quindi in teoria dovrebbe funzionare correttamente...
cmq grazie di nuovo...
X500 Inserito il - 04/09/2008 : 13:50:12
Citazione:
Messaggio inserito da titty2008

e come si fa? scusa se ti possono sembrare domande banali, maè il mio primo approccio al c++...
grazie comenque


Il compilatore, qualsiasi esso sia (Turbo C o DevC++), quando ti compila un file con successo, ti crea anche il file eseguibile nomeFile.exe
Con il Dos, punta alla directory che contiene il tuo bel file .exe e lo lanci.
Ad esempio, il tuo file .exe si trova in una cartella in C: che chiameremo Eseguibili.
Fai così da dos:

c: cd Eseguibili
c:EseguibiliNomeFile.exe

A questo punto riesci a vedere quello che ti fa il programma.
Io non ricordo ora quale istruzione ti conviene usare al posto di quel system("Pause").. ma è un problema che capita spesso con il C.

Ciao


Immagine:

19,6 KB
titty2008 Inserito il - 04/09/2008 : 12:05:25
e come si fa? scusa se ti possono sembrare domande banali, maè il mio primo approccio al c++...
grazie comenque
X500 Inserito il - 04/09/2008 : 11:49:38
fai partire il file .exe che ti genera da dos.
Non mantiene il programma in memoria. Lo esegue ed esce subito dall'applicazione senza farti vedere nulla.
quel system("PAUSE") non lo vede manco.

Ciao

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

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