Oppure

Loading
09/01/11 11:28
gluglu85
Salve dopo avere costruito un programma di modeste dimensioni mi è saltato in mente di provare a mettere una matrice al posto di un vettore, purteoppo non son riuscito... Ragazzi chiedo a voi una mano, il programma seguente è il problema originario, ho messo un paio di commenti per semplificare!
quindi se al posto del vettore voglio mettere una matrice come dovrei affronatre il problema:-|???


//PRGOGGRAMMA CHE SOMMA E FA IL PRODOTTO DEGLI ELEMENTI DEL VETTORE UTILIZZANDO LE FUNZIONI
#include <cstdlib>
#include <iostream>

using namespace std;

int vet[50];//dimensione max vettore
int somma(int dim);
int prodotto(int dim);
void lettura_vettore(int dim);
void stampa(int dim);


int main(int argc, char *argv[])
{
int dimensione;//dimensione del vettoree
int s;//somma degli elementi del vettore
int p;//prodotto degli elementi del vettore

cout<<"inserisci dimensione del vettore"<<endl;
cin>>dimensione;

lettura_vettore(dimensione);
s=somma(dimensione);
p=prodotto(dimensione);

stampa(dimensione);
cout<<"somma del vettore= "<<s<<endl;
cout<<"prodotto del vettore= "<<p<<endl;

system("PAUSE";);
return EXIT_SUCCESS;
}

int somma(int dim)
{
int i;//contatore
int sum=0;//somma

for(i=0;i<dim;i++)
{
sum+=vet[i];
}

return sum;
}

int prodotto(int dim)
{ int i;//contatore
int pro=1;//prodotto

for(i=0;i<dim;i++)
{
pro*=vet[i];
}

return pro;
}
void lettura_vettore(int d)
{
int i;//contatore

cout<<"leggo vettore"<<endl;
for(i=0;i<d;i++)
{
cout<<i+1<<";) ";
cin>>vet[i];
}

return;
}
void stampa(int dim)
{
int i;//contatore

cout<<"stampo vettore"<<endl;
for(i=0;i<dim;i++)
{
cout<<i+1<<";) ";
cout<<vet[i]<<endl;

}
cout<<endl;
return ;

}

grazie in anticipo!:k:
aaa
09/01/11 12:43
Giarados
Notifico tutto ciò che ho trovato di errato/sconsigliato:
ERRORE -> Per riferirti ad un elemento dell'array devi utilizzare l'operatore []. Il solo nome dell'array è un puntatore costante.

MOLTO SCONSIGLIATO -> Chiedere all'utente la dimensione dell'array quando questo è statico (50 elementi nel tuo caso) senza avvertire del range degli indici e senza effettuare un controllo sull'input da tastiera. Ricevi un bel segmentation fault se viene inserito un numero meggiore o uguale a 50.

SCONSIGLIATO -> Utilizzare variabili globali e scrivere funzioni che operano su esse.

Posto di sotto come lo modificherei io il programma (i numeri valori vengono settati tramite rand()):
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;

int sum(const int * const * const, const int , const int );
int product(const int * const * const , const int , const int );

int main(void)
{
	int columns,rows;
	int **multidimensionalArray;

	do
	{
		cout<<"Columns : ";
		cin>>columns;
        }
	while(columns<=0);

	do
	{
		cout<<"Rows : ";
		cin>>rows;
	}
	while(rows<=0);

	multidimensionalArray=new int*[rows];

	for(int i=0; i<rows; i++)
		multidimensionalArray[i]=new int[columns];


	srand(time(0));
	for(int i=0; i<rows; i++)
		for(int j=0; j<columns; j++)
			multidimensionalArray[i][j]=rand()%100 +1 ;

	for(int i=0; i<rows; i++)
		for(int j=0; j<columns; j++)
		{
			if(j % columns == 0)
				cout<<endl;

			cout<<setw(4)<<multidimensionalArray[i][j]<<' ';
		}

	cout<<endl;

	cout<<"Total sum : \t"<<sum(multidimensionalArray,columns,rows)<<endl;
	cout<<"Total product : \t"<<product(multidimensionalArray,columns,rows)<<endl;

return 0;
}	

int sum(const int * const * const aMultidimensionalArray, const int columns, const int rows)
{
	int result=0;

	for(int i=0; i<rows; i++)
		for(int j=0; j<columns; j++)
			result+=aMultidimensionalArray[i][j];

	return result;
}

int product(const int * const * const aMultidimensionalArray, const int columns, const int rows)
{
	int result=1;

	for(int i=0; i<rows; i++)
		for(int j=0; j<columns; j++)
			result*=aMultidimensionalArray[i][j];

	return result;
}

aaa
09/01/11 13:38
gluglu85
ok proverò a modificarlo, grazie :k:
aaa