Leggi il Topic


Indice del forumMotobarForum Internet & Hi-Tech

   

Pagina 1 di 1
 
problema con classe c++
12872915
12872915 Inviato: 8 Gen 2012 20:13
Oggetto: problema con classe c++
 

allora ho il seguente problema:
devo riuscire ad interrompere una ricezione (effettuata utilizzando la cin>> ridefinita sotto) nel momento in cui inserisco -1 come codice.
il problema è che io devo ricevere n venditori (la ricezione finisce quando si insersce appunto -1) ma quanto inserisco -1 si interrompe solo la ricezione di quel venditore ma non il ciclo dei 30 venditori, questo perchè la funzione getcodice mi ritorna sempre zero, anche se la chiamo al termine di ogni ciclo, quindi dopo aver ricevuto il codice.
premetto che sono agli inizi con la programmazione a oggetti
Codice:

class Venditore
{
public:
    Venditore()
    {
      CodiceVenditore=0;
   }
   double totale();
    int getCodice()
   {
        return CodiceVenditore;
    }
   friend ostream& operator << (ostream &cout, Venditore a);
    friend istream& operator >> (istream &cin, Venditore a);
private:
    Prodotto prod[10];
    int CodiceVenditore;
};
ostream& operator << (ostream &cout, Venditore a)
{
   cout<<"Codice: "<<a.CodiceVenditore<<endl;
   for(int i=0;i<9;i++)
   {
      cout<<a.prod[i];
   }   
}
istream& operator >> (istream &cin, Venditore a)
{
   cout<<"Codice: ";
   cin>>a.CodiceVenditore;
   if(a.CodiceVenditore!=-1)
       for(int i=0;i<9;i++)
       {
           cout<<endl<<"Prodotto "<<i+1<<" :";
           cin>>a.prod[i];
       }         
}
double Venditore::totale()
{
   double tot;
   for(int i=0;i<9;i++)
   {
      tot+=prod[i].getProdotto();
   }   
}

Codice:


#include<iostream.h>
#include<stdlib.h>
#include"Prodotto.h"
#include"Venditore.h"

int main() {
   Venditore prova[30];
   int  i=0,k;
   do
   {
      cin>>prova[i];
      k=prova[i].getCodice();
      i++;
      
   }while(k!=-1&&i<30);
    system("pause");
    return 0;
}
 
12873246
12873246 Inviato: 8 Gen 2012 21:32
 

C++ sono alle super basi


ma l'errore non potrebbe essere che ogni Venditore creato gli dai sempre lo stesso codice = 0

poi il problema è quello che quando ricevo un prodotto con codice -1 si interrompe o quando ricevi un venditore con -1 si interrompa la ricezione

visto cosi il codice sempre giusto

p.s preferisco di gran lunga Java icon_asd.gif icon_asd.gif icon_asd.gif icon_asd.gif 0509_pernacchia.gif 0509_pernacchia.gif 0509_pernacchia.gif 0509_pernacchia.gif
 
12873269
12873269 Inviato: 8 Gen 2012 21:37
 

al venditore do il valore iniziale 0. poi faccio la cin, la interrompo a metà se arriva un -1 ma la cin del codice l' ho già fatta. eusa_think.gif infatti per interrompere la cin controllo il valore di a.codicevenditore, che quindi è già variato perchè si ferma, però il ciclo nel main continua perchè mi ritorna 0
 
12873348
12873348 Inviato: 8 Gen 2012 21:52
 

consiglio di mettere i commenti sul codice almeno lo rendi più compressibile


questa sera ho la testa fusa vedo domani mattina icon_cool.gif
 
12873366
12873366 Inviato: 8 Gen 2012 21:56
 

ok, al massimo provo a chiedere domani alla profe 0509_up.gif grazie 0510_five.gif
 
12873463
12873463 Inviato: 8 Gen 2012 22:20
 

Se non si interrompe il ciclo di 30 allora c'è un problema nella condizione di terminazione del do-while.

In ogni caso, dove memorizzi gli n venditori inseriti? Se passi alla procedura sempr 30, è normale che andrà avanti fino a 30. Devi salvarti il numero di venditori inseriti e passarlo come parametro.

Ho letto in maniera del tutto sommaria il codice... di gran lunga preferisco anche io il Java.

In ogni caso, cerca di usare nomi "seri" per le variabili. Altrimenti capire cosa hai scritto risulta davvero complicato. a, prova... sono decisamente poco adatte
 
12873663
12873663 Inviato: 8 Gen 2012 22:59
 

