Человек, никогда не совершавший ошибок, никогда не пробовал ничего нового.
А. Эйнштейн

Алгоритмизация и программирование.

Урок 1. Урок 2. Урок 3. Урок 4. Урок 5. Урок 6. Урок 7. Урок 8. Урок 9. Урок 10. Урок 11. Урок 12. Урок 13. Урок 14. Урок 15. Урок 16.

Урок 1. Алгоритм, свойства алгоритма. Исполнители.

Самое простое определение алгоритма - последовательность (порядок) действий. Действия могут выполнять как люди, так и животные, растения и даже технические устройства. Таким образом, исполнителем алгоритмов являются: человек, живые организмы, технические устройства. Указание выполнить конкретное действие называется командой. Совокупность всех команд, которые могут быть выполнены некоторым исполнителем называется системой команд.

Каждый алгоритм должен обладать определенными свойствами:

  1. Дискретность – разрывность, отделённость одного действия от другого.
  2. Однозначность - детерминированность, определённость формулировок, не допускающая разных толкований.
  3. Конечность – каждое отдельное действие (и весь алгоритм) должно быть выполнено (имеет предел).
  4. Результативность – получение результата после конечного числа шагов, предусматривающее все возможные варианты.
  5. Массовость – возможность решать множество однотипных задач.

Исходя из вышеперечисленных свойств можно вывести еще одно определение: Алгоритм - это точное и понятное предписание (указание) исполнителю совершить определенную последовательность действий, направленных на достижение указанной цели или решение поставленной задачи.

Урок 2. Способы представления алгоритмов. Типы алгоритмов.

Существует три основных формы представления алгоритмов: словесно-пошаговая, графическая (блок-схема), алгоритмический язык или программная.

Словесно-пошаговым способом владеет каждый человек. Любой из нас может рассказать необходимую систему команд для решения определенных задач.

С графическим способом немного сложнее. Он предназначен для сокращения записи, в нем предлагается заменять часть слов геометрическими фигурами. В графическом способе любой алгоритм начинается и заканчивается с фигуры скругленный прямоугольник или эллипс, в которых пишут слова: "НАЧАЛО", "КОНЕЦ". Для ввода и вывода данных применяется параллелограмм. Все действия, формулы помещают в прямоугольник. Для условия и циклов предназначен ромб. Это все фигуры, которые необходимо запомнить для представления алгоритма в виде блок-схемы.

Все существующие алгоритмы делят на три типа: линейные, разветвляющиеся, циклические.

Линейные алгоритмы - это алгоритмы, в которых все команды выполняются строго последовательно друг за другом. В таких алгоритмах никогда не встречается условие, соответственно и фигуры ромб в блок-схемах. Пример

Разветвляющиеся алгоритмы - это алгоритмы, в которых содержится  команда ветвления. Команда ветвления  - это составная команда, в которой та или иная серия команд выполняется после проверки условия. Условия бывают двух типов: полные и неполные. В полных условиях вне зависимости от его выполнения следуют действия, в неполных же действия имеются только на одной из веток. Перед окончанием блок-схемы ветки обязательно должны соединиться вместе. Пример видов условий. Пример разветвляющейся блок-схемы.

Циклические алгоритмы - это алгоритмы, в которых содержится команда повторения. Команда повторения - это составная команда, в которой тело цикла выполняется несколько раз. Циклов существует три типа: "ДЛЯ", "ПОКА", "ДО".

Цикл "ДЛЯ" применяется в тех случаях когда известен диапазон выполнения условия (подходит не для всех задач). Пример

Цикл "ПОКА" и цикл "ДО" практически одинаковые, различаются только размещением условия. Цикл "ПОКА" по другому еще называют "цикл с предусловием", потому что в нем сначала проверяется выполнение условия, а потом идет цикл. Если условие не выполняется, то цикл пропускается, т.е. ни разу не проделывается. Пример цикла "ПОКА".

