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

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

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

Министерство образования Российской Федерации Восточно-Сибирский государственный технологический университет

М.Ю. Кривошеин Информатика. Разработка и анализ программ

(Краткий конспект лекций и задания к лабораторным занятиям)

Улан-Удэ

2010

Интегрированная среда Турбо Паскаль.

Строка меню

• File – все основные операции с файламиNew – создание нового файла

Open... – открытие нового окна и загрузка в него выбранного файла –

F3

Save – сохранение на диске файла из активного окна – F2

Save as... – сохранение на диске файла из активного окна под другим именем

Exit – выход из среды Turbo Pascal – Alt+X

• Edit – все основные операции редактирования текста.

Undo – отмена всех изменений в текущей строке Alt+BackSpaceClear – удаление выделенного блока Ctrl+Del

Copy – копирование выделенного блока в буфер Ctrl+InsCut – перенос выделенного блока в буфер Shift+DelPaste – копирование блока из буфера – Shift+InsShow Clipboard – просмотр содержимого буфера

Search – поиск и замена фрагмента текста.Find... – поиск фрагмента текстаReplace... – замена текста

Search again – повторить предыдущий поиск

Go to line number – переход к строке с заданным номером

Run – запуск программы в рабочей зоне и ее пошаговое выполнение (трассировка)

Run – компиляция и выполнение программы – Ctrl+F9

Step over – трассировка программы пооператорно с выполнением подпрограмм без пооператорной детализации – F8

Trace into – трассировка программы пооператорно с пооператорным выполнением всех подпрограмм – F7

Go to cursor – выполнение программы, расположенной в активном окне, до позиции курсора – F4

Program reset – установка программного счетчика на начало про-

граммы – Ctrl+F2

• Compile – компиляция программы в рабочей зоне

Compile – компиляция программы из активного окна – Alt+F9Make – компиляция и редактировние связей программы – F9

• Debug – поиск ошибок в программе

Breakpoints – просмотр и задание точек остановаWatch – просмотр значений переменных

2

User screen – переключение на экран вывода программы – Alt+F5

Evaluate/modify... – изменение значений переменной – Ctrl+F4

Add Watch... – добавить имя переменной для отслеживания ее значе-

ния – Ctrl+F7

Add breakpoint... – добавить точку останова для текущей строки

Options – устанавливает необходимые для работы параметры компилятора

Window – основные операции с окнами

Size/move изменение размера и положения активного окна – Ctrl+F5Zoom – изменение (увеличение/уменьшение) размера активного окна

– F5

Next – переход к следующему окну – F6Previous – переход к предыдущему окну – Shift+F6Close – закрытие активного окна – Alt+F3

List – вызов списка активных окон – Alt+0

• Help – получение справочной информации

1. Программы с линейным алгоритмом

Программа 1

1 Program Account1(input, output);

{Расчет суммы оплаты за приобретенные товары} 2 var postage, number, price, cost: integer;

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

3 begin

 

4 postage := 5;

{Оператор присваивания}

5 read(number, price);

{Ввод данных}

6 cost := number * price;

{Оператор присваивания}

7 cost := cost + postage;

{Оператор присваивания}

8 write(cost)

{Печать результатов}

9 end.

 

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

begin S1; S2;

...

SN;

3

end

где begin (начало) и end (конец) – служебные слова, так называемые операторные скобки, S1, S2, ..., SN – операторы.

Любая последовательность операторов, объединенная в составной оператор, представляет собой один единый оператор. Кстати, раздел описания операторов также представляет собой один составной оператор.

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

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

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

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

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

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

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

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

postage

number

price

cost

3

Вход в Account1

?

?

?

?

4

 

5

 

 

 

5

 

 

7

10

 

6

 

 

 

 

70

7

 

 

 

 

75

8

Печать cost (75)

 

 

 

 

9

Выход из Account1

 

 

 

 

Программа 2

Program Account2(input, output); const postage = 5;

var number, price, cost: integer; begin

read(number, price); cost := number * price; cost := cost + postage;

4

write(cost);

end.

 

2. Выбор

 

 

 

 

 

 

