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

[C++] Jak zrobić sortowanie malejące?

Ostatnio zmodyfikowano 2013-07-06 23:43
Autor Wiadomość
matematyk
Temat założony przez niniejszego użytkownika
[C++] Jak zrobić sortowanie malejące?
» 2013-07-06 20:31:01
Panowie/ Panie!
bardzo Was proszę o pomoc, mam napisany kod, który sprawia, że po odpaleniu aplikacji pojawia się notatnik z liczbami uporządkowanymi od najmniejszej do największej. Potrzebuję zrobić to na odwrót, czyli od największej do najmniejszej.

C/C++
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
// #include <curses.h>
#include <algorithm>

using namespace std;
using std::ifstream;

void save_to_file( int T[], int rozmiar );

int main( int argc, char ** argv )
{
   
    fstream plik;
    plik.open( "denewel.txt", ios::in );
   
    if( plik.good() )
    {
        string napis;
        cout << "Zawartosc pliku:" << endl;
       
        do
        {
            getline( plik, napis );
            cout << napis << endl;
        }
        while( !plik.eof() );
       
        plik.close();
        istringstream iss( napis );
       
        int ile = 0;
        int ilosc = 0;
        iss >> ilosc;
       
        int * T;
        T = new int[ ilosc - 1 ];
       
        do
        {
            int sub;
            iss >> sub;
            T[ ile ] = sub;
            ile++;
        } while( ile < ilosc - 1 );
       
       
        std::sort( T, T + ilosc - 1 );
       
        save_to_file( T, ilosc );
       
    } else cout << "Error! Nie udalo otworzyc sie pliku!" << endl;
   
    return 0;
}

void save_to_file( int T[], int rozmiar )
{
    ofstream plik;
    plik.open( "wyniki.txt" );
   
    int i = 0;
    do {
        plik << T[ i ] << " ";
        i++;
    } while( i < rozmiar - 1 );
   
    cout << "Zapisano do pliku wynikowego" << endl;
    plik.close();
}


Proszę o pilną pomoc! :)
dodam że na początku stworzyłem notatke o nazwie " denewel" w którym są liczby 5,6,8,1,-3 z tym że 5 oznacza, że w pliku jest 5 liczb. Liczbami do przetwarzania są  6 8 1 -3
P-87163
Monika90
» 2013-07-06 20:36:46
użyj funktora std::greater<int>
P-87164
matematyk
Temat założony przez niniejszego użytkownika
» 2013-07-06 20:41:25
wiesz, nie znam sie na tym i dla mnie to jest czarna magia...
możesz mi trochę rozjaśnić, gdzie i a co to wstawić? jeśli dobre rozumiem
P-87165
Monika90
» 2013-07-06 20:53:42
Algorytm std::sort jako opcjonalny argument pobiera kryterium sortowania.

Zresztą, jeśli faktycznie jesteś matematykiem, to nie potrzebujesz std::greater. Dla każdego matematyka powinno być oczywiste, jak użyć procedury która sortuje liczby rosnąco, w taki sposób żeby sortowała malejąco.
P-87166
matematyk
Temat założony przez niniejszego użytkownika
» 2013-07-06 21:04:46
matematyk  to tylko nick.
tak jak wcześniej pisałem nie mam bladego pojęcia o C++, dlatego poprosiłem o pomoc. NIe wiem jak to przekształcić, żeby liczby były sortowane od największej do najmniejszej, a chce pomóc koledze...
P-87167
Monika90
» 2013-07-06 21:29:05
Możesz pomnożyć liczby przez -1, posortować, i znów pomnożyć przez -1. (metoda dla matematyków)

Albo użyć std::reverse do odwrócenia kolejności elementów w tablicy (metoda dla biologów).

Albo generować losowe permutacje, dopóki się liczby nie ułożą malejąco (metoda dla fizyków).

Najlepiej jednak byłoby użyć std::greater<int> (metoda dla wszystkich), no ale dla ciebie to za trudne więc odpada.

Poza, tym sposób w jaki wczytujesz liczby z pliku jest co najmniej dziwny...
P-87168
matematyk
Temat założony przez niniejszego użytkownika
» 2013-07-06 21:42:30
takie pomysły mi wpadają do głowy, ale nie wiem jak je zrealizować. W tym wypadku wpisać.
Czy jeśli bym Ciebie poprosił o przesłanie kodu to będzie duży problem ?
P-87170
DejaVu
» 2013-07-06 21:43:11
Uwielbiam czytać odpowiedzi Moniki :D (o ile w ogóle to jest imię użytkownika @Monika90 ;p)

Trzeba było chociaż spróbować poszukać w dokumentacji: » standard C++sort  :)
P-87171
« 1 » 2
  Strona 1 z 2 Następna strona