PDA

View Full Version : [c++] cosa ho sbagliato?


-andrea-
12-12-2008, 13:10
Ho il seguente programma da creare in dev c++:



/* Si implementi in C++ un programma che letto da file testo SORGENTE.txt una
sequenza di numeri interi (supposta al massimo pari a 200 numeri interi),
produca il vettore vetPari di riempimento riempPari contenenti numeri pari della
sequenza ed il vettore vetDispari di riempimento riempDispari contenente i
numeri dispari.Il programma inoltre, dopo aver calcolato il massimo di vetPari
e vetDispari, stampi a video il vettore avente massimo maggiore. Il programma
usi le seguenti funzioni, definite nel file "vettori.h" ed implementate nel file
-"vettori.cpp":#define N 200 typedef int vettore[N];
-void costruisciVettori(vettore vpari, int &nPari, vettore vdispari,int &ndispari);
// legge da file SORGENTE.TXT un numero per volta e lo inserisce in vpari se
è pari, altrimenti in vdispari
-int massimo(vettore v, int riemp); // restituisce il massimo del vettore v;
-void stampa(vettore v, int riemp); // stampa a video il vettore v;*/


nel momento in cui inserisco come valore massimo un numero pari tutto funziona alla grande.
Se inserisco invece come valore massimo un dispari mi restituisce sempre il vettore pari perchè considera come valore massimo il valore maggiore tra i pari...Ho provato quindi a inserire nel sorgente solo numeri dispari e ho notato che mi stampa un vettore vuoto...che sarebbe quello dei pari appunto...
Io penso che ci sia un errore nell costruzione nel vettore dispari, ma nn capisco dove ho sbagliato...
Aspetto vostri consigli a riguardo...
Ps.:dimenticavo che spesso ma non sempre mi restituisce per due volte il valore massimo...e non so perche lo faccia...

:mc: :mc: :mc:


Ho aggiunto anche il codice in txt

Alex_87_xelA
12-12-2008, 14:52
#include <cstdlib>
#include <iostream>
#include <fstream>

#define N 200

typedef int vettore[N];

void costruisciVettori(vettore vpari, int &npari , vettore vdispari , int &ndispari);
int massimo(vettore v, int riemp);
void stampa(vettore v,int riemp);

using namespace std;

int main(int argc, char *argv[])
{
vettore vpari;
vettore vdispari;
int npari=0;
int ndispari=0;
int mp;
int md;

costruisciVettori(vpari, npari, vdispari, ndispari);

mp=massimo(vpari, npari);
md=massimo(vdispari, ndispari);

cout << "mp : " << mp << "\nmd : " << md << endl;

if(mp>md)
stampa(vpari,npari);
else
stampa(vdispari,ndispari);


system("PAUSE");
return EXIT_SUCCESS;
}

/*===========================================================================*/

void costruisciVettori(vettore vpari, int &npari, vettore vdispari,int &ndispari)
{
fstream file;
int appoggio;

file.open("SORGENTE.txt" , ios::in);

if (!file)
cout<<"*** Il file non esiste ***\n\n";

else
{
while (!file.eof())
{
file>>appoggio;

if((appoggio%2)==0)
{
vpari[npari]=appoggio;
npari++;
}

else

{
vdispari[ndispari]=appoggio;
ndispari++;
}
}


}

file.close();
}

/* ===========================================================================*/

int massimo(vettore v, int riemp)
{
int i;
int max=v[0];

for(i=1; i<riemp; i++)
{
if (v[i]>max)
max=v[i];
}
return max;
}

/*============================================================================*/

void stampa(vettore v, int riemp)
{
int i;

cout<<"Il vettore contenente il massimo valore tra i due e' : \n";
for(i=0; i<riemp; i++)
cout<<v[i]<<endl;
}


nella funzione massimo c'èera un errore ... basta che confronti quella che io ho corretto con la tua e capirai subito cos'era.

-andrea-
12-12-2008, 16:11
grazie mille...ora mi funziona...
sebbene quando io vado ad inserire nel sorgente.txt valori come 1 2 3 4 5 6 mi stampa a video una scrittura del tipo:

2
4
6
6


Non capisco perchè mi mostri a video 2 volte un valore non necessariamente il max

Alex_87_xelA
12-12-2008, 22:32
grazie mille...ora mi funziona...
sebbene quando io vado ad inserire nel sorgente.txt valori come 1 2 3 4 5 6 mi stampa a video una scrittura del tipo:

2
4
6
6


Non capisco perchè mi mostri a video 2 volte un valore non necessariamente il max

perchè nel file lasci un rigo vuoto !!!