- •Текстовый редактор
- •Прогон и отладка программы
- •Справочная служба Турбо Паскаля
- •Строка
- •Строка
- •Задание 2. Разветвления
- •Простейшие циклы
- •Вложенные циклы
- •Примечания
- •Строка
- •Процедуры и функции
- •Процедуры ввода
- •Обозначение
- •Представим определение языка Показушка в расширенной форме Бэкуса-Наура
- •Предложение
- •Синтаксис Паскаля
- •Задание 14
- •Операторы Паскаля
- •Задание 15
- •Новые типы данных. Определение типа. Диапазоны.
2.Так как в теле оператора цикла должны выполняться несколько операторов, они оформляются в виде составного оператора.
3.Результат работы программы можно в математическом виде записать: rez0=0 (строка 7), rezi=rezi-1+x2, i=1,..n-1,
(строки |
6, |
8..12), |
что |
дает |
n−1 |
n−1 |
|
|
|
rez =∑x2 |
= x2 *∑1= x2 *(n−1) |
|
|
|
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