Sortowanie rosnąco działa prawidłowo, w drugą stronę już nie

0
#include <iostream>
#include <iomanip>
#include <cmath>
#include <algorithm>
#include <functional>

using namespace std;

int main()
{
    int n;
    int Tab[n];

    cout << "Podaj liczbe elementow tablicy: ";
    cin >> n;
    cout << "Podawaj elementy tablicy: " << endl;
    for (int i = 0; i < n; i++)
    {

        cin >> Tab[i];
    }

    sort(Tab, Tab + n, greater<int>());
    cout << "Tablica a posortowana malejaco: \n";
    for (int i = 0; i < n; i++)
        cout << Tab[i] << '\n';

    return 0;
}

Mam problem z tą linijką:

sort(Tab, Tab + n, greater <int>());

Kompilator nie pokazuje bledu, a jednak program nie dziala, dodam, że dla sortowania rosnąco wszystko dziala jak nalezy..

4
int n;
int Tab[n];

Pomijając już fakt, że C++ nie ma VLA, jakiej wielkości jest Tab?

Odczyt z niezainicjalizowanych zmiennych to UB. Użyj std::vector zamiast tego.

0

No taką wielkość jaką podamy z klawiatury tak?

3

Nie. Taką wielkość jaką ma n w momencie jej definicji.

0

Tych wektorów jeszcze nie ogarniam, są dla mnie za trudne.

A moze byc tak?

 int main(){
	
	
int rozmiar;
 
cout << "Podaj rozmiar tablicy:" << endl;
cin >> rozmiar;
 
int * tablica = new int[rozmiar];

cout<<"Podawaj elementy tablicy: "<<endl;
for(int i=0; i<rozmiar; i++){

	cin>>tablica[i];
	
}

sort(tablica, tablica + rozmiar, greater <int>());
  cout << "Tablica a posortowana malejaco: \n";
    for( int i = 0; i < rozmiar; i++ )
         cout << tablica[ i ] << '\n';
 
delete [] tablica;
	
	
	return 0;
}
0

Poza słabym formatowaniem i użyciem new/delete zamiast wektora wygląda ok.

2

Jakieś małe poprawki ale w granicach "kosmetyki":

 #include <iostream>
#include <algorithm>

using namespace std;

int main() {
    size_t rozmiar;
    cout << "Podaj rozmiar tablicy:" << endl;
    cin >> rozmiar;
    int* tablica = new int[rozmiar];
    cout << "Podawaj elementy tablicy: " << endl;

    for(size_t i = 0; i < rozmiar; ++i) {
        cin >> tablica[i];
    }

    sort(tablica, tablica + rozmiar, greater<int>());
    cout << "Tablica a posortowana malejaco: \n";

    for(size_t i = 0; i < rozmiar; ++i)
    {
        cout << tablica[ i ] << '\n';
    }

    delete [] tablica;
}

A sensowniej to jednak vector...

#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>

using namespace std;

int main() {
    size_t ilosc;
    cout << "Podaj ilość danych:" << endl;
    cin >> ilosc;
    vector<int> vec(ilosc);

    cout << "Podawaj elementy: " << endl;
    copy_n(istream_iterator<int>(cin), ilosc, vec.begin());
    sort(vec.begin(), vec.end(), greater<int>());

    cout << "Dane posortowane malejaco: \n";
    copy(vec.cbegin(), vec.cend() - 1, ostream_iterator<int>(cout, ", "));
    cout << *vec.rbegin() << '\n';
} 

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