problem ze wskaznikami c++

problem ze wskaznikami c++
CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
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:

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


}
edytowany 2x, ostatnio: kq
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:Szczecin
0

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


AK
tu jest DUŻO spieprzone, od podstawień w nieprawidłową stronę poczynając
kq
No jest, ale wszystko po kolei do przeskoczenia przy odrobinie chęci - co zresztą widać w kolejnych postach.
CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0

ah niestety niezbyt rozumiem

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:Szczecin
0

Czy to Twój kod?


CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0

tak

chodzi o instrukcje return?

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

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


edytowany 1x, ostatnio: kq
CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0

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

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:Szczecin
0

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

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


katakrowa
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Chorzów
  • Postów:1670
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


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
edytowany 1x, ostatnio: katakrowa
kq
Hrhr nawet nie zauważyłem tych oczywistych :​D
katakrowa
No przez chwilę mi się pod czaszką podniosła temperatura :-)
kq
Ale konceptualnie najważniejszy problem to void/int i wypisanie/zwrócenie. Btw, fajny pomysł z blurem.
CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0

tutaj zmiana kodu

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

edytowany 1x, ostatnio: crypton
AK
wypisujesz ADRES funckji minimum a nie wartość, jaką zwraca
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:Szczecin
2

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


CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0

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

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

Dokładnie tak.


CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0

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

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


}
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:Szczecin
1
Kopiuj
cout << minimum;

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


CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0

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

kq
Od tego jest forum ;​) Żaden stracony czas.

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.