PDA

Visualizza la versione completa : problema banale nel programma c++


emix95
01-07-2016, 12:11
ciao ragazzi, da poco che studio per fondamenti di informatica e ho riscontrato un errore che non riesco a risolvere pur sapendo che si tratta di una cosa banale. in poche parole le funzioni (che ho scritto in una libreira .h) di somma e media non mi danno il giusto risultato. via allego il codice qui sotto e grazie in anticipo!

main:



#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include "newfile.h"
using namespace std;


/*
*
*/
extern const int maxr=10;
extern const int maxc=10;


int main()
{
const int nmax=10;
int numeri [nmax];
int matr[maxr][maxc];
int r,c,rie;
do
{
cout<<"quanti valori vuoi immettere?\n";
cin>>rie;
}while(rie>nmax);
inserisci_vet(numeri,rie);
stampa_vet (numeri,rie);
cout<<"la media totale del vettore e': "<<media (numeri,rie)<<endl;
cout<<"la somma totale del vettore e': "<<somma (numeri,rie)<<endl;
inserisci_righecolonne(r,c);
inserisci_matrice(matr,r,c);
stampa_matrice (matr,r,c);
system ("pause");
return 0;
}



funzioni:



#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;
extern const int maxr;
extern const int maxc;


void inserisci_vet (int array [],int riempimento)
{
cout<<"inserisci i tuoi numeri\n";
for (int i=0;i<riempimento;i++)
{
cout<<"v["<<i<<"]"<<": ";
cin>>array[i];
}
}


void stampa_vet (int array [], int riempimento)
{
cout<<"i numeri contenuti nell'array attualmente sono:\n";
for (int i=0;i<riempimento;i++)
{
cout<<"v["<<i<<"]"<<": "<<array[i]<<endl;
}

}


float media (int array[],int riempimento)
{
int s=0;
for (int i=0;i<=riempimento;i++)
{
s+=array[i];
}
float m=s/riempimento;
return m;
}


int somma (int array[],int riempimento)
{
int s=0;
for (int i=0;i<=riempimento;i++)
{
s+=array[i];
}
return s;
}


void inserisci_righecolonne(int &r, int &c)
{
cout<<"inserisci il numero di righe:\n";
cin>>r;
cout<<"inserisci il numero di colonne:\n";
cin>>c;
}


void inserisci_matrice(int matrice[][10],int righe,int colonne)
{
cout<< "Inserisci i valori della matrice: " << endl;
for (int i=0; i<righe; i++)
{
cout<<"Riga numero " << i+1 << ":" << endl;
for (int j=0; j<colonne; j++)
{
cout<<"matr["<<i<<"]["<<j<<"]: ";
cin >>matrice[i][j];
}
}
}


void stampa_matrice (int matrice[][10],int righe,int colonne)
{
cout<< "la matrice da te inserita e': " << endl;
for (int i=0; i<righe; i++)
{
cout<<endl;
for (int j=0; j<colonne; j++)
{
cout<<matrice[i][j]<<endl;
}
}
}

oregon
01-07-2016, 14:23
Intanto devi calcolare l'espressione utilizzando un float, quindi

float m=(float)s/riempimento;

e soprattutto devi correggere le for con

for (int i=0; i<riempimento; i++)

e non con <=

emix95
01-07-2016, 16:07
grazie! ora funziona. approfitto per farti un altra domanda: come posso mettere nella funzione stampa_matrice, nelle colonne, maxc e non 10?... mi dava errore e ho dovuto mettere il 10 per disperazione :dh:

oregon
01-07-2016, 16:10
grazie! ora funziona. approfitto per farti un altra domanda: come posso mettere nella funzione stampa_matrice, nelle colonne, maxc e non 10?... mi dava errore e ho dovuto mettere il 10 per disperazione :dh:

Non usare una const int ma una costante con una define

#define MAXR 10
#define MAXC 10

e quindi utilizza MAXR e MAXC

emix95
01-07-2016, 16:19
avevo gia provato a fare in questa maniera ma l' errore che mi usciva era questo
In file included from main.cpp:17:0:newfile.h:77:38: error: 'MAXC' was not declared in this scope
void inserisci_matrice(int matrice[][MAXC],int righe,int colonne)
^
newfile.h:77:43: error: expected ')' before ',' token
void inserisci_matrice(int matrice[][MAXC],int righe,int colonne)
^
newfile.h:77:44: error: expected unqualified-id before 'int'
void inserisci_matrice(int matrice[][MAXC],int righe,int colonne)