Другое название цикла "ДО" - "цикл с постусловием". В нем сначала выполняется цикл, а после проверяется условие. Поэтому в данном случае цикл выполнится хотя бы 1 раз. Пример цикла "ДО".

Урок 3. Основы программирования на языке Pascal.

Pascal - язык программирования высокого уровня, созданный  Никлаусом Виртом в 1968—1969 годах после его участия в работе комитета разработки стандарта языка Алгол-68. Язык назван в честь французского математика, физика, литератора и философа Блеза Паскаля, который создал первую в мире механическую машину, складывающую два числа. Основное назначение данного языка - обучение студентов программированию.

Структура программ в Pascal:

Program <название программы> - название программы задается автором, используя латинский алфавит, цифры, символ подчеркивания (_). Запрещено название начинать с цифры, т.е. <z1> - правильно, <1z> - неправильно.

var - описание всех переменных применяемых в процессе программы.

begin - начало программы.

программа; - каждое действие в программе заканчивается точкой с запятой.

end. - конец программы.

После кодового слова "var" - идет описание переменных. Для переменных можно использовать латинские буквы (одна, несколько), цифры: a, a345, peremen.

Описать переменные значит определить какого типа информация может быть им присвоена. Типы переменных в языке Pascal:

  • integer - целочисленный тип (числа с фиксированной запятой);
  • real - вещественный тип (числа с плавающей запятой, дробные числа);
  • char - символьный тип;
  • string - строковый тип;
  • boolean - логический тип;
  • array - массив данных.

Пример: var a, b,sw34: integer; e_tr: string;

Для создания простейших программ достаточно знать три команды:

  • write - команды вывода информации;
  • read - команда ввода информации;
  • := - команда присваивания.

Создаем первую программу (сложение двух целых чисел):

program a1;
var a, b, c: integer;
begin
 write ('Введите любое целое число');
 read (a);
 write ('Введите второе целое число');
 read (b);
 c:=a+b;
 write ('Сумма введенных чисел=', c);
end.

Как видите все довольно просто. Сначала следует предложение ввести одно число, затем идет команда для его ввода в память компьютера. Далее аналогично вводится второе число. Затем идет вычисление по заданной формуле, и в конце происходит вывод полученного результата. Для вывода текстовой информации используются апострофы. Главное не забывать в конце строк (после каждого действия) ставить точку с запятой. В принципе, можно всю программу писать в одну строку, ";" покажут где заканчивается каждое отдельное действие.

program a1; var a, b, c: integer; begin write ('Введите любое целое число'); read (a); write ('Введите второе целое число'); read (b); c:=a+b; write ('Сумма введенных чисел=', c); end.

Практическое задание: составить по образцу программы с оставшимися знаками арифметических операций.

Урок 4. Условный оператор.

В обычной жизни условие задается при помощи трех основных слов: "если", "то", "иначе" причем слово иначе встречается не всегда (полное, неполное условия - см. урок №2). Для задания условия в языке Pascal служит условный оператор IF. Выглядит он следующим образом: "IF" - если, "THEN" - то, "ELSE" - иначе.

Составим программы с условным оператором полного и неполного условия. Начнем с полного, пусть снова вводится два целых числа, надо чтобы программа всегда вычитала из большего числа меньшее.

program a2;

var a,b,c: integer;

begin

writeln ('Введите любое целое число');

readln (a);

writeln ('Введите второе целое число');

readln (b);

if a>b then

c:=a-b

else

c:=b-a;

writeln ('Разность чисел составила = ', c);

end.

Несколько правил для условного оператора. Если после выполнения или невыполнения условия необходимо произвести несколько действий, то их нужно поместить между дополнительными словами "begin", "end". Если же действие будет только одно (как в примере выше), то "begin" и "end" можно пропустить. Перед "else" точка с запятой не ставится.

Теперь пример программы с неполным условием. Так же вводится два целых числа, если первое из них больше второго, то надо произвести операцию вычитания из первого второго. Как видите в задании нет слова иначе, а значит условие неполное. Программа в этом случае будет выглядеть так:

program a2_1;

var a,b,c: integer;

