
- •Составитель Осипов Вадим Евгеньевич
- •Таблица 2
- •Пример 1.1. Написать алгоритм и программу для вычисления формулы
- •ЛАБОРАТОРНОЕ ЗАДАНИЕ
- •Таблица 3
- •ЛАБОРАТОРНОЕ ЗАДАНИЕ
- •Формула
- •Формула
- •Формула
- •Формула
- •ЛАБОРАТОРНОЕ ЗАДАНИЕ
- •ЛАБОРАТОРНОЕ ЗАДАНИЕ
- •ЛАБОРАТОРНОЕ ЗАДАНИЕ
- •ЛАБОРАТОРНОЕ ЗАДАНИЕ
- •ЛАБОРАТОРНОЕ ЗАДАНИЕ
- •ЛАБОРАТОРНОЕ ЗАДАНИЕ
- •ЛАБОРАТОРНОЕ ЗАДАНИЕ
- •ЛАБОРАТОРНОЕ ЗАДАНИЕ

WriteLn('!---!-----!-----!'); dx:=(X2-X1)/(N-1);
x:=X1;
i:=1; Repeat
If x<=0 Then y:=(sin(x)/cos(x)+ln(abs(x-1))/ln(10))/(2*x+5) Else If x<=1 Then y:=exp(ln(x)/3)
Else y:=5*sin(2*x); WriteLn(i:3,x:7:2,y:6:2);
x:=x+dx;
i:=i+1; Until x>2;
End.
Отладка программ. Различают два вида ошибок программирования: синтаксические и логические. Подобно тому, как грамматически безупречный текст может быть полнейшей бессмыслицей, программа, не имеющая синтаксических ошибок, может содержать логические ошибки. Компилятор выявляет только синтаксические ошибки. Увеличение сложности программ неизбежно приводит к логическим ошибкам, которые выявляют в процессе отладки.
В процессе отладки можно по шагам выполнять программу, наблюдая за переменными. Выбор переменных для наблюдения осуществляется через меню Debug → Add watch… или комбинацией клавиш Ctrl+F7. Выполнение одного шага программы осуществляется через меню Run → Trace into или клавишей F7. Прервать процесс отладки можно через меню Run → Program reset или комбинацией Ctrl+F2. Во время отладки можно заглядывать в окно вывода, нажимая Alt+F5, либо через меню Debug → Output сделать это окно постоянно присутствующим на экране. Менять размеры окон можно, захватывая левой кнопкой мыши за нижний правый угол окна, а перемещать окна по экрану, захватывая мышкой за верхнюю границу окна. Закрыть окно можно, щелкнув мышью по желтому прямоугольнику в правом верхнем углу окна.
ЛАБОРАТОРНОЕ ЗАДАНИЕ
Задание 1. Написать алгоритм и программу вычисления функции y(x) из лабораторной работы № 2 в N равномерно распределенных в диапазоне X1≤x≤X2 точках, таблица 6. Результаты сформировать в виде таблицы. Произвести тестирование.
|
|
|
|
|
|
|
Таблица 6 |
Вариант |
X1 |
X2 |
N |
Вариант |
X1 |
X2 |
N |
1 |
–1 |
2 |
10 |
2 |
1 |
4 |
12 |
3 |
0 |
2 |
15 |
4 |
–2 |
0 |
14 |
5 |
0,1 |
1,8 |
16 |
6 |
–0,5 |
1 |
18 |
7 |
1 |
7 |
20 |
8 |
–1 |
2 |
11 |
9 |
–1 |
1 |
9 |
10 |
0 |
1 |
8 |
11 |
1 |
3 |
7 |
12 |
–2 |
–1 |
6 |
19

Продолжение таблицы 6
Вариант |
X1 |
X2 |
N |
Вариант |
X1 |
X2 |
N |
13 |
–0,1 |
0,3 |
5 |
14 |
1 |
100 |
20 |
15 |
–2 |
2 |
19 |
16 |
1 |
3 |
18 |
17 |
10 |
30 |
17 |
18 |
–5 |
5 |
16 |
19 |
–2 |
4 |
15 |
20 |
0,1 |
1,9 |
14 |
21 |
1,5 |
3,5 |
13 |
22 |
0,2 |
0,6 |
12 |
23 |
0,2 |
0,6 |
11 |
24 |
2 |
4 |
10 |
25 |
2,5 |
4,4 |
9 |
26 |
–1 |
1 |
7 |
27 |
2,5 |
7,5 |
5 |
28 |
8 |
10 |
7 |
29 |
–2 |
0 |
9 |
30 |
–1 |
1 |
11 |
Задание 2. Произвести пошаговое выполнение программы, наблюдая переменные x, y, i.
СОДЕРЖАНИЕ ОТЧЕТА
1.Лабораторное задание.
2.Структурная схема алгоритма.
3.Текст программы.
Лабораторная работа № 5
ЦИКЛ С ЗАДАННЫМ ЧИСЛОМ ПОВТОРЕНИЙ
ЦЕЛЬ РАБОТЫ: Изучить цикл с заданным числом повторений (счетный цикл).
Алгоритмизация. В настоящей работе рассмат- |
|
|
|
|
||
|
|
|
|
|||
ривается оператор FOR, реализующий алгоритмиче- |
|
|
|
|
||
i=n1, n2 |
|
|
||||
скую структуру «цикл с заданным числом повторе- |
|
|
|
|
||
|
|
|
|
|||
|
|
|
|
|
|
|
ний», рисунок 9. Данный цикл работает следующим |
|
|
|
|
|
|
образом. В начале работы цикла целочисленный па- |
|
|
|
|
|
|
Действие |
|
|
||||
раметр i принимает значение n1 и цикл совершает |
|
|
|
|
||
|
|
|
|
|
|
|
первую итерацию. Если i≠n2, параметр автоматиче- |
|
|
|
|
|
|
ски изменяется на единицу и цикл совершает следу- |
|
|
|
|
|
|
ющую итерацию. Если i=n2, цикл совершает послед- |
|
|
|
|
||
|
|
|
|
|||
нюю итерацию. В случае, если n1=n2, цикл совершит |
|
|
|
|
||
Рисунок 9 |
|
|
||||
первую и последнюю (одну) итерацию. Таким об- |
|
|
||||
|
|
|
|
разом, число повторений равно | n2–n1| +1. Знак модуля в этой формуле необходим для того, чтобы формула сохранила общность для двух форм счетного цикла. В первой форме счетного цикла n2>n1 и параметр i увеличивается на единицу. Во второй форме счетного цикла n2<n1 и параметр i уменьшается на единицу.
20

