• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Parametr typu referencyjnego

Fiszki IT
Fiszki IT
0 głosów
58 wizyt
pytanie zadane 21 lipca 2020 w C i C++ przez Kacperek_code Obywatel (1,650 p.)
otwarte ponownie 22 lipca 2020 przez Kacperek_code

Cześć,

tak jak sugeruje temat - mam pytanie odnośnie parametru referencyjnego. Mianowicie, napisałem taki oto kod:

#include <iostream>
#include <cstdlib>
#include <ctime>

int losowanie(int p, int k)
{  
	int liczby;
	int ile = 0;

	srand(time(0)); 

	for (int i = 1; i <= 100; i++)
	{
		liczby = p + rand() % (k - p + 1);
		std::cout << "\n" << liczby;
		
		if (liczby % 2 != 0)
		{
			ile++;
		}
	}

	return ile;
}

int main()
{
	int p, k;
	std::cout << "Podaj zakres losowania: <p i k>: ";
	std::cin >> p >> k;
	std::cout << "\nNieparzystych jest: " << losowanie(p, k);

	std::cin.ignore();
	std::cin.get();
	return 0;
}

Tutaj polecenie do tego kodu: 

Napisz funkcję, która losuje 100 liczb z przedziału <p,k> i oblicza sumę oraz ilość tych liczb, które są nieparzyste. Sumę należy zwrócić przez parametr typu referencyjnego, zaś ilość przez return. 

Czytałem już o tym parametrze typu referencyjnego na różnych stronach i widziałem różne przykłady użycia, ale dalej nie chwytam jak mam tego użyć w swoim programie. 

Bardzo proszę o pomoc.  

komentarz 21 lipca 2020 przez DragonCoder Nałogowiec (36,520 p.)
https://pl.wikibooks.org/wiki/C%2B%2B/Referencje

nie rozumiem czego nie rozumiesz w uzyciu... Pokazesz, gdzie czytales o tym?

1 odpowiedź

+1 głos
odpowiedź 21 lipca 2020 przez draghan VIP (105,220 p.)
wybrane 21 lipca 2020 przez Kacperek_code
 
Najlepsza

Może mylące jest stwierdzenie "zwrócić przez parametr". Znaczy to tylko tyle, że Twoja funkcja ma nie zwracać wartości standardowym kanałem (przez `return`), tylko masz dodać do jej parametrów referencję do zmiennej, w której zapiszesz wartość "zwracaną".

Wtedy wywołanie tej funkcji nie będzie wyglądało tak:

int wynik = losowanie(p, k);

tylko tak:

int wynik;
losowanie(p, k, wynik);

Zakładam że nie masz problemu z tym, jak formalnie dodać taki parametr do funkcji, skoro czytałeś już o tym w różnych źródłach. Jeśli jestem w błędzie, zapytaj to podpowiem.

komentarz 21 lipca 2020 przez draghan VIP (105,220 p.)
A, może trochę się pospieszyłem z tym, bo nie doczytałem że funkcja ma też zwracać normalnym kanałem inną wartość. Ale podpowiedź wydaje mi się wciąż pokazywać dobry przykład, więc zostawię jak jest. :)
komentarz 21 lipca 2020 przez Kacperek_code Obywatel (1,650 p.)
Dziękuję za wyjaśnienie!
komentarz 21 lipca 2020 przez draghan VIP (105,220 p.)
Rozumiem że już poradziłeś sobie z zadaniem?
komentarz 22 lipca 2020 przez Kacperek_code Obywatel (1,650 p.)
edycja 22 lipca 2020 przez Kacperek_code

Finalnie chyba tak. Wymodziłem coś takiego: 

#include <iostream>
#include <cstdlib>
#include <ctime>

int losowanie(int p, int k, int& suma)
{  
    int liczby;
    int ile = 0;

    srand(time(0)); 

    for (int i = 1; i <= 10; i++)
    {
        liczby = p + rand() % (k - p + 1);
        std::cout << "\n" << liczby;

        if (liczby % 2 != 0)
        {
            ile++;
            suma += liczby;
        }
    }

    return ile;
}

int main()
{
    int p, k, suma;
    suma = 0;
    std::cout << "Podaj zakres losowania: <p k>: ";
    std::cin >> p >> k;
    std::cout << "\nNieparzystych jest: " << losowanie(p,k,suma);
   std::cout << "\nSuma wynosi: " << suma;

    std::cin.ignore();
    std::cin.get();
    return 0;
}

Spełnia założenia? 

1
komentarz 26 lipca 2020 przez draghan VIP (105,220 p.)
Wygląda ok. Dobra robota. :)
komentarz 27 lipca 2020 przez Kacperek_code Obywatel (1,650 p.)
Jeszcze raz wielkie dzięki za wytłumaczenie! :)

Podobne pytania

0 głosów
3 odpowiedzi 184 wizyt
0 głosów
1 odpowiedź 129 wizyt
pytanie zadane 28 kwietnia 2020 w C i C++ przez Adrian Maj Nowicjusz (140 p.)
0 głosów
1 odpowiedź 139 wizyt
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

84,751 zapytań

133,554 odpowiedzi

295,977 komentarzy

56,010 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...