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.
#include <iostream> #include <fstream> #include <sstream> #include <string>
#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 |
|
Monika90 |
» 2013-07-06 20:36:46 użyj funktora std::greater<int>
|
|
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 |
|
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. |
|
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... |
|
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... |
|
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 ? |
|
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: sort :) |
|
« 1 » 2 |