begin

writeln ('Введите любое целое число');

readln (a);

writeln ('Введите второе целое число');

readln (b);

if a>b then

c:=a-b

writeln ('Число ', a, 'больше числа ', b, '. Разность чисел составит = ', c);

end.

Практическое задание: составьте программу в которую вводится одно вещественное число, если оно положительное, надо вывести его третью степень, иначе квадрат этого числа.

Урок 5. Сложные условия.

Никто не запрещает в одной программе применять несколько условий. Но в таком случае программа будет довольно громоздкой и чтобы уменьшить ее код в программировании имеется возможность использования союзов. Союзы соединяют несколько простых условий в одно - сложное. Если в условии встречаются союзы, оно называется сложным.

Союзы применяемые в языке Pascal:

  • and (и) - используется когда все простые условия должны выполняться. Если хотя бы одно из простых условий не выполнится, сложное условие также не выполняется.
  • or (или) - используется когда достаточно выполнения хотя бы одного из простых условий.
  • not (не) - используется для инверсии условия.
  • xor (исключающее или) - используется когда не должны выполняться все простые условия.

Пример записи сложного условия: if (a>b) and (a>c) or (c>b) then...

Как видно из примера простые условия должны обязательно заключаться в круглые скобки!

Теперь давайте рассмотрим пример программы содержащей сложное условие. Из трех введенных чисел вывести наибольшее.

program a_3;

var a,b,c: integer;

begin

writeln('Введите три целых числа');

readln (a,b,c);

if (a>b) and (a>c) then

writeln ('Наибольшее из введеных чисел: ', a)

else if (c>b) and (c>a) then

writeln ('Наибольшее из введеных чисел: ', c)

else

writeln ('Наибольшее из введеных чисел: ', b);

end.

В данной программе встречаются несколько сложных условий. Т.к. второе и третье условие следует проверить только в том случае если первое не выполняется, то второе if пишется после else.

Практическое задание: Создайте программу, которая будет выводить три введенных числа в порядки возрастания.

Урок 6. Цикл со счетчиком (цикл "для").

Как было уже сказанно в уроке №2, этот цикл используется только в случае когда известен диапазон или количество повторений. Записывается данный цикл следующим образом: for i=a to b do, где for - "для", i - переменная меняющаяся от a до b, соответственно a - начальное значение, b - конечное значение, to - увеличивает переменную i каждый раз на единицу.

Пример задачи для которой можно применить цикл "для": Вывести квадраты чисел от 9 до 16.

program a4;

var i: integer;

begin

for i=9 to 16 do

writeln (i,'^2 = ',i*i);

end.

Т.к. в данном примере начальное и конечное значение известно изначально, нет необходимости вводить какие-то значения, соответственно после начало идет сразу цикл.

В случае когда диапазон может меняться, т.е. его будет задавать пользователь программа немного изменится.

program a4_1;

var i,a,b: integer;

begin

writeln ('Введите начальное и конечное значение диапазона');

readln (a,b);

for i=a to b do

writeln (i,'^2 = ',i*i);

end.

Так же как и в случае с условным оператором, если в цикле есть необходимость выполнения нескольких действий, они заключаются между словами "begin" и "end". Если действие только одно, то эти слова можно упустить.

Если диапазон будет задан в порядке уменьшения, то в цикле вместо "to" надо писать "downto" - уменьшает переменную i каждый раз на единицу.

А как же быть если нужно брать не все числа в диапазоне, а к примеру только нечетные или четные??? Для отбора чисел в цикле существует несолько способов.

Способ №1. Ипользование функции mod. MOD - функция возвращающая остаток от деления двух целых чисел. Для проверки является ли число четным надо записать следующее условие: if a mod 2 = 0 then writeln ('Четное число');

Вывести квадраты нечетных чисел от 9 до 16.

program a4_2;

var i: integer;

begin

for i=9 to 16 do

if i mod 2 <> 0 then /знак <> обозначает "не равно"/

writeln (i,'^2 = ',i*i); /к сожалению, в Pascal нет функции возведения в степень/

