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

Parametr typu referencyjnego

VPS Starter Arubacloud
0 głosów
470 wizyt
pytanie zadane 21 lipca 2020 w C i C++ przez Kacperek_code Obywatel (1,690 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,500 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 (106,230 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 (106,230 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,690 p.)
Dziękuję za wyjaśnienie!
komentarz 21 lipca 2020 przez draghan VIP (106,230 p.)
Rozumiem że już poradziłeś sobie z zadaniem?
komentarz 22 lipca 2020 przez Kacperek_code Obywatel (1,690 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 (106,230 p.)
Wygląda ok. Dobra robota. :)
komentarz 27 lipca 2020 przez Kacperek_code Obywatel (1,690 p.)
Jeszcze raz wielkie dzięki za wytłumaczenie! :)

Podobne pytania

0 głosów
2 odpowiedzi 270 wizyt
pytanie zadane 18 listopada 2022 w C i C++ przez Czarus Obywatel (1,310 p.)
0 głosów
3 odpowiedzi 371 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...