Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Разработка программ

.pdf
Скачиваний:
8
Добавлен:
02.05.2015
Размер:
440.75 Кб
Скачать

Разработка и анализ программ

Анализ программ

I Пример программы на Паскале II Структура программы

III Операторы присваивания, ввода, вывода IV Таблица трассировки

1.Программа на Паскале, которая вычисляет сумму двух целых чисел и выводит ее на экран.

1Program summa (input, output);

2var a,b,c: integer;

3begin

4read (a,b);

5c:=a+b;

6write (c);

7end.

Замечание. Колонка чисел слева от текста не является частью программы. Числа приведены просто для облегчения ссылок.

II. Любая программа на Паскале строится по правилам языка Паскаль и состоит из нескольких блоков (частей). Структура программы summa:

строка 1 заголовок программы строка 2 раздел описания переменных строки 3-7 раздел описания операторов

Заголовок программы сообщает, что имя программы summa. Это имя используется для ее идентификации.

Раздел описания переменных всегда начинается со слова var и описывает элементы внутренних данных, требующиеся в ходе выполнения программы. Чтобы компьютер выполнил вычисления, информацию необходимо поместить в память компьютера. Для этой цели отводятся специальные ячейки памяти, которым в разделе описания переменных даются имена. В данном случае таких элементов три; их имена a, b, c. Хранимые значения обычно изменяются в ходе выполнения программы, в силу чего эти элементы данных называются переменными. Переменную можно сравнить с классной доской: ее значение можно ”читать”

1

столько раз, сколько пожелаешь, ее можно стереть и на том же месте написать другое значение. Повторная запись приводит к тому, что прежнее значение теряется.

Явное именование переменных в начале программы называется описанием переменных, отсюда и название части программы. Все переменные в программе должны быть описаны.

Слово integer (целочисленный) в конце строки 2 сопоставляет тип данных переменным a,b,c. При сопоставлении типа данных элементам данных подразумевается, что

1.Значение, которое имеет элемент данных, должен находиться внутри определенного диапазона значений;

2.Операции, которые могут выполняться с элементами данных, могут относиться только к определенному набору операций.

Для типа integer диапазон значений – это диапазон целых чисел, представимых в процессоре от –32768 до +32767. Что же касается операций, то их набор для целочисленных значений в стандартном Паскале включает сложение (+), вычитание (-), умножение (*), целочисленное деление (div), деление по модулю (остаток от деления нацело) (mod).

Раздел операторов содержит команды, которые описывают процесс, подлежайший выполнению. Каждая команда называется оператором, и весь процесс описывается последовательностью операторов, начинающихся словом begin («начало») и заканчиввающихся словом end («конец»). Выполняя операторы один за другим, процессор производит требующиеся вычисления.

В начале каждого процесса переменным должны быть присвоены конкретные значения. Это можно сделать при помощи операторов ввода и присваивания.

Оператор в строке 4 read(a,b) называется оператором ввода (чтения). Общий вид оператора: read(а1, а2, ..., аn), где а1, а2, ..., аn - имена переменных, которым последовательно присваиваются вводимые с клавиатуры значения.

Выполнение оператора read происходит следующим обра-

зом:

программа приостанавливает работу и ждет ввода значений

2

переменных. Если в операторе указано две и более переменных, то набирать их значения на клавиатуре необходимо через пробел и затем заканчивать ввод нажатием клавиши Enter, либо после набора каждого значения нажимать клавишу Enter.

введенные значения присваиваются переменным в том порядке, в каком они были указаны в операторе.

Оператор в строке 5 c:=a+b называется оператором присва-

ивания. Общий вид оператора: V := A, где V – имя переменной, := – знак присваивания, А – выражение (типы переменной и выражения должны совпадать!). В общем случае выражение представляет собой совокупность переменных и других объектов, соединенных знаками операций. В случае арифметического выражения операции выполняются в соответствии со старшинством слева направо, аналогично математике. Если необходимо изменить естественный порядок вычислений, используются скобки.

Выполнение оператора присваивания:

вычисляется значение выражения А.

вычисленное значение записывается в переменную V (при этом старое значение переменной затирается).

Оператор в строке 6 write(c) называется оператором вывода

(записи). Общий вид оператора: write(а1, а2, ..., аn), где а1, а2, ..., аn – имена переменных, строки символов, выражения.

Выполнение оператора write заключается в выводе на экран указанных в операторе значений переменных, строк символов, значения выражений вычисляются и также выводятся на экран.

IV. Отображение (на бумаге или на экране) того, что происходит при выполнении каждой строки из раздела операторов, называется трассировкой программы.

Трассировку программы удобно выполнять в таблице трассировки. Структура таблицы:

в первой колонке записываются номера строк, соответствующие операторам, и именно в том порядке , в каком они ыполняются;

