Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика часть 1.pdf
Скачиваний:
16
Добавлен:
02.05.2015
Размер:
489.96 Кб
Скачать

r:=r+z*p_x/p; z:=-z; p_n:=p_n*i; i:=i+1

end; r:=r*p_n; writeln(r) end.

Входные данные 2 3

Занятие 9. Разработка программы с вложенными циклами.

Задача: Вычислить значение выражения n i !

i =1

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

1. Составить программу для вычисления значения выражения

n i ! , где i ! = 1*...*i.

i=1

2.Входные данные: целое число, значение n, например 3

3.Выходные данные: целое число, значение выражения, например, 9 (для входных данных 3).

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

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

Примечания

work4

 

Æ

 

begin

 

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

 

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

 

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

 

end

 

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

переменная n (integer)

Æ

 

read (n)

 

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

 

Æ

 

begin

 

установить начальное значение суммы

переменная rez (real)

установить начальное значение счетчика

переменная i (integer)

слагаемых

 

пока не просуммированы все слагаемые

 

выполнять

 

begin

 

установить начальное значение

переменная fact

произведения

(integer)

установить начальное значение

переменная j (integer)

счетчика произведений

 

пока не перемножены все сомножители

 

выполнять

 

begin

 

учесть в произведении очередной

 

сомножитель

 

увеличить счетчик произведений

 

end

 

учесть в сумме очередное слагаемое

 

увеличить счетчик слагаемых

 

end

 

end

 

установить начальное значение суммы

 

Æ

 

rez:=0;

 

установить начальное значение счетчика

 

слагаемых

 

Æ

 

i:=1;

 

пока не просуммированы все слагаемые

 

выполнять

 

32

Æ

while i<=n do

установить начальное значение произведения

Æ

fact:=1;

установить начальное значение счетчика произведений

Æ

j:=1;

пока не перемножены все сомножители выполнять

Æ

while j<=i do

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

Æ

Fact:=fact*j;

увеличить счетчик произведений

Æ

j:=j+1;

учесть в сумме очередное слагаемое

Æ

rez:=rez+fact;

увеличить счетчик слагаемых

Æ

i:=i+1;

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

Æ

write (rez)

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

1.Program work4;

2.var i,j,n,fact,rez: integer;

3.begin

4.read( n);

5.rez:=0; i:=1;

6.while i<=n do

7.begin

8.fact:=1; j:=1;

9.while j<=i do

10.begin

11.fact:=fact*j;

12.j:=j+1;

13.end;

14.rez:=rez+fact;

15.i:=i+1;

16.end;

17.write (rez)

18.end.

Вычисление n i! требует применения вложенных циклов.

 

 

 

i=1

 

 

 

 

Это

становится

ясно,

если

его

переписать

в виде

n

n

n

i

 

 

 

n

i! = (i!) = (j)

или,

более

обобщенно,

(i-ое

i =1

i =1

i =1

j=1

 

 

 

i=1

слагаемое), где i-ое слагаемое это i!.

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

Установить сумму в ноль.

Установить счетчик слагаемых в единицу

33

Пока не просуммированы все слагаемые, выполнить begin

Вычислить очередное слагаемое Учесть в сумме очередное слагаемое Модифицировать счетчик слагаемых

End

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

Задание 7

Составить подробную спецификацию программы с примерами входных и выходных данных. Разработать программу, используя таблицы разработки. Выполнить трассировку программы. Ввести программу в ЭВМ, сравнить результаты трассировки и работы программы.

1. Дано натуральное число n. Получить f1 f 2 ... f n , где fi = i2 1+1 + i2 1+2 +... + i2 +1i +1.

2.Найти натуральное число от 1 до n c максимальной суммой делителей.

Даны натуральные числа m и n. Вычислить.

3.∑∑n m i +1j2 .

i=1 j=1 n m

4.∑∑sin(i3 + j4 ) .

i=1 j=1

5.∑∑n m ji+i j+1 .

i=1 j=1

n

m

1

 

6. ∑∑

.

i +2 j

i=1

j=1

 

Дано натуральное число n. Вычислить. 7. n k(k +1)...k2 .

k=1

8.n kk .

k=1

9. n

1

 

.

2

)!

k =1

