- •Р.К. Ахмадулин технология программирования
- •Оглавление
- •§1. Основные понятия
- •Основные символы языка Паскаль
- •Элементарные конструкции языка Паскаль
- •Примеры записи чисел и выражений на языке Паскаль
- •Вопросы для самопроверки
- •§2. Типы данных
- •Целые типы
- •Вещественные типы
- •Символьный тип
- •Логический тип
- •Скалярные типы, определяемые пользователем
- •Вопросы для самопроверки
- •§3. Операции и выражения
- •Приоритет операций и отношений в выражениях
- •Стандартные (встроенные) функции
- •Вопросы для самопроверки
- •§4. Структура программы
- •Комментарии
- •Директивы компилятора
- •Оформление исходного текста
- •Вопросы для самопроверки
- •§5. Переменные и константы. Оператор присваивания
- •Понятие константы
- •Понятие переменной
- •Оператор присваивания
- •Совместимость типов данных
- •Понятие типизированной константы
- •Вопросы для самопроверки
- •§6. Процедуры ввода и вывода
- •Процедуры вывода
- •Форматированный вывод
- •Процедуры ввода
- •Вопросы для самопроверки
- •§7. Условный оператор и оператор выбора. Оператор перехода
- •Условный оператор if
- •Понятие составного оператора
- •Оператор выбора
- •Оператор перехода
- •Вопросы для самопроверки
- •§8. Операторы цикла
- •Циклы с заданным числом итераций
- •Циклы с предусловием
- •Циклы с постусловием
- •Вопросы для самопроверки
- •§9. Пример использования циклов
- •Вычисление факториала
- •Вычисление суммы по заданной формуле
- •Вычисление суммы по формуле с заданной точностью
- •Вычисление максимального элемента последовательности
- •Вычисление длины последовательности элементов
- •Вопросы для самопроверки
- •§10. Массивы
- •Описание массива
- •Обращение к элементам массива
- •Многомерные массивы
- •Допустимые операции с массивами
- •Инициализация массива
- •Вопросы для самопроверки
- •§11. Алгоритмы сортировки
- •Сортировка выбором
- •Сортировка вставкой
- •Пузырьковая сортировка
- •Улучшенные сортировки
- •Вопросы для самопроверки
- •§12. Строковый тип
- •Описание строковых переменных
- •Операции над строками
- •Процедуры и функции для работы со строками
- •Вопросы для самопроверки
- •§13. Записи
- •Объявление записи
- •Обращение к записям
- •Оператор присоединения with
- •Записи с вариантами
- •Инициализация записи
- •Вопросы для самопроверки
- •§14. Множества
- •Описание множеств
- •Операции над множествами
- •Пример использования множеств
- •Множества как типизированная константы
- •Вопросы для самопроверки
- •§15. Процедуры и функции
- •Понятие процедуры и функции
- •Структура процедуры
- •Структура функции
- •Формальные параметры
- •Глобальные и локальные объекты
- •Вопросы для самопроверки
- •§16. Модули
- •Понятие модуля
- •Стандартные модули в Турбо Паскаль
- •Подключение модулей
- •Структура модуля
- •Вопросы для самопроверки
- •§17. Файлы
- •Понятие файла
- •Процедуры и функции для работы с файлами
- •Понятие буфера ввода-вывода
- •Вопросы для самопроверки
- •§18. Типизированные файлы
- •Описание типизированных файлов
- •Операции над типизированными файлами
- •Последовательный и прямой доступ
- •Вопросы для самопроверки
- •§20. Текстовые файлы
- •Описание типизированных файлов
- •Чтение и запись
- •Конец строки и конец файла
- •Дополнительные процедуры для работы с текстовыми файлами
- •Файлы Input и Output
- •Вопросы для самопроверки
- •§21. Ссылки и указатели
- •Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Выделение и освобождение динамической памяти
- •Вопросы для самопроверки
- •Рекомендуемая литература
- •Технология программирования
- •625000, Тюмень, ул. Володарского, 38
- •625039, Тюмень, ул. Киевская, 52
Вопросы для самопроверки
1. Опишите принцип работы оператора For.
2. В каких случаях в цикле for используется ключевое слово Downto?
3. Может ли в цикле For использоваться счетчик типа Real? Byte? Char?
4. Назовите 3 основных отличия оператора цикла Repeat от оператора цикла While.
5. Сколько раз выполнится тело следующего цикла: x:=3; while x<5 do inc(x); ?
§9. Пример использования циклов
В данном параграфе рассмотрим несколько типовых задач, которые можно решить с использованием рассмотренных ранее операторов циклов.
Для лучшего усвоения материала рекомендуется самостоятельно «прорешать» представленные примеры (возьмите лист бумаги и карандаш, посмотрите, на каком шаге какие значения в какие переменные будут попадать и что программа напечатает на экране).
Вычисление факториала
Пользователь вводит целое положительное число N. Вычислить факториал от N.
Факториал целого числа N (обозначается N!) – это произведение всех целых чисел в диапазоне от 1 до N включительно. Исключение: факториал 0 равен 1.
Пример: 4! = 1*2*3*4 = 24
Другими словами, задачу можно перефразировать следующим образом: пользователь вводит целое положительное число N. Вычислить произведение целых чисел от 1 до N.
Для решения такой задачи наиболее подходящим будет цикл for, т.к. нам заранее известно количество повторений: от 1 до N, т.е. N раз.
Исходный текст программы в нашем случае будет выглядеть следующим образом.
Пример:
var
N: integer; {число, которое вводит пользователь}
F: integer; {сюда будем вычислять факториал}
i: integer; {счетчик для цикла}
begin
writeln(‘Вычисление факториала N!’);
writeln(‘Введите число N:’);
readln(N);
F:=1; {задаем стартовое значение – инициализируем}
for i:=1 to N do F:=F*i; {в этом цикле и вычисляется факториал}
writeln(N, ‘!=’, F); {печатаем на экране результат}
end.
Суть алгоритма следующая: сначала в переменную F записываем единицу, а затем на каждом шаге домножаем его на новый элемент: на 2, на 3, и т.д., пока не дойдем до N. Для этого используем счетчик i, который внутри цикла for будет как раз принимать значения 1, 2, 3 и т.д. до N (см. начальное и конечное значение). В конце программы не забываем вывести результат на экран.
Вычисление суммы по заданной формуле
Пользователь вводит целое положительное число N. Вычислить сумму .
Данная задача аналогична предыдущей. Заводим дополнительную переменную Sum и на каждом шаге цикла добавляем в нее новый элемент – 1/i. Основное отличие – при инициализации в Sum запишем 0, т.к. в данном случае мы имеем дело с суммой, а не с произведением.
Пример:
var
N: integer; {число, которое вводит пользователь}
Sum: integer; {сюда будем считать сумму}
i: integer; {счетчик для цикла}
begin
writeln(‘Введите число N:’);
readln(N);
Sum:=0; {задаем стартовое значение – инициализируем}
for i:=1 to N do Sum:=Sum+1/i;
writeln(‘Sum=’, Sum); {печатаем на экране результат}
end.
Вычисление суммы по формуле с заданной точностью
Пользователь вводит вещественное число x (модуль меньше 1) и точность вычислений eps (от 0 до 1). Вычислить сумму с заданной точностью.
В этой задаче уже не удастся использовать цикл for, т.к. мы не знаем, на каком именно шаге будет достигнута заданная точность. Поэтому здесь воспользуемся циклом repeat. Будем считать, что точность достигнута, если очередной элемент будет меньше по модулю, чем заданная точность eps.
Пример:
var
x: real; {число, которое вводит пользователь}
xx: real; {в этой переменной будем хранить x в нужной степени}
eps: real; {точность, которую вводит пользователь}
Sum: integer; {сюда будем считать сумму}
i: integer; {счетчик}
begin
writeln(‘Введите число x (<1):’);
readln(x);
writeln(‘Введите точность вычислений (<1):’);
readln(eps);
Sum:=0; {задаем стартовое значение – инициализируем}
xx:=1; {задаем стартовое значение – инициализируем}
repeat
xx:=xx*x; {т.к. степень у x отличается от предыдущего шага
всего на 1, то можно сделать и так}
Sum:=Sum+xx/(i+1); {добавляем новый элемент к сумме}
until abs(xx/(i+1))<eps; {повторяем цикл, пока не получим точность}
writeln(‘Sum=’, Sum); {печатаем на экране результат}
end.
Обратите внимание на переменную xx: чтобы на каждом шаге заново не возводить x в степень, мы просто запоминаем это значение с предыдущего шага и домножаем его еще раз на x (т.е., x5 = x4 * x).