- •35 Жегуло а.И. Компьютерные науки 2010-2011 гг. Компьютерные науки Лекции для студентов 1 курса, 2010-2011 уч. Г., семестр 1
- •1. Основные понятия 3
- •2. Введение в язык программирования Pascal 3
- •7. Массивы 16
- •8. Сортировки массивов 22
- •9. Рекурсия 25
- •1. Символьные и строковые типы данных 31
- •Основные понятия
- •Способы описания алгоритма:
- •Введение в язык программирования Pascal
- •Структура программы на языке Pascal
- •Правила записи программ
- •Стиль программирования
- •Переменные и константы. Понятие типа данных
- •Классификация типов данных
- •Стандартные простые типы данных
- •Целые типы
- •Вещественные типы
- •Логические (булевские) типы
- •Перечисляемые типы
- •Интервальные типы
- •Порядковые типы
- •Описание данных
- •Описание переменных
- •Описание констант
- •Описание типизированных констант
- •Выражения
- •Операции отношения
- •Приоритеты операций
- •Арифметические выражения
- •Логические выражения
- •Операторы
- •Оператор присваивания
- •Оператор ввода с клавиатуры
- •Оператор вывода на экран монитора
- •Форматный вывод
- •Условный оператор (оператор альтернативы)
- •Составной оператор
- •Оператор выбора
- •Оператор цикла с предусловием while
- •Оператор цикла с постусловием repeat
- •Оператор цикла for с параметром
- •Вложенные циклы
- •Взаимозаменяемость циклов различных видов
- •Дополнительные конструкции переходов для циклов
- •«Вечные» циклы
- •Простейшие алгоритмы
- •Вычисление суммы и произведения
- •Организация счетчика
- •Нахождение наибольшего и наименьшего значений
- •Рекуррентные последовательности
- •Итерационные алгоритмы
- •Подпрограммы (процедуры и функции)
- •Понятие подпрограммы, ее описания и вызова
- •Цели введения подпрограмм
- •Способы передачи параметров. Виды параметров
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Корректность передачи параметров
- •Досрочное завершение работы программы и подпрограммы
- •Реализация вызова подпрограммы
- •Область действия и время жизни идентификаторов
- •Правила видимости
- •Время жизни идентификаторов
- •Побочный эффект функции
- •Массивы
- •Описание переменных-массивов
- •Обозначение элементов массива
- •Двумерные массивы – матрицы
- •Трехмерные массивы
- •Типизированные константы-массивы
- •Операции над массивами
- •Именная эквивалентность типов
- •Передача массива в качестве параметра
- •Открытые массивы
- •Типичные задачи для одномерных массивов
- •Поиск заданного элемента в массиве
- •Анализ методов поиска по количеству операций сравнения
- •Двумерные массивы – матрицы
- •Трехмерные массивы
- •Сортировки массивов
- •Понятие сортировки
- •Параметры оценки алгоритмов
- •Сортировка простым включением (простыми вставками) Принцип сортировки включением
- •Сортировка простым выбором Принцип сортировки выбором
- •Сортировка простым обменом (метод пузырька) Принцип сортировки обменом
- •Сравнение эффективности базовых методов сортировки
- •Использование индексных массивов при сортировке
- •Рекурсия
- •Что такое рекурсия
- •Рекурсивные подпрограммы
- •Прямая и косвенная рекурсия
- •Предварительное (опережающее) описание подпрограммы
- •Опасности рекурсии
- •Бесконечная рекурсия
- •Итерация и рекурсия. Необоснованное применение рекурсии
- •Глубокая рекурсия
- •Когда использовать рекурсию
- •Формы рекурсивных подпрограмм
- •Примеры рекурсивных программ
- •Ввод последовательности целых чисел, заканчивающейся нулем, вывод в обратном порядке
- •Поиск максимального элемента массива
- •Задача о Ханойских башнях
- •Символьные и строковые типы данных
- •Символьные типы данных
- •Представление символов в памяти компьютера
- •Символьные константы и переменные Неименованные символьные константы
- •Стандартные функции над символами
- •Строковые типы данных
- •Строковые типы. Представление строк в памяти компьютера
- •Стандартные функции и процедуры для строк
- •Выделение слов из строки
-
Организация счетчика
Чтобы организовать подсчет, надо:
-
Перед циклом задать начальное значение счетчика: cnt:=0;
-
Повторять… cnt:=cnt+1; …//В теле цикла увеличивать счетчик на 1 Конец повторения
-
Нахождение наибольшего и наименьшего значений
Поиск наибольшего max (или наименьшего min) значения осуществляется в цикле последовательным сравнением очередного значения со значением max (или min). В качестве начального значения max можно взять заведомо малое число, а для min – заведомо большое число. Можно в качестве начального значения для max и min взять первое из сравниваемых значений. Если необходимо определить номер значения, которое является максимальным (или минимальным), то при запоминании нового максимального (или минимального) значения надо запоминать и его номер.
-
Задать начальное значение наибольшего, равное первому из сравниваемых значений: max:=x;
-
Задать номер значения, которое является наибольшим: imax:=1;
-
Повторять Ввод очередного x Если x>max то начало max:=x; imax:=НомерЗначенияX … конец Конец повторения
-
Рекуррентные последовательности
Рекуррентной называется последовательность, каждый член которой является некоторой функцией от одного или нескольких предшествующих членов. Слово «рекуррентный» происходит от латинского recurrentis – возвращающийся.
Порядком рекуррентной последовательности назовем количество предшествующих членов, от которых зависит текущий член последовательности. Примером последовательности 1-го порядка служит арифметическая прогрессия, где каждый член равен предыдущему, увеличенному на разность прогрессии: a1=c1, ai = ai-1 + M, , i>1
Классическим примером рекуррентной последовательности 2-го порядка является последовательность Фибоначчи.
Номер числа |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
… |
Число Фибоначчи |
1 |
1 |
2 |
3 |
5 |
8 |
13 |
21 |
34 |
55 |
… |
Каждый член этой последовательности равен сумме двух предыдущих ее членов:
f1=1; f2=1; fi=fi-1+fi-2 для i > 2
Некоторые из свойств чисел Фибоначчи:
-
f1+f2+ … +fn=fn+2 –1
-
f1+f3+ … +f2n+1=f2n+2 – сумма нечетных равна следующему за ними четному числу Фибоначчи
-
f2+f4+ … +f2n=f2n+1 –1 ‑ сумма четных равна следующему за ними нечетному числу Фибоначчи -1
-
отношение fn+1 / fn стремится к числу 0,663… , так называемому «золотому сечению».
Пример. Вычислить число Фибоначчи с заданным номером
program Fibonach; {Вычисление числа Фибоначчи с заданным номером}
var n: integer;
i, f1, f2, f3: integer;
begin
write(‘n=’); readln(n); {Ввод номера числа}
if (n=1) or (n=2) then f3:=1
else begin
f1:=1; f2:=1;
for i:=3 to n do
begin
f3:=f1+f2;
f1:=f2;
f2:=f3
end
end;
writeln('Число Фибоначчи с номером ', N, ' равно ', f3);
end.
-
Итерационные алгоритмы
Итерационным называется такой алгоритм, который реализует циклический процесс получения последовательности значений y1, y2, …, yi-1, yi, … , сходящейся к некоторому пределу y. Один шаг цикла называется итерацией.
Каждое новое значение yi определяется с учетом предыдущего и является более точным приближением к y. Для вычисления yi часто используют рекуррентные соотношения.
Итерационный процесс заканчивают, т.е. считают, что yiy, если |yi–yi-1|<, где – погрешность вычисления.
Пример. Вычислить
для i>1
При n=2 имеем:
Допустим, x=2. Тогда
Закончим процесс, когда |yi– yi-1| < «Табличное» значение
Program Iterat_Sqrt; //Вычисление квадратного корня методом итераций
var x,y,y1,Eps : real;
begin
repeat //Ввод исходного положительного числа
write(‘x=’); readln(x);
until x>0;
write(‘Eps=’); readln(Eps); //Ввод значения Eps
Y:=0.5*(x+1); //Начальное значение
repeat
y1:=y;
y:=0.5*(y1+x/y1); //Очередное значение
until abs(y-y1)< Eps;
writeln(’Квадратный корень=’,y:10:6)
end.