[c++] Przekazywanie argumentów funkcji.

Awatar użytkownika
musialmi
Użytkownik
Użytkownik
Posty: 3466
Rejestracja: 3 sty 2014, o 13:03
Płeć: Mężczyzna
Lokalizacja: PWr ocław
Podziękował: 382 razy
Pomógł: 434 razy

[c++] Przekazywanie argumentów funkcji.

Post autor: musialmi »

No to zdecydowanie użyj tego:

Kod: Zaznacz cały

wektor4d dodawanie (wektor4d wek, wektor4d wek2){
  ...
}
Tym sposobem nie będzie kolejnych pytań o współrzędne wektorów (które już przecież mamy, jak napisałeś). A może chcesz, żeby drugi z wektorów był podawany podczas wykonywania funkcji, a nie wcześniej? Jeśli tak, to wiesz jak to przeedytować?
LipaMat
Użytkownik
Użytkownik
Posty: 125
Rejestracja: 23 paź 2013, o 17:49
Płeć: Mężczyzna
Lokalizacja: Gdynia
Podziękował: 9 razy
Pomógł: 9 razy

[c++] Przekazywanie argumentów funkcji.

Post autor: LipaMat »

I możesz mi wyjaśnić jak w tym momencie funkcja pobiera te argumenty? Co ma być w środku funkcji oprócz samego algorytmu dodawania wektorów i co ma być wtedy w mainie, jak jako pierwszą mam funkcję wczytaj i wypisz i potem to?
Awatar użytkownika
musialmi
Użytkownik
Użytkownik
Posty: 3466
Rejestracja: 3 sty 2014, o 13:03
Płeć: Mężczyzna
Lokalizacja: PWr ocław
Podziękował: 382 razy
Pomógł: 434 razy

[c++] Przekazywanie argumentów funkcji.

Post autor: musialmi »

Kod: Zaznacz cały

main:
wektor1=wczytaj_wektor
wektor2=wczytaj_wektor
wypisz_wektor()
dodawanie(wektor1, wektor2)
W ogóle wydaje mi się, że wolałbyś, żeby wypisz_wektor wyglądało inaczej. Bo ono teraz pobiera wektor i od razu podaje jego współrzędne. A chyba chodzi o to, żeby podawał współrzędne jakiegoś starego wektora? Jeśli nie, to olej tę uwagę i przejdźmy dalej.
W środku funkcji dodawanie ma być tylko algorytm dodawania (wektory wektor1, wektor2 są już zadane! Nie trzeba ich pobierać) i return nowywektor.

Każda funkcja pobiera argumenty wtedy, kiedy jest wywoływana.
LipaMat
Użytkownik
Użytkownik
Posty: 125
Rejestracja: 23 paź 2013, o 17:49
Płeć: Mężczyzna
Lokalizacja: Gdynia
Podziękował: 9 razy
Pomógł: 9 razy

[c++] Przekazywanie argumentów funkcji.

Post autor: LipaMat »

wypisz_wektor ma po prostu wypisać na ekran to, co zostało wygenerowane w wczytaj_wektor. Ona tak naprawdę nic nie robi z wektorami, tylko ma je wypisać na ekran.-- 6 gru 2014, o 23:19 --No i niestety znowu mam problem...

Kod: Zaznacz cały

wektor4d dodawanie(wektor4d wek, wektor4d wek2)
{
	
	wektor4d best = wek.wspONE + wek2.wspONE;



	return best;
}
To jest tylko przykład, ale tutaj się nie klei znowu to, że "no suitable constructor exists to convert "int" to "wektor4d". Ale z drugiej storny jak zmienie best na double to nie będę mógł tego zreturnować.
Awatar użytkownika
musialmi
Użytkownik
Użytkownik
Posty: 3466
Rejestracja: 3 sty 2014, o 13:03
Płeć: Mężczyzna
Lokalizacja: PWr ocław
Podziękował: 382 razy
Pomógł: 434 razy

[c++] Przekazywanie argumentów funkcji.

Post autor: musialmi »