Синтаксис условного оператора:

 

 

 

 

 

 

1: if <условие> then S1 else S2

 

 

 

 

 

 

2: if <условие> then S1

 

 

 

Нет (FALSE)

Программа 3

U

1 Program Account3(input, output);

 

 

 

 

 

 

 

 

 

2 const

 

Да (TRUE)

 

 

 

3

lowPostage = 5;

 

 

 

 

 

 

 

 

4

highPostage = 10;

 

 

 

 

 

 

 

 

 

 

 

 

5 var number, price, cost: integer;

 

S1

 

S2

6 begin

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7 read(number, price);

 

 

 

 

 

 

 

 

 

 

 

 

8 cost := number * price;

 

 

 

 

 

 

9 if cost < 50 then

 

 

 

 

 

 

10cost := cost + lowPostage

11else

12cost := cost + highPostage;

13write(cost);

14end.

Трассировка

 

 

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

 

number

price

cost

6

Вход в Account3

 

?

 

?

 

?

 

7

 

 

 

3

 

6

 

 

 

8

 

 

 

 

 

 

 

18

 

9

cost < 50 18 < 50 TRUE

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

23

 

13

Печать cost (23)

 

 

 

 

 

 

 

14

Выход из Account3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

number

 

price

 

cost

 

6

 

Вход в Account3

?

 

?

 

?

 

 

7

 

 

10

 

6

 

 

 

 

8

 

 

 

 

 

 

 

60

 

 

9

 

cost < 50 60 < 50 FALSE

 

 

 

 

 

 

 

 

12

 

 

 

 

 

 

 

70

 

 

13

Печать cost (70)

 

 

 

 

 

 

 

 

14

Выход изAccount3

 

 

 

 

 

 

 

5

3. Циклы

Синтаксис операторов цикла:

1:while <условие> do S1

2:repeat S1; S2;

...

Sn

until <условие>

3:for <переменная цикла> := <начальное значение> to <конечное значение> do S1

4:for <переменная цикла> := <начальное значение> downto <конечное значение> do S1

Программа 4

1 Program Account4(input, output);

2 const lowpostage = 5;

3highpostage = 10;

4var items, totalcost, number, price: intrger;

5begin

6read(items);

7totalcost := 0;

8while items > 0 do

9begin

10items := items – 1;

11read(number, price);

12totalcost := totalcost + number * price

13end;

14if totalcost < 100 then

15totalcost := totalcost + lowpostage

16else

17totalcost := totalcost + highpostage

18write(totalcost)

19end.

Трассировка

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

items

number

price

totalcost

5

Вход в Account4

?

?

?

?

6

 

3

 

 

 

7

 

 

 

 

0

6

 

 

 

 

 

8

items > 0 3 > 0

TRUE

 

 

 

 

10

 

 

 

2

 

 

 

11

 

 

 

 

2

3

 

12

 

 

 

 

 

 

6

8

items > 0 2

> 0

TRUE

 

 

 

 

10

 

 

 

1

 

 

 

11

 

 

 

 

3

4

 

12

 

 

 

 

 

 

18

8

items > 0 1

> 0

TRUE

 

 

 

 

10

 

 

 

0

 

 

 

11

 

 

 

 

5

6

 

12

 

 

 

 

 

 

48

8

items > 0 0

> 0

FALSE

 

 

 

 

14

totalcost < 100

48 < 100 TRUE

 

 

 

 

15

 

 

 

 

 

 

53

18

Печать totalcost (53)

 

 

 

 

19

Выход из Account4

 

 

 

 

4. Процедуры и функции

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

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

Процедуры и функции бывают встроенные и определяемые программистом. Встроенные процедуры и функции не нужно описывать, они являются неотъемлемой частью компилятора Паскаля, например: sqr(x), sqrt(x), round(x) – встроенные функции, write(x), read(x) – встроенные про-

цедуры.

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

Функция – это та же процедура, только с именем функции связывается некоторое значение, используемое при вычислении выражения. Описание функции оформляется аналогично описанию процедуры, только: а) указывается тип результата функции; б) в теле функции обязательно должно выполняться присвоение (с типом результата) имени функции; та-

