Давай сначала кратко изложу суть решения, а затем уже разберемся более детально. В коде имеется 2 процедуры, процедура Nermucum считывает с клавиатуры n чисел, а затем выводит эти числа. Процедура Artacum выводит элементы массива на экран. (зачем так сделано и почему такой страшный нейминг вопрос не ко мне). В основной программе массив меняет местами четные элементы.
Теперь пробежимся по коду:
Program kursayin_khndir_1;
Type arr = array [1..100] of integer;
var a: arr; mp: integer;
n,i,j,k: integer;
Здесь мы имеем: имя программы - kursayin_khndir_1, тип arr, который представляет собой массив целых чисел из 100 элементов, переменную a с типом arr( то есть массив), переменную mp целого типа, также переменные n, i, j, k целого типа.
procedure Nermucum(var a: arr);
var i:integer;
begin;
for i:= 1 to n do
begin ;
read(a[i]);
end;
for i:= 1 to n do
write(a[i]:5);
writeln;
end;
Первая процедура, которая принимает аргумент типа arr, функция нам считать элементы с клавиатуры(с 1-го цикла), а затем вывести эти элементы (с второго цикла).
procedure Artacum(var arr_1: arr);
var i:integer;
begin
for i:= 1 to n do write(arr_1[i]:5);
end;
Вторая процедура, также принимает аргумент типа arr, она просто выводит значения элементов массива на экран.
Основную программу разделим на части.
readln(n);
Nermucum(a);
i:=1;
j:=n;
Считываем число n(количество элементов массива)
Вызываем процедуру Nermucum, которая считает элементы массива с клавиатуры и выведет нам массив на экран.
Даем переменной i значение 1, а переменной j значение n. То есть, i будет указывать на начало массива, а j на конец массива.
Смотрим основной цикл, который тут используется:
while i<=j do
if a[i] mod 2=0 then
begin
if (a[j] mod 2=0)and(i<>j) then
begin
mp:=a[i]; a[i]:=a[j]; a[j]:=mp;
i:=i+1; j:=j-1;
end
else j:=j-1;
end
else i:=i+1;
Начиная с 1 элементы функция ищет чётный элемент, если она его находит, то проверяет условие: a[j] четный и не равен i, если условие выполняется, то мы меняем местами i-тый и j-тый элемент, затем сдвигаем наши "указатели" на начало и конец на 1 элемент, если же условия не выполнилось, то никакой замены не производим, однако, "указатели" на начало и конец всё равно сдвигаем.
Artacum(a);
Ну и в конце вызываем процедуру Artacum, чтобы вывести наш массив на экран.
В начале присваивает заданной переменной (переменная-счётчик) начальное число. Переменной-счётчиком может быть любая переменная типа integer, затем в зависимости от направления прибавляет (to) или убавляет (downto) счётчик на единицу. Цикл начинает повторение пока счётчик будет меньше или равен второму числу. Когда счётчик стал больше второго числа, цикл выполняет строки команд до конца, но уже не начинает повторять из снова.
В строках с командами цикла не должно быть команды, которая изменяет значение счётчика, иначе будет ошибка. Счётчик нельзя изменять внутри цикла пока он идёт.
Запись
for ПеременнаяСчётчик := Число Направление Второечисло do
begin
Строки с командами, которые должен повторять цикл;
end;
Пример
Программа, которая выводит числа от 5 до 10 и в конце пишет "Конец"
Давай сначала кратко изложу суть решения, а затем уже разберемся более детально. В коде имеется 2 процедуры, процедура Nermucum считывает с клавиатуры n чисел, а затем выводит эти числа. Процедура Artacum выводит элементы массива на экран. (зачем так сделано и почему такой страшный нейминг вопрос не ко мне). В основной программе массив меняет местами четные элементы.
Теперь пробежимся по коду:
Program kursayin_khndir_1;
Type arr = array [1..100] of integer;
var a: arr; mp: integer;
n,i,j,k: integer;
Здесь мы имеем: имя программы - kursayin_khndir_1, тип arr, который представляет собой массив целых чисел из 100 элементов, переменную a с типом arr( то есть массив), переменную mp целого типа, также переменные n, i, j, k целого типа.
procedure Nermucum(var a: arr);
var i:integer;
begin;
for i:= 1 to n do
begin ;
read(a[i]);
end;
for i:= 1 to n do
write(a[i]:5);
writeln;
end;
Первая процедура, которая принимает аргумент типа arr, функция нам считать элементы с клавиатуры(с 1-го цикла), а затем вывести эти элементы (с второго цикла).
procedure Artacum(var arr_1: arr);
var i:integer;
begin
for i:= 1 to n do write(arr_1[i]:5);
end;
Вторая процедура, также принимает аргумент типа arr, она просто выводит значения элементов массива на экран.
Основную программу разделим на части.
readln(n);
Nermucum(a);
i:=1;
j:=n;
Считываем число n(количество элементов массива)
Вызываем процедуру Nermucum, которая считает элементы массива с клавиатуры и выведет нам массив на экран.
Даем переменной i значение 1, а переменной j значение n. То есть, i будет указывать на начало массива, а j на конец массива.
Смотрим основной цикл, который тут используется:
while i<=j do
if a[i] mod 2=0 then
begin
if (a[j] mod 2=0)and(i<>j) then
begin
mp:=a[i]; a[i]:=a[j]; a[j]:=mp;
i:=i+1; j:=j-1;
end
else j:=j-1;
end
else i:=i+1;
Начиная с 1 элементы функция ищет чётный элемент, если она его находит, то проверяет условие: a[j] четный и не равен i, если условие выполняется, то мы меняем местами i-тый и j-тый элемент, затем сдвигаем наши "указатели" на начало и конец на 1 элемент, если же условия не выполнилось, то никакой замены не производим, однако, "указатели" на начало и конец всё равно сдвигаем.
Artacum(a);
Ну и в конце вызываем процедуру Artacum, чтобы вывести наш массив на экран.
Если остались вопросы - добро в комментарии.
Цикл со счётчиком"
В начале присваивает заданной переменной (переменная-счётчик) начальное число. Переменной-счётчиком может быть любая переменная типа integer, затем в зависимости от направления прибавляет (to) или убавляет (downto) счётчик на единицу. Цикл начинает повторение пока счётчик будет меньше или равен второму числу. Когда счётчик стал больше второго числа, цикл выполняет строки команд до конца, но уже не начинает повторять из снова.
В строках с командами цикла не должно быть команды, которая изменяет значение счётчика, иначе будет ошибка. Счётчик нельзя изменять внутри цикла пока он идёт.
Запись
for ПеременнаяСчётчик := Число Направление Второечисло do
begin
Строки с командами, которые должен повторять цикл;
end;
Пример
Программа, которая выводит числа от 5 до 10 и в конце пишет "Конец"
program raf105;
var i: integer;
begin
for i:=5 to 10 do
begin
writeln(i);
end;
writeln('Конец');
end.