il ciclo viene eseguito 30 volte sempre, a meno che non venga inserito -1 come codice venditore
comunque non state a guardare le condizioni del ciclo. ho fatto le comuniche e k vale 0 al termine del corpo del ciclo anche se inserisco -1
va be comunque a è il parametro che rappresenta l' oggetto che chiama il metodo, prova è un oggetto della classe venditore
 
12873749
12873749 Inviato: 8 Gen 2012 23:19
 

Che fossero oggetti e metodi l'avevo capito, ma magari, dire (anche con commenti): "a" prepara la colazione, "prova" testa la moglie di "a" mentre sta preparando la colazione... eh.

comunque guarda c'è un errore di fondo:

cuzzo94 ha scritto:
il ciclo viene eseguito 30 volte sempre, a meno che non venga inserito -1 come codice venditore


Cosa vuol dire? Cioè ho capito cosa VUOI dire, ma non cosa vuoi implementare.
Il ciclo viene eseguito 30 volte SEMPRE = un "for" (per capirci)
Il ciclo viene eseguito 30 volte sempre a meno che [...] = while o do-while con contatore

ps. cosa sono le comuniche??
pps: che compilatore usi? Sarà che non vedo un c++ da diversi anni, ma guardando i progettini che facevo all'uni... è completamente diverso!
 
12873807
12873807 Inviato: 8 Gen 2012 23:36
 

ma guarda il codice del main sono 10 righe icon_asd.gif icon_asd.gif
c'è un do
while i<30&& k!=-1
quindi 30 volte a meno che k sia = a -1, questo è così pure in java icon_asd.gif
ma lascia stare questo! il problema è altrove, magari nell' overloading della funzione cin oppure nel modo in cui ho dichiarato il metodo getcodice, perchè per qualche motivo mi ritorna il valore del costruttore e non quello che ho ricevuto
il sempre era riferito al fatto che tu chiedevi dove ricevessi n, e io ti ho detto, n è sempre 30 icon_asd.gif
 
12874666
12874666 Inviato: 9 Gen 2012 12:41
 

ti consiglio di usare i commenti per prima cosa

-commenti a inizio di ogni funzione cnhe descrive cosa fà la funzione e c
osa ritorna

-commenti all'interno del codice che spiega anche le cose più banali


- mettere all'inizio tutte le varibiabili stayioche utilizzate

- in ogni funzione mettere all'inizio tutte le varibili locali usate



cosi si rende più compressibile il codice a tutti e si trova più velocemente l'errore
i n più se tra un mese andrai a riprendere il codice grazie ai commenti ci metterai davvero poco a ricordarti il funzionamento di tutto il programma

per mettere i commenti ci vuole davvero poco un kavoiro di pochi minuti ma che aiuta davvero tanto


se noti sul mio sito tutti i codici sorgenti soono più che commentati anche se in java
 
12874675
12874675 Inviato: 9 Gen 2012 12:45
 

Line 16: error: 'Prodotto' does not name a type
compilation terminated due to -Wfatal-errors.




prodotto forse manca il costruttore 0509_lucarelli.gif
 
12874936
12874936 Inviato: 9 Gen 2012 14:35
 

scusa eh, ma non ti conviene gestire le classi con il java?
 
12875004
12875004 Inviato: 9 Gen 2012 14:56
 

topo ha scritto:
Line 16: error: 'Prodotto' does not name a type
compilation terminated due to -Wfatal-errors.




prodotto forse manca il costruttore 0509_lucarelli.gif
ma mi ascoltate?XD prodotto é un altra classe. Non l'ho messa perché non centra con l'errore. Il prog. compila e gira, ma dove nel main chiamo getcodice ritorna zero, anche se a codice venditore assegno -1, e chiedevo se qualcuno che conosce il c++ (devo farlo con quello) vedeva qualche errore, probabilmente nell' overloading o nella dichiarazione di get codice.
 
12875564
12875564 Inviato: 9 Gen 2012 16:57
 

Un programma sintatticamente corretto non vuol dire che sia concettualmente giusto e funzionale.

Forse sei tu che non ascolti noi... Programmo da circa 10 anni (ultimamente per lavoro sono molto più battuto su java, c, basic ed SQL con relativo PHP ecc) anche se è da un po' che non vado di c++. Per di più l'ambiente che utilizzavo (dev c++) non aveva bisogno di molte delle cose che hai scritto.

Sia io che topo, ti stiamo dicendo di adattare il programmino alle regole "consone" della programmazione per capire meglio insieme dove e se c'è un errore. Inoltre, ti ho chiesto che ambiente e che compilatore usi e, su che SO stai. Può sembrare strano ma alcuni compilatori (magari vecchi e non aggiornati) possono far funzionare diversamente il programma a secoda del SO che usi.

