Parametr typu referencyjnego

Parametr typu referencyjnego
SC
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 4 lata
  • Postów:13
0

Cześć,

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

Kopiuj
#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.

edytowany 2x, ostatnio: cerrato
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 19 godzin
  • Lokalizacja:Szczecin
3
  1. Wywołaj funkcję jeden raz, nie dwa.
  2. Przypisz wartość początkową dla suma
  3. masz wylosować 100 liczb, nie 10

Zobacz pozostały 1 komentarz
kq
Wartość początkową - 0
SC
Okej, a jak teraz mam wyświetlić nieparzyste osobno i sumę osobno?
kq
Wyświetlając sumę i liczbę osobno, nie rozumiem pytania.
SC
No osobno, ale jak? Przecież w main() muszę dać dwa std::cout << "Ilość nieparzystych" <<losowanie(p,k,suma) i drugi std::cout <<"Suma wynosi:" << losowanie(p,k,suma). Bo przecież ilość liczb nieparzystych zwracana jest przez return. Chyba, że ja coś źle rozumiem to proszę mi wybaczyć głupotę.
kq
Możesz zapisać wynik funkcji do zmiennej. Ale w tym przypadku przecież i tak nie musisz wypisywać 2x liczby (bo to jest zwracane z funkcji), skoro chcesz wypisać sumę... która jest zapisana do zmiennej suma.
SC
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 4 lata
  • Postów:13
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:

Kopiuj
#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ć?

edytowany 1x, ostatnio: stefano_cx
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 19 godzin
  • Lokalizacja:Szczecin
1

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


SC
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 4 lata
  • Postów:13
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?

Kopiuj
#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;
}
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 19 godzin
  • Lokalizacja:Szczecin
1

Chyba ok.

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


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.