Pagina 1 di 1
Problema codice in C++......HELP
Inviato: martedì 21 novembre 2006, 18:26
da adsl
Ragazzi devo fare un programma pero ho dei problemi....il programma chiede di inserire una cifra(moltiplo di 10) e mi restituisce la stessa cifra divisa tra tre tipi di monete...monete da 50 da 20 e da 10....es input-->110 output 2 da 50 e 1 da 10......il programma l ho fatto pero mi da degli errori piu che altro logici..il problema è il seguente....ho fatto un ciclo di controllo per verificare che l input inserito dall utente sia corretto...cio deve rispettare le suenti condizioni: (input%10==0 && input>0)....ho i seguenti problemi....se l utente inserisce un carattere il programma va in loop, se inserisce un numero non intero ma con la parte intera comunque multipla di 10 entra e fa tutte le operazioni.......FORSE NON SONO STATO MOLTO CHIARO...SE VOLETE VI POSTO DIRETTAMENTE IL CODICE
Re: Problema codice in C++......HELP
Inviato: martedì 21 novembre 2006, 18:43
da adsl
RAGAZZI VI STO POSTANDO IL CODICE
Codice: Seleziona tutto
Description: Il programma funziona come cassiere automatico, deve erogare soldi. Si chiede all utente di
inserire l importo desiderato (ricordandosi che quest ultimo deve essere un multiplo di 10)
e il programma deve visualizzare il tipo e la quantita delle monete erogate per arrivare all importo
inserito in input...le monete che il cassiere puo erogare sono 50, 20 e 10
*/
#include <stdio.h>
#include <stdlib.h>
#define monete50 50/*monete da 50 dollari*/
#define monete20 20/*monete da 20 dollari*/
#define monete10 10/*monete da 10 dollari*/
void eroga(int importo,int importo_a,int importo_b,int importo_c );
int main(void)
{
int importo,/*input-valore inserito dall utente*/
importo_a,/*variabile per la stampa dei risultati*/
importo_b,/*variabile per la stampa dei risultati*/
importo_c,/*variabile per la stampa dei risultati*/
errore,/*Gestisce eventuali errori nell inserimento dell importo*/
risposta;/*risposta al menu*/
do
{ /*mENU PRINCIPALE*/
system("CLS");
printf(" --------MENU' PRINCIPALE-------\n\n");
printf(" 1) Vai alla macchinetta delle monete\n");
printf(" 2) Torna a windows\n");
printf("\n");
printf(" Digitare cio che si desidera...");
scanf("%d", &risposta);
switch(risposta)
{
case 1:
{
do/*ciclo DO-WHILE che gestisce eventuali errori*/
{
errore=0;
printf("\n\n\n\n");
printf(" --------------------------------------------------------------\n");
printf("| |\n");
printf("| MACCHINETTA DELLE MONETE |\n");
printf("| |\n");
printf(" --------------------------------------------------------------\n");
printf(" \nInserisci l'importo desiderato (multiplo di 10)-->");
scanf("%d", &importo);
if((importo%10==0)&&(importo>0))/*CONTROLLO DEL NUMERO DI INPUT*/
{
eroga (importo, importo_a, importo_b, importo_c);/*chiamata di funzione*/
}
else
{ system("CLS");
errore=1;
printf("\a\a\a\a\a\a\nL'importo inserito non e' corretto :( \n");
}
}while(errore);
}break;
case 2: break;
default:printf("\a\a\a\a\aTasto errato \n");
}
}while(risposta!=2);
}/*fine main*/
void eroga (int importo,int importo_a,int importo_b,int importo_c)/*definizione della funzione che restituisce i valori output richiesti dal problema*/
{
if(importo>=monete50)
{
importo_a=importo/monete50;
importo=importo-(monete50*importo_a);
printf("Lei ricevera' %d monete da 50 dollari\n", importo_a);
if(importo>=monete20)
{
importo_b=importo/monete20;
importo=importo-(importo_b*monete20);
printf("e %d monete da 20 dollari\n", importo_b);
}
if(importo>=monete10)
{
importo_c=importo/monete10;
importo=importo-(importo_c*monete10);
printf("e %d monete da 10 dollari\n", importo_c);
}
}
else if((importo>=monete20)&&(importo < monete50))
{
importo_b=importo/monete20;
importo=importo-(importo_b*monete20);
printf("Lei ricevera' %d monete da 20 dollari\n", importo_b);
if(importo>=monete10)
importo_c=importo/monete10;
importo=importo-(importo_c*monete10);
printf("e %d monete da 10 dollari\n", importo_c);
}
if(importo==monete10)
{
importo_c=importo/monete10;
importo=importo-(importo_c*monete10);
printf("Lei ricevera' %d monete da 10 dollari\n", importo_c);
}
printf("\n");
system("PAUSE");
printf("\n");
}
Re: Problema codice in C++......HELP
Inviato: martedì 21 novembre 2006, 19:29
da gelina
Guarda nel tuo codice c'è un errore subdolo. Il main fa una chiamata alla funzione "eroga" passandogli come parametri tre variabili non inizializzate: importo_a, importo_b e importo_c. Passare a una funzione delle variabili non inizializzate non è un errore di sintassi, quindi non è segnalato dal compilatore. Nella dichiarazione delle variabili, inizializzale tutte a 0.
Ho letto e riletto il codice tre volte, ma direi che il problema sia questo.
Ciao
Re: Problema codice in C++......HELP
Inviato: mercoledì 22 novembre 2006, 11:54
da difesaparcosempione
Sembra un bel programma "C"

