Объясните как работает эта программа по-шагово пожалуйста... program Lklkjo; uses crt;...

0 голосов
38 просмотров

Объясните как работает эта программа по-шагово пожалуйста...
program Lklkjo;
uses crt;

const
n=10;
var
a:array[1..n]of integer;
i,min,j,min2,min3:integer;
begin
for i:=1 to n do
begin
a[i]:=random(100);
write(a[i]:4);
end;
min:=a[1];j:=1;min2:=a[1];min3:=a[1];
for i:=1 to n do
if a[i] begin
min:=a[i];
j:=i;
end;
for i:=1 to n do
if (a[i]>=min)and(i<>j)and( min2:=a[i]);
writeln;
for i:=1 to n do
if (a[i]>min2)and(i<>j)and( min3:=a[i]);
writeln;
writeln(min,', ',min2,', ',min3);
end.


Информатика (17 баллов) | 38 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Прикладываю исходник и скрин в приложении к ответу.

Несколько замечаний:

1. Большое количество комментариев внесено в код исключительно в учебных целях. В реальную программу переносить не рекомендуется - признак нехорошего тона.

2. У вас допущены синтаксические ошибки в двух последних циклах, а точнее - в операторах If, в которых стоит три условия (объединённых and), но нет ключевого слова "then" и последующих инструкций. Исправил.

3. Так же, автор вашей программы построил на мой взгляд нелогичную структуру алгоритма. Переменные min, min2 и min3, как я догадался, должны хранить три минимальных значения массива.
А вот что происходит в вашей конструкции: первый цикл безошибочно находит наименьший элемент и записывает его в min, а последующие два цикла записывают в min2 и min3 первые попавшиеся(начиная с первого) элементы, если они больше min. Таким образом, нет никакой закономерности в том, что попадёт в эти переменные и сложно представить, для какой задачи потребовались бы такие случайности.

Одним из вариантов решения предлагаю изначально записывать в эти три переменные не значение первого элемента массива, а какое-то большое число, которое в массиве нам не встретится (например 100). Тогда цикл будет искать значения меньше 100 и перезаписывать им соответствующую переменную, пока не найдёт самое маленькое значение. В таком случае не очень стабильная переменная j нам так же не нужна, я её вычеркнул.

Вам отсылаю уже с учётом поправок, однако если вам требовалась именно первоначальная версия несмотря на её минусы, просто поправьте синтаксис в последних циклах (41 и 34 строчка на скрине) и пользуйтесь ей.


image
(1.8k баллов)
0

спасибо огромное))))))))))))))))