Od najmniejszej do najwiekszej

0

Napisz program, który prosi użytkownika o podanie trzech liczb całkowitych, które następnie wyświetla w kolejności od najmniejszej do największej.

#include <iostream>
using namespace std;
int main()
{
    cout << "Podaj trzy liczby calkowite:\n";
    int first;
    int second;
    int third;
    cin >> first >> second >> third;

    if (first < second < third) cout << second << third << first;

    return 0;
}

Jak tu zrobić, żeby się prawidłowo wyświetlało w kolejności od najmniejszej do największej? Siedzę nad tym już z godzinę czasu próbowałem na wiele sposobów i d...

Muszę operować na ifach - tylko to mam w tym rozdziale, bez for etc.

0

Jak są 3 liczbyto można rozważyć wszystkie warunki, jak jest wiecej elementów, to poszukaj cos o sortowaniu tablic.

0

Coś w tym stylu

if (first < second < third);
    if (first < third < second);
    if (second < first < third);
    if (second < third < first);
    if (third < first < second);
    if (third < second < first);

Jak potem z tego właściwie wyprowadzić cout? Bo sam powyższy zapis oczywiście nie wyświetla nic.

0

Zapisz liczby do tablicy, posortuj ją algorytmem sortowania (algorytmy sortowanie -> google) i wyświetl tablicę.

0

Nie mam jeszcze tablic, sortowania, etc w rozdziale. A te zadanie jest z książki od Stroustrupa teoria i praktyka.

0
#include <iostream>
#include <array>
#include <algorithm>
#include <iterator>
using namespace std;

using table = array<int, 3>;

table sorted(const table &input){
    int a = input[0], b = input[1], c = input[2];
    if(a > b) swap(a, b);
    if(a > c) swap(a, c);
    if(b > c) swap(b, c);

    return {a, b, c};
}

template <class T, std::size_t N>
ostream& operator<<(ostream& o, const array<T, N>& arr){
    copy(arr.cbegin(), arr.cend(), ostream_iterator<T>(o, " "));
    return o;
}

template<typename T1, typename T2>
void assert_equal(const T1 &lhs, const T2 &rhs){
    if(!(lhs == rhs)){
        cout << "Assertion failed!\n";
        cout << "lhs: " << lhs << ", rhs: " << rhs << endl;
    }
}

int main() {
    table expected = {1, 2, 3};

    table arg = expected;
    do{
        cout << "( " << arg << ")\n";
        assert_equal(sorted(arg), expected);
    }while(next_permutation(begin(arg), end(arg)));

    return 0;
}

http://ideone.com/CMHTgc

Pod siebie oczywiście możesz wyrzucić wszystko, zostawić tylko swapowanie i wyświetlić wynik.

0

Kto Ci to każe robić na ifach? To jest czyste szaleństwo, są od tego gotowe metody.

0

W książce tak mam napisane i to nie byle jakiej bo od Stroustrupa

Nadal nic nie działa, a wrzucone powyżej rozwiązania wykraczają a) poza moją wiedzę, b) nie czytałem o nich, bo to dopiero 2 rozdział. I jedynie co mogę z niego wykorzystać przy tym programie to if

0

Zimny Młot, źle zrozumiałeś idee tych ćwiczeń.
Masz rozwiązać to zadanie samodzielnie (najlepiej w kilku wersjach) na podstawie tego co przeczytałeś w tych dwóch rozdziałach, jeżeli zaś się nie udaje to czytasz raz jeszcze.

Wersji:

  • Minimum kodu
  • Minimum zamian
  • Minimum sprawdzeń, brak zamian, tylko wyświetlasz w pewnej kolejności.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0