Объявить класс РАЙОН ГОРОДА, имеющий название, площадь, численность населения и...

0 голосов

Объявить класс РАЙОН ГОРОДА, имеющий название, площадь, численность населения и позволяющий переименовывать район, а также изменять численность его населения и вычислять плотность населения.
Объявить класс ГОРОД, представляющий собой набор районов и позволяющий вычислить среднюю площадь и среднюю численность населения районов города, а также самый плотно населенный район. Продемонстрировать работу всех методов.*/


спросил от Начинающий (115 баллов) в категории Информатика
оставил комментарий от Одаренный (4.0k баллов)

При создании объекта класса ГОРОД ему передается количество районов, которое будет там?

оставил комментарий от Одаренный (4.0k баллов)

Или это будет все статическим?

2 Ответы
0 голосов
ответил от Одаренный (4.0k баллов)

В общем, код получился довольно-таки объемным, поэтому сюда выкладывать его не буду, а приложу в файле.

Язык программирования: C++

Входные значения:

Введите имя района: Новоильинский

Введите площадь(в кв. км): 56

Введите численность населения: 200000

Введите имя района: Запсиб

Введите площадь(в кв. км): 643  

Введите численность населения: 454545  

Введите имя района: Куйбышевский

Введите площадь(в кв. км): 45

Введите численность населения: 655433

Введите имя района: Заводской

Введите площадь(в кв. км): 7785

Введите численность населения: 6776    

Введите имя района: Центральный

Введите площадь(в кв. км): 864

Введите численность населения: 88546

Средняя площадь районов = 1878.6

Самый плотнонаселенный район: Куйбышевский

Название 2-го района = Куйбышевский

Работа методов класса District хорошо просматривается в вызове методов класса City, ибо они там же и выполняются.

Количество районов - динамическое. Вы можете ввести с клавиатуры количество районов, а потом инициализировать их посредством метода init().

Оценивайте. А от продвинутых жду критику.


image
0 голосов
ответил от БОГ (150k баллов)

// PascalABC.NET 3.4.2, сборка 1790 от 15.09.2018

// Внимание! Если программа не работает, обновите версию!

type

 РайонГорода = class

 

 private

   Naim: string;

   S: real;

   Kol: integer;

   

   procedure SetNaim(NewName: string);

   begin

     if NewName.Length > 0 then Naim := NewName

   end;

   

   procedure SetKol(NewKol: integer);

   begin

     if NewKol > 0 then Kol := NewKol

   end;

 

 public

   property Название: string read Naim write SetNaim;

   property Площадь: real read S;

   property ЧисленностьНаселения: integer read Kol write SetKol;

   

   constructor(НаимРайона: string; Площадь: real; Население: integer);

   begin

     Naim := НаимРайона;

     S := Площадь;

     Kol := Население

   end;

   

   function ПлотностьНаселения := Round(Kol / S, 2);

   

   procedure ЗадатьИмя(НаимРайона: string);

   begin

     SetNaim(НаимРайона)

   end;

   

   procedure ЗадатьЧисленность(Население: integer);

   begin

     SetKol(Население)

   end;

 

 end;

 

 Город = class

 

 private

   City: string;

   Districts: List<РайонГорода>;

 

 public

   

   constructor(Город: string);

   begin

     Districts := new List<РайонГорода>;

     City := Город

   end;

   

   property НаселенныйПункт: string read City;

   

   procedure ДобавитьРайон(Район: string; Площадь: real; Проживает: integer);

   begin

     var R := new РайонГорода(Район, Площадь, Проживает);

     Districts.Add(R)

   end;

   

   function СредняяПлощадь := Districts.Select(d -> d.Площадь).Average;

   

   function СредняяЧисленность :=

   Districts.Select(d -> d.ЧисленностьНаселения).Average;

   

   function ГустонаселенныйРайон :=

   Districts.Select(d -> (d.Название, d.ПлотностьНаселения)).MaxBy(r -> r[1]);

   

   procedure ИзменитьНаименованиеРайона(s1, s2: string);

   begin

     var i := Districts.FindIndex(d -> d.Название = s1);

     if i >= 0 then Districts[i].ЗадатьИмя(s2)

   end;

   

   procedure ИзменитьЧисленностьРайона(s: string; n: integer);

   begin

     var i := Districts.FindIndex(d -> d.Название = s);

     if i >= 0 then Districts[i].ЗадатьЧисленность(n)

   end;

   

   procedure Вывод;

   begin

     Println('Сведения по городу', City);

     foreach var d in Districts do

       Println(d.Название, d.Площадь, d.ЧисленностьНаселения);

     Println('-' * 60)

   end;

 

 end;


begin

 var GG := new Город('Просто город');

 GG.ДобавитьРайон('Ворошиловский', 30, 218439);

 GG.ДобавитьРайон('Железнодорошный', 69, 104339);

 GG.ДобавитьРайон('Кировский', 18.6, 63499);

 GG.ДобавитьРайон('Ленинский', 13, 821730);

 GG.Вывод;

 GG.ИзменитьНаименованиеРайона('Железнодорошный', 'Железнодорожный');

 GG.ИзменитьЧисленностьРайона('Ленинский', 82173);

 GG.Вывод;

 Println('Средняя площадь', GG.СредняяПлощадь);

 Println('СредняяЧисленность', GG.СредняяЧисленность);

 var (Район, Плотность) := GG.ГустонаселенныйРайон;

 Println('Наиболее густонаселен', Район, Плотность)

end.


image
Скачать вложение Текст (TXT)
оставил комментарий от БОГ (150k баллов)

При необходимости присваивание легко заменяется вводом. Количество районов - произвольное.

...