end.

Способ №2. Использование дополнительной переменной. Попытаюсь объяснить его на примере.

Вывести квадраты пяти нечетных чисел от 9.

program a4_3;

var i,k: integer;

begin

k:=9;

for i=1 to 5 do begin

writeln (k,'^2 = ',k*k);

k:=k+2;

end;

end.

В данном примере цикл служит для подсчета кол-ва раз выполнения однообразных действий. Действия в свою очередь "работают" с дополнительной переменной которая до цикла присвоенной к начальному значению, а в цикле увеличивается на два, что числа были не четными.

Способ №3. Выявление закономерности между переменной в цикле и получаемымы значениями. Этот способ сложнее предыдущих.

Вывести квадраты первых пяти нечетных чисел. Выявляем закономерность -

i
1
2
3
4
5
k
1
3
5
7
9

т.е. что нужно сделать с перемнной i чтобы получить значение k. k=2i-1

program a4_4;

var i,k: integer;

begin

for i=1 to 5 do begin

k:=2*i - 1;

writeln (k,'^2 = ',k*k);

end;

end.

Практическое задание: составьте программу выводящую длины окружностей нечетных радиусов от a до b.

Урок 7. Цикл с предусловием.

Цикл While (Пока) более универсальный его можно использовать в любых циклических задачах, когда известно количество повторений и когда неизвестно. Предусловие означает что перед выполнением цикла проверяется условие и если оно выполняется начинает работать цикл, если же оно не выполняется цикл пропускается и программа выполняется далее.

Давайте сначала рассмотрим пример из предыдущего урока, а потом новый чтобы показать универсальность данного цикла.

Вывести квадраты пяти нечетных чисел от 9.

program a5_1;

var i: integer;

begin

i:=9;

while i<=17 do begin

writeln (i,'^2 = ',i*i);

i:=i+1;

end;

end.

Как видно из примера в цикл обязательно надо включать действие для не выполнения условия, чтобы не произошло зацикливание (бесконечное выполнение цикла).

А теперь давайте разберем пример программы в которой количество повторений неизвестно. Определить количество цифр в числе.

program a5_2;

var a, b, i: integer;

begin

writeln ('Введите целое число');

readln (a);

b:=a; //данное присвоение необходимо для корректного вывода ответа//

i:=0; //переменная i будет являться счетчиком, в начале ее необходимо обнулить для применения ее в формулах//

while a>0 do begin

a:= a div 10; //div - функция возвращающая целую часть от деления двух целых чисел. Если а = 45, то после операции a div 10 = 4//

i:=i+1;

end;

writeln ('Число ', b,' состоит из ',i, ' цифр.');

end.

Практическое задание: составить программу выводящую сумму цифр введенного числа.

Урок 8. Цикл с постусловием.

Из названия цикла следует что в нем сначала хотя бы раз выполнится цикл и только потом следует проверка условия. Для цикла с постусловием предназначены следующие служебные слова: repeat ... until. После слова until идет условие.

Хорошим примером демонстрации работы данного цикла является задача когда нужно в программу ввести положительное число и если человек введет отрицательное, то программа должна сообщить об этом и попросить ввести корректное число.

program a6_1;

var a, b, i: integer;

begin

writeln ('Введите положительное число');

readln (a);

if a<0 then begin

repeat

writeln ('Вы ввели не положительное число. Введите положительное число!');

readln (a);

until a<0 //пока не будет введено положительное число программа будет возвращаться к служебному слову repeat

end;

b:=a; //данное присвоение необходимо для корректного вывода ответа//

i:=0; //переменная i будет являться счетчиком, в начале ее необходимо обнулить для приминения ее в формулах//

while a>0 do begin

a:= a div 10; //div - функция возвращающая целую часть от деления двух целых чисел. Если а = 45, то после операции a div 10 = 4//

i:=i+1;

end;

writeln ('Число ', b,' состоит из ',i, ' цифр.');

end.

