|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Nov 2011
Messaggi: 5
|
[C++]problema scolastico "automa riconoscitore del linguaggio"
ho scritto tutto il programma ma purtroppo alla fine mi da un errore a cui non riesco a venirne a capo vi scrivo il codice spero che qualcuno più esperto di me riesca a darmi una mano
l'errore me lo trova nella quartultima stringa precisamente : while(s!=6 && risp=1); e l'errore è questo main.cpp In function `int main(int, char**)': main.cpp non-lvalue in assignment Makefile.win [Build Error] [main.o] Error 1 Codice:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{int s,risp;
char car;
s=0;
cout<<"inserire carattere: "<<endl;
cin>>car;
do
{
switch(s)
{
case 0:
switch(car)
{
case 'a': s=1;
break;
case 'b': s=3;
break;
default : s=6;
}
case 1:
switch(car)
{
case 'b': s=2;
break;
default : s=6;
}
case 2:
switch(car)
{
case 'a': s=1;
break;
case 'c': s=3;
break;
default : s=6;
}
case 3:
switch(car)
{
case 'd': s=4;
break;
default : s=6;
}
case 4:
switch(car)
{
case 'e': s=5;
break;
default : s=6;
}
case 5:
switch(car)
{
case 'd': s=4;
break;
default : s=6;
}
}
if(s=6)
cout<<"l'ultimo carattere digitato crea un'errore nella stringa";
else
{
cout<<"vuoi inserire un'altro carattere?"<<endl<<"1.continuare"<<endl<<"2.non continuare"<<endl<<"inserire numero della risposta";
cin>>risp;
}
}
while(s!=6 && risp=1);
system("PAUSE");
return EXIT_SUCCESS;
}
Ultima modifica di karlo1993a : 16-11-2011 alle 21:18. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
|
Attenzione alla differenza tra operatore di confronto di uguaglianza == e di assegnamento =
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Nov 2011
Messaggi: 5
|
ok ora l'errore alla fine non me lo da più però nonostante io all'inizio digito 'a' mi dice "l'ultimo carattere digitato crea un'errore nella stringa", ma dovrebbe chiedermi di digitare un nuovo carattere... forse ho sbagliato qualcosa nel dichiarare le variabili?
Codice:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{int s,risp;
char car;
s=0;
cout<<"inserire carattere: "<<endl;
cin>>car;
do
{
switch(s)
{
case 0:
switch(car)
{
case 'a': s=1;
break;
case 'b': s=3;
break;
default : s=6;
}
case 1:
switch(car)
{
case 'b': s=2;
break;
default : s=6;
}
case 2:
switch(car)
{
case 'a': s=1;
break;
case 'c': s=3;
break;
default : s=6;
}
case 3:
switch(car)
{
case 'd': s=4;
break;
default : s=6;
}
case 4:
switch(car)
{
case 'e': s=5;
break;
default : s=6;
}
case 5:
switch(car)
{
case 'd': s=4;
break;
default : s=6;
}
}
if(s==6)
cout<<"l'ultimo carattere digitato crea un'errore nella stringa";
else
{
cout<<"vuoi inserire un'altro carattere?"<<endl<<"1.continuare"<<endl<<"2.non continuare"<<endl<<"inserire numero della risposta";
cin>>risp;
}
}
while(s!=6 && risp==1);
system("PAUSE");
return EXIT_SUCCESS;
}
|
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Nov 2011
Messaggi: 5
|
cmq se può servire il problema da risolvere è questo:
(ab)^n c (de)^ m n>=0 m>0 cioè esempio abcde stringa corretta cde stringa corretta abc stringa non corretta abababcdedede corretta abccccdede non corretta nel programma mancherebbe ancora un pezzo alla fine ma prima vorrei risolvere questo problema qua xD |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
|
Mancan dei break... ora tira dritto fino al case 5.
Ti consiglierei anche di tenere un'indentazione più ordinata, aiuta a notare ad occhio differenze nella "forma" dei blocchi simili rendendo più evidenti mancanze di questo tipo, oltre ad aumentare notevolmente la leggibilità.
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Nov 2011
Messaggi: 5
|
oddio grazie 1000 non l'avevo proprio notato xD grazie grazie
cmq visto che mi hai parlato di indentatura mi potresti dare qualche consiglio su come andrebbe indentato per capire meglio? Codice:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{int s,risp;
char car;
s=0;
do
{
cout<<"inserire carattere: "<<endl;
cin>>car;
switch(s)
{
case 0:
switch(car)
{
case 'a': s=1;
break;
case 'b': s=3;
break;
default : s=6;
break;
}
break;
case 1:
switch(car)
{
case 'b': s=2;
break;
default : s=6;
break;
}
break;
case 2:
switch(car)
{
case 'a': s=1;
break;
case 'c': s=3;
break;
default : s=6;
break;
}
break;
case 3:
switch(car)
{
case 'd': s=4;
break;
default : s=6;
break;
}
break;
case 4:
switch(car)
{
case 'e': s=5;
break;
default : s=6;
break;
}
break;
case 5:
switch(car)
{
case 'd': s=4;
break;
default : s=6;
break;
}
}
if(s==6)
cout<<"l'ultimo carattere digitato crea un'errore nella stringa"<<endl;
else
{
cout<<"vuoi inserire un'altro carattere?"<<endl<<"1.continuare"<<endl<<"2.non continuare"<<endl<<"inserire numero della risposta: ";
cin>>risp;
}
}
while(s!=6 && risp==1);
if(s==5)
cout<<"la stringa e' corretta"<<endl;
else
cout<<"la stringa non e' corretta"<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
|
Questo è lo stile di indentazione che utilizziamo al lavoro (tab impostato a 2 spazi, gli otto usati da questo forum sono troppi, quattro sono considerati ottimi dai più); non si tratta di uno degli stili "standard".
Tieni conto che la scelta viene solitamente fatta in base al gusto personale (sempre nei limiti delle regole fondamentali comuni a tutti gli stili più diffusi), oppure dettata da una base di codice ereditata. Codice:
#include <cstdlib>
#include <iostream>
using namespace std;
int main( int argc, char *argv[] )
{
int s, risp ;
char car ;
s = 0 ;
do
{
cout << "inserire carattere: " << endl ;
cin >> car ;
switch( s )
{
case 0:
switch( car )
{
case 'a':
s = 1 ;
break ;
case 'b':
s = 3 ;
break ;
default :
s = 6 ;
break;
}
break ;
case 1:
switch( car )
{
case 'b':
s = 2 ;
break ;
default :
s = 6 ;
break ;
}
break ;
case 2:
switch(car)
{
case 'a':
s = 1 ;
break ;
case 'c':
s = 3 ;
break ;
default :
s = 6 ;
break ;
}
break ;
case 3:
switch(car)
{
case 'd': s=4;
break;
default : s=6;
break;
}
break;
case 4:
switch(car)
{
case 'e': s=5;
break;
default : s=6;
break;
}
break;
case 5:
switch(car)
{
case 'd': s=4;
break;
default : s=6;
break;
}
}
if( s == 6 )
cout << "l'ultimo carattere digitato crea un'errore nella stringa" << endl ;
else
{
cout << "vuoi inserire un'altro carattere?"<<endl<<"1.continuare"<<endl<<"2.non continuare"<<endl<<"inserire numero della risposta: " ;
cin >> risp ;
}
}
while( s != 6 && risp == 1 ) ;
if( s == 5 )
cout << "la stringa e' corretta" << endl ;
else
cout << "la stringa non e' corretta" << endl ;
system("PAUSE") ;
return EXIT_SUCCESS ;
}
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Nov 2011
Messaggi: 5
|
molto interessante, vorrà dire che dovrò migliorare un po nell'indentatura
1. se voglio che ha fine programma cioè quando gli dico che non voglio continuare, vorrei unire tutti i caratteri digitati in modo da scrivere tutta la stringa corretta a fine programma. 2. vorrei che a ogni volta che digito il carattere e la risposta la pagina si azzeri, mi aveva detto qualcosa un mio amico ma purtroppo non ricordo era qualcosa tipo screen ma non ricordo bene... |
|
|
|
|
|
#9 | ||
|
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
|
Quote:
Codice:
[...]
crea array char di dimensione fissa corretta ;
inizializzalo con caratteri '\0' ;
ciclo acquisizione
{
salva car nella giusta posizione nel buffer ;
[...]
}
stampa array di char ed altri messaggi ;
Quote:
Codice:
#include <cstdlib> [...] system( "cls" ) ;
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:59.



















