Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Inny sposób na posortowanie trzech liczb

Ostatnio zmodyfikowano 2007-10-10 14:49
Autor Wiadomość
DejaVu
Sortowanie liczb
» 2007-10-09 21:46:55
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:
C/C++
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
P-17
DejaVu
» 2007-10-10 15:19:53
No to closed :)
P-18
jacek
Temat założony przez niniejszego użytkownika
Inny sposób na posortowanie trzech liczb
» 2007-10-09 16:34:19
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:

C/C++
/*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
P-18586
jacek
Temat założony przez niniejszego użytkownika
» 2007-10-10 14:49:21
ś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ą :)
P-18587
« 1 »
  Strona 1 z 1