б)Цикл с постусловием ( или цикл "после" )
в Basic: в Pascal:
DO Repeat
< оператор цикла> < операторы цикла> ;
LOOP UNTIL < условие> UNTIL < условие>;
в)Цикл с известным количеством повторений.
В операторе цикла присутствует так называемая управляющая переменная (УП). Это переменная, у которой имеются начальное и конечное значения (НЗ,КЗ), а так же шаг , с которым переменная изменяет свое значение от начального к конечному. Шаг может быть и положительным, и отрицательным. В Basic шаг может принимать любое значение, в Pascal’е может принимать значение либо +1 либо -1. Если шаг цикла положителен, то НЗ должно быть меньше или равно КЗ, при отрицательном шаге должно выполняться НЗ>=КЗ. Условием выхода из цикла является переход значения УП через КЗ. Ниже приведена блок-схема выполнения оператора цикла при положительном шаге.
в Basic:
FOR < упр. > = < н.з.> TO < к.з.> STEP < шаг >
< операторы цикла>
NEXT [ < упр. > ]
в Pascal:
1. FOR < упр. > := < н.з.> TO < к.з.> DO < оператор >;
2. FOR < упр. > := < н.з.> DOWNTO < к.з.> DO < оператор >;
3.4.5 Оператор безусловного перехода
Его назначение – передача управления некоторому оператору программы, который связан с оператором безусловного перехода меткой.
В блок-схемах оператору безусловного перехода соответствуют стрелки
Метка - это последовательность букв или цифр, после которой стоит двоеточие (и в Паскале, и в Бейсике).
в Pascal метки должны быть описаны в специальном разделе описаия:
Формат оператора:
в Basic: в Pascal:
GOTO < метка > GOTO < метка >;
Этот оператор довольно редко используется в программах, поскольку его использование не рекомендовано правилами структурного программирования, которых мы придерживаемся и о которых речь пойдет ниже.
3.4.6 Операторы ввода – вывода
Ввод – это операция перемещения данных в память компьютера с каких – либо внешних устройств.
Вывод – операция, обратная вводу.
в Basic:
INPUT [ <пояснительный текст> ] , <Список вводимых
переменных>
в Pascal: ( ввод – вывод процедура )
Read ( < список вводимых переменных > ) ;
либо
Readln ( < список вводимых переменных > ) ;
Ln – Line – перевод курсора на другую строку.
в Basic:
PRINT < список вводимых величин >
в Pascal:
Write ( < список вводимых величин > ) ;
либо
Writeln ( < список вводимых величин > ) ;
В Бейсике имеются некоторые возможности по форматированию выводимых данных, Если между двумя выводимыми величинами в Basic’е стоит пробел, то следующая величина выводится с новой строчки, если запятая, до данные выводятся на экран рядом, если точка с запятой, то между выводимыми величинами ставится несколько пробелов ( количесьво различно и зависит от длин выводимых данных ).
В Pascal’е также возможно форматирование выводов. Для целой и текстовой величины можно указать количество позиций, в которых она должна располагаться.
Writeln ( K : 7 , X : 10 : 3 ) ;
Для вещественной величины можно указать количество позиций для размещения всего числа и количество позиций для дробной части
3.5.Структура программного модуля.
1)Программный модуль строится в соответствии с правилами системы программирования и представляет собой наименьшую программную единицу.
2)Каждый модуль имеет единственную точку входа. В наших системах это первый исполняемый оператор.
3)Обычно модуль оформляется так, что окончание его работы (выход из модуля) осуществляется на последнем операторе.
Для этого в basic существует специальный оператор end, имеющий двойной смысл:
а) как описательный оператор (он объявляет об окончании текста программы);
б) как исполняемый оператор (он останавливает работу модуля и осуществляет выход из него).
Вместе с тем, в модулях возможна организация принудительного прекращения его работы (например, в аварийном случае). Для этого существуют операторы остановки ( операции выхода из модуля): в basic: STOP, в Паскале halt или exit.
4)Модуль хранится на диске в виде одного файла, т.е. модуль неделим.
Вместе с тем один программный файл может содержать несколько модулей.
5)Модуль, который мы записываем, называется главным или основным. Системы программирования имеют средства для создания модулей других типов, о чем речь пойдет ниже.
Правила составления основного модуля в basic достаточно просты. Операторы модуля в basic практически один в один соответствует блокам блок-смены, но:
1) операторы описания должны располагаться в модуле до 1-го использования описанных переменных или массивов в модуле.
2) оператор end последний и единственный.
В Паскале программный модуль состоит из двух частей
а) <описательная часть>
б) <исполнительная часть>
Описательная часть имеет собственную структуру. Обычно она начинается заголовком:
program <имя программы>;
После этого следует описание объектов. Из рассмотренных нами объектов таковыми являются переменные и метки.
Описание переменных начинается заголовком var (variable), за которым следует описание переменных (см. выше).
Описание меток имеет заголовок label, за которым следует список меток через запятую.
Исполнительная часть имеет следующую структуру:
Begin
<операторы модуля>
End.
Описательная часть в программе на Паскале может отсутствовать, например:
begin Writeln('Всем привет!') end.
4. Пример решения задач с модульным подходом.
Рабочие изготавливают различные изделия. Требуется рассчитать зарплату каждого рабочего, если в каждой заявке на выполнение работы он указывает собственный табельный номер, код изготовленных изделий, количество изготовленных изделий и код качества выполненной работы.
Если код качества равен 001, устанавливается надбавка в 50%, а с кодом 002- надбавка 25%. Имеется таблица соответствующих кодов изделий и их стоимостей (таблица расценок).
Контрольный пример:
Исходные данные:
Таблица заявок
Табельный код количество код
номер рабочего изделия изделий качества
777 005 10 1
101 005 5 3
777 004 5 1
111 003 15 2
101 003 10 3
Таблица расценок
Код изделия стоимость
001 7,5
003 10
004 15
005 10
Результат:
Ведомость по зарплате
Табельный номер зарплата
777 262,5
101 150
111 187,5
В самом общем виде алгоритм решения задачи можно описать следующим образом:
1)Подсчитать стоимость каждой заявки.
2)Суммировть стоимости заявок по одинаковым табельным номерам.
Структурно данные задачи представляют собой таблицы, где таблица- это совокупность массивов одинаковой длины, соответствующие элементы которой описывают некоторый объект. В данной задаче присутствуют две исходных таблицы (таблица заявок из четырех массивов и таблица расценок из двух массивов) и одна выходная таблица из двух массивов (ведомость по зарплате).
Описание исходных и выходных данных:
1. Исходные данные.
n- количество заявок
TABN(n)- табельные номера
KODI(n)- код изделия
KOLI(n)- количество изделий
KODk(n)- код качества работы
m-количество изделий в таблице расценок
KODIz(m)- код изделия
STI(m)- стоимость изделия
2. Выходные данные.
K- количество рабочих в ведомости по зарплате
TABNZ(k)-табличный номер рабочего в ведомости
Zarp(k)- зарплата рабочего
Программа на языке Бейсик
REM ведомость по зарплате
REM ввод исходных данных
INPUT "введите количество заявок и расценок";n,m
DIM TABN(n), KOD I(n), KOLI(n), KODK(n), STZ(n)
REM STZ(n) – промежуточный массив, стоимость заявки
DIM KODIZ(m), STI(m), TABNZ(n), ZARP(n)
FOR i=1 to n
PRINT "введите";i; "-ю заявку"
INPUT TABN(i), KOD I(i), KOL I(i), KOD K(i)
Next i
FOR i=1 to m
PRINT "введите";i; "-ю расценку"
INPUT KODIZ(i), STI(i)
Next i
REM Часть 1. Вычисление стоимости заявки
FOR i=1 to n
REM Поиск изделий в таблице расценок, p-признак поиска
p=0
FOR j=1 to m
IF KOD I(i)= KOD I Z(j) THEN p=j
NEXT j
IF p>0 THEN
REM вычисление стоимости заявки
ST Z(i)=ST I(p)*KOL I(i)
IF KOD K(i)=1 THEN ST Z(i)=0.5*ST Z(i)
IF KOD K(i)=2 THEN ST Z(i)=0.25*ST Z(i)
ELSE
PRINT «нет изделия с кодом»;KOD I(i)
STOP
END IF
NEXT i
REM Часть2. Подсчёт зарплаты
Рассмотрим подробнее алгоритм формирования ведомости по зарплате.
1) Табельный номер из заявок мы ищем в массиве табельных номеров из ведомости (даже если точно знаем, что их там ещё нет!)
2) Если мы не находим табельный номер в массиве TABNZ, то мы помещаем его в этот массив, а в соответствующий элемент ZARP помещаем стоимость заявки.
3) Если табельный номер найден в массиве TABNZ, то к соответствующему элементу в массиве ZARP прибавляем стоимость заявки.
REM подсчёт зарплаты
K=0 'Количество элементов
FOR i=1 to n
P=0 'признак поиска - не найден
FOR j=1 to k
IF TAB NZ(j)=TAB N(i) THEN p=j
NEXT j
IF p=0 THEN не найден
k=k+1
TAB NZ(k)= TAB N(i)
ZARP(k)=ST Z(i)
ELSE
ZARP(p)=ZARP(p)+STZ(i)
END IF
NEXT i
PRINT " Ведомость по зарплате"
PRINT "Табельный номер", "Зарплата"
FOR i=1 to k
PRINT TAB NZ(i), ZARP(i)
NEXT i
END
5. Сложные типы данных.
Сложным типом называется такой тип данного, в описании которого используются простые (или базовые) типы данных. Основные простые типы, которые мы знаем, это:
В Pascal: Integer, Real, String, Boolean.
В Basic: INTEGER, SINGLE, DOUBLE, STRING
Организация сложного типа позволяет создавать собственные типы данных, соответствующие типам данных в реальных задачах. Собственные типы данных предназначены для организации в программе данных, представляющих собой единое целое в виде иерархической структуры.