Se tu vuoi insistere nel dire "l'errore è nella get codice"... boh... se lo dici tu ci credo, alzo le mani, e sinceramente ho delle serie difficoltà nel capire 1) cosa fa il programma 2) cosa vuoi che il programma faccia; sinceramente non ci voglio metter mani; andrebbe a finire che lo riscrivo tutto.
 
12875820
12875820 Inviato: 9 Gen 2012 18:06
 

uso il dev. ho detto di ascoltare solo perchè vedo che cercate errori nelle condizioni di uscita del do while, o in un' altra classe che credo che non serva conoscere. poi come ho detto sono agli inizi, magari sbaglio, serviva quindi ora vi posto pure quella, ma teoricamente a meno che non ci siano errori li conoscere come si costituisce la classe prodotto non credo che serva. io penso che l' errore sia dove ho ridefinito la cin , però non ne sono sicuro.
credo che sia li perchè se io non inserisco il -1, quindi ricevo pure i 10 prodotti che costituiscono ogni venditore, e POI mi faccio comunicare il valore del codice venditore allora mi viene passato il risultato corretto. quindi avevo il dubbio che non si potesse interrompere la funzione cin come ho fatto, anche se mi pare strano, oppure che io abbia dichiarato male qualcosa. boh.
comunque se volete compilare vi metto pure la classe prodotto.
Codice:

#include<iostream.h>

class Prodotto
{
public:
    Prodotto()
    {
      CodiceProdotto=0;
      Prezzo=0;       
    }
    Prodotto(int c, double p)
    {
      CodiceProdotto=c;
      Prezzo=p;       
    }
    double getProdotto()
    {
       return Prezzo;       
    }
    friend ostream& operator << (ostream &cout, Prodotto a);
    friend istream& operator >> (istream &cin, Prodotto a);
private:
   int CodiceProdotto;
   double Prezzo;
};
ostream& operator << (ostream &cout, Prodotto a)
{
   cout<<"Codice Prodotto: "<<a.CodiceProdotto<<" Prezzo: "<<a.Prezzo<<endl<<endl;             
}
istream& operator >> (istream &cin, Prodotto a)
{
   int d;
   double c;
   cout<<endl<<"Prezzo: ";
   cin>>d;
   cout<<"Cod. Prod.: ";
   cin>>c;
   a.Prezzo=c;
   a.CodiceProdotto=d;       
}


comunque in poche parole. ho la classe prodotto avente come attributi il codice prodotto e il prezzo, e la classe venditore avente come attributi il codice venditore e i suoi 10 prodotti.
mi veniva chiesto di ridefinire le funzioni di input e output per poi nel main ricevere gli n venditori con le cin ridefinite e ricercare l' eventuale presenza di venditori con somma dei prezzi dei prodotti inferiore a 5000 euro
 
12894989
12894989 Inviato: 15 Gen 2012 13:28
 

icon_eek.gif icon_eek.gif icon_eek.gif icon_eek.gif se tu sei alle basi io sono una piccola caccola insignificante! icon_eek.gif icon_asd.gif icon_asd.gif icon_asd.gif
 
12895249
12895249 Inviato: 15 Gen 2012 15:02
 

icon_asd.gif del c normale abbiamo fatto praticamente tutte le cose principali. ma con la programmazione a oggetti sono i primi esercizi icon_asd.gif
 
12896197
12896197 Inviato: 15 Gen 2012 20:02
 

quindi hai risolto ?
 
12897167
12897167 Inviato: 15 Gen 2012 23:24
 

no, devo ancora chiedere alla profe. domani non sono in classe quindi non la vedo. giovedì chiedo icon_asd.gif icon_asd.gif
 
12980098
12980098 Inviato: 7 Feb 2012 20:42
 

risolto! grazie a tutti dell' aiuto comunque!
l' errore è che ho dimenticato di aggiungere la & per indicare il passaggio per riferimento dell' oggetto a. quindi ricevevo i valori ma non li salvavo eusa_wall.gif icon_asd.gif icon_asd.gif
in pratica sarebbe:
friend istream& operator >> (istream &cin, Prodotto &a);
e non:
friend istream& operator >> (istream &cin, Prodotto a);
 
Mostra prima i messaggi di:





Pagina 1 di 1

Non puoi inserire nuovi Topic
Non puoi rispondere ai Topic
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi
 
Indice del forumMotobarForum Internet & Hi-Tech

Forums ©