Складіть проєкт для малювання квадаратів, розміщених поруч, поки периметр квадрата не перевищує 50 кроків. довжина сторони першого з них дорівнює a кроків, а довжина сторони кожного наступного - на b кроків більша за довжину сторони попереднього. в skratch
// 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.
В общем, код получился довольно-таки объемным, поэтому сюда выкладывать его не буду, а приложу в файле.
Язык программирования: C++
Входные значения:
Введите имя района: Новоильинский
Введите площадь(в кв. км): 56
Введите численность населения: 200000
Введите имя района: Запсиб
Введите площадь(в кв. км): 643
Введите численность населения: 454545
Введите имя района: Куйбышевский
Введите площадь(в кв. км): 45
Введите численность населения: 655433
Введите имя района: Заводской
Введите площадь(в кв. км): 7785
Введите численность населения: 6776
Введите имя района: Центральный
Введите площадь(в кв. км): 864
Введите численность населения: 88546
Средняя площадь районов = 1878.6
Самый плотнонаселенный район: Куйбышевский
Название 2-го района = Куйбышевский
Работа методов класса District хорошо просматривается в вызове методов класса City, ибо они там же и выполняются.
Количество районов - динамическое. Вы можете ввести с клавиатуры количество районов, а потом инициализировать их посредством метода init().
Оценивайте. А от продвинутых жду критику.