Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Фукс, Костюк задачник.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
460.29 Кб
Скачать

Томский государственный университет

Факультет информатики

Ю. Л. Костюк, А. Л. Фукс, И. Л. Фукс

Основы разработки алгоритмов

Издание 2-е, дополненное

Методические указания

Томск – 2004

Методические указания рассмотрены и одобрены методической комиссией факультета информатики.

Декан факультета информатики С.П. Сущенко

Председатель методической комиссии В.В. Поддубный

Методические указания предназначены для подготовки к сдаче ЕГЭ, а также для подготовки к вступительному экзамену по информатике. Для решения предлагаемых задач достаточно знаний в объеме школьной программы по информатике и владения начальными навыками алгоритмизации.

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

Издание посвящается 400-летию г. Томска

Почтовый адрес: 634050, г. Томск, пр. Ленина, 36, ТГУ,

приемная комиссия

Телефон: (382-2) 52-96-72

Информационный интернет-сервер:

http://www.inf.tsu.ru

Электронная почта:

kostuk@inf.tsu.ru

fooks@inf.tsu.ru

foox@inf.tsu.ru

© Костюк Ю. Л., Фукс А. Л., Фукс И. Л., 2004

1.Рекуррентные алгоритмы

Основой рекуррентных алгоритмов являются рекуррентные соотношения. Это соотношения вида:

где – константы,

В практических задачах чаще всего .

Вычисление суммы элементов массива. Дан вещественный массив a длины n. Найти сумму элементов массива.

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

, , при .

В программе будем последовательно вычислять , используя для этих сумм одну переменную S.

S:=0;

for i:=1 to n do S:=S+a[i];

Нахождение минимума в массиве. Дан целочисленный массив длины n. Найти минимальный элемент в массиве.

Пусть – минимальный среди первых i элементов массива. Очевидно, что , а при выполняется:

.

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

m:=a[1];

for i:=2 to n do

if a[i]<m

then m:=a[i];

Поиск второго максимума. Дан целочисленный массив длины n. Найти второй максимальный элемент (т.е. элемент, который будет иметь номер n-1, если массив упорядочить по возрастанию).

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

, , если ,

, , если ,

, , если .

В программе будем последовательно вычислять и , используя для этого переменные s и f.

if a[1]>=a[2]

then begin f:=a[1]; s:=a[2]; end

else begin f:=a[2]; s:=a[1]; end;

for i:=3 to n do

if a[i]>f then begin s:=f; f:=a[i]; end

else if a[i]>s then s:=a[i];

Вычисление числа по цифрам. Дан целочисленный массив, содержащий k десятичных цифр некоторого целого положительного числа N. Вычислить значение N.

Пусть цифры числа заносились в массив последовательно слева направо, т.е. содержит цифру самого старшего ( )-го разряда, а – самого младшего (нулевого). Очевидно, что при правильном задании массива десятичных цифр , а искомое значение

.

Для исключения операции возведения в степень и упрощения вычислений воспользуемся схемой Горнера:

.

Будем последовательно вычислять выражения внутри скобок, начиная с самых внутренних, а результат сохранять в переменной N:

N:=a[1];

for i:=2 to k do N:=N*10+a[i];

Вычисление приближенного значения функции. Для заданного вещественного x и целого n вычислить приближенное значение

.

При вычислении подобных сумм удобно определять сразу два рекуррентных соотношения: одно – для вычисления следующего слагаемого на основе предыдущего, а другое – для вычисления частичных сумм. Введем обозначения: i-е слагаемое, – сумма первых i слагаемых ( ). Тогда , а при . Выразим через : . Для сумм выполняется: и . В программе для хранения слагаемых и сумм используем вещественные переменные a и S.

a:=1; S:=1;

for i:=1 to n do

begin a:=a*x/i; S:=S+a; end;

Трудоемкость алгоритмов. Каждый из рассмотренных алгоритмов содержит цикл for, выполняющийся n ( или n – 1) раз. Так как перед циклом и внутри цикла количество выполняемых действий – константа, то общее число действий можно представить в виде C1 + C2 * n, где C1 и C2 – константы. Таким образом, трудоемкость этих алгоритмов – линейная.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]