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
 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  

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 04/09/2008 : 11:08:20  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
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...

X500
Utente medio


Regione: Puglia
Prov.: Lecce
Città: Lecce


Inserito il - 04/09/2008 : 11:49:38  Mostra Profilo  Visita l'Homepage di X500 Invia a X500 un Messaggio Privato  Rispondi Quotando
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

"Vorrei vederla riconosciuta, amata, onorata, perché la lingua di Atene non è lingua straniera per Roma... Roma non ebbe vergogna di scrivere e far conoscere che, se essa aveva vinto la Grecia con le armi, la vinta Grecia vinse Roma con le arti e le lettere sue. Greci siamo, ma da tremila anni in Italia stiamo... greco parliamo, ma non perché siamo stranieri, ma perché siamo la più vecchia gente del luogo." (Grecìa Salentina)
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 04/09/2008 : 12:05:25  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
e come si fa? scusa se ti possono sembrare domande banali, maè il mio primo approccio al c++...
grazie comenque
Torna all'inizio della Pagina

X500
Utente medio


Regione: Puglia
Prov.: Lecce
Città: Lecce


Inserito il - 04/09/2008 : 13:50:12  Mostra Profilo  Visita l'Homepage di X500 Invia a X500 un Messaggio Privato  Rispondi Quotando
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

"Vorrei vederla riconosciuta, amata, onorata, perché la lingua di Atene non è lingua straniera per Roma... Roma non ebbe vergogna di scrivere e far conoscere che, se essa aveva vinto la Grecia con le armi, la vinta Grecia vinse Roma con le arti e le lettere sue. Greci siamo, ma da tremila anni in Italia stiamo... greco parliamo, ma non perché siamo stranieri, ma perché siamo la più vecchia gente del luogo." (Grecìa Salentina)
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 05/09/2008 : 09:40:21  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
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...
Torna all'inizio della Pagina

X500
Utente medio


Regione: Puglia
Prov.: Lecce
Città: Lecce


Inserito il - 05/09/2008 : 13:10:46  Mostra Profilo  Visita l'Homepage di X500 Invia a X500 un Messaggio Privato  Rispondi Quotando
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;
}


"Vorrei vederla riconosciuta, amata, onorata, perché la lingua di Atene non è lingua straniera per Roma... Roma non ebbe vergogna di scrivere e far conoscere che, se essa aveva vinto la Grecia con le armi, la vinta Grecia vinse Roma con le arti e le lettere sue. Greci siamo, ma da tremila anni in Italia stiamo... greco parliamo, ma non perché siamo stranieri, ma perché siamo la più vecchia gente del luogo." (Grecìa Salentina)
Torna all'inizio della Pagina

X500
Utente medio


Regione: Puglia
Prov.: Lecce
Città: Lecce


Inserito il - 05/09/2008 : 13:16:59  Mostra Profilo  Visita l'Homepage di X500 Invia a X500 un Messaggio Privato  Rispondi Quotando
Ed eccoti uno screen del tuo programma:

Immagine:

25,48 KB
Saluti

"Vorrei vederla riconosciuta, amata, onorata, perché la lingua di Atene non è lingua straniera per Roma... Roma non ebbe vergogna di scrivere e far conoscere che, se essa aveva vinto la Grecia con le armi, la vinta Grecia vinse Roma con le arti e le lettere sue. Greci siamo, ma da tremila anni in Italia stiamo... greco parliamo, ma non perché siamo stranieri, ma perché siamo la più vecchia gente del luogo." (Grecìa Salentina)
Torna all'inizio della Pagina

Stewie83
Utente medio

stewie83

Prov.: Brindisi
Città: Brindisi


Inserito il - 06/09/2008 : 04:43:08  Mostra Profilo  Visita l'Homepage di Stewie83 Invia a Stewie83 un Messaggio Privato  Rispondi Quotando
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è

********a volte è meglio stare in silenzio e passare per deficienti che parlare e dare conferma************************************************
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 08/09/2008 : 09:52:03  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
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...
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 08/09/2008 : 10:05:04  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
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...
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 08/09/2008 : 10:36:47  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

Stewie83
Utente medio

stewie83

Prov.: Brindisi
Città: Brindisi


Inserito il - 09/09/2008 : 02:46:17  Mostra Profilo  Visita l'Homepage di Stewie83 Invia a Stewie83 un Messaggio Privato  Rispondi Quotando
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!!!!

********a volte è meglio stare in silenzio e passare per deficienti che parlare e dare conferma************************************************
Torna all'inizio della Pagina

titty2008
Utente giovane

0129_da_pebbles



Inserito il - 09/09/2008 : 09:33:45  Mostra Profilo  Visita l'Homepage di titty2008 Invia a titty2008 un Messaggio Privato  Rispondi Quotando
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...
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,27 secondi.

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