1. Определите, какие числа будут выведены в результате выполнения следующего фрагмента программы: k := 1;
m := dat[k];
for i := 2 to 10 do if dat[i] < m then
begin
m := dat[i]; k := i;
end; writeln('m = ', m);
writeln('k = ', k);
(это фрагмент программы!)
2. Программисту было поручено написать программу нахождения суммы отрицательных элементов одномерного массива. Программист разработал программу, но допустил в ней одну ошибку. Текст программы с ошибкой представлен ниже:
program n1;
var
k, s: integer;
a: array [1..8] of integer;
begin
for k := 1 to 8 do readln(a[k]); s := 0;
for k := 1 to 8 do
if a[k] < 0 then s := s + a[1]; writeln(s);
end.
ьфьбйбыддыдыы
Начинаем со строки "k := 1;", где присваиваем переменной k значение 1.
Затем в строке "m := dat[k];" переменной m присваиваем значение из массива dat по индексу k, то есть dat[1].
Далее идет цикл "for i := 2 to 10 do if dat[i] < m then", который будет повторяться с i от 2 до 10 с шагом 1. Внутри цикла проверяем условие "if dat[i] < m", где сравниваем значение элемента dat[i] с текущим минимальным значением m.
Если условие истинно, то выполняется код внутри блока "begin...end;", где присваиваем переменной m значение dat[i] и переменной k значение i. То есть, если dat[i] < m, то m принимает значение dat[i] и k принимает значение i.
После окончания цикла выводим значения переменных m и k на экран с помощью "writeln('m = ', m);" и "writeln('k = ', k);".
Таким образом, результат выполнения программы будет выводить на экран минимальное значение из массива dat в переменной m и соответствующий индекс этого значения в переменной k.
2. В данном фрагменте программы есть ошибка, которая приводит к некорректному результату. Найдем эту ошибку и объясним почему программа работает неправильно.
- Сначала программа объявляет переменные k, s, a.
- Затем идет цикл "for k := 1 to 8 do readln(a[k]);", где вводятся значения элементов массива a.
- После этого присваивается переменной s значение 0, то есть начальное значение для суммы.
- Далее идет цикл "for k := 1 to 8 do", где проверяется каждый элемент массива a.
- Внутри цикла проверяется условие "if a[k] < 0", то есть проверяется, является ли текущий элемент отрицательным.
- Если условие истинно, то выполняется код внутри блока "begin...end;", где к переменной s прибавляется значение a[1].
- Затем программа выводит значение переменной s на экран с помощью "writeln(s);".
Ошибкой в данной программе является то, что вместо a[k], внутри цикла, прибавляется значение a[1]. Это означает, что при каждом выполнении цикла, к сумме s прибавляется значение первого элемента массива a, а не текущего элемента a[k].
Чтобы исправить ошибку и получить правильный результат, необходимо заменить "s := s + a[1];" на "s := s + a[k];". Тогда программа будет корректно складывать только отрицательные элементы массива и выводить правильную сумму на экран.