(k

 

10. n

(1)k (2k 2 +1)! .

k =1

 

 

 

Даны натуральное число n, действительное число x. Вычислить.

11.

n

(2i)!+| x |

.

 

2

 

 

 

i=1

(i )!

12.

 

1

n

(1)k

xk

.

 

 

 

 

 

n! k =1

 

(k!+1)!

13. n kk x2k .

k=1

14.∑∑n n x m+k .k =1 m=k

Даны действительные числа a, b (a<b), натуральное число n, функция y=f(x), определенная на отрезке [a,b]. Вывести на дисплей график функции. Для построения графика вычислить значения функции yi = f (xi ) , где

34

xi = a + ih, i =0,1,..., n,

h =(b a) / n.

Ось 0x расположить вертикально, ось 0y – горизонтально. Шаг по оси 0x – это переход на новую строку, шаг по оси 0y – позиция следующего символа в текущей строке. Точки графика изображать символом *.

Рассмотреть следующие функции.

15.y=|sinx|+|cosx|. a=0, b=π, n=25.

16.y=2sinx+3cosx, a=-π, b=π, n=25.

17.y = x2 +1, a=-1, b=2, n=25.

 

1

 

18.

y = x2 x +1

, a=-1, b=3, n=25.

19.y = xx2 +32 , a=-1, b=4, n=25.

20.y = x2e|x|, a=-1, b=3, n=25.

21.y = ex sin 2x, a=-π/2, b=2π, n=25

22.y = 3 (x +2)2 3 (x 2)2 , a=-3, b=3, n=25.

Занятие 10. Подпрограммы - процедуры и функции

I. Описание процедуры. Описание функции. II. Вызов процедуры. Вызов функции.

III.Параметры , передаваемые по ссылке и по значению. IV.Локальные и глобальные переменные.

V.Примеры трассировки процедур и функций.

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

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

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

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

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

Как программа описывает весь процесс в целом, так описание подпрограммы описывает отдельный подпроцесс и дает ему имя.

Описание процедуры/функции

Заголовок процедуры

procedure имя (<список

 

формальных параметров>);

Заголовок функции

function имя (<список формальных

 

параметров>): тип результата;

Раздел описания меток

label ...

Раздел описания констант

const ...

Раздел описания типов

type ...

Раздел описания

var ...

переменных

 

Раздел описания операторов

begin

(тело подпрограммы)

S1;

 

S2;

 

...

 

SN;

35

end;

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

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

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

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

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

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

Выполнение:

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

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

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

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

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

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

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

Выполнение:

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

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

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

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

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

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

36

 

 

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

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

 

 

Передача параметра по значению (параметры значения) - в

как параметр.

 

 

 

 

 

 

 

списке формальных параметров (в заголовке подпрограммы) они

V. Пример трассировки программы с процедурой.

 

 

перечисляются без служебного слова var:

 

 

 

 

 

 

 

 

 

 

 

 

 

1)

вычисляется значение фактического параметра (может быть

1.

Program prim4;

 

 

 

 

 

 

 

любое выражение соответствующего типа)

 

 

 

2.

var n,t: real; x:char;

 

 

 

 

 

 

 

2)

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

3.

procedure P(x,y: real);

 

 

 

 

 

 

параметр

 

 

 

 

4.

var n:real;

 

 

 

 

 

 

 

3)

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

 

5.

begin

 

 

 

 

 

 

 

4)

по выходе из подпрограммы формальный параметр

6.

n:=x+t;

 

 

 

 

 

 

 

разрушается.

 

 

 

 

7.

t:=y;

 

 

 

 

 

 

 

 

 

Передача параметра по ссылке (параметры переменные): в

8.

writeln(n,t,x);

 

 

 

 

 

 

 

списке формальных параметров перед ними ставится служебное

9.

end;

 

 

 

 

 

 

 

слово VAR. (при передаче параметра по ссылке фактический

10.

begin

 

 

 

 

 

 

 

параметр должен быть переменной!!!):

 

 

 

11.

read(n);

 

 

 

 

 

 

 

1)

в

подпрограмму

пересылается

ссылка

(адрес)

на

12.

t:=n/2;

 

 

 

 

 

 

 

местоположение переменной - фактического параметра - в памяти

13.

x:=’+’;

 

 

 

 

 

 

 

ЭВМ

 

 

 

 

 

14.

P(n,0.8);

 

 

 

 

 

 

 

2)

области памяти с этим адресом на время действия

15.

writeln(n,t,x)

 

 

 

 

 

 

 

подпрограммы дается имя формального параметра

 

 

16.

end.

 

 

 

 

 

 

 

3)

по выходе из подпрограммы этой области памяти возвращается

 

 

 

 

 

 

 

 

 

 

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

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

 

 

 

 

 

 

 

в нее подпрограммой, сохраняется.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IV. Переменные, описанные в тексте подпрограммы

Входные данные: 1

 

 

 

 

 

 

 

называются локальными переменными и доступны только внутри

 

 

 

 

 

 

 

 

 

 

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

Строка

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

 

n

t

x

 

 

 

 

 

 

Переменные, определенные в разделе описания программы

10

вход в prim4

 

?

?

?

 

 

 

 

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

11

 

 

1

 

 

 

 

 

 

глобальные переменные за исключением тех, с чьими именами

12

 

 

 

0.5

 

 

 

 

 

совпадают имена ее параметров или локальных переменных. В

13

 

 

 

 

‘+’

 

 

 

 

этом случае говорят, что имя переменной переопределено. Если

14

вызов P

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

n

x

y

 

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

5

вход в P

 

 

 

 

?

1

0.8

 

именем и типом, и глобальная переменная с таким именем в этой

6

 

 

 

 

 

1.5

 

 

 

 

 

 

 

 

 

 

 

37