Программирование. В языке Паскаль первая форма счетного цикла имеет структуру:
FOR параметр_цикла:=n1 TO n2 DO оператор; вторая форма счетного цикла выглядит следующим образом:
FOR параметр_цикла:=n1 DOWNTO n2 DO оператор,
где параметр_цикла – целочисленная переменная, соответствует i на рисунке 9; n1, n2 – целочисленные переменные или константы; оператор – произвольный оператор Турбо Паскаля, соответствует элементу «действие» на рисунке 9.
Пример 5.1. Изменить алгоритм и программу из лабораторной работы 4, используя вместо цикла с постусловием счетный цикл.
Для решения данной задачи разработаны структурная схема алгоритма (рисунок 10) и следующая программа.
|
|
Начало |
|
|
X1 = − 1; X 2 = 2; N = 10 |
||
|
dx = |
X 2 − X1 |
; x = X1 |
|
|
N − 1 |
|
|
|
i=1, N |
|
|
|
x ≤ 0 |
Конец |
|
да |
|
|
|
нет |
||
|
|
||
|
|
x ≤ 1 |
нет |
|
|
|
|
|
tg x + lg x − 1 |
да |
|
y = |
y = 3 x |
y = 5 sin 2x |
|
|
2x + 5 |
|
|
|
|
Вывод |
|
|
|
i, x, y |
|
|
|
x=x+dx |
|
|
|
Рисунок 10 |
21
Program lab5_1;
Const X1=-1; X2=2; N=10; Var y,x,dx: Real;
i:Integer; Begin
WriteLn('!---!-----!-----!');
WriteLn('! n ! x ! y !');
WriteLn('!---!-----!-----!'); dx:=(X2-X1)/(N-1);
x:=X1;
For i:=1 to N do Begin
If x<=0 Then y:=(sin(x)/cos(x)+ln(abs(x-1))/ln(10))/(2*x+5) Else If x<=1 Then y:=exp(ln(x)/3)
Else y:=5*sin(2*x); WriteLn(i:3,x:7:2,y:6:2);
x:=x+dx;
End
End.
Пример 5.2. Для заданного 0<x<1 и заданного числа слагаемых m вычислить сумму
s = x - |
1 |
× |
x3 |
+ |
1× 3 |
× |
x5 |
- |
1× 3× 5 |
× |
x7 |
+ |
|
2 |
3 |
2× 4 |
5 |
2× 4× 6 |
7 |
||||||||
|
|
|
|
|
|
|
Р е ш е н и е.
Если число слагаемых более одного, искомая сумма s определяется формулой:
m−1 |
|
i |
i |
2 k −1 |
|
x2 i 1 |
|
|
s=x ∑ |
−1 |
∏ |
|
|
|
|
||
2 k |
2 i 1 |
|||||||
i =1 |
|
|
k=1 |
|
|
Первое слагаемое есть x, а остальные (m – 1) слагаемых собраны оператором Σ. Для решения данной задачи разработаны: структурная схема алгоритма, рису-
нок 11, и следующая программа.
Program lab5_2;
Var a, b, c, x, s: Real; i,m: Byte;
Begin
Write('Введите 0<x<1. x='); Read(x);
WriteLn('Введите число слагаемых большее 0'); Read(m);
s:=x;
If m<>1 Then Begin
b:=1;
For i:=1 to m-1 do begin
If odd(i) Then a:=-1
22

Else a:=1; b:=b*(2*i-1)/(2*i); c:=exp((2*i+1)*ln(x))/(2*i+1); s:=s+a*b*c;
end;
End; WriteLn('Summa=', s:8:5);
End.
Рис. 11 Комментарии к программе. Отрицательное число (–1) нельзя возвести в произ-
вольную степень, пользуясь рассмотренной конструкцией ai =exp(i*ln(a)), поскольку отрицательное число под знаком логарифма приведет к ошибке. Вместо этого выбирается множитель единица либо минус единица, в зависимости от четности i. Если i
– нечетное, то функция odd(i) возвращает значение ИСТИНА.
23