Задача 1. const n=30; var a,b:array[1..n] of integer; i,j,k:integer; begin { самое сложное - создать такой массив, где положительные и отрицательные элементы будут случайно перемешаны и их будет по n/2. Если организовать ввод с клавиатуры, то это гораздо проще. } Randomize; { инициализация "флажком" - значением 1000 } for i:=1 to n do a[i]:=1000; { сначала генерируем n/2 случайных отрицательных на случайных местах } for i:=1 to (n div 2) do begin k:=Random(50)-50; { случайное отрицательное значение } { а теперь ищем случайное свободное место } repeat j:=Random(30)+1 until a[j]=1000; a[j]:=k end; { теперь осталось сгенерировать n/2 случайных положительных чисел и разместить их на свободных местах } for i:=1 to (n div 2) do begin k:=Random(50)+1; { случайное положительное значение } { а теперь ищем свободное место } j:=0; repeat Inc(j) until a[j]=1000; a[j]:=k end; { и только отсюда начинается собственно задание } Writeln('Исходный массив'); for i:=1 to n do Write(a[i]:4); Writeln; { j - количество обработанных отрицательных, k - количество положительных, а массив строим так, что отрицательные элементы на нечетных местах } if a[1]<0 then begin b[1]:=a[1]; j:=1; k:=0 end else begin b[2]:=a[1]; j:=0; k:=1 end; for i:=2 to n do if a[i]<0 then begin Inc(j); b[2*j-1]:=a[i] end else begin Inc(k); b[2*k]:=a[i] end; Writeln('Результирующий массив'); for i:=1 to n do Write(b[i]:4); Writeln end.
Приведенная программа принимает целые числа и выводит два значения: a - количество цифр в числе и b - произведение цифр, составляющих число. При вводе нуля программа завершает работу. Ввод отрицательных чисел игнорируется. 1) При исполнении этой программы на экран было сначала выведено число 2, затем число 15. НАИМЕНЬШЕЕ значение переменной x, для которого это возможно, равно С) 35 Здесь количество цифр равно двум, а их произведение равно 15. Число 15 представимо в виде произведения двух однозначных чисел только в виде 3х5 или 5х3. Следовательно, наименьшим числом могло быть только 35. 2) При исполнении этой программы на экран было сначала выведено число 2, затем число 15. НАИБОЛЬШЕЕ значение переменной x, для которого это возможно, равно B) 53 Решение аналогично предыдущему, но выбирается наибольшее число, т.е. 53. 3) НАИМЕНЬШЕЕ значение переменной b, которое может быть выведено на экран этой программой, равно Е) 0 Минимальное значение произведения n однозначных чисел будет равно нулю, если среди этих чисел встретить хотя бы один ноль. 4) При исполнении этой программы на экран было сначала выведено число 2. НАИБОЛЬШЕЕ значение переменной b, которое может быть выведено на экран, равно А) 81 Максимальное произведение двух однозначных чисел равно 9х9=81. 5) НАИМЕНЬШЕЕ значение переменной a, которое может быть выведено на экран этой программой, равно D) 1 Понятно, что чисел с количеством знаков, меньшим единицы, быть не может.
const
n=30;
var
a,b:array[1..n] of integer;
i,j,k:integer;
begin
{ самое сложное - создать такой массив,
где положительные и отрицательные элементы будут случайно
перемешаны и их будет по n/2.
Если организовать ввод с клавиатуры, то это гораздо проще.
}
Randomize;
{ инициализация "флажком" - значением 1000 }
for i:=1 to n do a[i]:=1000;
{ сначала генерируем n/2 случайных отрицательных на случайных местах }
for i:=1 to (n div 2) do
begin
k:=Random(50)-50; { случайное отрицательное значение }
{ а теперь ищем случайное свободное место }
repeat
j:=Random(30)+1
until a[j]=1000;
a[j]:=k
end;
{ теперь осталось сгенерировать n/2 случайных положительных чисел
и разместить их на свободных местах }
for i:=1 to (n div 2) do
begin
k:=Random(50)+1; { случайное положительное значение }
{ а теперь ищем свободное место }
j:=0;
repeat
Inc(j)
until a[j]=1000;
a[j]:=k
end;
{ и только отсюда начинается собственно задание }
Writeln('Исходный массив');
for i:=1 to n do Write(a[i]:4);
Writeln;
{ j - количество обработанных отрицательных,
k - количество положительных,
а массив строим так, что отрицательные элементы на нечетных местах }
if a[1]<0 then begin b[1]:=a[1]; j:=1; k:=0 end
else begin b[2]:=a[1]; j:=0; k:=1 end;
for i:=2 to n do
if a[i]<0 then
begin Inc(j); b[2*j-1]:=a[i] end
else begin Inc(k); b[2*k]:=a[i] end;
Writeln('Результирующий массив');
for i:=1 to n do Write(b[i]:4);
Writeln
end.
Тестовое решение:
Исходный массив
43 44 34 21 14 -26 32 35 -25 -8 42 -35 -37 12 45 -25 31 8 -16 -5 8 -25 -19 -15 -27 -16 12 26 -14 -41
Результирующий массив
-26 43 -25 44 -8 34 -35 21 -37 14 -25 32 -16 35 -5 42 -25 12 -19 45 -15 31 -27 8 -16 8 -14 12 -41 26
1) При исполнении этой программы на экран было сначала выведено число 2, затем число 15. НАИМЕНЬШЕЕ значение переменной x, для которого это возможно, равно С) 35
Здесь количество цифр равно двум, а их произведение равно 15. Число 15 представимо в виде произведения двух однозначных чисел только в виде 3х5 или 5х3. Следовательно, наименьшим числом могло быть только 35.
2) При исполнении этой программы на экран было сначала выведено число 2, затем число 15. НАИБОЛЬШЕЕ значение переменной x, для которого это возможно, равно B) 53
Решение аналогично предыдущему, но выбирается наибольшее число, т.е. 53.
3) НАИМЕНЬШЕЕ значение переменной b, которое может быть выведено на экран этой программой, равно Е) 0
Минимальное значение произведения n однозначных чисел будет равно нулю, если среди этих чисел встретить хотя бы один ноль.
4) При исполнении этой программы на экран было сначала выведено число 2. НАИБОЛЬШЕЕ значение переменной b, которое может быть выведено на экран, равно А) 81
Максимальное произведение двух однозначных чисел равно 9х9=81.
5) НАИМЕНЬШЕЕ значение переменной a, которое может быть выведено на экран этой программой, равно D) 1
Понятно, что чисел с количеством знаков, меньшим единицы, быть не может.