Comunque il problema è la scanf in quanto non testi la condizione di errore.
Decidi di convertire in decimale %d quindi se immetti delle stringhe la funzione
dovrebbe darti errore.
ciao

Re: Problema codice in C++......HELP
Inviato: mercoledì 22 novembre 2006, 13:45
da adsl
Gelina cio che hai detto tu è giusto e ti ringrazio pero sembra non risolvere i miei problemi....il fatto della scanf scusa l ignoranza ma non ho capito potresti spiegarmelo in altre parole?????davvero ti sembra un programma o mi prendi in giro?? :P
Re: Problema codice in C++......HELP
Inviato: giovedì 23 novembre 2006, 15:21
da difesaparcosempione
prima esegui man si scanf !
Vedrai cosa dice del RETURN CODE!
Visto che questa funzione di libreria C converte in un formato una stringa di input può dare delle segnalazioni.
Per imparar fai dei piccoli prg dove metti la funzione incriminata e così la testi. La scanf ritorna come codice di ritorno un intero con il numero di conversioni andate a buon fine.
Tu richiedi una conversione e quindi se tutto va bene ti ritornerà 1 se c'è un errore ti ritorna 0.
Ovvio perchè non ha convertito niente.
Comunque il programma è ordinato e sembrerebbe scritto bene. Bel programma C perchè così come è lo puoi compilare in C.
quindi
man scanf
e studia il RETURN VALUE.
ciao

Re: Problema codice in C++......HELP
Inviato: giovedì 23 novembre 2006, 15:57
da adsl
difesaparcosempione scusami...devo essere stupido ma continuo a non capire...cos e che devo fare???puoi farmi magari un esempio?ghrazie e scusa
Re: Problema codice in C++......HELP
Inviato: giovedì 23 novembre 2006, 16:30
da eminux
innanzi tutto mancano gli include... ovvero le librerie (c'è solo #include ma cosa?)
poi che ne dici di mettere una scanf("%c", &var) dopo la tua scanf nel ciclo do dal quale non esce mai?
il problema è nella scanf....
do/*ciclo DO-WHILE che gestisce eventuali errori*/
{
errore=0;
printf("\n\n\n\n");
printf(" --------------------------------------------------------------\n");
printf("| |\n");
printf("| MACCHINETTA DELLE MONETE |\n");
printf("| |\n");
printf(" --------------------------------------------------------------\n");
printf(" \nInserisci l'importo desiderato (multiplo di 10)-->");
scanf("%d", &importo);
scanf("%c", &nal);
if((importo%10==0)&&(importo>0))/*CONTROLLO DEL NUMERO DI INPUT*/{
eroga (importo, importo_a, importo_b, importo_c);/*chiamata di funzione*/
}else{
errore=1;
printf("\a\a\a\a\a\a\nL'importo inserito non e' corretto

\n");
}
}while(errore==1);
se sostituisci questo nel tuo codice vedrai che funziona...
occhio che devi dichiarare una variabile carattere chiamata nal ...
e perchè non inizializzi le variabili che passi? poi vengono numeri strani se non lo fai...
ciao
se hai ancora problemi chiamami in privato...
(non sarai mica uno del corso di ing matematica o fisica al politecnico di milano...)
Re: Problema codice in C++......HELP
Inviato: giovedì 23 novembre 2006, 17:13
da adsl
ho provato modificandolo in questo modo...
errore=0;
printf("\n\n\n\n");
printf(" --------------------------------------------------------------\n");
printf("| |\n");
printf("| MACCHINETTA DELLE MONETE |\n");
printf("| |\n");
printf(" --------------------------------------------------------------\n");
printf(" \nInserisci l'importo desiderato (multiplo di 10)-->");
scanf("%d", &importo);
carattere=scanf("%c", &var);
if((importo%10==0)&&(importo>0)&&(carattere==0))/*CONTROLLO DEL NUMERO DI INPUT*/
il risultato è che non va in loop e se inserisco un carattere mi da errore....pero ho notato ceh mi da sempre errore anche se inserisco l input giusto.........le include ci sono e sono:#include
#include
e le variabili sono tutte inizializzate a 0....non si vedono qui nel codice solo per una errore di visualizzazione ma ci sono.....
Re: Problema codice in C++......HELP
Inviato: giovedì 23 novembre 2006, 17:19
da difesaparcosempione
Una cosa del genere ...
int ret, importo;
ret = scanf("%d", &importo);
if ( ret == 0 )
{
printf("Errore dammi un numero")
}
else
{
.... /* tutto ok */
}
Re: Problema codice in C++......HELP
Inviato: giovedì 23 novembre 2006, 17:29
da adsl
difesa parcosempione una cosa simile a quella precedente.....ma non va
Re: Problema codice in C++......HELP
Inviato: giovedì 23 novembre 2006, 19:55
da eminux
(carattere==0)
questa condizione è sbagliata....
tu la fai sulla seconda scanf
la seconda scanf ti serve per togliere dal buffer il carattere invio nel caso in cui ti sia stata inserita una lettera...
quello che ti ha scritto difesaparcosempione è un po' diverso dal tuo... ma i piccoli particolari fanno si che un programma funzioni o no...
Re: Problema codice in C++......HELP
Inviato: giovedì 23 novembre 2006, 20:24
da adsl
quindi tu dici di fare quella modifica che ho fatto sulla prima scanf e non la seconda....ho capito bene???