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

Funkcja do działania na wartościach z tablicy - jak zapisać wyniki?
WI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 29
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)

Kopiuj
 


#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

SI
  • Rejestracja: dni
  • Ostatnio: dni
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ć.

WI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 29
0

w książce jest napisane że zapisanie

Kopiuj
widmo

jest równe zapisaniu &widmo[0]

Kopiuj
 (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.
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
        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;
        }
WI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 29
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.