во второй колонке записываются пометки о входах и выходах в различные части программы и о других факторах, влияющих

3

на то, какой оператор будет выполняться следующим. Эти сведения называются информацией об управлении. В этой же колонке показываются порождаемые результаты.

каждая из остальных колонок соответствует переменной программы и используется для прослеживания значений этой переменной по ходу выполнения.

Таблица трассировки программы summa.

Входные данные: 4 7.

Строка

Ход выполнения

a

b

c

3

вход в summa

?

?

?

4

 

4

17

 

5

 

 

 

21

6

вывод: 21

 

 

 

7

выход из summa

 

 

 

Результаты: 21 При входе в программу (строка 3) переменные уже созданы,

но еще не приобрели своих значений (не определены), этот факт отражается в таблице трассировки вопросительными знаками в соответствующих колонках. Выполнение оператора ввода read(a, b) в строке 4 привело к тому, что переменные a и b приобрели соответственно значения 4 и 17, а выполнение оператора присваивания в строке 5 - к вычислению выражения и присваиванию переменной значения 21. Оператор в строке 6 приводит к выводу на экран числа 21, а достижение строки 7 означает выход из программы. Так как мы выходим из программы, элементы данных, которые существовали в ходе ее выполнения, разрушаются, и единственным свидетельством того, что программа выполнена, остается результат, порожденный строкой 7. Разрушение элементов данных показано в таблице трассировки завершением соответствующих колонок.

Программа 1

1Program Account1(input, output);

{Расчет суммы оплаты за приобретенные товары}

4

2var postage, number, price, cost: integer;

{postage – почтовые расходы, number – количество товара, price – цена за единицу товара, cost – стоимость партии }

3begin

4postage := 5; {Оператор присваивания}

5read(number, price); {Ввод данных}

6cost := number * price; {Оператор присваивания}

7cost := cost + postage; {Оператор присваивания}

8write(cost); {Печать результатов}

9end.

Трассировка программы

Ход выполнения

postage

number

price

cost

 

 

 

 

 

 

3

Вход в Account1

?

?

?

?

4

 

5

 

 

 

5

 

 

7

10

 

6

 

 

 

 

70

7

 

 

 

 

75

8

Печать cost (75)

 

 

 

 

9

Выход из Account1

 

 

 

 

Построение (разработка) программ

I Спецификация

II Метод пошагового уточнения (нисходящее проектирование) III Пример разработки программы. Таблица разработки.

I. Для того, чтобы начать писать программу, необходимо знать:назначение программы - точная, подробная формулировка за-

5

дачи;

какую информацию программа будет получать в качестве входных данных;

какую информацию программа должна вырабатывать в каче-

стве выходных данных (результата).

Эти сведения составляют спецификацию программы и полностью определяют, что она должна делатть.

Процесс разработки программы состоит в преобразовании спецификации в программу путем пошаговой детализации, на каждом этапе которой определенная часть программы приобретает более развернутый вид, и называется методом пошагового уточнения (нисходящее проектирование, метод разработки сверху вниз).

В общем случае, процесс начинается с выделения наиболее общих шагов (составление общей схемы программы). В частности, общую схему любой программы можно представить в виде трех последовательно выполняемых шагов (задач):

1.Ввод входных данных.

2.Решение поставленной задачи.

3.Вывод результатов.

Далее достаточно сложные шаги, решение которых не очевидно, детализируются - разбиваются на более мелкие шаги. В ходе детализации по мере необходимости вводятся в употребление новые переменные. Процесс продолжается до тех пор, пока каждый из выделенных шагов (блоков) программы не окажется настолько простым, что его реализация на языке программирования уже не вызывает трудностей.

Процесс разработки программы методом пошаговой детализации оформляется в виде таблицы, учитывая следующие правила:

каждый раздел таблицы соответствует одному из этапов детализации;

символ означает «превращается в»,

если какое-либо предложение или выражение можно сразу записать на Паскале, оно так и записывается, без предваритель-

6

ной формулировки;

если вводятся в употребление новые переменные, они перечисляются в графе “Примечания”.

Пример разработки программы.

Задача: Дан радиус окружности. Найти ее длину. Спецификация

1.Дан радиус окружности. Составить программу для вычисления длины окружности по формуле L=2 r.

2.Входные данные: (вещественное число, радиус окружности), например 5.0

3.Выходные данные: (вещественное число, длина окружности), для данных п.2 - 31.415.

Таблица разработки.

 

 

Шаги разработки

Примечания

work1

 

 

 

 

 

begin

 

 

ввод входных данных

 

 

вычисление значения выражения

 

 

вывод результата

 

 

end

 

 

ввод входных данных

переменная r: real

 

