- •Оглавление
- •§1. Первое знакомство с системой программирования Турбо Паскаль
- •§2. Основные элементы языка
- •§3. Команды редактора Команды управления движением курсора
- •§4. Первая программа
- •Пояснения к программе
- •Запуск программы
- •Сохранение программы
- •§5. Управление позициями и цветом вывода
- •§6. Арифметический квадрат.Абсолютная величина
- •§7. Типы данных
- •§8. Целый тип данных
- •Пример 6
- •Пример 7
- •Пример 8
- •§9. Вещественный тип данных
- •Пример 7
- •Пример 8
- •§10. Логический тип данных
- •§11. Условный оператор
- •Пример 1
- •Пример 2
- •Решение
- •§12. Оператор безусловного перехода. Раздел описания меток
- •§13. Вложенные условные операторы
- •Решение
- •Задание
- •Решение задач Задача 1
- •Задача 8
- •Задача 9
- •Задача 10
- •§14. Цикл с параметром
- •Пример 1
- •Пример 2
- •Пример 3
- •§15. Работа с окнами. Метод пошагового выполнения программ
- •§16. Решение задач с использованием цикла с параметром Задача 1
- •Решение
- •Задача 2.
- •§17. Цикл с предусловием
- •Оператор цикла с предусловием
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •§18. Цикл с постусловием
- •Пример 1
- •Решение
- •Пример 2
- •§19. Алгоритм Евклида
- •§20. Вложенные циклы Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Пример 4
- •Решение
- •Пример 5
- •§21. Решение задач с использованием циклов с условием Задача 1
- •Решение
- •Задача 2
- •§22. Символьный тип данных
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •§23. Ограниченный тип данных
- •Var b:3..8; а не просто Vаг b:Integer;
- •Решение
- •§24. Оператор варианта (выбора)
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Пример 4
- •§25. Перечисляемый тип данных
- •§26. Описание переменных, констант и типов. Раздел описания констант
- •Раздел описания типов
- •§27. Преобразование типов. Совместимость типов
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение.
- •§28. Процедуры
- •Описание процедуры
- •Решение
- •Begin {основная программа}
- •Пример 2
- •Решение
- •Пример 3
- •§29. Функции
- •Пример 1
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •§30. Примеры рекурсивного программирования
- •Задачи с рекурсивной формулировкой
- •Пример 3
- •Задачи, которые можно решить как частный случай обобщенной
- •Задание
- •Задачи, в которых можно использовать характеристику или свойство функции Пример
- •Решение
- •§31. Файловый тип данных Операции для работы с файлами последовательного доступа
- •§32. Обработка файлов Связь переменной файлового типа с файлом на диске
- •Чтение из файла
- •Закрытие файла
- •Признак конца файла
- •Запись в файл
- •§33. Прямой доступ к элементам файла
- •Удаление файлов. Процедура
- •Переименование файлов. Процедура
- •Пример 2
- •§34. Текстовые файлы
- •Обработка текстовых файлов
- •Пример 1
- •Решение
- •Пример 2
- •Нетипизированные файлы
- •§35. Одномерные массивы. Работа с элементами(разбор на примерах) Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Begin {Считываем очередную строку}
- •§36. Работа с элементами массива (разбор на примерах)
- •Пример 2
- •§37. Методы работы с элементами одномерного массива
- •Создание массива
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Работа с несколькими массивами Пример
- •Решение
- •§38. Удаление элементов из одномерного массива Пример 1
- •Решение
- •Begin {Сдвиг элементов на один влево}
- •Пример 2
- •Решение
- •§39. Вставка элементов в одномерный массив
- •Вставка нескольких элементов
- •Решение
- •§40. Перестановки элементов массива
- •§41. Двухмерные массивы Описание. Работа с элементами
- •§42. Найти сумму элементов
- •Решение
- •§43.Нахождение количества элементов с данным свойством
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •§44. Работа с несколькими массивами Пример
- •Решение
- •§45. Определить, отвечает ли заданный массив некоторым требованиям Пример 1
- •Решение
- •Пример 2
- •Решение
- •§46. Изменение значений некоторых элементов, обладающих заданным
- •§47. Заполнение двухмерного массива по правилу
- •Пример 2
- •Решение
- •§48. Вставка и удаление элементов Вставка строки
- •Решение
- •Примечания
- •Удаление строки Пример
- •Решение
- •Примечания
- •§49. Перестановка элементов массива Перестановка двух элементов Пример 1
- •Решение
- •Пример 2
- •§50. Строковый тип данных
- •Операции со строками
- •Склеивание
- •Сравнение
- •Примеры
- •Пример 8
- •Пример 9
- •Пример 10
- •§51. Множественный тип данных
- •Операции над множествами
- •Примеры
- •Сравнение множеств
- •Пример 1
- •Пример 2
- •Вопросы для обсуждения
- •Пример 3
- •Вопросы для обсуждения
- •Пример 4
- •Решение
- •Пример 5
- •Решение
- •§52. Комбинированный тип данных (записи)
- •Пример 1
- •Пример 2
- •Пример 3
- •Решение
§18. Цикл с постусловием
Для программной реализации циклических алгоритмов с неизвестным заранее числом повторений имеется еще один оператор − оператор цикла с постусловием, который имеет следующий вид:
Оператор цикла с постуславием
Repeat (повторять}
<оператор 1>;
<оператор 2>;
……………
<оператор n>;
Until {до тех пор, пока не} <условие>;
Этот оператор отличается от цикла с предусловием тем, что проверка условия производится после очередного выполнения тела цикла. Это обеспечивает выполнение цикла хотя бы один раз.
Обратите внимание на то, что данный оператор цикла предполагает наличие нескольких операторов в теле цикла, поэтому служебные слова Begin и End не нужны.
Последовательность операторов, входящих в тело цикла, выполняется один раз, после чего проверяется соблюдение условия, записанного следом за служебным словом Until. Если условие соблюдается, цикл завершается. В противном случае тело цикла выполняется еще раз, после чего снова проверяется соблюдение условия.
С помощью процедуры KeyPressed модуля CRT и цикла с постусловием можно организовать ожидание нажатия любой клавиши:
Repeat Until KeyPressed.
Пример 1
Составить программу планирования закупки товара в магазине на сумму, не превышающую заданной величины.
Решение
Обозначим через х и k цену и количество товара, через р − заданную предельную сумму, через s − стоимость покупки. Начальное значение общей стоимости покупки s равно нулю. Значение предельной суммы считывается с клавиатуры. Необходимо повторять запрос цены и количества выбранного товара, вычислять его стоимость, суммировать ее с общей стоимостью и выводить результат на экран до тех пор, пока стоимость не превысит предельной суммы р.
Program Example_47;
Var x, k, p, s: Integer;
Begin
Writeln('Предельная сумма');
Readln(p);
s:=0;
Repeat
Writeln('Введите цену товара и его
количество');
Readln(x, k);
s:=s+x*k;
Writeln('Стоимость покупки равна ',s);
Until s>p;
Writeln('Суммарная стоимость покупки
превысила предельную сумму');
End.
Пример 2
Дано х, принадлежащее интервалу от -1 до 1. Составить программу вычисления частичной суммы ряда х-(х2/2)+(х3/3-… с заданной точностью е. Нужная точность считается полученной, если очередное слагаемое оказалось по модулю меньше, чем е (это и все последующие слагаемые учитывать не надо).
Program Example_48;
Var x, st, sl, у, e: Real;
n, z: Integer;
Begin
Write('Введите х, принадлежащее
(-1,1)');
Readln(х);
Write('Введите погрешность
вычисления ');
Readln(е);
у:=0; n:=1; z:=1; st:=x; sl:=x;
Repeat
Inc(y, z*sl); Inc (n); z:=-z;
st:=st*x; sl:=st/n;
Until sl<e;
Writeln(y);
Readln;
End.
§19. Алгоритм Евклида
Алгоритм Евклида это алгоритм нахождения наибольшего общего делителя (НОД) двух целых неотрицательных чисел.
Пусть х и y одновременно не равные нулю целые неотрицательные числа, и пусть x>y. Если y=0, то НОД(х, у)=х, а если y0, то для чисел х, y и r, где r − остаток от деления x на y, выполняется равенство НОД(х,y)=НОД(x,r).
Например, пусть х=48, а у=18.
НОД(48,18)=НОД(18,12)=НОД(12,6)=
НОД(6,0)=6.
Пример 1
Написать программу нахождения наибольшего общего делителя двух неотрицательных чисел.
Решение
Для решения данной задачи воспользуемся циклом с постусловием:
Program Example_49;
Var x, у: Integer;
Begin
Writeln('Введите два числа');
Readln(х,у);
Repeat {выполнять}
If x>y Then x:=x mod у Else y:=y mod х;
Until (x=0) or (y=0);
{до тех пор, пока одно из чисел не
станет равно нулю}
Writeln('НОД=', х+у); {вывод НОД.
Одно из чисел обязательно равно нулю}
Readln;
End.
Пример 2
Даны натуральные числа х и у, не равные нулю одновременно. Найти d=НОД(х, у) и такие целые q и w, что d=q*x+w*y.
Решение
Введем переменные р, q, r, s, m и n, такие, что m=p*a+q*b, n=r*a+s*b. Первоначально m=a=x, n=b=y.
Program Example_50;
Var x, y: Integer; {исходные данные}
p, q, r, s, m, n: Integer;
{введенные вспомогательные переменные}
к: Integer;
{для изменения значений P, q, r, s}
d: Integer;
{значение наибольшего общего делителя}
Begin
Read(x, у);
m:=x; n:=y; р:=1; q:=0; r:=0; s:=1;
Repeat
If m>n Then
Begin
k:=m div n; m:=m mod n;
p:=p-k*r; q:=q-k*s
End
Else Begin
k:=n div m; n:=n mod m; r:=r-k*p;
s:=s-k*q;
End;
Until (m=0) or (n=0);
If m=0 Then Begin d:=n; q:=r; w:=s; End
Else Begin d:=m; q:=p; w:=q; End;
Writeln(d, '=',q,'*',x,'+',w,'*',y);
End.
Значения переменных p, q, r, s изменяются следующим образом:
• как только значение переменной m уменьшается на k*n, значение р уменьшается на k*r, а q уменьшается на k*s;
• аналогично, как только значение n уменьшается на k*m, значения переменных r и s уменьшаются соответственно на k*p и на k*q.