Data: 2007-10-09 16:34:19
jacek | Inny sposób na posortowanie trzech liczb
czesc takiego kursu szukałem - prostego wprowadzenia- by później zabrać się za grube książki, które zakładają ze sporo JUŻ umiem. Dlatego dzięki za kurs... a właśnie... programuję (he he) już od 3 dni i postanowiłem zrobić zadanie które znalazłem gdzieś w internecie...a oto kod i zadanie u góry:
/*Napisz program wprowadzający trzy liczby z klawiatury a następnie wyświetlający na ekranie: - największą z tych liczb - medianę - sekwencję tych trzech liczb uporządkowaną rosnąco lub malejąco Uwzględnij przypadki gdy wszystkie liczby są różne oraz że mogą wystąpić powtórzenia. */
#include <iostream> #include <conio.h> using namespace std; int main() { float a,b,c; cout<<"wprowadz 3 liczby:"<<endl; cin>>a; cin>>b; cin>>c; //tu jest blok: ktora największa if (a>b && a>c) { cout<<"najwieksza to:"<<a<<endl; } if (b>a && b>c) { cout<<"najwieksza to:"<<b<<endl; } if (c>a && c>b) { cout<<"najwieksza to:"<<c<<endl; } if (a==b && a==c) { cout<<"liczby sa takie same :)"<<endl; } if (a==b && a>c) { cout<<"najwieksze sa a i b:" <<a<<endl; } if (a==c && a>b) { cout<<"najwieksze sa a i c:" <<a<<endl; } if (b==c && b>a) { cout<<"najwieksze sa a i b:" <<a<<endl; } //tu jest blok: mediana -dokladnie nie wiem co to jest mediana- u mnie mediana to liczba środkowa po uszeregowaniu liczb if ((a<b && b<c)) { cout<<"mediana tych liczb to:"<<b<<endl; } if ((c<b && b<a)) { cout<<"mediana tych liczb to:"<<b<<endl; } if ((b<a && a<c)) { cout<<"mediana tych liczb to:"<<a<<endl; } if ((c<a && a<b)) { cout<<"mediana tych liczb to:"<<a<<endl; } if ((b<c && c<a)) { cout<<"mediana tych liczb to:"<<c<<endl; } if ((a<c && c<b)) { cout<<"mediana tych liczb to:"<<c<<endl; } if (a==b && a==c) { cout<<"mediana tych liczb to ktorakolwiek z tych liczba,, bo sa takie same :"<<endl; } if (a==b && b!=c) { cout<<"mediana tych liczb to:"<<a<<endl; } if (a==c && b!=c) { cout<<"mediana tych liczb to:"<<a<<endl; } if (b==c && c!=a) { cout<<"mediana tych liczb to:"<<b<<endl; } //sekewncja rosnaco *********************************tu jest ostatnie zadanie które chciałbym skrócić, a nie wypisywac jak poprzednie 2 ************************** if (a<=b && b<=c) //abc { cout<<"liczby rosnaco:"<<a<<b<<c<<endl; } if (c<=b && b<=a) //cba { cout<<"liczby rosnaco:"<<c<<b<<a<<endl; } if (b<=a && a<=c) //bac { cout<<"liczby rosnaco:"<<b<<a<<c<<endl; } if (c<=a && a<=b) //cab { cout<<"liczby rosnaco:"<<c<<a<<b<<endl; } if (a<=c && c<=b) //acb { cout<<"liczby rosnaco:"<<a<<c<<b<<endl; } if (b<=c && c<=a) //bca { cout<<"liczby rosnaco:"<<b<<c<<a<<endl; } // i tu mam dość wstawiania warunkow jak w poprzednich dwoch zadaniach ... //jak wpisze sie 2 takie same liczby to wyskocza 2 takie same liniki: //liczby rosnaco: 334 -x2 *************************** getch(); return(0); }
A teraz o co mi chodzi: jak napisałem w komentarzu na końcu programu ... musiałem wypisać sporo warunków ... a wystarczyła by np. taka funkcja 'if' która blokowała by resztę 'if' (w określonym bloku) gdyby warunek został spełniony - czy coś takiego istnieje? A może użycie jakiegoś innego polecenia, zamiast 'if' .... 'myślałem o switch...case...' ale nie wiem jak sobie by z tym poradzic.... pozdrawiam Jacek
| Data: 2007-10-09 21:46:55
Piotr Szawdyński | Sortowanie liczb
Zaraz się wczytam i dam odpowiedź  /edit: Jeśli dobrze zrozumiałem, chcesz ustawić (posortować ) liczby rosnąco (lub malejąco). Do sortowania danych służą różne algorytmy, które są krótkie i o różnej złożoności obliczeniowej. Wszystkie jednak operują na tablicach danych do których prawdopodobnie jeszcze nie doszedłeś.
Rozdział o tablicach: http://ddt.pl/kursy/?LessonId=11
Twoje rozwiązanie jest poprawne i na wiedzę, jaką aktualnie posiadasz jest to jedyne rozwiązanie (rozwiązanie można zapisać na wiele sposobów, wiele z może być krótszych, jednak metoda rozwiązania pozostanie ta sama).
Jeśli piszesz tyle warunków, a w każdym jest jedna instrukcja, możesz to zapisać również tak:
if (a<=b && b<=c) cout<<"liczby rosnaco:"<<a<<b<<c<<endl; if (a<=c && c<=b) cout<<"liczby rosnaco:"<<a<<c<<b<<endl; if (b<=a && a<=c) cout<<"liczby rosnaco:"<<b<<a<<c<<endl; if (b<=c && c<=a) cout<<"liczby rosnaco:"<<b<<c<<a<<endl; if (c<=a && a<=b) cout<<"liczby rosnaco:"<<c<<a<<b<<endl; if (c<=b && b<=a) cout<<"liczby rosnaco:"<<c<<b<<a<<endl;
Krótszy zapis, jednak warunków masz tyle samo
Jak przerobisz rozdział Pętla for: http://ddt.pl/kursy/?LessonId=10 i rozdział Tablice zmiennych: http://ddt.pl/kursy/?LessonId=11 będziesz mógł powrócić do problemu sortowania. Zapewniam Cię, że będziesz mógł posortować sobie dane rosnąco pisząc może 10 wierszy bez względu na ilość danych i wykorzystując do tego celu tylko i wyłącznie jedną prostą instrukcję warunkową. Pomimo iż napiszesz ją tylko jeden raz, może ona być wykonana nawet milion razy po to, abyś dostał posortowaną tablicę danych i nie musiał ręcznie pisać sortowania warunek po warunku dla każdej liczby 
Podsumowując: na chwilę obecną nic chyba nie uda Ci się bardziej genialnego wymyślić od obecnego rozwiązania
| Data: 2007-10-10 14:49:21
jacek |
świetnie! dzięki ... następnym razem zanim zapytam dojdę do ostatniej lekcji ... i już dwie książki czytam. Dzięki.
dobra uwaga co do zapisu 'if' z jedną instrukcją  | Data: 2007-10-10 15:19:53
Piotr Szawdyński |
No to closed  | |
| Statystyki tematu | Ostatnio przeczytali |
|---|
| Czytało użytkowników: | 29 | hans, fish13, malan, lenrokskate, Pirotechnik, TheLukon, Iname (√ιק), Pietrzuch, WunM, Dante, XaNeq, Macius700, Stokrand, Haker123, Dybusek, driver1995, kamillo121, vax3, Rojaw, bigboo, Mardock, pekfos, nnick, Tombol, DeBugger, Spilner, geftus, Ju1ian, MrQb4 | | Przeczytało użytkowników: | 29 | | Czytało osób ogólnie: | 149 | | Przeczytało osób ogólnie: | 149 |
| Ostatnia Aktualizacja| 2010-09-01 19:27:34 (6 dni temu) | |
| Ostatnio aktywni |
|---|
| fish13 | 3 godz | | wiewiorka | 9 godz | | Koni | 9 godz | | BuZuz | 9 godz | | Prezmen | 12 godz | | trupank | 12 godz | | szczgl | 14 godz | | filipesq | 14 godz | | KRIIS551 | 15 godz | | kuba1817 | 16 godz | | extra2 | 17 godz | | pixelmaster | 18 godz |
|