Funkcja do działania na wartościach z tablicy - jak zapisać wyniki?

0

Hej

Uczę się C++ z Symfoni C++
jestem na etapie tablic i mam problem z programem który generuje tablice z kolejnymi liczbami, następnie wywołuje funkcję która poszczególne elementy mnoży razy 3 i już poza funkcją wyświetla jeszcze raz zawartość tablicy (która teoretycznie powinna być potrojona - a nie jest!)

Program jest prawie taki sam jak w książce (nie chce przepisywać znak w znak tylko minimalnie zmieniam)

 


#include "stdafx.h"
#include <iostream>
using namespace std;

void potrojenie(int ile,long t[]);
//**********************************************
int main()
{
	const int rozmiar=20;
	long widmo[rozmiar];

	for(int i=0;i<rozmiar;i++)
	{
		widmo[i]=i;
		cout<<"widmo["<<i<<"]= "<<widmo[i]<<endl;
	}
	potrojenie(rozmiar,widmo);
	cout<<endl<<endl;
	for(int i=0;i<rozmiar;i++)
	{
		widmo[i]=i;
		cout<<"widmo["<<i<<"]= "<<widmo[i]<<endl;
	}
	system("pause");
}
//******************************
void potrojenie(int ile,long t[])
{
	for(int i=0;i<ile;i++)
	{
		t[i]*=3;
	}
}

funkcja potrojenie dostaje wskaźnik do pierwszego elementu tablicy, czyli powinna działać bezpośrednio na nim a nie na kopii (tak mówi książka). Jednak kiedy po wykonaniu funkcji chcę wyświetlić zawartość tablicy jeszcze raz nic się nie zmienia. (Próbowałem umieścić cout wewnątrz funkcji i wtedy rzeczywiście wartości są 3 razy większe, ale tylko wewnątrz funkcji.)

Co jest nie tak? albo co zrobić żeby funkcja rzeczywiście pomnożyła wartości elementów tablicy i zapisała je w tej tablicy?

Do pisania i kompilacji używam Visual Studio 2010

0

Do funkcji wysyłasz tablicę jako taką (a raczej jej kopię), a że nic nie zwraca to nic dziwnego że nie są potrojone przy wyświetlaniu. Poczytaj o wskaźnikach to będziesz wiedział jak zrobić wskaźnik i z niego korzystać.

0

w książce jest napisane że zapisanie

widmo

jest równe zapisaniu &widmo[0]

 (czyli z tego co rozumiem wysyłam wskaźnik do pierwszego elementu a nie kopie pierwszego elementu tablicy)
i praktycznie identyczny kod jest w książce i tam w wyniku wszystko działa.
0

Bo przed wyświetleniem po funkcji jeszcze raz nadpisujesz elementy:

        potrojenie(rozmiar,widmo);
        cout<<endl<<endl;
        for(int i=0;i<rozmiar;i++)
        {
                widmo[i]=i; // O TU JESZCZE RAZ NADPISUJESZ
                cout<<"widmo["<<i<<"]= "<<widmo[i]<<endl;
        }
0

mam ochotę uderzyć głową w stół...
dzięki wielkie za pomoc! ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1