|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2451
|
[C++]Programma automa
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: Codice:
#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();
}
Ringrazio in anticipo chi mi vorrà aiutare..
__________________
Me? The Chosen One? They chose me, and i didn't even graduate from fuckin' high school Wind FTTE Vula 100/20 - Stats Retelit / Valcanale 20Mbit/2Mbit // Wind 100/20+Wind4G con EdgerouterX |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 349
|
se lo trova è un ciclo infinito... devi mettere dopo il for trovato=false??
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2451
|
Quote:
Comunque non mi riferivo a quella funzione, bensi alla funzione "simulazione".
__________________
Me? The Chosen One? They chose me, and i didn't even graduate from fuckin' high school Wind FTTE Vula 100/20 - Stats Retelit / Valcanale 20Mbit/2Mbit // Wind 100/20+Wind4G con EdgerouterX |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 349
|
ma cin>>imput2 e dopo confronti input2 (che è un char) con input[](stringa) è sempre diverso
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2451
|
Quote:
__________________
Me? The Chosen One? They chose me, and i didn't even graduate from fuckin' high school Wind FTTE Vula 100/20 - Stats Retelit / Valcanale 20Mbit/2Mbit // Wind 100/20+Wind4G con EdgerouterX |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 349
|
si ma abc è na stringa devi dichiarare input2 na stringa e fare gets(input2);
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2451
|
Ma mi ricordavo che cin andava bene per una stringa senza spazi....oppure prende solo il primo carattere?
E cin.getline(input2,DIM2); non funziona ugualmente....
__________________
Me? The Chosen One? They chose me, and i didn't even graduate from fuckin' high school Wind FTTE Vula 100/20 - Stats Retelit / Valcanale 20Mbit/2Mbit // Wind 100/20+Wind4G con EdgerouterX |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2451
|
up
__________________
Me? The Chosen One? They chose me, and i didn't even graduate from fuckin' high school Wind FTTE Vula 100/20 - Stats Retelit / Valcanale 20Mbit/2Mbit // Wind 100/20+Wind4G con EdgerouterX |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
|
il problema sta nel for...
questa è la correzione che farei io Codice:
for(i=0;i<DIM;i++)
{
if(strcmp(input[i],input2)==0)
{
lol=i;
break;
}
else lol=-1;
}
Codice:
lol=-1; for(i=0;i<DIM;i++)if(strcmp(input[i],input2)==0) lol=i; Ciao... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:39.



















