|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2011
Messaggi: 62
|
[C++] spiegazione di un errore di un eserzicio
salve io ho fatto un programma in C++...
ho trovato un problema quando vado a rikiamare la funzione visualizza_n_auto. ora mi spiego. quando immeto i dati delle auto e poi metto il numero di auto da visualizzare, la visualizzazione me la fa ma escono caratteri strani.. mi aiutate? #include<iostream> using namespace std; #include<string.h> #define Max 20 class automobile{ char codice[Max]; char modello[Max]; char tipo[Max]; float km_percorsi; public: void registra(char codic[],char model[],char tip[],float km){ strcpy(codice,codic); strcpy(modello,model); strcpy(tipo,tip); km_percorsi=km; return;} void visualizza(){ cout<<codice; cout<<modello; cout<<tipo; cout<<km_percorsi; return;} friend void ricerca_auto(int i); friend void media_km(int i); }; automobile autom[Max]; int inserisci(){ int risposta,i=-1; char codice[Max]; char modello[Max]; char tipo[Max]; float km_percorsi; do{ i++; cout<<"inserisci il codice dell'automobile "<<i+1<<endl; cin>>codice; cout<<"inserisci il modello dell'automobile "<<i+1<<endl; cin>>codice; cout<<"inserisci il tipo dell'automobile "<<i+1<<endl; cin>>codice; cout<<"inserisci i km percorsi dell'automobile "<<i+1<<endl; cin>>codice; autom[i].registra(codice,modello,tipo,km_percorsi); cout<<"vuoi inserire un altro studente? (0=SI 1=NO)"<<endl; cin>>risposta; }while(risposta==0); return i;} void visualizza_n_auto(){ int n_auto,k; cout<<"Dammi il numero di auto da visualizzare:"<<endl; cin>>n_auto; for(k=0;k<=n_auto;k++){ autom[k].visualizza();} return;} void ricerca_auto(int i){ char codiceauto[Max]; int k; cout<<"dammi il codice dell'automobile:"<<endl; cin>>codiceauto; for(k=0;k<=i;k++){ if(strcmp(autom[k].codice,codiceauto)==0){ autom[k].visualizza();} else cout<<"Il codice dell'automobile non esiste"<<endl;} return;} void media_km(int i){ int k; float s,R; for(k=0;k<i;k++){ s+=autom[k].km_percorsi; } R=s/i; return;} main(){ int dim; dim=inserisci(); visualizza_n_auto(); ricerca_auto(dim); media_km(dim); system("PAUSE"); return 0; } |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Apr 2011
Messaggi: 25
|
Al momento non posso testare il codice con un compilatore quindi non sono sicuro, ma credo che il problema sia nella funzione inserisci.
Codice:
int inserisci(){
int risposta,i=-1;
char codice[Max];
char modello[Max];
char tipo[Max];
float km_percorsi;
do{
i++;
cout<<"inserisci il codice dell'automobile "<<i+1<<endl;
cin>>codice;
cout<<"inserisci il modello dell'automobile "<<i+1<<endl;
cin>>codice;
cout<<"inserisci il tipo dell'automobile "<<i+1<<endl;
cin>>codice;
cout<<"inserisci i km percorsi dell'automobile "<<i+1<<endl;
cin>>codice;
autom[i].registra(codice,modello,tipo,km_percorsi);
cout<<"vuoi inserire un altro studente? (0=SI 1=NO)"<<endl;
cin>>risposta;
}while(risposta==0);
return i;}
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Apr 2011
Messaggi: 25
|
Ok, sono riuscito a testare il sorgente, il problema era proprio quello. Continuavi a inizializzare la variabile codice che quindi alla fine prendeva il valore che sarebbe dovuto essere di km_percorsi lasciando tutto il resto non inizializzato.
Ora dovrebbe essere a posto: Codice:
int inserisci(){
int risposta,i=-1;
char codice[Max];
char modello[Max];
char tipo[Max];
float km_percorsi;
do{
i++;
cout<<"inserisci il codice dell'automobile "<<i+1<<endl;
cin>>codice;
cout<<"inserisci il modello dell'automobile "<<i+1<<endl;
cin>>modello;
cout<<"inserisci il tipo dell'automobile "<<i+1<<endl;
cin>>tipo;
cout<<"inserisci i km percorsi dell'automobile "<<i+1<<endl;
cin>>km_percorsi;
autom[i].registra(codice,modello,tipo,km_percorsi);
cout<<"vuoi inserire un altro studente? (0=SI 1=NO)"<<endl;
cin>>risposta;
}while(risposta==0);
return i;}
Codice:
void visualizza_n_auto(){
int n_auto,k;
cout<<"Dammi il numero di auto da visualizzare:"<<endl;
cin>>n_auto;
for(k=0;k<=n_auto;k++){
autom[k].visualizza();
cout<<endl;}
return;}
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Apr 2011
Messaggi: 62
|
grazie... cmq ora probo e vi faccio sapere.
ke errore di distrazione scrivere 2 volte codice...
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Apr 2011
Messaggi: 62
|
raga lho modificato, ma da un errore: qui
cout<<"Dammi il numero di auto da visualizzare:"<<endl; cin>>n_auto; io ce lo dò ma nella visualizzazione mi fa visualizzare tutte le auto... perke? ecco il codice: #include<iostream> using namespace std; #include<string.h> #define Max 20 class automobile{ char codice[Max]; char modello[Max]; char tipo[Max]; float km_percorsi; public: void registra(char codic[],char model[],char tip[],float km){ strcpy(codice,codic); strcpy(modello,model); strcpy(tipo,tip); km_percorsi=km; return;} void visualizza(){ cout<<codice; cout<<modello; cout<<tipo; cout<<km_percorsi; return;} friend void ricerca_auto(int i); friend void media_km(int i); }; automobile autom[Max]; int inserisci(){ int risposta,i=-1; char codice[Max]; char modello[Max]; char tipo[Max]; float km_percorsi; do{ i++; cout<<"inserisci il codice dell'automobile "<<i+1<<endl; cin>>codice; cout<<"inserisci il modello dell'automobile "<<i+1<<endl; cin>>modello; cout<<"inserisci il tipo dell'automobile "<<i+1<<endl; cin>>tipo; cout<<"inserisci i km percorsi dell'automobile "<<i+1<<endl; cin>>km_percorsi; autom[i].registra(codice,modello,tipo,km_percorsi); cout<<"vuoi inserire un'altra automobile? (0=SI 1=NO)"<<endl; cin>>risposta; }while(risposta==0); return i;} void visualizza_n_auto(){ int n_auto,k; cout<<"Dammi il numero di auto da visualizzare:"<<endl; cin>>n_auto; for(k=0;k<=n_auto;k++){ autom[k].visualizza();} cout<<endl; return;} void ricerca_auto(int i){ char codiceauto[Max]; int k; cout<<"dammi il codice dell'automobile:"<<endl; cin>>codiceauto; for(k=0;k<=i;k++){ if(strcmp(autom[k].codice,codiceauto)==0){ autom[k].visualizza();} else cout<<"Il codice dell'automobile non esiste"<<endl;} return;} void media_km(int i){ int k; float s,R; for(k=0;k<i;k++){ s+=autom[k].km_percorsi; } R=s/i; return;} main(){ int dim; dim=inserisci(); visualizza_n_auto(); ricerca_auto(dim); media_km(dim); system("PAUSE"); return 0; } |
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Apr 2011
Messaggi: 25
|
Al momento non ho compilatore e debugger sotto mano, però la funzione "visualizza_n_auto" è proprio brutta. Perchè metti i comandi console dentro alla funzione? Puoi farlo benissimo fuori, risulta più corretto sintatticamente e logicamente una cosa del genere.
Codice:
void visualizza_n_auto(int n_auto){
for(int k=0;k<=n_auto;k++){
autom[k].visualizza();}
cout<<endl;
return;}
Codice:
int n=0; cout<<"Quante auto vuoi visualizzare? "; cin>>n; visualizza_n_auto(n); |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Apr 2011
Messaggi: 62
|
simo ho riscontrado 2 problemi..
la funzione fa lo stesso errore ke mi stampa tutte le automobili, e poi la funzione di ricerca del codice macchina non funge e non so perke... ------------------------------ se percaso ti serve un compilatore usa Bloodsheed C++ |
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Apr 2011
Messaggi: 25
|
Allora: visualizza_n_auto non funzionava perchè avevi messo come condizione nel for "k<=n_auto" invece avresti dovuto mettere "k<n_auto".
Questo perchè se tu dici alla funzione che vuoi visualizzare 2 auto, lei la legge come: devo visualizzare le auto fino a quando k non è unguale a 2, allora visualizzo auto[0],auto[1] e auto[2]. Praticamente visualizzava un auto in più di quelle che gli chiedevi. Per la ricerca c'è sempre il problema della k, ma soprattutto il problema è un'altro: Lui controlla ogni in ogni auto se corrisponde il codice e se non corrisponde scrive che il codice non esiste. Il problema è di tipo logico, ovvero ora ti spiego meglio. Tu vuoi fare in modo che lui prima cerchi e se trova l'auto la mette, se nessuna delle auto ha il codice inserito, allora il programma deve dire che l'auto non esiste. Il problema è che la tua funzione dice questo: auto[0] -> c'è il codice? NO -> scrivo che non esiste auto[1] -> c'è il codice? NO -> scrivo che non esiste auto[2] -> -> c'è il codice? SI -> allora scrivo che esiste. Il problema è che prima di dire che esiste dice due volte che non esiste. Io ho risolto il questo modo, ma ce ne possono essere molti altri: Codice:
void ricerca_auto(int i)
{
char codiceauto[Max];
int k;
bool trovato=false;
cout<<"dammi il codice dell'automobile:"<<endl;
cin>>codiceauto;
for(k=0; k<i; k++)
{
if(strcmp(autom[k].codice,codiceauto)==0)
{
autom[k].visualizza();
trovato=true;
}
if(!trovato) cout<<"Codice non trovato.\n";
}
return;
}
C'erano un po' di cose nella visualizzazione che non mi piacevano, quindi le ho rifatte, ti posto il codice. Codice:
#include<iostream>
using namespace std;
#include<string.h>
#define Max 20
class automobile
{
char codice[Max];
char modello[Max];
char tipo[Max];
float km_percorsi;
public:
void registra(char codic[],char model[],char tip[],float km)
{
strcpy(codice,codic);
strcpy(modello,model);
strcpy(tipo,tip);
km_percorsi=km;
return;
}
void visualizza()
{
cout<<"|CODICE\t\t|MODELLO\t|TIPO\t\t|KM PERCORSI\n";
cout<<"|"<<codice<<"\t\t|"<<modello<<"\t\t|"<<tipo<<"\t\t|"<<km_percorsi<<"\n\n";
return;
}
friend void ricerca_auto(int i);
friend float media_km(int i);
};
automobile autom[Max];
int inserisci()
{
int risposta,i=-1;
char codice[Max];
char modello[Max];
char tipo[Max];
float km_percorsi;
do{
i++;
cout<<"Inserire il CODICE dell'automobile: "<<i+1<<endl;
cin>>codice;
cout<<"Inserire il MODELLO dell'automobile: "<<i+1<<endl;
cin>>modello;
cout<<"Inserire il TIPO dell'automobile: "<<i+1<<endl;
cin>>tipo;
cout<<"Inserire i KM PERCORSI dell'automobile: "<<i+1<<endl;
cin>>km_percorsi;
autom[i].registra(codice,modello,tipo,km_percorsi);
cout<<"Vuoi inserire un'altra automobile? (0=SI 1=NO)"<<endl;
cin>>risposta;
} while(risposta==0);
return i;
}
void visualizza_n_auto(int n_auto)
{
for(int k=0;k<n_auto;k++){
autom[k].visualizza();}
cout<<endl;
return;
}
void ricerca_auto(int i)
{
char codiceauto[Max];
int k;
bool trovato=false;
cout<<"Inserire il codice dell'automobile: "<<endl;
cin>>codiceauto;
for(k=0; k<i; k++)
{
if(strcmp(autom[k].codice,codiceauto)==0)
{
autom[k].visualizza();
trovato=true;
}
if(!trovato) cout<<"Codice non trovato.\n";
}
return;
}
float media_km(int i)
{
int k;
float s=0;
for(k=0;k<i;k++){
s+=autom[k].km_percorsi;
}
return s/i;
}
int main()
{
int dim;
dim=inserisci();
int n=0;
cout<<"Quante auto vuoi visualizzare? ";
cin>>n;
visualizza_n_auto(n);
ricerca_auto(dim);
cout<<"Media KM PERCORSI: "<<media_km(dim)<<"\n";
system("PAUSE");
return 0;
}
--------------------------- Grazie per il compilatore, uso Visual C++ con cui mi trovo molto meglio, solo che non lo avevo sotto mano. |
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Apr 2011
Messaggi: 62
|
grazie... ma ce un ultimo errore..
cioè quando chiedi il codice da cercare lui te lo cerca e se ce mi scrive prima il codice non esiste e poi me lo stampa come mai? |
|
|
|
|
|
#10 |
|
Junior Member
Iscritto dal: Apr 2011
Messaggi: 25
|
Ops, colpa mia
L' if-statement va fuori dal try, era questo che cercavo di dirti, solo che poi ho sbagliato anche io Codice:
void ricerca_auto(int i)
{
char codiceauto[Max];
int k;
bool trovato=false;
cout<<"Inserire il codice dell'automobile: "<<endl;
cin>>codiceauto;
for(k=0; k<i; k++)
{
if(strcmp(autom[k].codice,codiceauto)==0)
{
autom[k].visualizza();
trovato=true;
}
}
if(!trovato) cout<<"Codice non trovato.\n";
return;
}
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Apr 2011
Messaggi: 62
|
GRAZIE 1000!!!!
ma per info ma tu sei uno grande o alunno? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:51.



