7

кое присвоение возвращает результат функции.

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

Параметры, которые перечисляются в заголовке подпрограммы, называются формальными, а в вызове подпрограммы - фактическими. Между формальными и фактическими параметрами существует взаимно однозначное соответствие, которое определяется позицией параметра в списке. Таким образом, начальное значение формального параметра в подпрограмме равно значению соответствующего фактического параметра.

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

Вызов процедуры представляет собой отдельный оператор, называемый оператор процедуры; вызов функции, в отличие от вызова процедуры, не может быть отдельным оператором и происходит только когда имя функции употребляется в качестве компоненты какого-либо выражения, операнда какой-либо операции.

Вызов процедуры – общий вид:

имя_процедуры (<список фактических параметров>);. Выполнение:

1.выполнение основного процесса приостанавливается

2.вычисляются значения фактических параметров

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

4.выполняются операторы процедуры

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

6.основной процесс продолжает выполняться с первого оператора, следующего после вызова процедуры

Вызов функции – общий вид:

имя_функции (список фактических параметров); (может быть выражением или частью выражения в различных опе-

раторах, но не является отдельным оператором). Выполнение:

1. выполнение основного процесса приостанавливается

8

2.вычисляются значения фактических параметров

3.вычисленные значения передаются в соответствующие формальные параметры функции, и управление передается функции

4.выполняются операторы функции

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

6.результат последнего выполненного оператора присваивания вида: имя_функции := выражение принимается в качестве значения функции, и основной процесс продолжает выполняться с первого оператора, следующего после вызова процедуры

Параметры можно передавать по значению и по ссылке.

Передача параметра по значению (параметры значения) – в списке формальных параметров (в заголовке подпрограммы) они перечисляются без служебного слова var:

1.вычисляется значение фактического параметра (может быть любое выражение соответствующего типа)

2.это значение копируется в соответствующий формальный параметр

3.формальный параметр употребляется внутри подпрограммы

4.по выходе из подпрограммы формальный параметр разрушается.

Передача параметра по ссылке (параметры переменные): в списке формальных параметров перед ними ставится служебное слово VAR. (при передаче параметра по ссылке фактический параметр должен быть переменной!!!):

1.в подпрограмму пересылается ссылка (адрес) на местоположение переменной – фактического параметра – в памяти ЭВМ

2.области памяти с этим адресом на время действия подпрограммы дается имя формального параметра

3.по выходе из подпрограммы этой области памяти возвращается имя переменной – фактического параметра и значение, записанное в нее подпрограммой, сохраняется.

Переменные, описанные в тексте подпрограммы называются локальными переменными и доступны только внутри этой подпрограммы, для основной программы они не существуют.

Переменные, определенные в разделе описания программы называются глобальными. Любой подпрограмме доступны все глобальные переменные за исключением тех, с чьими именами совпадают имена ее параметров или локальных переменных. В этом случае говорят, что имя переменной переопределено. Если имя некоторой переменной переопределено, то в области действия переопределенной программы имеет силу уже новая связь между именем и типом, и глобальная переменная с

9

таким именем в этой области действия уже не доступна (если только она не передается как параметр.

Пример фрагмента программы. Определение max(a,b,c,d)

...

if a>b then if a>c then

if a>d then max := a else max := d

else if c>d then max := c else max := d

else if b>c then

if b>d then max := b else max := d

else if c>d then max := c else max := d

...

Реализация алгоритма при помощи процедуры 1 program mmax2;

2 var a, b, c, d, max: real;

3 procedure pmax(a: real);

4begin

5if max < a then max := a

6end;

7begin

8read(a, b, c, d);

9max := a;

10pmax(b);

11pmax(c);

12pmax(d);

13write(‘max=’,max)

14end.

Таблица трассировки

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

a

b

c

d

max

 

7

Вход в mmax2

?

?

?

?

?

 

8

 

6

5

1

10

 

 

9

 

 

 

 

 

6

 

10

Вызов pmax(b)

 

 

 

 

 

a

4

Вход в pmax

 

 

 

 

 

5

5

max < a FALSE

 

 

 

 

 

 

10