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

0 голосов
158 просмотров

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


Информатика (115 баллов) | 158 просмотров
0

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

0

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

Дано ответов: 2
0 голосов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


image
(4.0k баллов)
0 голосов

// 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 баллов)
0

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