Strona 1 z 1

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

: 12 gru 2013, o 23:47
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ść:    

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

: 13 gru 2013, o 00:11
autor: norwimaj
W jaki sposób chcesz wypisać wynik funkcji sortuj, skoro ta funkcja nie zwraca żadnego wyniku?

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

: 13 gru 2013, o 00:16
autor: Ceplusplusik
Nie zwraca, bo to przecież void. Mam przecież couty wewnątrz funkcji. Czemu więc nie są wyświetlane?

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

: 13 gru 2013, o 00:35
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.

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

: 13 gru 2013, o 17:33
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 .

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

: 13 gru 2013, o 17:52
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ć?

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

: 13 gru 2013, o 18:23
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?

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

: 13 gru 2013, o 18:58
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.

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

: 14 gru 2013, o 10:05
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 .

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

: 14 gru 2013, o 11:06
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).