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

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

3.Результат работы программы можно в математическом виде записать: rez0=0 (строка 7), rezi=rezi-1+x2, i=1,..n-1,

(строки

6,

8..12),

что

дает

n1

n1

 

 

 

rez =x2

= x2 *1= x2 *(n1)

 

 

i=1

i=1

 

 

 

Простейшие циклы

Задание 4

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

№1

program prim2(input,output); var i,n,r:integer;

begin read(n); i:=1; r:=1;

while i<=n do begin r:=r*2; i:=i+1;

end;

writeln(r);

end.

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

program prim2(input,output); var i,n,r:integer;

begin read(n); i:=1; r:=1;

while i<=n do begin r:=r*i; i:=i+1;

end;

writeln(r);

end.

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

program prim2(input,output); var i,n:integer;

r:real; begin read(n); i:=1; r:=0;

while i<=n do begin r:=2+sqr(r); i:=i+1;

end;

writeln(r);

end.

Входные данные 3 №4

program prim2(input,output); var i,n:integer;

r,a:real;

20

begin

 

i:=1;

 

read(n,a);

 

r:=a;

 

i:=1;

 

while i<=n do

 

r:=1;

 

begin

 

while i<=n do

 

r:=r*(a+i*n);

 

begin

 

i:=i+1;

 

r:=r*a;

 

end;

 

i:=i+1;

 

writeln(r);

 

end;

 

end.

 

writeln(r);

 

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

3 3

end.

 

№7

 

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

3 3

program prim2(input,output);

№5

 

var i,n:integer;

 

program prim2(input,output);

r:real;

 

var i,n:integer;

 

begin

 

r,a:real;

 

read(n);

 

begin

 

i:=1;

 

read(n,a);

 

r:=0;

 

i:=1;

 

while i<=n do

 

r:=1;

 

begin

 

while i<=n do

 

r:=r+1/(2*i);

 

begin

 

i:=i+1;

 

r:=r*(a+i-1);

 

end;

 

i:=i+1;

 

writeln(r);

 

end;

 

end.

 

writeln(r);

 

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

3

end.

 

№8

 

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

3 3

program prim2(input,output);

№6

 

var i,n:integer;

 

program prim2(input,output);

r,a,x:real;

 

var i,n:integer;

 

begin

 

r,a:real;

 

read(n,a,x);

 

begin

 

i:=1;

 

read(n,a);

 

r:=x;

 

21

while i<=n do

 

end;

 

begin

 

writeln(r);

 

r:=sqr(r+a);

 

end.

 

i:=i+1;

 

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

3 4

end;

 

№11

 

writeln(r);

 

program prim2(input,output);

end.

 

var i,n,r:integer;

 

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

3 2 3

begin

 

№9

 

read(n);

 

program prim2(input,output);

i:=1;

 

var i,n,r:integer;

 

r:=1;

 

begin

 

while i<=n do

 

read(n);

 

begin

 

i:=1;

 

r:=r*sqr(i)*i;

 

r:=0;

 

i:=i+1;

 

while i<=n do

 

end;

 

begin

 

writeln(r);

 

r:=r+sqr(i);

 

end.

 

i:=i+1;

 

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

3

end;

 

№12

 

writeln(r);

 

program prim2(input,output);

end.

 

var i,n:integer;

 

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

3

r,x,p:real;

 

№10

 

begin

 

program prim2(input,output);

read(n,x);

 

var i,n,r,a:integer;

 

i:=1;

 

begin

 

r:=0;

 

read(n,a);

 

p:=x;

 

i:=1;

 

while i<=n do

 

r:=0;

 

begin

 

while i<=n do

 

r:=r+p/i;

 

begin

 

p:=p*x;

 

r:=r+sqr(i-a);

 

i:=i+1;

 

i:=i+1;

 

end;

 

22

writeln(r);

end.

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

№13

program prim2(input,output); var i,n:integer;

r,x:real; begin read(n,x); i:=1; r:=1;

while i<=n do begin r:=r*(1+x/i); i:=i+1;

end;

writeln(r);

end.

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

№14

program prim2(input,output); var i,n:integer;

s:real; begin read(n); s:=0; i:=0; while i<n do

i:=i+1;

s:=s+1/i;

writeln(s);

end.

Входные данные 5

№15

program prim2(input,output);

var i,n:integer; s:real;

begin read(n); s:=0; i:=0; while i<n do begin

i:=i+1;

s:=s+1/i;

end;

writeln(s);

end.

Входные данные 5

Занятие 8. Пример разработки программы с циклом while.

Задача. Составить программу для вычисления 1/n!. Спецификация

1)Составить программу на Паскале для вычисления значения выражения 1/n!, где n!= 1*2*...*n (n- основание факториала).

2)Входные данные: целое число, основание факториала, например

3

3)Выходные данные: вещественное число, значение выражения, 0.167 для данного случая.

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

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

Примечания

work3

 

Æ

 

begin

 

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

 

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

 

23

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

 

end

 

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

переменная n:

Æ

integer

read (n)

 

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

 

Æ

 

begin

 

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

переменная rez

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

(real)

пока счетчик не достиг значения n выполнять

переменная i

begin

(integer) для

вычислить и запомнить очередное

подсчета

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

количества

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

умножений , ее

end

значения также

посчитать значение выражения

являются

end

членами

 

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

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

 

Æ

 

rez:=1;

 

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

 

i:=1;

 

Пока счетчик не достиг значения n выполнять

 

