
- •Предисловие
- •Основные навыки и умения
- •Логическая культура: знание логики, логическая интуиция.
- •Языковые знания и умения.
- •Поисковые знания и умения.
- •Алгоритмические навыки и умения.
- •Общие подходы к построению алгоритмов
- •Тестирование и сопровождение программ
- •Обязательный минимум содержания среднего (полного) общего образования
- •Технология обработки текстовой информации
- •Введение в информатику
- •Системы счисления
- •Перевод из десятичной системы счисления
- •Перевод в десятичную систему счисления
- •Перевод чисел из двоичной системы счисления в восьмеричную, шестнадцатеричную системы и обратно
- •Выполнение арифметических операций в позиционных системах счисления
- •Элементы математической логики
- •Логические законы
- •Алгоритм и его свойства
- •Исполнители. Компьютер - универсальный исполнитель
- •Работа компьютера
- •Turbo pascal - исполнитель паскаль-программ
- •Конструкции Паскаля
- •Типы данных
- •Целый тип данных
- •Вещественный тип данных
- •Символьный тип данных
- •Логический тип данных
- •Выражения
- •Операторы ввода-вывода
- •Оператор присваивания
- •Общий вид программы на Паскале
- •Условный оператор
- •If логическое_выражение then оператор1 else оператор2;
- •If логическое_выражение then оператор1;
- •Операторы цикла
- •Построение линейных алгоритмов
- •Построение ветвящихся алгоритмов
- •Построенние циклических алгоритмов
- •Нахождение суммы
- •Вложенные циклы
- •Переборный метод решения задач
- •Численные методы
- •Метод итераций
- •Метод половинного деления
- •Вычисление определенного интеграла методом трапеций
- •Случайные числа
- •Метод Монте-Карло (метод статистических испытаний)
- •Массивы Одномерные массивы
- •Перебор элементов массива
- •Перебор подмассивов
- •Классы задач по обработке массивов
- •Задачи первого класса
- •Задачи второго класса
- •Задачи третьего класса
- •Задачи четвертого класса
- •Сортировка массивов
- •Сортировка вставками
- •Сортировка пузырьком (обменом)
- •Сортировка выбором
- •Сортировка фон Неймана (слиянием)
- •Двумерные массивы
- •Обработка строк
- •Процедуры и функции
- •Рекурсия
- •Работа с графикой
- •Классы программного обеспечения
- •Компиляция и интерпретация
- •Текстовый редактор
- •Электронные таблицы
- •Системы управления базами данных (субд)
- •Пример решения экзаменационного билета
- •Контрольные работы
- •Контрольная работа №1
- •Контрольная работа № 2
- •Контрольная работа № 3
- •Контрольная работа № 4
- •Контрольная работа № 5
- •Библиографический список
Задачи второго класса
Особенностью задач этого класса является изменение порядка следования элементов массива. Для этого часто приходится менять местами элементы массива. Поэтому необходимо ввести дополнительную переменную, для того, чтобы не потерять старое значение элемента массива. Это выполняется с помощью приведенных ниже операторов.
Задача 1. Поменяйте местами значения переменных a[i] и a[j].
Решение.
r := a[i]; {запомнили a[i] во вспомогательной переменной}
a[i] := a[j]; { записали значение a[j] на место a[i], старое значение
последнего потерялось, но сохранилась его копия в
переменной r}
a[j]:=r; { записали запомненное значение a[i] на место a[j]}
Задача 2. Переверните массив, т.е. запишите элементы массива в обратном порядке.
Решение. Для решения этой задачи необходимо поменять местами первый и последний, второй и предпоследний и т.д. элементы. Этот процесс нужно продолжать до тех пор, пока не дойдем до середины массива, иначе массив будет перевернут дважды и получим исходное расположение элементов. Для решения этой задачи хорошо подходит схема перебора элементов массива по два при движении с обеих сторон.
i := 1; j := n;
while i <= j do
begin
r := a[i];
a[i] := a[j];
a[j] := r;
i := i + 1; j := j +1
end;
Упражнение. Внесите изменения в приведенный выше фрагмент программы для того, чтобы переворачивалась часть массива от элемента с номером p до элемента с номером q, не используя при этом дополнительный массив.
Задача 3. Поменяйте местами пары соседних элементов, т.е. первый и второй, третий и четвертый и т.д. (n-1)-ый и n-ый.
Решение. В этой задаче используется схема обмена элементов при схеме перебора с шагом два.
i := 2;
while i < n do
begin
r := a[i];
a[i] := a[i+1];
a[i+1] := r;
i := i + 2
end;
Задача 4. Циклически сдвиньте элементы массива на один элемент влево.
Решение. Циклический сдвиг означает, что происходит следующая замена: первый элемент заменяется вторым, второй - третьим и т.д., последний - старым значением первого. При этом можно потерять только значение первого элемента, которое и необходимо сохранить перед циклом.
r := a[1];
for i := 1 to n-1 do
a[i] := a[i + 1];
a[n] := r;
Задача 5. Сдвиньте циклически элементы массива на k позиций влево.
Решение. Можно воспользоваться предыдущим решением, повторив k раз сдвиг на один элемент.
for j := 1 to k do
begin
r := a[1];
for i := 1 to n - 1 do
a[i] := a[i + 1];
a[n] := r
end.
Можно решить эту задачу с использованием вспомогательного массива, в котором будут сохранены первые k элементов. Затем, после сдвига оставшихся элементов на k позиций влево, в оставшиеся позиции будут переписаны элементы из вспомогательного массива.
for i := 1 to k do
b[i] := a[i];
for i := 1 to n - k do
a[i] := a[i + k];
for i := n- k + 1 to n do
a[i] := b[i - k + 1];
Упражнение. Напишите программу циклического сдвига одномерного массива вправо на k элементов.
Задачи третьего класса
Если обрабатываются несколько массивов одновременно, то для каждого массива нужно выбрать подходящую схему перебора, завести свой индекс, следить, чтобы индекс не вышел за границы массива. В некоторых частных случаях для обработки нескольких массивов бывает достаточно одного индекса, потому что элементы массива обрабатываются "синхронно", то есть, зная индекс элемента одного массива, можно вычислить по некоторой формуле индекс соответствующего ему элемента другого массива. Если такой формулы установить не удается, то говорят, что массивы обрабатываются "асинхронно".
Задача 1. Дан массив целых чисел. Необходимо сформировать второй массив, содержащий четные элементы первого массива, при этом расположить элементы во втором массиве а) на тех же позициях, что и в первом; б) сдвинуть к началу массива.
Решение. В первом случае необходимо проверять каждый элемент первого массива на четность, использовав при этом любую из схем перебора по одному. При этом индекс у второго массива меняется таким же образом. Здесь элементы массива обрабатываются синхронно, достаточно одного индекса. Во втором случае массивы обрабатываются асинхронно, необходимо ввести свою переменную для индекса второго массива, которая будет изменять свое значение только в случае записи элемента в массив.
Вариант 1.
const nn = 30;
var a, b: array [1..nn] of integer;
i, n: integer;
begin
write (‘задайте количество элементов массива’);
readln (n);
for i := 1 to n do
begin
read (a[i]);
if a[i] mod 2 = 0 then b[i] := a[i];
end;
for i := 1 to n do
write (b[i], ‘ ‘);
end.
Вариант 2.
const nn = 30;
var a, b: array [1..nn] of integer;
i, k, n: integer;
begin
write (‘задайте количество элементов массива’);
readln (n);
for i := 1 to n do
read (a[i]);
k := 0; {в массиве b нет еще элементов}
for i := 1 to n do
if a[i] mod 2 = 0 then begin
k := k + 1;
b[k] := a[i];
end;
for i := 1 to k do
write (b[i], ‘ ‘);
end.
Задача 2. Даны два массива целых чисел a и b. Необходимо получить третий массив c, для n = 5 следующего вида: a1 b5 a2 b4 a3 b3 a4 b2 a5 b1.
Решение. Элементы массивов обрабатываются асинхронно. Заметим, что на нечетных позициях массива c располагаются элементы массива a в прямом порядке, а на четных позициях - элементы массива b в обратном порядке.
const nn = 30;
var a, b: array [1..nn] of integer;
с: array [1.. 2*nn] of integer;
i, k, n: integer;
begin
write (‘задайте количество элементов массива’);
readln (n);
writeln (‘задайте элементы массива а’);
for i := 1 to n do
read (a[i]);
writeln (‘задайте элементы массива b’);
for i := 1 to n do
read (b[i]);
for i := 1 to n do
begin
c[2*i - 1] := a[i];
c[2*i] := b[n- i + 1]
end;
for i := 1 to 2*n do
write (c[i], ‘ ‘);
end.