Parametr typu referencyjnego

0

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& 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 += ile;
		}
	}

	return ile;
}

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

	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.

Zielonego pojęcia nie mam jak mam to włożyć do swojego kodu, żeby było dobrze. Próbowałem na kilka sposobów, ale po prostu nie wiem jak to zrobić.
Proszę o rozwiązanie problemu.

3
  1. Wywołaj funkcję jeden raz, nie dwa.
  2. Przypisz wartość początkową dla suma
  3. masz wylosować 100 liczb, nie 10
0
kq napisał(a):
  1. Wywołaj funkcję jeden raz, nie dwa.
  2. Przypisz wartość początkową dla suma
  3. masz wylosować 100 liczb, nie 10

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;
        }
    }
 
    std::cout << "\nSuma wynosi: " << suma;
 
    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::cin.ignore();
    std::cin.get();
    return 0;
}

Finalnie może być?

1

Nie bardzo. Wypisać masz zapewne w zewnętrznej funkcji, ta losująca nie powinna nic wypisywać (bo nie takie jej zadanie)

0
kq napisał(a):

Nie bardzo. Wypisać masz zapewne w zewnętrznej funkcji, ta losująca nie powinna nic wypisywać (bo nie takie jej zadanie)

A teraz?

#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;
}
1

Chyba ok.

Warto przeczytać https://dsp.krzaq.cc/post/180/ ale samo wykorzystanie parametrów jako wyjścia wygląda ok.

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