Практическое задание: Ввести натуральное число и определить, верно ли, что сумма его цифр равна 10.

Урок 9. Оператор выбора.

В случаях когда в программе встречается множественный выбор удобно вместо условного оператора воспользоваться оператором выбора (case).

Ввести номер месяца и вывести количество дней в этом месяце.

program a7_1;

var a, b: integer;

begin

writeln ('Введите номер месяца');

readln (a);

case a of

1,3,5,7,8,10,12: begin b:=31 end; //значения, при которых выполняются одинаковые действия, можно группировать

2: begin b:=28 end;

4,6,9,11: begin b:=30 end;

else b:=0;

end;

if (b=30) or (b=28) then

writeln ('В этом месяце ', b, ' дней')

else if b=31 then

writeln ('В этом месяце ', b, ' день')

else

writeln ('Такого месяца не существует');

end.

Практическое задание: Ввести номер месяца и вывести количество дней в нем, а также число ошибок при вводе.

Урок 10. Массивы. Заполнение и вывод массивов.

Массив – это группа однотипных элементов, имеющих общее имя и расположенных в памяти рядом. Примером может служить список учеников класса или данные температуры окружающей среда за месяц. Обозначаются массивы через переменные и прописываются так же после слова var A: array[1..5] of integer - эта запись означает что в программе будет использован массив обозначенный переменной А состоящий из пяти элементов, т.е. его можно представить в виде таблицы состоящей из одной строки и несколько столбиков (одномерный массив) и в каждой клетке такого массива могут храниться только целые числа:

23 54 3 45 5

Заполнение массива возможно двумя способами: ручным вводом или с помощью случайных чисел.

1. Ручной ввод

program a8_1;

const N=30; // описание постоянных величин

var i: integer; a: array[1..N] of real;

begin

for i:=1 to N do begin // N - количество элементов массива (кол-во клеток)

  write('Введите значение a[',i,']=');

  read ( a[i] );

end;

end.

2. Заполнение массива случайными числами:

program a8_2;

const N=30; // описание постоянных величин

var i: integer; a: array[1..N] of real;

begin

for i:=1 to N do begin // N - количество элементов массива (кол-во клеток)

a[i]:=random(100); //функция случайных чисел, каждому элемента массива будет присовено случайное число в диапазоне от 0 до 100

writeln (a[i]); // вывод массива

end;

end.

Практическое задание: Ввести c клавиатуры массив из 5 элементов, найти среднее арифметическое всех элементов массива.

Урок 11. Максимальный элемент массива.

Суть нахождения максимального элемента массива заключается в последовательном сравнении значений всех элементов. Если значение в следующем элементе больше предыдущего, он становится максимальным.

В программировании для этой задачи используется переменная, обозначающая максимальное значение. Изначально считается, что именно в первом элементе находится максимальное значение и переменная приравнивается к нему. Далее она сравнивается с остальными элементами и если значение в каком-либо элементе больше этой переменной, она заменяется на него.

Давайте рассмотрим решение на примере.

program a9_1;

const N=30; // описание постоянных величин

var i, b: integer; a: array[1..N] of real;

begin

for i:=1 to N do begin // N - количество элементов массива (кол-во клеток)

a[i]:=random(100-50); //функция случайных чисел, каждому элемента массива будет присовено случайное число в диапазоне от -50 до 50

writeln (i,' = ',a[i]); // вывод массива

end;

b:=1; // первый элемент считаем максимальным

for i:=2 to N do begin

if a[i] > a[b] then

b:=i;

end;

writeln ('Максимальный элемент массива ',b);

end.

Практическое задание: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и найти в нем максимальный и минимальный элементы и их номера.

Урок 12. Обработка массива. Реверс.

Реверс массива - переставить элементы массива в обратном порядке. Т.е. значения первого и последнего, второго и предпоследнего и т.д. элементов массива надо поменять местами. Для замены значений из элементов массива необходима дополнительная переменная, которой будет на время присваиваться значения одного из заменяемых элементов.

program a10_1;

const N=30; // описание постоянных величин