(радиус

окружно-

read (r)

сти)

 

Вычисление значения выражения

переменная L: real

 

(длина

окружно-

L:=2*pi*r;

сти), pi=3.1415926

вывод результата

 

 

 

 

 

write (L)

 

 

work1

 

 

 

 

 

begin

 

 

read (r);

 

 

L:=2*3.1415*r;

 

 

7

Шаги разработки

Примечания

write (L)

 

end

 

Текст программы

1Program work1;

2Const pi=3.1415926;

3var r,L: real;

4begin

5read ( r );

6L:=2*Pi*r;

7write (L)

8end.

Таблица трассировки Входные данные: 5

Строка

Ход выполнения

r

L

4

вход в work1

?

?

5

 

5

 

6

 

 

31.415

7

вывод: 31.415

 

 

8

выход из work1

 

 

Результат: 31.415 Замечание.

1.При выполнении математических вычислений входные данные и результат являются обычно действительными числами. Для этой цели в Паскале имеется вещественный тип real. Вещественные числа в Паскале могут записываться в формате с фиксированной запятой, например, 3.1415926, или с плаваю-

щей 0.31415926e1, где 0.31415926 называется мантисой, а 1 –

порядок (e1 означает умножить на 101). Для вещественных чисел определены операции сложения (+), вычитания (-), умножения (*) и деления (/).

2.Число 3.1415926 постоянно и не изменяется в программе. Оно будет одинаково при каждом выполнении программы независимо от входных данных. Поэтому оно вводится как константа с именем pi. Так же как и переменная, константа – это элемент

8

данных, который во время выполнения занимает место в памяти программы. Различие состоит в том, что хранимое значение на протяжении выполнения программы в этом случае неизменно. В разделе описания констант, которое начинается со слова const и которое всегда должно предшествовать разделу описания переменных, в общем случае вводится несколько констант. Константа всегда характеризуется каким-либо связанным с ним типом данных. Тип данных определяется значением, которое придается константе.

Последовательное выполнение. Разветвление.

I Составной оператор.

II Условный оператор (оператор выбора).

IIIПример таблицы трассировки программы с разветвлением.

I. Все операторы в программе summa выполнялись последовательно, один за другим. Языковое средство, обеспечивающее последовательное выполнение в Паскале, называется составным оператором. Общий вид:

begin

S1;

S2;

...

SN; end

где begin (начало) и end (конец) - служебные слова, так называе-

мые операторные скобки, S1, S2, ..., SN - операторы.

 

 

Любая последовательность операторов, объ-

 

 

 

 

единенная в составной оператор, представляет со-

S1

бой единый, один оператор. Кстати, раздел описа-

 

 

 

 

 

 

ния операторов также представляет собой один со-

S2

ставной оператор. Схема алгоритма, реализующего

 

 

 

 

 

 

рассматриваемую последовательность, представле-

 

 

 

 

на на рис. 1.

 

 

 

 

II. Условный оператор (оператор выбора) осу-

SN

ществляет выбор из двух возможностей.

 

 

 

 

Общий вид:

 

 

9

 

 

А) полная форма -

if U then S1 else S2;

Б) сокращенная форма -

if U then S1;

где if (если), then (то), else (иначе) - служебные слова, U - логическое выражение, управляющее выбором, S1,S2 - операторы.

В качестве логических выражений обычно используются отношения. В Паскале предусмотрены следующие операции сравнения: = (равно), <> (не равно), < (меньше), <= (меньше или равно), > (больше), >= (больше или равно).

Выполнение условного оператора (полная форма):

1.вычисляется значение логичесчкого выражения U

2.если U = True , то выполняется оператор S1, а оператор S2 пропускается

3.если U= False, то оператор S1 пропускается и выполняется S2.

Выполнение условного оператора (сокращенная форма):

1.вычисляется значение логического выражения U

2.если U = True , то оператор S1 выполняется

3.если U = False, то оператор S1 пропускается.

Схема алгоритма с условным оператором (полная форма) представлена на рис. 2.

Операторы S1 и S2 могут быть любыми, в том числе и условными - вложенными в главный условный оператор, напри-

мер:

 

 

if U1

then

 

if U2

then S1

else

if U3

then S2

else S3

Такие вложения на практике

 

 

 

 

 

 

редко применяются из-за того, что

U

Нет (FALSE)

конструкция становится громозд-

 

 

 

кой, тем более, что сложные усло-

 

Да (TRUE)

 

вия можно строить с помощью

 

 

сложных

логических

выражений.

 

 

 

 

 

 

 

 

 

 

 

 

Также в Паскале есть оператор вы-

S1

 

S2

бора из

множества

альтернатив

 

 

 

 

 

 

 

 

 

 

 

 

(Case).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

III. Пример трассировки програм10