Премини към съдържанието
windowsv

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

Препоръчан отговор


Добър вечер! Задачата ми е следната: имам динамичен масив от обекти-градове с надморска височина, географска дължина и ширина. Сортирам ги по метода на мехурчето по географската дължина/от запад на изток/ и извеждам сортираните дължини във възходящ ред. Проблемът е,че в самото извеждане трябва да ми излизат сортирани градовете по имена, а не само техните дължини. Понеже член-данните са ми в секция 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 потребители

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

  • Горещи теми в момента

  • Подобни теми

    • от m.dimitrov98
      Здравейте, имам ето това задание:
      Големи числа се наричат цели положителни числа с К цифри. Големите цели числа могат да се представят с помощта на линеен едносвързан списък, всеки елемент на който съдържа точно една цифра от числото. Дадени са две големи цели числа N1 и N2 (до 100 цифри). Да се напишат програмни фрагменти за :
                a. Представяне на числата чрез списъци;
                b. Сумиране на две големи цели числа.
      Бях го направил с две функции create1 и create2 и две променливи N1 и N2, но професорката иска да е само един и колкото числа искам да въведа толкова пъти да извикам един и същ create. Опитах по този начин но при започване на въвеждането на второто число програмата блокира. Бих бил благодарен ако някой помогне.
      Ето и до къде съм стигнал.
       
       
      #include <iostream> using namespace std; struct chislo{ int N; chislo* next; }; typedef chislo* Point; Point Head; void Create(Point &Head) { Point Last, P; Last=NULL; int brc=0; int br=0; cout<<"Колко цифри ще е числото?: "; cin>>br; while (brc != br) { P = new chislo; brc++; cout << brc <<" цифра на числото: "; cin >> P->N; P->next=NULL; if (Head == NULL) Head = P; else Last->next = P; Last = P; } } void Traverse(Point P){ cout<<"Числото е:"; while (P !=NULL) { cout<<P->N; P = P->next; } cout<<endl; } int main() { system("chcp 1251"); Point Head = NULL; Create(Head); Create(Head); Traverse(Head); Traverse(Head); }  
    • от Georgi Kirchev
      Здравейте , дадоха ми да правя курсова задача по Визуално програмиране , но не мога да я направя , а имам срок до четвъртък - 10.01.2019 
      програмираме със Visual Studio 2010/13 на MFC Standart , Single Document 
      Ще съм изключително благодарен , ако някой успее да ми помогне. 

      Условието е следното: 
      Да се състави еднодокументно приложение с архитектура документ - изглед.
       - Добавете бутон който трябва да активира функцията , както и елемента Hello от менюто 
       - Добавете контекстно-ориентирано меню към програмата , което използва падащо меню Help като скрито

      Във файл да се съхраняват и четат данни, които да се въвеждат чрез диалогова кутия , която се вика чрез 
       - ляв бутон на мишката.
       - опция от менюто .
       - клавишни ускорители.
       - бутон от инструменталната лента.
      В диалоговата кутия да има:
       - текстово поле за въвеждане на текст.
       - рамка със списък за шрифтове.
       - групова рамка.
       - бутон за приключване.

      Предварително благодаря , ако някой се захване да ми окаже помощ. 
       
    • от lullabies
      Съставете програма с меню за избор на функция за:
      a)       Въвеждане от клавиатурата в масив и файл /чрез допълване/ данните за К  вложители в банка /К<=50/: име BLV USD EURO. Извеждане текущото съдържание на масива /файла/ на екран
      b)      Извеждане на справки за
      -          Вложител по въведено име /със запитване на нова справка – диалогова процедура/
      -          Всичко вложители с обща сума на влогове /в лева/ над зададена и според текущите курсове на валутата
      c)       Пренареждане на данните за вложители във възходящ ред според влоговете в USB /или  EURO или BLV – по избор/ и извеждането им на екрана
      Главната функция main – с меню за избор на функция задължително да се използва. Използване на главни променливи или функции с предаване на параметри – по избор.
    • от Alexandar Jelev
      Здравейте, искам  да попитам някой може ли да ми помогне за курсовата задача, ще му бъда изключително благодарен? :)
      Задачата е следната:
      Съставете програма с функции за:
      а) Въвеждане от клавиатура във файл и в масив ( чрез добавяне) данни за автобусни превози ( до 35 ) - Автогара Варна: маршрут, дата (1 до 31), номер на автобуса, фамилия на водача, брой пътници, цена на съответните билети, обща сума на билетите - през месец юли. Извеждане текущото съдържание на масива (файла) на екран;
      б) Извеждане на екран справка за всички превози през избран ден от месеца ( със запитване за нова справка);
      в) Извеждане на екран номерата на автобусите и общата сума на билетите от превозите, извършени с тях, подредени в низходящ ред по сумата.
                   Главна функция main() -с меню  за избор на функции и проврка за състоянието на данните.  Използване на функции с предаване на параметри.
       
    • от Plamy Gerova
      Здравейте, може ли помощ за курсовата ми задача?
      съставете програма с функции за:
      а) въвеждане от клавиатурата във файл и в масив( чрез добавяне) данни за морски пътувания (до 25)- Морска гара Варна: маршрут, кораб-име, име на капитан, цени на билетите- I,II класа, брой пасажери в съответната класа, обща сума на продадените билети- през избран месец от годината.Извеждане текущото съдържание на масива(файла) на екрана.
      б) извеждане на екран данните за превозите на кораб по въведено от клавиатурата име на кораб(със запитване за справка)
      в) извеждане на екран данните за морско пътуване с най- голяма обща сума на продадени билети.
      Главна функция main()- с меня за избор на функции и проверка за състоянието та данните.Използване на локални променливи и функции с предаване на параметри. 
       
  • Дарение

×

Информация

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