oregon
01-07-2016, 16:22
Ma il file newfile.h qual ?

emix95
01-07-2016, 16:22
la libreria dove ho messo tutte le funzioni

oregon
01-07-2016, 16:31
Un file .h un file header e in un file header non ci va il codice. Il codice va nei file .cpp.

Quindi devi avere un file newfile.cpp dove metti le funzioni e un file newfile.h dove metti le dichiarazioni e le define. Il tuo file newfile.h dovrebbe essere fatto cos



#define MAXR 10
#define MAXC 10
#define NMAX 10

void inserisci_vet (int array [],int riempimento);
void stampa_vet (int array [], int riempimento);
float media (int array[],int riempimento);
int somma (int array[],int riempimento);
void inserisci_righecolonne(int &r, int &c);
void inserisci_matrice(int matrice[][10],int righe,int colonne);
void stampa_matrice (int matrice[][10],int righe,int colonne);


Nel file newfile.cpp metti




#include <iostream>
#include "newfile.h"

using namespace std;


void inserisci_vet (int array [],int riempimento)
{
cout<<"inserisci i tuoi numeri\n";
for (int i=0;i<riempimento;i++)
{
cout<<"v["<<i<<"]"<<": ";
cin>>array[i];
}
}


void stampa_vet (int array [], int riempimento)
{
cout<<"i numeri contenuti nell'array attualmente sono:\n";
for (int i=0;i<riempimento;i++)
{
cout<<"v["<<i<<"]"<<": "<<array[i]<<endl;
}

}


float media (int array[],int riempimento)
{
int s=0;
for (int i=0;i<riempimento;i++)
{
s+=array[i];
}
float m=(float)s/riempimento;
return m;
}


int somma (int array[],int riempimento)
{
int s=0;
for (int i=0;i<riempimento;i++)
{
s+=array[i];
}
return s;
}


void inserisci_righecolonne(int &r, int &c)
{
cout<<"inserisci il numero di righe:\n";
cin>>r;
cout<<"inserisci il numero di colonne:\n";
cin>>c;
}


void inserisci_matrice(int matrice[][MAXC],int righe,int colonne)
{
cout<< "Inserisci i valori della matrice: " << endl;
for (int i=0; i<righe; i++)
{
cout<<"Riga numero " << i+1 << ":" << endl;
for (int j=0; j<colonne; j++)
{
cout<<"matr["<<i<<"]["<<j<<"]: ";
cin >>matrice[i][j];
}
}
}


void stampa_matrice (int matrice[][MAXC],int righe,int colonne)
{
cout<< "la matrice da te inserita e': " << endl;
for (int i=0; i<righe; i++)
{
cout<<endl;
for (int j=0; j<colonne; j++)
{
cout<<matrice[i][j]<<endl;
}
}
}


e il main diventa




#include <iostream>
#include "newfile.h"

using namespace std;


int main()
{
int numeri[NMAX];
int matr[MAXR][MAXC];
int r,c,rie;
do
{
cout<<"quanti valori vuoi immettere?\n";
cin>>rie;
}while(rie>NMAX);
inserisci_vet(numeri,rie);
stampa_vet (numeri,rie);
cout<<"la media totale del vettore e': "<<media (numeri,rie)<<endl;
cout<<"la somma totale del vettore e': "<<somma (numeri,rie)<<endl;
inserisci_righecolonne(r,c);
inserisci_matrice(matr,r,c);
stampa_matrice (matr,r,c);
system ("pause");
return 0;
}

emix95
01-07-2016, 16:45
sei stato preziosissimo, grazie veramente. nel caso avessi altre domande "stupide" posso o scoccio troppo? hahaha

oregon
01-07-2016, 17:44
sei stato preziosissimo, grazie veramente. nel caso avessi altre domande "stupide" posso o scoccio troppo? hahaha

Di nulla ... ovviamente nel file include userai le costanti

#define MAXR 10
#define MAXC 10
#define NMAX 10

void inserisci_vet (int array [],int riempimento);
void stampa_vet (int array [], int riempimento);
float media (int array[],int riempimento);
int somma (int array[],int riempimento);
void inserisci_righecolonne(int &r, int &c);
void inserisci_matrice(int matrice[][MAXC ],int righe,int colonne);
void stampa_matrice (int matrice[][MAXC ],int righe,int colonne);

Loading