-Yara-
05-04-2005, 22:33
Salve a tutti.
Spero mi aiutiate a risolvere un problema :)
Si tratta di scrivere un programma in C++ che simuli il funzionamento di un automa.
In pratica, date 2 matrici di char, una contenente gli input (inseriti da tastiera) e una contenente gli stati (sempre inseriti da tastiera) il programma deve confrontare tutti gli elementi delle due matrici con altre due stringhe, sempre date in input, e con esse trovare le "coordinate" per la loro collocazione nella matrice (di char) delle uscite.
Questo è il codice che ho prodotto fin'ora:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define DIM 3
#define DIM2 3
//automa
using namespace std;
void caricamento(char[][DIM2],char[][DIM2],char[][DIM2],char[][DIM2]);
void simulazione(char[][DIM2],char[][DIM2],char[][DIM2],char[][DIM2],int&,int&);
//void uscite(int,int,char[][DIM2],char[][DIM2]);
int main(void)
{
char input[DIM][DIM2],stati[DIM][DIM2],matr_stato[DIM][DIM2],matr_uscite[DIM][DIM2];
char risp;
int scelta,lol,lol2;
do{
cout<<"Programma automa "<<endl;
cout<<"1-carticamento vettori e matrici. "<<endl;
cout<<"2-simulaz."<<endl;
cout<<"3-Uscite. "<<endl;
cout<<"4-Esci. "<<endl;
cin>>scelta;
switch(scelta)
{
case 1:caricamento(input,stati,matr_stato,matr_uscite);break;
case 2:simulazione(input,stati,matr_stato,matr_uscite,lol,lol2);break;
//case 3:uscite(lol,lol2,matr_stato,matr_uscite);break;
case 4:exit(0);break;
}
cout<<"\nContinuare? "<<endl;
cin>>risp;
}while(risp=='s');
getchar();
}
//******************************************************************************
void caricamento(char input[][DIM2],char stati[][DIM2],char matr_stato[][DIM2],char matr_uscite[][DIM2])
{
int i,j,lenght1,lenght2;
bool trovato=false;
//valori di input
cout<<"Valori di input: "<<endl;
cin.ignore();
for(i=0;i<DIM;i++)
{
do{
cout<<i<<" : ";
gets(input[i]);
for(j=0;j<i;j++)
{
if(strcmp(input[i],input[j])==0)
{
trovato=true;
break;
}
}
}while(trovato==true);
}
//valori di stato
cout<<"Valori di stato "<<endl;
do{
for(i=0;i<DIM;i++)
{
cout<<i<<" : ";
gets(stati[i]);
for(j=0;j<i;j++)
{
if(strcmp(stati[i],stati[j])==0)
{
trovato=true;
break;
}
}
}
}while(trovato==true);
}
//******************************************************************************
void simulazione(char input[][DIM2],char stats[][DIM2],char matr_stato[][DIM2],char matr_uscite[][DIM2],int& lol,int& lol2)
{
int i,j;
char input2[DIM2],stato2[DIM2];
cout<<"Inserisci l'input: "<<endl;
cin>>input2;
/*ciclo per la ricerca dell'input
inserito dall'utente nella matrice di char contenente
tutti gli input inseriti precedentemente */
for(i=0;i<DIM;i++)
{
if(strcmp(input[i],input2)==0) lol=i;
else lol=-1;
}
cout<<"Posizione trovata: "<<lol<<endl;
cout<<"Inserisci lo stato: "<<endl;
cin>>stato2;
/*ciclo per la ricerca dello stato
inserito dall'utente nella matrice di char contenente
tutti gli stati inseriti precedentemente */
for(i=0;i<DIM;i++)
{
if(strcmp(stats[i],stato2)==0) lol2=i;
else lol2=-1;
}
cout<<"Posizione trovata: "<<lol2;
getchar();
}
Ho pero' un problema nella funzione simulazione perchè qualsiasi valore inserisca, mi stampa sempre -1 (cioè non ha trovato nulla) e sinceramente non so perchè, pensavo fosse un mio sbagliato utilizzo di strcmp, ma mi sono guardato i valori di ritorno qua (http://www.cplusplus.com/ref/cstring/strcmp.html) e non mi sembra di aver fatto errori :(.
Ringrazio in anticipo chi mi vorrà aiutare..
Spero mi aiutiate a risolvere un problema :)
Si tratta di scrivere un programma in C++ che simuli il funzionamento di un automa.
In pratica, date 2 matrici di char, una contenente gli input (inseriti da tastiera) e una contenente gli stati (sempre inseriti da tastiera) il programma deve confrontare tutti gli elementi delle due matrici con altre due stringhe, sempre date in input, e con esse trovare le "coordinate" per la loro collocazione nella matrice (di char) delle uscite.
Questo è il codice che ho prodotto fin'ora:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define DIM 3
#define DIM2 3
//automa
using namespace std;
void caricamento(char[][DIM2],char[][DIM2],char[][DIM2],char[][DIM2]);
void simulazione(char[][DIM2],char[][DIM2],char[][DIM2],char[][DIM2],int&,int&);
//void uscite(int,int,char[][DIM2],char[][DIM2]);
int main(void)
{
char input[DIM][DIM2],stati[DIM][DIM2],matr_stato[DIM][DIM2],matr_uscite[DIM][DIM2];
char risp;
int scelta,lol,lol2;
do{
cout<<"Programma automa "<<endl;
cout<<"1-carticamento vettori e matrici. "<<endl;
cout<<"2-simulaz."<<endl;
cout<<"3-Uscite. "<<endl;
cout<<"4-Esci. "<<endl;
cin>>scelta;
switch(scelta)
{
case 1:caricamento(input,stati,matr_stato,matr_uscite);break;
case 2:simulazione(input,stati,matr_stato,matr_uscite,lol,lol2);break;
//case 3:uscite(lol,lol2,matr_stato,matr_uscite);break;
case 4:exit(0);break;
}
cout<<"\nContinuare? "<<endl;
cin>>risp;
}while(risp=='s');
getchar();
}
//******************************************************************************
void caricamento(char input[][DIM2],char stati[][DIM2],char matr_stato[][DIM2],char matr_uscite[][DIM2])
{
int i,j,lenght1,lenght2;
bool trovato=false;
//valori di input
cout<<"Valori di input: "<<endl;
cin.ignore();
for(i=0;i<DIM;i++)
{
do{
cout<<i<<" : ";
gets(input[i]);
for(j=0;j<i;j++)
{
if(strcmp(input[i],input[j])==0)
{
trovato=true;
break;
}
}
}while(trovato==true);
}
//valori di stato
cout<<"Valori di stato "<<endl;
do{
for(i=0;i<DIM;i++)
{
cout<<i<<" : ";
gets(stati[i]);
for(j=0;j<i;j++)
{
if(strcmp(stati[i],stati[j])==0)
{
trovato=true;
break;
}
}
}
}while(trovato==true);
}
//******************************************************************************
void simulazione(char input[][DIM2],char stats[][DIM2],char matr_stato[][DIM2],char matr_uscite[][DIM2],int& lol,int& lol2)
{
int i,j;
char input2[DIM2],stato2[DIM2];
cout<<"Inserisci l'input: "<<endl;
cin>>input2;
/*ciclo per la ricerca dell'input
inserito dall'utente nella matrice di char contenente
tutti gli input inseriti precedentemente */
for(i=0;i<DIM;i++)
{
if(strcmp(input[i],input2)==0) lol=i;
else lol=-1;
}
cout<<"Posizione trovata: "<<lol<<endl;
cout<<"Inserisci lo stato: "<<endl;
cin>>stato2;
/*ciclo per la ricerca dello stato
inserito dall'utente nella matrice di char contenente
tutti gli stati inseriti precedentemente */
for(i=0;i<DIM;i++)
{
if(strcmp(stats[i],stato2)==0) lol2=i;
else lol2=-1;
}
cout<<"Posizione trovata: "<<lol2;
getchar();
}
Ho pero' un problema nella funzione simulazione perchè qualsiasi valore inserisca, mi stampa sempre -1 (cioè non ha trovato nulla) e sinceramente non so perchè, pensavo fosse un mio sbagliato utilizzo di strcmp, ma mi sono guardato i valori di ritorno qua (http://www.cplusplus.com/ref/cstring/strcmp.html) e non mi sembra di aver fatto errori :(.
Ringrazio in anticipo chi mi vorrà aiutare..