Jak dokonać Ssortowania zmiennej typu int od największej do najmnięjszej?

0

Cześć,

na samym wstępie zaznacze, że jestem totalnym żółtodziobem jeśli chodzi o programowanie ale bardzo chętnie się uczę. Mam na zajęcia następujące zadanie:
"Utworzyć tablicę obiektów klasy MojaPara i uporządkować ją dowolną metodą używając jako kryterium wartości zmiennej int. Sprawdzić uporządkowanie"

Rozumiem, że tworzę sobię klasę o nazwie MojaPara. Dodaje sobie np. kilka osób - string imie oraz int wiek i wpisuje je w tablice. Efektem ma być wyświetlenie imion oraz wiek osób w kolejności np. od najstarszego do najmłodszego. Udało mi się nabazgrać coś takiego:

#include <iostream>

using namespace std;

class MojaPara
{
public:
	char imie;
	int wiek; 



};

int main(void)
{
	MojaPara ktab[5] = {{"Krzys",20},{"Grzes, 50},
			{"Pawel", 17},{"Michal", 28},{"Dawid", 48}};

Tylko pytanie czy to jest dobrze i co dalej mam zrobić, żeby teraz program wyświetlił te imiona zgodnie z wiekiem od najmłodszego do najstarszego???

0
twonek napisał(a):

Dlaczego nikt nie odpowiada w moim wątku?

Powinno być dobrze - bardzo proszę o pomoc.

2

Zacznijmy od czegoś innego: doprowadź do tego, że Twój program będzie się kompilował.

char to znak, prawdopodobnie chcesz użyć std::string.

Zamiast hardkodować wielkości tablicy, użyj std::vector.

0

Czyli coś takiego?

#include <iostream>

using namespace std;

class MojaPara
{
public:
	std::string imie;
	int wiek; 



};

int main(void)
{
	MojaPara ktab[5] = {{"Krzys",20},{"Grzes, 50},
			{"Pawel", 17},{"Michal", 28},{"Dawid", 48}};

	
1

Dobra, tablicę na chwilę zostawmy. Nie masz końcowej klamry w funkcji main.

0
kq napisał(a):

Dobra, tablicę na chwilę zostawmy. Nie masz końcowej klamry w funkcji main.

#include <iostream>

using namespace std;

class MojaPara
{
public:
	std::string imie;
	int wiek; 



};

int main(void)
{
	MojaPara ktab[5] = {{"Krzys",20},{"Grzes, 50},
			{"Pawel", 17},{"Michal", 28},{"Dawid", 48}};
}

	

Już jest :)

3

No dobra, to już powinno się kompilować (jak zamkniesz " po Grzesiu - i dodasz #include <string> jeśli kompilator zapłacze).

W tym momencie możesz użyć std::sort, a nastepnie wypisać wartości. Do sort podaj komparator -- lambdę. Alternatywnie, możesz przeładować operator< klasy, ale to jest globalne rozwiązanie lokalnego problemu.

0
kq napisał(a):

No dobra, to już powinno się kompilować (jak zamkniesz " po Grzesiu - i dodasz #include <string> jeśli kompilator zapłacze).

W tym momencie możesz użyć std::sort, a nastepnie wypisać wartości. Do sort podaj komparator -- lambdę. Alternatywnie, możesz przeładować operator< klasy, ale to jest globalne rozwiązanie lokalnego problemu.

#include <iostream>
#include <string>


using namespace std;

class MojaPara
{
public:
	std::string imie;
	int wiek; 



};

int main(void)
{
	MojaPara ktab[5] = {{"Krzys",20},{"Grzes", 50},
			{"Pawel", 17},{"Michal", 28},{"Dawid", 48}};

std::sort(20,50,17,28,48)
}

	

Czy o coś takiego chodzi? Chciałbym, żeby program po uruchomieniu wyświetlił:
Pawel 17
Krzys 20
Michal 28
Dawid 48
Grzes 50

3

do sort - #include <algorithm>

http://en.cppreference.com/w/cpp/algorithm/sort

sort(begin(ktab), end(ktab), [](MojaPara const& l, MojaPara const& r){ return l.wiek < r.wiek; });

Po tym możesz wyświetlić.

Postaraj się zrozumieć co się tutaj dzieje. Sort dostaje (w uproszczeniu) iteratory na początek i koniec tablicy. Sortuje w magiczny sposób. Aby posortować musi wiedzieć w jaki sposób porównać dwa elementy -- do tego jest funkcja, którą podaję w trzecim argumencie.

0

Czy możecie mi podpowiedzieć jak będzie wyglądać to w kodzie? Bo szczerze powiedziawszy mniej więcej rozumiem już zasadę działania std:sort ale nie mam pojęcia jak teraz brnąć dalej, aby wynik wyświetlił się po uruchomieniu programu tak jak opisałem to kilka postów wyżej...

Na daną chwilę mam coś takiego - dodałem #include <algorithm>

#include <iostream>
#include <string>
#include <algorithm>


using namespace std;

class MojaPara
{
public:
	std::string imie;
	int wiek; 



};

int main(void)
{
	MojaPara ktab[5] = {{"Krzys",20},{"Grzes", 50},
			{"Pawel", 17},{"Michal", 28},{"Dawid", 48}};

std::sort(20,50,17,28,48)

sort(begin(ktab), end(ktab), [](MojaPara const& l, MojaPara const& r){ return l.wiek < r.wiek; });


}

2

wstaw kod od @kq zamiast swojego sorta a nastepnie wyswietl sobie ta tablice.

0

Panowie zdaję sobie sprawę, że nie ogarniam i to zupełnie ale dziękuję Wam serdecznie za pomoc.

Mam coś takiego

#include <iostream>
#include <string>
#include <algorithm>


using namespace std;

class MojaPara
{
public:
	std::string imie;
	int wiek; 



};

int main(void)
{
	MojaPara ktab[5] = {{"Krzys",20},{"Grzes", 50},
			{"Pawel", 17},{"Michal", 28},{"Dawid", 48}};


sort(begin(ktab), end(ktab), [](MojaPara const& l, MojaPara const& r){ return l.wiek < r.wiek; });


}

Wystarczy?

2

ciezko skompilowac i samemu sie przekonac? Oczywiscie wyswietalnia tablicy nie zrobiles... wez to zrozum a nie wklejaj kawalki kodu wpisujac czy wystarczy. Zanij myslec.

0

Jakbym wiedział jak to zrobić to nie liczyłbym na pomoc na tym forum tylko sam bym to napisał. Kompilator wyrzucił mase błędów. Głównie z tego co wkleiłem. Błagam Was - wytłumaczcie mi to w prosty sposób bo za cholerę tego nie czaję, a starałem się to sam przyswoić ale cięzko to wymusić, skoro się nie rozumie.

2

to moze napisz czego nie rozumiesz. Moze bys cos wlozyl w pracy w to co Ty chcesz zrobic...

0

Nie rozumiem jak ma być skonstruowany ten kod
sort(begin(ktab), end(ktab), [](MojaPara const& l, MojaPara const& r){ return l.wiek < r.wiek; });

Rozumiem, że ten kod ma się znajdować w części int main - tak?

Tablica jest pewnie zadeklarowana poprawnie. Teraz tylko potrzebuję tego, żeby program po uruchomieniu wyświetlił mi Imiona i wiek od najstarszego do najmłodszego albo odwrotnie no - to już bez znaczenia.

Czy możesz pokazać mi jak ma poprawnie wyglądać ta linijka i na czym polega wyświetlenie tablicy? Na pewno szybciej to przyswoję, niż dalej będę błądził jak idiota :/

Czy powinno to wyglądać w ten sposób?

2

Nie przeczytałeś tego artykułu, który podlinkowałem. Gdybyś to zrobił to byś wiedział, że pisanie

Kompilator wyrzucił mase błędów.
bez podania tych błędów nie zachęca innych do pomocy.

A tak wróżąc z fusów to pewnie nie masz włączonego C++11.

0

Tutaj jest zrzut ekranu:

http://s27.postimg.org/qsyacpegy/Bez_tytu_u.jpg

Za pewne zapis kodu jest nieprawidłowy - tego to się domyślam tylko jak on powinien wyglądać?

Znalazłem pewien kod - żeby pokazać Wam, że zależy mi aby się tego nauczyć - czy powinno to wyglądać coś w ten deseń?

int main()
{
  int tab[] = {9, 8, 7, 0, 8, 6, 3, 1, 7, 2};
 
  cout<<"Przed sortowaniem:\n";
  for(int i=0;i<10;i++)cout<<tab[i]<<' ';
 
  sort(tab, tab+10);
 
  cout<<"\nElementy uporządkowane:\n";
  for(int i=0;i<10;i++)cout<<tab[i]<<' ';
 
  cin.get();
 
  return 0;
}
2
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

struct person {
	string name;
	int age;
};
typedef person const &person_view;

namespace compare_person {
	bool by_age(person_view lhs, person_view rhs) {
		return lhs.age < rhs.age;
	}
}

int main() {
	person people[] = {
		{"Julie", 8},
		{"Douglas", 32},
		{"Peter", 16},
		{"Mark", 11}
	};
	
	sort(begin(people), end(people), compare_person::by_age);
	
	for(person_view person: people) {
		cout << person.name << ": " << person.age << "\n";
	}
	
	return 0;
}

http://ideone.com/Xbbq6b

1

Nie pokazujesz całego kodu, który się nie kompiluje.
Masz jakieś śmieci typu returon, o czym bardzo uprzejmie informuje kompilator.
Ten kod http://4programmers.net/Forum/1243537 bez problemu się kompiluje, trzeba tylko wiedzieć czy się ma włączone C++11.

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