1. Какой ответ выдаст программа, если в массиве несколько элементов, удовлетворяющих условию задачи? Почему? 2. Что нужно изменить в программе, чтобы выдавался не первый из найденных элементов, а последний? 3. Измените условие цикла while, так чтобы использовалась логическая операция not.
const
c: array [1..7, 1..3] of byte = ((50, 50, 133), (0, 0, 255), (0, 160, 227), (0, 255, 0), (255, 255, 0), (239, 127, 26), (255, 0, 0));
var
i: byte;
procedure ColArc(x, y: integer; r: integer; nc: byte);
begin
SetPenColor(rgb(c[nc, 1], c[nc, 2], c[nc, 3]));
Arc(x, y, r + 10, 0, 180);
Arc(x, y, r - 10, 0, 180);
line(x - r - 11, y - 2, x - r + 11, y - 2);
line(x + r - 11, y - 2, x + r + 11, y - 2);
floodfill(x, y - r, rgb(c[nc, 1], c[nc, 2], c[nc, 3]));
end;
begin
setwindowsize(500, 300);
for i := 1 to 7 do
ColArc(250, 300, 100 + (i * 20), i);
end.
// Внимание! Если программа не работает, обновите версию!
begin
var s1:=SeqRandom(ReadInteger('n1='),-50,50);
var s2:=SeqRandom(ReadInteger('n2='),-50,50);
var p:=ReadInteger('0-по неубыванию, иное- по невозрастанию:');
var q1:=new Queue<integer>;
foreach var m in s1 do q1.Enqueue(m);
Write('Очередь 1: ',q1); Writeln;
var q2:=new Queue<integer>;
foreach var m in s2 do q2.Enqueue(m);
Write('Очередь 2: ',q2); Writeln;
// очереди сформированы
var q:=new Queue<integer>;
var a:=(q1.ToArray+q2.ToArray);
var s:sequence of integer;
if p=0 then s:=a.OrderBy(i->i)
else s:=a.OrderByDescending(i->i).ToArray;
foreach var m in s do q.Enqueue(m);
Write('Очередь-результат: ',q); Writeln;
end.
Пример
n1= 10
n2= 7
0-по неубыванию, иное- по невозрастанию: 1
Очередь 1: [-26,6,26,-48,-21,-29,27,-39,5,-40]
Очередь 2: [50,36,37,46,18,41,-39]
Очередь-результат: [50,46,41,37,36,27,26,18,6,5,-21,-26,-29,-39,-39,-40,-48]