problem ze wskaznikami c++

0

Chcialbym zeby ktos mi wytlumaczyl jak napisac program:

a) Napisz funkcję otrzymującą jako argumenty dwa wskaźniki na zmienne typu int, a następnie zwraca
minimum z wartości wskazywanych przez wskaźniki
ja niestety dzialam na adresach tych zmiennych, ale nie wiem jak w funkcji ogarnac dzialanie na wartosci tej zmiennej, wiem ze to banalne a siedze nad tym dobra godzine, pomoze ktos?
moj kod:

#include <iostream>
#include <cstdlib>
#include <conio.h>

using namespace std;

void minimum(int* a, int* b)
{
	int najmniejsza = 0;
	if (*a > * b) {
		*b = najmniejsza;
	}
	else
	{
		*a = najmniejsza;
		
	}
	cout << najmniejsza;
}

int main()
{
	int liczba1, liczba2;
	cout << "Podaj 2 liczby: " << endl;
	cin >> liczba1 >> liczba2;
	
	int* dwa;
	dwa = &liczba1;
	int* trzy;
	trzy = &liczba2;
	cout << *dwa << *trzy;

	cout << "najmniejsza liczba to: ";
	minimum(dwa, trzy);
	cout << minimum;


}
0

Przecież wkleiłeś prawie gotowy kod, tylko zamiast wypisać zwróć wybraną wartość...

0

ah niestety niezbyt rozumiem

0

Czy to Twój kod?

0

tak

chodzi o instrukcje return?

1

W takim razie zmodyfikuj funkcję minimum tak aby zwracała int i zwróć tego inta (return) zamiast go wypisywać.

0

okej wlasnie to zrozumialem, a jesli chcialbym to zrobic uzywajac procedury void, w jaki sposob daloby rade?

0

Nie dałoby¹. Zadanie wyraźnie każe zwrócić wartość z funkcji.

¹ out parameters na tym poziomie odpadają, dziękuję czepialskim.

2

Masz kilka błędów:

  1. pierwszy w linii 11
  2. pierwszy w linii 15
  3. Twoja funkcja nic nie zwraca a powinna zwracać wartość int jećli chciałbyś ją użyć w kontekście czegoś na podobieństwo linii 35.
  4. Zdecyduj się albo linia 34 wyświetla wynik albo chcesz ten wynik uzyskać jako rezultat funkcji w linii 35.

Po poprawieniu błędów 1 i 2 program właściwie już zaczyna działać choć wyświetla wynik 2 razy i jest mało elegancko.

screenshot-20201023193734.png

0

tutaj zmiana kodu

#include <iostream>
#include <cstdlib>
#include <conio.h>

using namespace std;

int minimum(int* a, int* b)
{
	int najmniejsza = 0;
	if (*a > * b) {
		*b = najmniejsza;
	}
	else
	{
		*a = najmniejsza;
		
	}
	return najmniejsza;
}

int main()
{
	int liczba1, liczba2;
	cout << "Podaj 2 liczby: " << endl;
	cin >> liczba1 >> liczba2;
	
	int* dwa;
	dwa = &liczba1;
	int* trzy;
	trzy = &liczba2;
	

	cout << "najmniejsza liczba to: ";
	minimum(dwa, trzy);
	cout << minimum;


}

a tu kompilacja, nadal to samo

001.png

2

No już prawie, teraz jeszcze zastanów się w którą stronę działa przypisanie w liniach 11 i 15.

0

rozumiem ze zamiast *b=najmniejsza; powinno byc najmniejsza=*b;
analogicznie z else

2

Dokładnie tak.

0

widocznie nadal jest cos nie tak, gdyz kompilator nie pokazuje mi prawidlowego wyniku

#include <iostream>
#include <cstdlib>
#include <conio.h>

using namespace std;

int minimum(int* a, int* b)
{
	int najmniejsza = 0;
	if (*a > * b) {
		najmniejsza = *b;
	}
	else
	{
		najmniejsza = *a;
		
	}
	return najmniejsza;
}

int main()
{
	int liczba1, liczba2;
	cout << "Podaj 2 liczby: " << endl;
	cin >> liczba1 >> liczba2;
	
	int* dwa;
	dwa = &liczba1;
	int* trzy;
	trzy = &liczba2;
	

	cout << "najmniejsza liczba to: ";
	minimum(dwa, trzy);
	cout << minimum;


}
1
cout << minimum;

Wypisujesz adres funkcji. Wypisz jej wynik (wyżej wyniku nigdzie nie przypisujesz).

0

i wszystko stalo sie jasne, dziekuje za pomoc i cenne rady, przepraszam za stracony czas i zycze milego piatkowego wieczoru!

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