
- •Министерство образования российской федерации
- •Содержание
- •Алгоритмизация вычислительных процессов.
- •Основные определения и понятия.
- •Средства изображения алгоритмов.
- •Базовые канонические структуры алгоритмов.
- •1)Следование
- •2) Развилка
- •3)Повторение
- •Вопросы к главе 1.
- •Введение в Турбо Паскаль.
- •Общая характеристика языка Паскаль.
- •Основные понятия языка Турбо Паскаль.
- •Алфавит языка.
- •Элементарные конструкции.
- •Типы данных.
- •Операторы языка Паскаль.
- •Оператор присваивания.
- •Оператор перехода. Пустой оператор. Составной оператор.
- •Условный оператор.
- •Оператор выбора.
- •Операторы цикла.
- •Var X: real; {аргумент }
- •If not fl then Writeln(‘ нет чисел на 3‘);
- •Вопросы к главе 2.
- •Структурированные типы данных.
- •Свойства множеств.
- •Операции над множествами.
- •If fl then writeln('идентификатор')
- •Описание записи (record).
- •Оператор присоединения.
- •Запись с вариантами.
- •Вопросы к главе 3.
- •Использование подпрограмм в Турбо Паскале.
- •Структура программы на языке Паскаль.
- •Описание и вызов процедур.
- •Описание функции.
- •Формальные и фактические параметры.
- •Параметры-значения.
- •Параметры-переменные.
- •Var r:tvect; {результат - вектор}
- •Var k:byte); {длина полученного вектора}
- •Параметры-константы.
- •Параметры-процедуры и параметры-функции.
- •Область действия имен.
- •Процедуры и функции без параметров.
- •Рекурсивные процедуры и функции.
- •Предварительно-определенные процедуры.
- •Модули.
- •Вопросы к главе 4.
- •Стандартные процедуры и функции.
- •Математические функции.
- •Функции округления и преобразования типов.
- •Функции порядкового типа.
- •Процедуры порядкового типа.
- •Строковые функции.
- •Строковые процедуры.
- •Прочие процедуры и функции.
- •Процедуры ввода данных.
- •Процедуры вывода данных.
- •Особенности вывода вещественных значений.
- •Вопросы к главе 5.
- •Работа с файлами.
- •Общие сведения о файлах.
- •Процедуры и функции для работы с файлами.
- •Особенности обработки типизированных файлов.
- •Особенности обработки текстовых файлов.
- •Файлы без типа.
- •Проектирование программ по структурам данных
- •Работа с файлами при обработке экономической информации
- •Постановка задачи.
- •Проектирование программы.
- •Кодирование программы.
- •Вопросы к главе 6.
- •Динамическая память.
- •Указатель.
- •Стандартные процедуры размещения и освобождения динамической памяти.
- •Стандартные функции обработки динамической памяти.
- •Примеры и задачи.
- •Работа с динамическими массивами.
- •Организация списков.
- •Задачи включения элемента в линейный однонаправленный список без головного элемента.
- •Формирование пустого списка.
- •Формирование очередного элемента списка.
- •Подсчет числа элементов списка.
- •Вставка элемента в начало списка.
- •Включение элемента в конец списка.
- •Включение в середину (после I-ого элемента).
- •Задачи на удаление элементов из линейного однонаправленного списка без головного элемента.
- •Удаление элемента из начала списка.
- •Удаление элемента из конца списка.
- •Удаление элемента из середины списка (I-ого элемента).
- •Удаление всего списка с освобождением памяти.
- •Задачи на замену элементов в линейном однонаправленном списке без головного элемента.
- •Стеки, деки, очереди.
- •Использование рекурсии при работе со списками.
- •Бинарные деревья.
- •Действия с бинарными деревьями.
- •Построение бинарного дерева.
- •Решение задач работы с бинарным деревом.
- •Вопросы к главе 7.
- •Основные принципы структурного программирования.
- •Понятие жизненного цикла программного продукта
- •Основные принципы структурной методологии.
- •Структурное кодирование.
- •Модульное программирование.
- •Вопросы к главе 8.
- •Список литературы
Var X: real; {аргумент }
EPS: real; {точность вычисления }
Y0: real; {предыдущее приближение}
Y1: real; {очередное приближение }
A: real; {начальное приближение }
Begin
Readln( A,EPS,X);
If X>0 then
Begin
Y0:=A;
Y1:=(Y0+X/Y0)/2;
While abs(Y1-Y0)>EPS do
Begin
Y0:=Y1;
Y1:=(Y0+X/Y0)/2
End;
Writeln(‘Y1=’,Y1,’ при X=’,X)
End
Else
Writeln(‘Число ’, X, ' меньше нуля');
End.
Оператор цикла с постусловием:
REPEAT
< оператор 1 > [;
< оператор 2 >] [;
…
< оператор n >]
UNTIL <логическое выражение>;
Данная конструкция оператора цикла используется, если число повторений цикла заранее неизвестно, но известно условие выхода из цикла. Управляющее циклом логическое выражение является условием выхода из цикла. Если оно принимает значение TRUE, то выполнение цикла прекращается. При использовании оператораREPEATцикл выполняется хотя бы один раз. В отличие от других операторов цикла оператор данного вида не требует операторных скобокBEGIN - END, так как их роль выполняютREPEAT - UNTIL.
Вычисление F=N!с использованием конструкцииREPEAT – UNTIL будет выглядеть следующим образом:
. . .
F:=1;
I:=1;
Repeat
F:=F*I;
I:=I+1;
Until I>N;
. . .
Рассмотрим другой пример использования этого оператора. Вводится последовательность чисел. Определить количество элементов кратных 7.
Program rep;
Var A,K: integer;
C : char;
Begin
K:=0;
Repeat
Writeln(‘ Введите очередное число ‘);
Readln( A);
If A mod 7=0 then K:=K+1;
Writeln(‘Хотите выйти из цикла? д/y’ );
Readln( C ) ;
Until ( C=’д‘ ) or ( C=’y’) ;
Writeln(‘kol=’,K);
End.
Здесь условием выхода из цикла является ввод символов Д илиYпри ответе на вопрос о выходе из цикла. Если вводится одна из этих букв, логическое выражение, записанное послеUNTIL,становитсяTRUEи происходит выход из цикла.
В следующем примере требуется поменять местами максимальный и минимальный элементы, найденные среди элементов четных строк матрицы А(M,N).
Program Obmen;
Var A: array[1..30,1..30] of integer;
I,J : integer;
K1,L1,K2,L2 : integer;
T,M,N: integer;
Begin
Readln(M,N);
For I:=1 to M do
For J:=1 to N do
Readln( A[I,J]);
K1:=1;L1:=1; {координаты максимального элемента}
K2:=1;L2:=1; {координаты минимального элемента}
I:=2;
While I<=M do
Begin
For J:=1 to N do
If A[K1, L1]< A[I,J] then
Begin
K1:=I;L1:=J;
End
еlse
If A[K2, L2]> A[I,J] then
Begin
K2:=I;L2:=J;
End;
I:=I+2;
End;
T:= A[K1, L1];
A[K1, L1]:= A[K2, L2];
A[K2, L2]:=T;
For I:=1 to M do
Begin
For J:=1 to N do
Write ( A[I,J] :6);
Writeln ;
End;
End.
Здесь используется циклWHILEдля индексации строк, т.к. нас интересуют только четные строки, следовательно, шаг для строк должен быть равен 2. В циклеFORэтого сделать нельзя.
В языке Турбо Паскаль 7.0 имеются процедуры BREAK иCONTINUE. Эти процедуры могут использоваться только внутри цикловFOR, WHILE илиREPEAT. ПроцедураBREAKпрерывает выполнение цикла и вызывает переход к оператору, следующему за циклом (может использоваться вместо оператораGOTO).ПроцедураCONTINUEосуществляет переход к следующему повторению цикла с пропуском последующих операторов тела цикла.
Например, необходимо определить номер первого элемента одномерного массива, оканчивающегося на 3.
Program Kon;
Var A:array [1.. 30] of integer;
FL: Boolean;
I,N: Integer;
Begin
Readln(N);
For I:=1 to N do
Readln( A[I] );
FL:=false;
For I:=1 to N do
Begin
If A[I] mod 10 <> 3 then Continue;
Writeln(‘Номер первого числа на 3 ’,I);
FL:=true;
Break;
End;