var i, b: integer; a: array[1..N] of integer;

begin

for i:=1 to N do begin // N - количество элементов массива (кол-во клеток)

a[i]:=random(100-50); // функция случайных чисел, каждому элемента массива будет присовено случайное число в диапазоне от -50 до 50

writeln (i,' = ',a[i]); // вывод массива

end;

for i:=1 to N div 2 do begin // кол-во действий - половина элементов массива

b:=a[i]; // дополнительной переменной временно присваивается значение одного из элементов

a[i]:=a[N+1-i]; // элементу из первой половины массива присваивается значение из второй половины

a[N+1-i]:=b; // элементу из второй половины присваивается значение дополнительной переменной

end;

for i:=1 to N do begin

writeln (i,' = ',a[i]); // вывод реверсного массива

end;

end.

Практическое задание: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и выполнить инверсию отдельно для 1-ой и 2-ой половин массива.

Урок 13. Обработка массива. Циклический сдвиг.

Циклический сдвиг означает сдвинуть элементы массива влево на 1 ячейку, первый элемент становится на место последнего.

Начальный массив:

Индекс
а1
а2
а3
а4
а5
Значение
23
45
6
78
1

Массив после циклического сдвига:

Индекс
а1
а2
а3
а4
а5
Значение
45
6
78
1
23

т.е. получается надо сделать следующие перемещения: a[1]=a[2]; a[2]=a[3]; a[3]=a[4]; a[4]=a[5]; a[5]=a[1]. Но в этом случае будет ошибка, т.к. значение которые сначала было в a[1] исчезнет, а после сдвига в элементах a[4] и a[5] окажется значение из элемента a[5]. Для избежания такой ошибки нужно, как и в случае реверса массива, взять дополнительную переменную которой перед сдвигом присвоить значение первого элемента, а после сдвига значение этой перменной присвоить элементу a[5].

Рассмотрим циклический сдвиг на примере:

program a11_1;

const N=30; // описание постоянных величин

var i, b: integer; a: array[1..N] of integer;

begin

for i:=1 to N do begin // N - количество элементов массива (кол-во клеток)

a[i]:=random(100-50); // функция случайных чисел, каждому элемента массива будет присовено случайное число в диапазоне от -50 до 50

writeln (i,' = ',a[i]); // вывод массива

end;

b:=a[1]; // дополнительной переменной временно присваивается значение одного из элементов

for i:=1 to N-1 do // последний элемент N не учавствует в цикле, т.к. ему будет присовено значение дополнительной переменной

a[i]:=a[i+1]; // предыдущему элементу присваивается значение последующего

a[N]:=b; // последнему элементу присваивается значение дополнительной переменной

for i:=1 to N do begin

writeln (i,' = ',a[i]); // вывод массива после циклического сдвига

end;

end.

Практическое задание: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и выполнить циклический сдвиг ВПРАВО.

Урок 14. Обработка массива. Сортировка массива.

Сортировка – это расстановка элементов массива в заданном порядке (по возрастанию, убыванию, последней цифре, сумме делителей, …). Рассмотрим сортировку на примере перестановки элементы массива в порядке возрастания. Существует несколько алгоритмов для сортировки массивов.

1. Метод "пузырька".

Как пузырек в стакане с водой поднимается вверх, так и самый маленький ("легкий") элемент должен перемещаться вверх ("всплывать").

При первом проходе начиная снизу, сравниваются два соседних элемента; если они стоят "неправильно", поменять их местами и т.д..

Индекс а1 а2 а3 а4 а5
Значение 23 45 6 78 5

a[4]>a[5] =>

Индекс а1 а2 а3 а4 а5
Значение 23 45 6 5 78

a[3]>a[4]=>

Индекс а1 а2 а3 а4 а5
Значение 23 45 5 6 78

a[2]>a[3]=>

Индекс а1 а2 а3 а4 а5
Значение 23 5 45 6 78

a[1]>a[2]=>

Индекс а1 а2 а3 а4 а5
Значение 5 23 45 6 78

