Vai al contenuto

Riconoscitore di Stringhe di Numeri in C++ (Macchina a Stati Finiti)


Messaggi raccomandati

Salve a tutti,

il mio "adorabile" professore di progettazione ha assegnato per casa, in preparazione della verifica (che sarà veramente un'agonia essendo che riguardo le macchine a stati finiti in C++ non ha spiegato una cippa...), un esercizio molto "carino"...praticamente devo scrivere un programma utilizzando le macchine a stati finiti in C++ che prende in imput una stringa, e dice se è o non è una stringa valida.

 

Sono già arrivato ad un certo punto con il programma...anzi direi che è finito, ma ecco il problema....mi dice che la stringa è sempre corretta, cosa SBAGLIATISSIMA, e nn perchè ho sbagliato gli if, ma qualcos'altro immagino, ma non so cosa....ho provato anche a far buttare a video il contenuto dello stato e il risultato è o 0, o 1...

 

Questo è il codice :

 

#include <iostream>

#include <cstdlib>

#include <string>

using namespace std;

 

enum state {intero, decimale, err};

state curr;

 

void RiconoscitoreStringa(string numero)

{

short i=0;

bool full=false;

do {

char car=numero;

switch (car) {

case (30 || 31 || 32 || 33 || 34 || 35 || 36 || 37 || 38 || 39) :

{

if (full==true)

curr=decimale;

else

curr=intero;

break;

}

case (46) :

{

if (full==true)

curr=err;

else {full=true; curr=decimale;}

break;

}

 

default : {curr=err; break;}

 

} //switch

i++;

}while (i<numero.size() || curr==err); //ciclo

cout<<curr<<endl; //mostra situazione di curr fine ciclo

if (curr==err)

cout<<"Stringa di Numeri non e' Esatta."<<endl;

if (curr!=err)

cout<<"Stringa di Numeri e' Esatta."<<endl;

} //metodo

 

int main () {

cout<<"Inserisci un numero - ";

string numero="";

cin>>numero;

RiconoscitoreStringa(numero);

system ("pause");

} //main

 

 

 

 

Spero vivamente che possiate aiutarmi.

-Un giovane programmatore.

Link al commento
Condividi su altri siti

Ora il mio C++ è piuttosto arruginito vito che uso sempre programmazione a basso livello, ma non so se ti sei accorto ma il ciclo di controllo viene eseguito solo se la variabile curr è uguale a err oppure se la variabile i è minore della lunghezza della stringa.
Link al commento
Condividi su altri siti

A dire la verità di ++ qui c'è praticamente nulla! Fatto in C e usando opportunamente i puntatori sarebbe venuto anche più pulito e soprattutto performante.

 

certo che criticare è più facile che aiutare, in fondo il C++ è molto simile al C come struttura, e punteggiatura, ma avrei preferito un'analisi e non una sentenza.

Link al commento
Condividi su altri siti

l'analisi l'hai già fatta tu, cosa dovrei aggiungere?

certo che se te la prendi per questa mia osservazione di carattere generale, pensando che sia una "critica" (a chi e a cosa e soprattutto perché, lo sai solo tu), non so davvero cosa pensare...

Forse sei tu il professore che gli ha rifilato questo esercizio? Ma anche fosse, non capisco perché viverla così... boh...

No, dai, davvero: se ho offeso il tuo amor proprio ti chiedo umilmente scusa... non era mia intenzione!

Link al commento
Condividi su altri siti

l'analisi l'hai già fatta tu, cosa dovrei aggiungere?

certo che se te la prendi per questa mia osservazione di carattere generale, pensando che sia una "critica" (a chi e a cosa e soprattutto perché, lo sai solo tu), non so davvero cosa pensare...

Forse sei tu il professore che gli ha rifilato questo esercizio? Ma anche fosse, non capisco perché viverla così... boh...

No, dai, davvero: se ho offeso il tuo amor proprio ti chiedo umilmente scusa... non era mia intenzione!

 

Ora non vorrei scatenare un putiferio inutilmente, ma se rileggi le tue parole la tua unica analisi è che non è scritto in C++ (cosa trall'altro errata) e poi non hai offeso me, la cosa non mi tocca personalmente, cosa che non sono sicuro del contrario, ma in fondo c'è anche un lato positivo, le idee sono diverse come la programmazione, infatti anche io avrei affrontato il problema diversamente, ma non intendo dare nessuna soluzione e nessuna critica, infatti ho solo fatto notare dove potrebbe essere l'errore.

Ora spero vivamente che questa discussione riprenda la giusta via, perchè non è mia intenzione condannare nessuno, solo perchè vede le cose in modo diverso.

Link al commento
Condividi su altri siti

guarda ho letto le prime due righe, mi risparmio il resto...

mi basta già notare che mi attribuisci il fatto di dire che non è scritto in c++ quando ho scritto testuale "A dire la verità di ++ qui c'è praticamente nulla!", che mi pare sia italiano e NON vuol dire quanto mi attribuisci.

Capisco pure che dici che non vuoi scatenare putiferi ma ci metti del tuo a fare polemiche INESISTENTI.

Cmq contento tu! mmmh

Per la storia finisce qui.

te saludi

Link al commento
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un membro per lasciare un commento

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

Giochi in Uscita



  • Community Hive Community Hive

    Community Hive allows you to follow your favorite communities all in one place.

    Follow on Community Hive
  • Utenti

    Non ci sono membri da mostrare

×
×
  • Crea Nuovo...