Нужно было написать программу, которая находит наибольшее из трех чисел a, b и c. Начинающий программист написал фрагмент программы так (см. ниже) При каких наборах значений a, b, c эта программа работает неверно?
if a > b then
M := a
else
M := b;
if c > b then
M := c
else
M := b;
1)a = 1; b = 2; c = 3
2) a = 2; b = 1; c = 3
3) a = 2; b = 3; c = 1
4) a = 3; b = 1; c = 2
5) a = 3; b = 2; c = 1
6) a = 1; b = 3; c = 2
var a:array[1..n,1..m] of integer;
i,j:integer;
begin
Randomize;
writeln('Исходный массив:');
for i:=1 to n do
begin
for j:=1 to m do
begin
a[i,j]:=random(51);
write(a[i,j]:4);
end;
writeln;
end;
writeln;
for i:=1 to n do
for j:=1 to m do
if a[i,j] mod 2 <> 0
then a[i,j]:=a[i,j]+10 else a[i,j]:=a[i,j]-10;
writeln('Измененный массив:');
for i:=1 to n do
begin
for j:=1 to m do write(a[i,j]:4);
writeln;
end;
end.
Пример:
Исходный массив:
7 49 39 28 43
27 26 10 25 20
34 0 1 0 24
18 36 42 21 39
Измененный массив:
17 59 49 18 53
37 16 0 35 10
24 -10 11 -10 14
8 26 32 31 49
PascalABC.NET 3.7:
###var names := ReadString('Введите имена:').ToWords;var values := ReadArrInteger('Введите возраста:', names.Len);var m := values.Max;var a := values.Indices(x → x = m).Sel(i → names[i]).toA;if a.Len = values.Len then Pr('У всех одинаковый возраст.')else if a.Len = 1 then Pr(a[0], 'старше всех.')else Pr(a[:^1].JoinToString(', '), 'и', a[^1], 'старше всех.')Объяснение:
С реализуем вывод приглашения к вводу ("Введите имена:") и запрос на ввод строки. После чего, ToWords преобразует введённую строку в массив слов. Этот полученный массив (массив введённых через пробел имён) записывается в переменную names.
С реализуем вывод приглашения к вводу ("Введите возраста:") и запрос на ввод массива чисел, длину которого (количество вводимых чисел) мы задали с длина массива names). Этот массив чисел записывается в переменную values. Числа можно вводить как через пробел, так и с новой строки.
С метода расширения Max находим максимальный элемент массива values и записываем его в переменную m.
С метода расширения Indices получаем последовательность индексов, удовлетворяющим условию x = m, где x — тот или иной элемент массива values. Затем, с метода Sel проецируем каждый элемент полученной последовательности в новую форму: из i в names[i], то есть из каждого индекса, условно обозначенным как i, мы получаем имя, хранящееся в массиве names под индексом i. Далее метод ToA преобразует последовательность в массив, и этот массив записывается в переменную a.
И вот, мы уже имеем ответ: все нам нужные имена хранятся в массиве a. Идущие далее 3 строчки обеспечивают "красивый" вывод "на всевозможные случаи". Их можно заменить на a.Pr — все элементы массива a будут выведены через пробел. Но рассмотрим эти "3 строчки".
Если длина массива a равна длине массива values (то есть в массив a были отобраны все элементы массива values), то выводим сообщение "У всех одинаковый возраст.". Иначе, если длина массива a равна 1, то выводим этот единственный элемент массива a с сообщением "старше всех.". Если же не выполняется ни то, ни другое условие, то на экран через пробел будет выведено следующее:
все элементы массива a, кроме последнего, которые с преобразовали в строку, используя ", " в качестве разделителя;"и";последний элемент массива a;"старше всех.".Пример работы: