Смекни!
smekni.com

Курс лекций по основам программирования Учебно-методическое пособие (стр. 6 из 9)

б)Цикл с постусловием ( или цикл "после" )

в 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 ( < список вводимых переменных > ) ;

LnLine – перевод курсора на другую строку.

в 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

Организация сложного типа позволяет создавать собственные типы данных, соответствующие типам данных в реальных задачах. Собственные типы данных предназначены для организации в программе данных, представляющих собой единое целое в виде иерархической структуры.