Æ

 

while i<=n do

 

Вычислить и запомнить очередное

 

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

 

Æ

 

rez:=rez*i;

 

Увеличить счетчик на 1

 

Æ

 

i:=i+1;

 

Посчитать значение выражения

Æ

rez:=1/rez;

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

Æ

Write (rez)

1.Program work3;

2.var n,i:integer;

3.rez:real;

4.Begin

5.read (n);

6.rez:=1;

7.i:=1;

8.while i<=n do

9.begin

10.rez:=rez*i;

11.i:=i+1;

12.end;

13.rez:=1/rez;

14.write (rez)

15.end.

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

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

Строка

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

n

i

rez

4

вход в work3

?

?

?

5

 

3

 

 

6

 

 

 

1

7

 

 

1

 

8

(i<=n)=True

 

 

 

10

 

 

 

1

24

Строка

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

n

i

rez

11

 

 

2

 

8

(i<=n)=True

 

 

 

10

 

 

 

2

11

 

 

3

 

8

(i<=n)=True

 

 

 

10

 

 

 

6

11

 

 

4

 

8

(i<=n)=False

 

 

 

13

 

 

 

0.167

14

Вывод 0.167

 

 

 

15

Выход из work3

 

 

 

Результат: 0.167

При выполнении вычислений часто требуется выполнять повторяющиеся действия. Это можно достичь многократным написанием операторов, но более эффективным способом является использование оператора цикла. Чтобы пояснить, как использовать оператор цикла, рассмотрим, как факториал обычно вычисляется вручную. Математическое выражение факториала есть 1*2*3*..*n. При его вычислении вначале 1 умножается на 2, затем, то что получилось на 3, затем на 4 и так далее до n. То есть на каждом шаге делается одно и тоже: новое значение есть результат умножения предыдущего значения на требующийся множитель. Если очередное значение обозначить как rezi, где i – номер шага,

то rezi=rezi-1*i для i = 1,..n и rez0=1.

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

С учетом сказанного процесс вычисления факториала записан в третьем разделе таблицы разработки. Здесь надо учесть следующее. На очередном шаге требуется выполнить вычисление

rezi=rezi-1*i. Поскольку для вычисления очередного значения требуется только знание предыдущего, в Паскале это реализуется записью rez:=rez*i, где в правой части используется предыдущее значение, а в левой получается новое.

Задание 5

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

Дано натуральное число п. Вычислить:

1.n!

2.1 + 112 1 + 212 ... 1 + n12 ;

 

 

 

1

 

 

 

 

 

1

 

 

1

 

 

 

3.

 

 

 

 

 

 

+

 

 

 

 

 

 

+...+

 

;

 

sin1

 

sin1 +sin 2

sin1+...+sin n

4.

 

 

2 +

 

 

2+...+ 2 .

 

 

 

 

 

 

 

 

 

 

1442443

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

nкорней

 

 

 

 

 

 

 

 

 

 

 

5.

 

cos1

 

cos1 +cos2

...

cos1+...+cosn

;

 

 

sin1

 

 

sin1 +sin 2

 

 

sin1+...+sin n

 

6.

 

 

3 +

 

 

 

6+...+ 3(n 1) + 3n .

 

 

 

7. a(a+1)...(a+n-1);

 

 

 

 

 

 

 

8.

1

+

 

 

 

 

 

1

 

+...+

 

 

1

;

 

 

 

a

a(a +1)

a(a +1)...(a +n)

 

 

 

1

 

 

 

 

1

 

1

 

 

 

 

1

 

 

 

 

 

 

9.

 

 

+

 

 

 

+

 

 

+...+

 

;

 

 

 

 

a

a 2

 

 

a4

 

a 2n

 

 

 

10. a(a-n)(a-2n)...(a-n2).

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

25

Вычислить

((...((x +a)2 +a)2 +...+a)2 + a)2 +a

123

nскобок

12. Дано действительное число a. Найти среди

1 1 1

чисел11, + 2 ,1+ 2 + 3 ,... первое, большее a;

13. . Дано действительное число a. Найти такое наименьшее n, что

 

1

1

> a

1 +

 

+...+

 

2

n

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

14.sinx+sin2x+...+sinnx;

15.sinx+sinx2+...+sinxn;

16.sin x + sin sin x + … sinsin…sin x (n произведений)

17.Дано натуральное число n. Сколько цифр в числе n?

18.Дано натуральное число n. Чему равна сумма его цифр?

19.Дано натуральное число n. Найти первую цифру числа n.

Вычислить.

20.n 1 .

i=1 i 2

21.n 1 .

i=1 i 3

22.n 1 .

i=1 i!

23.n ( 1)2 .

i=1 2i

24.n 2 + i1! .

i=1

25.n 1 1 2 .

i=2 i!

Занятие 8. Вложенные циклы

Так как оператор S в цикле while U do S может быть любым оператором, в том числе и оператором цикла, то в этом случае возникает структура, которая называется вложенные циклы. Например:

while U1 do

while U2 do S2. (этот оператор цикла вложен во внешний и представляет собой оператор S1). Или:

while U1 do begin

while U2 do S2; while U3 do

while U4 do S4;

end;

и т.д.

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

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

1.Program prim3;

2.var n,i,j:integer;

3.x,y,rez,rez1:real;

4.begin

5.read (n,x,y);

6.i:=1;

7.rez1:=0;

8.while i<=n do

9.begin

26