BG Development


Страници: (2) [1] 2   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Сортиране на обекти от клас
Alek
Публикувано на: 04-12-2018, 21:53
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 4
Регистриран на: 04.12.18



Здравейте. Сравнително нов съм в програмирането и тука ударих на камък. Ето я задачата, която ми бе възложена:

Трябва да създам клас, описващ човек. Трябва да съдържа име, фамилия и възраст на човека. След това трябва да сортирам хората по възраст с метода на мехурчето и да запазя данните в txt файл.

Класа го създавам, знам и принципа на действие на мехурчето и мога да го прилагам. Проблема е, че до сега съм сортирал прости масиви от числа, който си ги въвеждаш с цикъла "for (int i=0; i<n; i++) cin>>arr[i]" и т.н..., и тука не знам как да го направя. Ето го и кода до където съм стигнал:
CODE

#include <iostream>
#include <string>
using namespace std;

class Chovek{
private:
   string Name;
   string Fname;
   int Age;
public:
   void Input();
   void Output();

};
   
void Chovek::Input(){
   
       cout<<"Name: ";
       cin>>Name;
       
       cout<<"Fathers Name: ";
       cin>>Fname;
       
       cout<<"Age: ";
       cin>>Age;
   
}    

int main(){

Chovek a;
a.Input();

return 0;
}


PMEmail Poster
Top
saruman
Публикувано на: 04-12-2018, 22:12
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2100
Регистриран на: 21.07.10



Същото е като масиви от числа,създаваш си масив от обекти от класа Chovek,примерно
CODE
Chovek hora[20];
,правиш си публик Get метод за полето age,и след това прилагаш същия абсолютно същия алгоритъм за сортиране(на мехурчето),само че ще имаш

CODE
hora[i].GetAge()
вместо елемента на масива

Това мнение е било редактирано от saruman на 04-12-2018, 22:19


--------------------
http://www.wefunkradio.com/radio/

Remember,remember the fifth of November
PMEmail Poster
Top
ici
Публикувано на: 04-12-2018, 22:35
Quote Post


Group Icon
Име: Ивайло Илчев ики
Група: VIP
Ранг: Почетен член

Мнения: 15768
Регистриран на: 06.06.04



Ех ... трябва само едни оператор < да се предефинира ... icon_idea.gif


--------------------
Reading undefined locations provides undefined data.
PMEmail PosterUsers Website
Top
Alek
Публикувано на: 04-12-2018, 22:39
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 4
Регистриран на: 04.12.18



Мерси много, но пак нещо не ми е ясно icon_neutral.gif . Ще си направя Get метод ( предполагам ще е "void GetAge()") и ще го сложа на публик. Обаче как да го свържа с полето Age, не мога да се сетя

Това мнение е било редактирано от Alek на 04-12-2018, 22:40
PMEmail Poster
Top
saruman
Публикувано на: 04-12-2018, 22:45
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2100
Регистриран на: 21.07.10



QUOTE (ici @ 04-12-2018, 22:35)
Ех ... трябва само едни оператор < да се предефинира ...  icon_idea.gif

Съгласих се,тъп съм icon_biggrin.gif


--------------------
http://www.wefunkradio.com/radio/

Remember,remember the fifth of November
PMEmail Poster
Top
saruman
Публикувано на: 04-12-2018, 22:46
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2100
Регистриран на: 21.07.10



QUOTE (Alek @ 04-12-2018, 22:39)
Мерси много, но пак нещо не ми е ясно  icon_neutral.gif .  Ще си направя Get метод ( предполагам ще е "void GetAge()") и ще го сложа на публик. Обаче как да го свържа с полето Age, не мога да се сетя

Далеч си много от истината щом тия работи не ги знаеш,догодина по-сериозно icon_wink.gif


--------------------
http://www.wefunkradio.com/radio/

Remember,remember the fifth of November
PMEmail Poster
Top
relax4o
Публикувано на: 05-12-2018, 00:21
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2191
Регистриран на: 04.04.07



Явно и кода е copy/paste щом не знае как да го "свърже". Мързи ги да прочетат дори малко, а толкова информация има в нета и даже не се изисква да питаш гугъл за нещо специфично.


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
Alek
Публикувано на: 05-12-2018, 23:06
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 4
Регистриран на: 04.12.18



Много прибързваш с заключенията...кода аз съм го писал.

Как да ви кажа, че не преувеличавах като казах, че съм нов в програмирането. Все още съм в стадий "зубрене", т.е. изобщо не мога да осмисля цялата картинка, само наизуст научавам как стават отделни неща. Горе-долу като учене на истински език: може да знаеш 10000 думи, но ако не знаеш как да ги свържеш, и 1 изречение няя да направиш. За терминологията не ми се и говори...

и около час прекарах в нета преди да пиша тук. Май наистина съм тъп

Това мнение е било редактирано от Alek на 05-12-2018, 23:07
PMEmail Poster
Top
relax4o
Публикувано на: 06-12-2018, 00:13
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2191
Регистриран на: 04.04.07



https://www.youtube.com/watch?v=vFIxFMNNejA

Ето ти цяло видео.

https://www.thetaranights.com/object-orient...-getter-setter/
https://www3.ntu.edu.sg/home/ehchua/program...pp/cp3_OOP.html

Информация колкото искаш, стига да ти се чете.


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
DarkOne
Публикувано на: 06-12-2018, 07:28
Quote Post


Group Icon
Име: Александър Петков
Група: Администратор
Ранг: Почетен член

Мнения: 3351
Регистриран на: 30.01.04



QUOTE (Alek @ 04-12-2018, 22:39)
Мерси много, но пак нещо не ми е ясно  icon_neutral.gif .  Ще си направя Get метод ( предполагам ще е "void GetAge()") и ще го сложа на публик. Обаче как да го свържа с полето Age, не мога да се сетя

В методите на класа можеш директно да използваш променливите от класа, така че return Age; - като естествено трябва GetAge() да връща същият тип като типа на Age.

Друг е въпросът, че тези полета може просто да ги направиш публични. На теория може вместо възраст да започнеш да пазиш дата на раждане в класа, и тогава ще има смисъл да е getter, защото ще можеш да започнеш в GetAge() да изчисляваш възрастта, а потребителите на класа няма да има нужда да се променят. Само че обхватът на твоята задача не подсказва, че подобна промяна може да се случи, следователно е over-engineering да разписваш getters и setters.

Отделна тема е, че както ici каза можеш просто да предефинираш оператор < и тогава сортирането на хората ще е буквално същото като сортирането на числа.
CODE
bool opertator< (const Chovek& other) const
{
   return Age < other.Age;
}
Това обаче предполага, че стандартното сортиране на хора трябва винаги да сортира по възраст, а това си е сериозно допускане. Защо да не се сортират по азбучен ред на имената? Затова стандартните алгоритми за сортиране приемат функция, която казва как два елемента да се сравнят. Вместо сравнение в кода за сортиране викаш тази функция, а тя ти казва дали даден елемент трябва да е преди друг. Така лесно можеш да реализираш и сортиране в обратен ред, без отново да разписваш алгоритъма за сортиране, като сменяш само посоката на сравнението.

Това мнение е било редактирано от DarkOne на 06-12-2018, 07:34


--------------------
The man who learns only what others know
is as ignorant as if he learns nothing.
The treasures of knowledge are the most rare,
and guarded most harshly.
-- Chronicle of the First Age
PMICQ
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0