Patrz: wek.wspONE to liczba. wek2.wspONE to też liczba. Suma liczb to na pewno liczba. Więc best jest liczbą. Więc nie może być wektorem, musi być liczbą (np. double). Czym jest best? Jest pierwszą współrzędną sumy wektorów. A ty potrzebujesz chyba ich czterech Czterech liczb. Następnie jednego wektora, którego współrzędne będą tymi liczbami. I ten wektor zwrócisz. Tak?
LipaMat
Użytkownik
Użytkownik
Posty: 125
Rejestracja: 23 paź 2013, o 17:49
Płeć: Mężczyzna
Lokalizacja: Gdynia
Podziękował: 9 razy
Pomógł: 9 razy

[c++] Przekazywanie argumentów funkcji.

Post autor: LipaMat »

Tak, czyli robię 4 liczby powiedzmy Nwec1, Nwec2, Nwec3, Nwec4 i to SA nowe współrzędne nowego wektora z dodawania. No ale potem tworze ten nowy wektor

Kod: Zaznacz cały

wektor4d Nwec = Nwec1 + Nwec2 + Nwec3...
ale znowu jest ten błąd bo po lewej jest wektor 4d a po prawej cztery liczby. I znowu wyświetla się ten sam błąd.
Awatar użytkownika
musialmi
Użytkownik
Użytkownik
Posty: 3466
Rejestracja: 3 sty 2014, o 13:03
Płeć: Mężczyzna
Lokalizacja: PWr ocław
Podziękował: 382 razy
Pomógł: 434 razy

[c++] Przekazywanie argumentów funkcji.

Post autor: musialmi »

No i sam doskonale wiesz dlaczego jest ten błąd, na serio nie wymyśliłeś rozwiązania? Rzućmy oko w twoją strukturę:

Kod: Zaznacz cały

struct wektor4d
{
  int wspONE;
  int wspTWO;
  int wspTHREE;
  int wspFOUR;
};
Jak widać, każdy wektor ma cztery współrzędne, których nazwy masz tutaj. Przypomnę może jak się do nich dostać: pierwsza współrzędna wektora Nwec to Nwec.wspONE Stwórz wektor i przypisz mu współrzędne.
LipaMat
Użytkownik
Użytkownik
Posty: 125
Rejestracja: 23 paź 2013, o 17:49
Płeć: Mężczyzna
Lokalizacja: Gdynia
Podziękował: 9 razy
Pomógł: 9 razy

[c++] Przekazywanie argumentów funkcji.

Post autor: LipaMat »

Dobra, już wszystko ogarnięte, wszystko działa jeżeli chodzi o te funkcje. Zrobiłem też funkcje, która wczytuje i wypisuje n różnych wektorów i zwraca tablicę wektorów.

Kod: Zaznacz cały

wektor4d wczytaj_wektory_n(int n)
	{
		wektor4d* tab = new wektor4d[n];
		
		for(int i=0; i<n; i++)
		{
			tab[i] = wypisz_wektor();
		}

		return *tab;
	}
Mam jednak problem z tym jak dodać współrzędne n-wektorów, jeżeli w funkcji, która ma je sumować jako argument biorę tę tablicę, która zostaje zwrócona z tej funkcji.

Kod: Zaznacz cały

double dodawanie_n(const int* tab, int n)
	{
		int *wspolrzedne = new int[4];
		
		for(int i=0; i<n; i++)
		{
			wspolrzedne[i] = tab[i] + tab[i].wspTWO + tab[i].wspTHREE + tab[i].wsp.FOUR;
		};
		return 0;
	}
Na poczatek coś takiego wymysliłem, ale to chyba głupie jest i nie przechodzi.
Awatar użytkownika
musialmi
Użytkownik
Użytkownik
Posty: 3466
Rejestracja: 3 sty 2014, o 13:03
Płeć: Mężczyzna
Lokalizacja: PWr ocław
Podziękował: 382 razy
Pomógł: 434 razy

[c++] Przekazywanie argumentów funkcji.

Post autor: musialmi »

Nie przechodzi, bo zamiast tab, powinno być tab.wspONE. Ale jesteś świadomy, że ta twoja funkcja sumuje cztery współrzędne jednego wektora, a nie pierwszą czterech wektorów? Ja bym zrobił cztery pętle, gdzie w każdej sumuje się jedna współrzędna. Właściwie można to zrobić w jednej pętli, ale trzeba dodawać po jednym. W ogóle mam nadzieję, że dobrze rozumiem cel tej funkcji: ma zwrócić sumę n wektorów?
ODPOWIEDZ