[C++] sortowanie i kompilacja - dziwne błędy

Awatar użytkownika
Ceplusplusik
Użytkownik
Użytkownik
Posty: 228
Rejestracja: 7 paź 2012, o 17:02
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 94 razy

[C++] sortowanie i kompilacja - dziwne błędy

Post autor: Ceplusplusik »

Kod: Zaznacz cały

#include <iostream>
#include <cmath>
using namespace std;


void sortuj (int a,int b,int c)
{
	if (a>b	&& a>c) //first 44,45,46
	{
		cout << a << " ";
				
		if (c>b)
		{
			cout << c << " ";
			cout << b;
		}
		
		if (b>c)
		{
			cout << b << " ";
			cout << c;
		}
		
	}
	
	if (b>a && b>c)
	{
		cout << b << " ";
		
		if (c>a)
		{
			cout << c << " ";
			cout << a;
		}
		
		if (a>c)
		{
			cout << a << " ";
			cout << c;
		}
	}
	
	if (c>a && c>b)
	{
		cout << c << " ";
		
		if (b>a)
		{
			cout << b << " ";
			cout << a;
		}
		
		if (a>b)
		{
			cout << a << " ";
			cout << b;
		}
	}
	

	
	
}


int main ()
{

	cout << sortuj (12,15,14);
}
Witam. Proszę o weryfikację mojego kodu: pojawiają się bardzo dziwne, mało rzeczowe błędy (jak
na przykład niepoprawne wczytanie biblioteki iostream). Błąd zaczął się pojawiać, kiedy zamiast typu funkcji "int", wstawiłem "void" (a to dlatego, że po wykonaniu polecenia program zwracał ostatnią liczbę z funkcji). Zamieszczam kod błędów. Pozdrawiam.
Ukryta treść:    
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

[C++] sortowanie i kompilacja - dziwne błędy

Post autor: norwimaj »

W jaki sposób chcesz wypisać wynik funkcji sortuj, skoro ta funkcja nie zwraca żadnego wyniku?
Awatar użytkownika
Ceplusplusik
Użytkownik
Użytkownik
Posty: 228
Rejestracja: 7 paź 2012, o 17:02
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 94 razy

[C++] sortowanie i kompilacja - dziwne błędy

Post autor: Ceplusplusik »

Nie zwraca, bo to przecież void. Mam przecież couty wewnątrz funkcji. Czemu więc nie są wyświetlane?
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

[C++] sortowanie i kompilacja - dziwne błędy

Post autor: norwimaj »

Ceplusplusik pisze:Mam przecież couty wewnątrz funkcji.
I jeden cout wewnątrz innej funkcji. Może nie wszystkie są potrzebne.
Ceplusplusik pisze: Czemu więc nie są wyświetlane?
Żeby je wyświetlić, musisz uruchomić program, a jeszcze wcześniej — skompilować go. Jednak jeszcze wcześniej musisz go doprowadzić do postaci, która da się skompilować. Krótko mówiąc, musisz najpierw pozbyć się rażącego błędu, jakim jest wypisywanie wartości typu void.
Awatar użytkownika
Ceplusplusik
Użytkownik
Użytkownik
Posty: 228
Rejestracja: 7 paź 2012, o 17:02
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 94 razy

[C++] sortowanie i kompilacja - dziwne błędy

Post autor: Ceplusplusik »

Jeśli próbuję zrobić funkcję zwracającą kilka wartości (return a; return b; return c), to i tak kompilator wybierze jedną z nich. Natomiast kiedy robię tą samą "techniką" jak powyżej, z tymże z użyciem typu integer - program i tak zwraca sam od siebie ostatnią z wprowadzonych liczb, co daje wynik przykładowo "15 14 1214".
Wystarczy, że zmienię w mainie wyrażenie bez couta na początku wyrażenia i wszystko chodzi, jak trzeba. Wobec tego jakiego rodzaju byłby w takim wypadku błąd, skoro potrzebuję typ funkcji, który nie zwraca niczego, a jedynym takim jest void? Ewentualnie gdzieś popełniam błąd rozumowy, więc prosiłbym o funkcję, która przy użyciu zwracania wykona polecenia poprawnie .
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++] sortowanie i kompilacja - dziwne błędy

