Замок волшебника Все почувствовали, как замок опускается. Поначалу он летел настолько быстро, что многие принцессы вскрикнули, ведь желудок так и норовил остаться в небе. Вероятно, Кальцифер так долго был в чуждом обличье, что несколько разучился управлять замком. Впрочем, через минуту полёт несколько замедлился и стал до того плавным, что его почти никто не замечал. Это было очень кстати, поскольку замок на лету приметно уменьшался.
Напишите класс WizardsCastle, экземпляр которого при инициализации принимает аргументы: – имя хозяина; – размер; – уровень магии.
Класс должен обеспечивать функциональность (wc – экземпляр класса):
– change_size(value) – увеличить (если value > 0) или уменьшить (в обратном случае) размер на значение аргумента, не может стать больше 1000 и меньше 10, изменяется только до этих значений;
– экземпляр класса можно умножить на положительное число: wc *= number, при этом размер увеличивается в number раз, а уровень магии на number // 2; при этом остаются те же ограничения на изменение размера, для уровня магии ограничений нет;
– экземпляр класса можно вызвать с аргументом-числом; возвращается значение: аргумент ** магия // размер;
__str__ – возвращает строку:
's Castle of size and magic
– экземпляры класса можно сравнивать: сначала по уровню магии, затем по размеру, затем по имени по алфавиту; для этого нужно реализовать методы сравнения: <, >, <=, >=, ==, !=.
Примечания В файле, сдаваемом в тестирующую систему, не должно быть ничего, кроме класса и, возможно, вс функций.
// PascalABC.NET 3.3, сборка 1573 от 04.11.2017 // Внимание! Если программа не работает, обновите версию!
begin var k:=3; Writeln('*** Исходный массив ***'); var a:=MatrRandom(k,6,-20,20); a.Println(4); Writeln(4*a.ColCount*'-'); var n:=ReadInteger('Какую строку удалить (1-'+k+')?'); Assert(n.Between(1,k),'Введено неверное значение'); var r:=a.Row(k-1); // последняя строка SetLength(a,k-1,a.ColCount); // теперь строк на одну меньше if n<k then begin for var i:=n-1 to k-3 do a.SetRow(i,a.Row(i+1)); a.SetRow(k-2,r) end; Writeln(4*a.ColCount*'-'); a.Println(4) end.
Program arrayMinValueSwapFirst;var numbers: array [1..10] of integer; maxValIndex: integer;begin write('Исходный массив: '); for var i: integer := 1 to 10 do begin numbers[i] := random(11); write(numbers[i]); if i < 10 then write(', '); end; var minVal: integer := -1; // Сюда записываем рекорд по значению for var i: integer := 1 to 10 do if (numbers[i] > minVal) then begin minVal := numbers[i]; maxValIndex := i; end; writeln(); writeln('Индекс максимального: ', maxValIndex); var buf: integer := numbers[1]; numbers[1] := minVal; numbers[maxValIndex] := buf; write('Результат : '); for var i: integer := 1 to 10 do begin write(numbers[i]); if i < 10 then write(', '); end;end.
// Внимание! Если программа не работает, обновите версию!
begin
var k:=3;
Writeln('*** Исходный массив ***');
var a:=MatrRandom(k,6,-20,20);
a.Println(4); Writeln(4*a.ColCount*'-');
var n:=ReadInteger('Какую строку удалить (1-'+k+')?');
Assert(n.Between(1,k),'Введено неверное значение');
var r:=a.Row(k-1); // последняя строка
SetLength(a,k-1,a.ColCount); // теперь строк на одну меньше
if n<k then begin
for var i:=n-1 to k-3 do
a.SetRow(i,a.Row(i+1));
a.SetRow(k-2,r)
end;
Writeln(4*a.ColCount*'-'); a.Println(4)
end.
Примеры
*** Исходный массив ***
-8 3 -10 -5 -8 11
14 -5 -19 -6 -19 -15
0 -11 11 3 -6 -12
Какую строку удалить (1-3)? 1
14 -5 -19 -6 -19 -15
0 -11 11 3 -6 -12
*** Исходный массив ***
11 -14 -3 18 19 -9
-11 19 8 20 -19 19
-20 13 3 -13 13 1
Какую строку удалить (1-3)? 3
11 -14 -3 18 19 -9
-11 19 8 20 -19 19