Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Неправилно извеждане на резултат

Featured Replies

Добър вечер! Задачата ми е следната: имам динамичен масив от обекти-градове с надморска височина, географска дължина и ширина. Сортирам ги по метода на мехурчето по географската дължина/от запад на изток/ и извеждам сортираните дължини във възходящ ред. Проблемът е,че в самото извеждане трябва да ми излизат сортирани градовете по имена, а не само техните дължини. Понеже член-данните са ми в секция private, няма как в main() да ги достъпя /пробвах с метод на класа, връщащ само географската дължина и така да направя сортирането, но не се получава/ и затова създадох втори масив само за дължините. Преподавателката ми каза, че трябва да имам конструктор за копиране и да предефинирам операция равно. Последните две неща мога да ги направя, но не мога да схвана идеята как това се включва в моята програма.Ето кодът ми:
#include "stdafx.h"
#include<iostream>
#include<math.h>
using namespace std;

class City{
private: char *name;
double width;
double length;
double height;
public:
void Input();
void Output();
City();
~City();
double GetLength();
};
City::City()
{
char ime[20];
cout << "Name= ";
cin >> ime;
name = new char[strlen(ime) + 1];
for (int i = 0; i <=strlen(ime); i++)
name = ime;

cout << "Width= ";
cin >> width;
cout << "Length= ";
cin >> length;
cout << "Height= ";
cin >> height;
}
void City::Input()
{
char ime[25];
cout << "Input name of city:" << endl;
cin >> ime;
name = new char[strlen(ime) + 1];
for (int i = 0; i < strlen(ime); i++)
{
name = ime;
cout << name;
}
cout << "Input height of city " << endl;
cin >> height;
cout << "Input length of city " << endl;
cin >> length;
cout << "Input width of city " << endl;
cin >> width;



return;
}
void City::Output()
{
cout << "Name is: " << name << endl;
cout << " Width is: " << width <<" deg"<< endl;;
cout << " Length is: " << length << " deg"<<endl;
cout << " Height is: " << height <<" m"<<endl;
return;
}
City::~City()
{
cout << " " << endl;
cout << "Destructor of City!" << endl;
delete[] name;
}
double City::GetLength()
{
return length;
}
int main()
{
//City town;

//town.Input();
//town.Output();
int n;
City *mA;
cout << "Input number of cities: " << endl;
cin >> n;
mA = new City[n];
for (int j = 0; j < n; j++)
{
mA[j].Output();
}
cout << "Cities from west to east, sorted by their length" << endl;
double *Lengths = new double[n];
for (int j = 0; j < n; j++)
{
Lengths[j] = mA[j].GetLength();

}


int k = 0;//counter
double max = Lengths[0];
for (int j = 1; j < n; j++)
{
if (Lengths[j - 1] >Lengths[j])
{
max = Lengths[j - 1];
Lengths[j - 1] = Lengths[j];
Lengths[j] = max;
}
}


for (int j = 0; j < n; j++)//cycle for output
{
cout << Lengths[j] << "\n";
}


delete[]mA;
return 0;

}
Моля за някакви насоки ако е възможно стигнал съм до задънена улица. Пробвах с указатели, все не се получава.


 

Щом данните ти трябват извън обекта, значи трябва да имат публичен достъп или самите клас мембъри или техните аксесори!

 

След това, в метода за сравняване, при условие, че географските дължини са равни, сравняваш и за имената на градовете и си в джаза.

 ти щом немаш акъл да се сетиш  как го направиш значи зарежи програмирането

преди 1 час, windowsv написа:

имам динамичен масив от обекти-градове с надморска височина, географска дължина и ширина. Сортирам ги по метода на мехурчето по географската дължина/от запад на изток/ и извеждам сортираните дължини във възходящ ред. Проблемът е,че в самото извеждане трябва да ми излизат сортирани градовете по имена, а не само техните дължини. Понеже член-данните са ми в секция private, няма как в main() да ги достъпя /пробвах с метод на класа, връщащ само географската дължина и така да направя сортирането, но не се получава/ и затова създадох втори масив само за дължините.

нали осъзнаваш  че  сортирането по име е различно от сортирането по  височина и тнт

това  са 3  различни сортирания

опция

1 сортиране по име- A-Z

2 сортиране по височина -0-8000 метри

3 сортиране по местонахождение -x -y локация

4 земята е кръгла паралели и меридиани

5 за да програмираш нещо трябва да знаеш какво представлява

Редактирано от Yvan Sergeev (преглед на промените)

  • Автор

Съжалявам, не съм се изразил правилно. Целта е да се сортират САМО по дължини, но в извеждането да са имената, съответстващи на сортираните дължини.

Не мога да сложа член-данните в секция public, защото се нарушават принципите на капсулирането.

if  еди коя си дължина като цифра е  равна на едиколко си то тогава е равна на еди кой си град.....

преди 16 часа, windowsv написа:
 Преподавателката ми каза, че трябва да имам конструктор за копиране и да предефинирам операция равно. Последните две неща мога да ги направя, но не мога да схвана идеята как това се включва в моята програма.

Вероятно очаква от теб да сортираш масив от обекти, а не само масив от един техен атрибут. Ако го направиш ще използваш и двете описани неща.

преди 14 часа, windowsv написа:

Не мога да сложа член-данните в секция public, защото се нарушават принципите на капсулирането.

Не е и необходимо. Като го получиш сортиран масив от градове, си ползваш метода output примерно.

на 12/4/2017 в 9:59, windowsv написа:

Съжалявам, не съм се изразил правилно. Целта е да се сортират САМО по дължини, но в извеждането да са имената, съответстващи на сортираните дължини.

Не мога да сложа член-данните в секция public, защото се нарушават принципите на капсулирането.

Ми сложи им аксесори на тия мембъри. Примерно public String getName() { return name; } метод. Освен това, капсулираните данни, не означава да са недостъпни! Недостъпни се правят, само ако не се налага да се достъпват извън класа. Е, това е един от случаите в които се налага. Освен това, допустимо е "обличането" на данните в методи за достъп (пропъртис, аксесорс, гет/сетърс и т.н.).  Проверката дали ще ти трябва само гетър или гетър и сетър е много проста. В случая с името, си задаваш въпроса, ще ми трябва ли да чета името извън класа, В случая да - защото трябва да го извеждаш. Ще ми трябва ли да променям името извън класа. Тук вече е малко спорен отговора. Конкретно в задачата ти не се изисква такава функционалност, тъй че със чиста съвест можеш да оставиш името без публичен сетър! Но в живият живот, съвсем не е изолирано явление град да сменя името си. Аз лично бих сложил и публичен сетър, с мисъл за перспективно развитие на самичт клас и на потребяващият го код!

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.