Post autor: Afish »

Kod: Zaznacz cały

int main ()
{
   sortuj (12,15,14);
}
Ceplusplusik pisze:prosiłbym o funkcję, która przy użyciu zwracania wykona polecenia poprawnie :).
Co chcesz zwrócić?
Awatar użytkownika
Ceplusplusik
Użytkownik
Użytkownik
Posty: 228
Rejestracja: 7 paź 2012, o 17:02
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 94 razy

[C++] sortowanie i kompilacja - dziwne błędy

Post autor: Ceplusplusik »

W pierwszej kolejności chcę, coby użytkownicy analizowali moje posty i odpowiedzieli na zawarte w nich pytania, bo w innym wypadku zachodzi pewnego rodzaju dysonans komunikacyjny. Pozdrawiam.

Wystarczy, że zmienię w mainie wyrażenie bez couta na początku wyrażenia i wszystko chodzi, jak trzeba. Wobec tego jakiego rodzaju byłby w takim wypadku błąd, skoro potrzebuję typ funkcji, który nie zwraca niczego, a jedynym takim jest void?
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++] sortowanie i kompilacja - dziwne błędy

Post autor: Afish »

norwimaj już Ci wyjaśnił, że nie da się wypisać void. Z tego też powodu program się nie kompiluje, co już zostało Ci wyjaśnione, ponadto sam kompilator informuje Cię o tym problemie.
Zapytałem również, co chcesz zwrócić - odpowiedzi nie uzyskałem. Dysonans w istocie zachodzi, ale nie z mojej winy.
Awatar użytkownika
Ceplusplusik
Użytkownik
Użytkownik
Posty: 228
Rejestracja: 7 paź 2012, o 17:02
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 94 razy

[C++] sortowanie i kompilacja - dziwne błędy

Post autor: Ceplusplusik »

Odpisałem przeto, że wystarczy, że wyrzucam couta wewnątrz maina i program chodzi dobrze, nawet i z typem void. Mało tego, dokładnie tak, jak chcę. Pytałem, z czego to wynika. Zależy mi na jasności, bo nie sztuka rozwiązać zadanie, które nie wiadomo z jakiego powodu w ogóle działa.
Chcę zwrócić liczby w kolejności od największej do najmniejszej spośród trzech, które wpisałem do funkcji .
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++] sortowanie i kompilacja - dziwne błędy

Post autor: Afish »

Ceplusplusik pisze:Odpisałem przeto, że wystarczy, że wyrzucam couta wewnątrz maina i program chodzi dobrze, nawet i z typem void. Mało tego, dokładnie tak, jak chcę. Pytałem, z czego to wynika.
Ciężko jest odpowiedzieć na niekonkretne pytanie. Bez wypisywania voida działa, bo kod jest poprawny, z wypisywaniem voida nie działa, bo kod jest niepoprawny - ale to zapewne nie jest odpowiedź, której poszukujesz.

A dlaczego kod jest niepoprawny z wypisywaniem void? Najprostsza odpowiedź to: bo operator << klasy std::basic_ostream nie przyjmuje parametru void. A nie przyjmuje takiego parametru, bo po pierwsze język na to nie pozwala, a po drugie cóż miałoby to znaczyć? Void symbolizuje brak wartości, a skoro wartości nie ma, to nie da się jej wypisać.
Ceplusplusik pisze:Chcę zwrócić liczby w kolejności od największej do najmniejszej spośród trzech, które wpisałem do funkcji :).
Nie da się zwrócić trzech wartości, musisz je opakować w jakąś strukturę (nie mam tu na myśli struct).
ODPOWIEDZ