за 1 проход по массиву один элемент (самый маленький) становится на свое место. Следующие проходы аналогичны предыдущему, только верхний элемент уже не сравнивается. Для сортировки массива из N элементов нужен N-1 проход  (достаточно поставить на свои места N-1 элементов).

program a12_1;

const N=30; // описание постоянных величин

var i, b, j: integer; a: array[1..N] of integer;

begin

for i:=1 to N do begin // N - количество элементов массива (кол-во клеток)

a[i]:=random(100-50); // функция случайных чисел, каждому элемента массива будет присовено случайное число в диапазоне от -50 до 50

writeln (i,' = ',a[i]); // вывод массива

end;

for i:=1 to N-1 do begin

for j:=N-1 downto i do

if a[j] > a[j+1] then begin // сравнение значений двух элементов

b := a[j]; // дополнительной переменной временно присваивается значение одного из элементов

a[j] := a[j+1];

a[j+1] := b;

end;

end;

for i:=1 to N do begin

writeln (i,' = ',a[i]); // вывод упорядоченного по возрастанию массива

end;

end.

Таким образом, массив будет упорядочен по возрастанию, но лучше пользоваться методом "пузырька с флажком" - если при выполнении метода пузырька не было обменов, массив уже отсортирован и остальные проходы не нужны. Для этого метода нужно взять еще одну переменную ("флаг") логического типа (переменная такого типа может принимать только два значения: true - истина или false - ложь) показывающую, был ли обмен; если она равна False (ложь), то выход.

program a12_2;

const N=30; // описание постоянных величин

var i, b, j: integer; a: array[1..N] of integer; f: boolean;

begin

for i:=1 to N do begin // N - количество элементов массива (кол-во клеток)

a[i]:=random(100-50); // функция случайных чисел, каждому элемента массива будет присовено случайное число в диапазоне от -50 до 50

writeln (i,' = ',a[i]); // вывод массива

end;

i := 0;

repeat

i := i + 1;

f := False; // сбросить флаг

for j:=N-1 downto i do

if A[j] > A[j+1] then begin

с := A[j];

A[j] := A[j+1];

A[j+1] := с;

f := True; // поднять флаг

end;

until not (f);  // выход при f=False

for i:=1 to N do begin

writeln (i,' = ',a[i]); // вывод упорядоченного по возрастанию массива

end;

end.

Практическое задание: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и выполнить перестановку элементов массива в порядке убывания.

Урок 15. Обработка массива. Сортировка массива /продолжение/.

Следующий метод позволяющий произвести сортировку массива - Метод выбора. Заключается он в нахождении в массиве минимального значения, перестановки его в первый элемент, из оставшихся найти  минимальный элемент и поставить на второе место и т.д.

Начальный массив:

Индекс а1 а2 а3 а4 а5
Значение 23 45 6 78 5

после 1 прохода:

Индекс а1 а2 а3 а4 а5
Значение 5 45 6 78 23

после 2 прохода:

Индекс а1 а2 а3 а4 а5
Значение 5 6 45 78 23

после 3 прохода:

Индекс а1 а2 а3 а4 а5
Значение 5 6 23 78 45

после 4 прохода:

Индекс а1 а2 а3 а4 а5
Значение 5 6 23 45 78

program a13_1;

const N=30; // описание постоянных величин

var i, b, j, m: integer; a: array[1..N] of integer;

begin

for i:=1 to N do begin // N - количество элементов массива (кол-во клеток)

a[i]:=random(100-50); // функция случайных чисел, каждому элемента массива будет присовено случайное число в диапазоне от -50 до 50

writeln (i,' = ',a[i]); // вывод массива

end;

for i := 1 to  N-1  do begin

  m:= i ; // минимальный

  for j:= i+1 to N do var container = document.getElementById('nativeroll_video_cont'); if (container) { var parent = container.parentElement; if (parent) { const wrapper = document.createElement('div'); wrapper.classList.add('js-teasers-wrapper'); parent.insertBefore(wrapper, container.nextSibling); } }