курсовая работа delphi / 220c1d9e87ed431a50a13ca7836572fe_Lab_Pascal-Delphi(TMS_A5)__________лекции
.pdfПоследовательности действий при выполнении этих циклов таковы:
|
Для while: |
|
Для repeat-until: |
|
|
|
|
1. |
Проверяется истинно ли |
1. |
Выполняются <операторы>. |
<условие_1>. |
|
|
|
|
|
|
|
2. |
Если это так, то выполняется |
2. |
Проверяется, ложно ли |
<оператор>. |
<условие_2> |
||
|
|
|
|
3. |
Пункты 1 и 2 выполняются до тех |
3. |
Пункты 1 и 2 выполняются до тех |
пор, пока <условие_1> не станет |
пор, пока <условие_2> не станет |
||
ложным. |
истинным. |
||
|
|
|
|
Таким образом, если <условие_1> изначально ложно, то цикл while не выполнится ни разу. Если же <условие_2> изначально истинно, то цикл repeat-until выполнится один раз.
break и continue
Существует возможность прервать выполнение цикла (или одной его итерации), не дождавшись конца его (или ее) работы.
break прерывает работу всего цикла и передает управление на следующий за ним оператор.
continue прерывает работу текущей итерации цикла и передает управление следующей итерации (цикл repeat-until) или на предшествующую ей проверку (циклы for-to, for-downto, while).
Замечание: При прерывании работы циклов for-to и for-downto с помощью функции break переменная цикла (счетчик) сохраняет свое текущее значение, не "портится".
Оператор безусловного перехода goto
Возвращаясь к сказанному об операторе goto, необходимо отметить, что при всей его нежелательности все-таки существует ситуация, когда предпочтительно использовать именно этот оператор как с точки зрения структурированности текста программы, так и с точки зрения логики ее построения, и уж тем более с точки зрения уменьшения трудозатрат программиста. Эта ситуация - необходимость передачи управления изнутри нескольких вложенных циклов на самый верхний уровень.
Дело в том, что процедуры break и continue прерывают только один цикл - тот, в теле которого они содержатся. Поэтому в упомянутой выше ситуации пришлось бы заметно усложнить текст программы, вводя
Родионов К.А. Лабораторный практикум |
51 |
много дополнительных прерываний. А один оператор goto способен заменить их все.
Сравните, например, два программно-эквивалентных отрывка:
write('Матрица '); |
write('Матрица '); |
|
for i:=1 to n do |
for i:=1 to n do |
|
begin |
|
for j:=1 to m do |
flag:=false; |
|
if a[i,j]>a[i,i] |
for j:=1 to m do |
|
then begin |
if a[i,j]>a[i,i] |
|
write('не '); |
then begin flag:=true; |
goto 1; |
|
write('не '); |
end; |
|
break; |
|
1: writeln('обладает |
end |
|
свойством |
if flag then break; |
|
диагонального |
end; |
|
преобладания.'); |
writeln('обладает свойством |
|
|
диагонального |
|
|
преобладания.'); |
|
|
2.ПРАКТИЧЕСКАЯ РАБОТА
2.1Программирование алгоритма циклической структуры.
1.Задание: Вывод массива, удобный для пользователя. Распечатать двумерный массив размерности MxN удобным для пользователя способом. (Известно, что массив содержит только целые числа из промежутка [0..100].). Вычислите сумму элементов.
2.Алгоритм. Понятно что, если весь массив мы вытянем в одну строчку (или, того хуже, в один столбик), хороших слов в свой адрес мы не дождемся. Именно поэтому нам нужно вывести массив построчно, отражая его структуру.
3.В рабочей области редактора наберите код программы, представленный на листинге 1.
Листинг 1.
program Z1; {$APPTYPE CONSOLE} uses
SysUtils; Const n=4;
m=5;
Родионов К.А. Лабораторный практикум |
52 |
var a:array[1..n,1..m] of integer; s,i,j:integer;
begin
{Ввод данных} for i:= 1 to n do
for j:= 1 to m do begin
Write(‘Vvedite element A[‘,i,’,’,j,’]: ’);
Readln(a[i,j]);
end;
{Печать результата} Writeln; Writeln('Matrix:');
for i:= 1 to n do begin
for j:= 1 to m do
begin write(a[i,j]:4); s:=s+a[i,j] end; writeln;
end;
Writeln('Summa=',s); Writeln('End program.'); Readln;
end.
5. Запустите программу на решение и проверьте полученные результаты.
2.2 Программирование таблично заданной функции.
1. |
Задание: Вычислить и вывести |
на |
печать значения |
функции |
y = a3 |
/ (a2 + x2) при значениях |
x, |
изменяющихся от |
0 до 3 |
сшагом 0,1.
2.В программе заранее можно определить число повторений и использовать оператор цикла for.
3. Для оптимизации вычислительного процесса значения параметра a3 и a2 вычислим вне цикла.
4.Наберите код программы, представленный на листинге 2.
Родионов К.А. Лабораторный практикум |
53 |
Листинг 2.
program Z2; {$APPTYPE CONSOLE} uses
SysUtils;
var a,x,y,a2,a3:real; i:integer;
begin
Write(‘Vvedite A=’);
Readln(a);
{Расчет и печать таблицы}
a2:=a*a; a3:=a*a*a; |
|
|
x:=0; |
|
|
Writeln; |
x |
y'); |
Writeln(' |
for i:= 1 to 31 do begin
y:=a3/(a2+x*x);
writeln(x:8:4,y:8:4);
x:=x+0.1;
end;
Writeln('End program.'); Readln; end.
5. |
Проведите отладку программы и проверьте полученные |
||||
результаты. |
|
|
|
|
|
6. |
Проверьте работу |
программы, |
где количество |
повторений |
|
определяется |
автоматически: |
n:=Trunc((xk-xn)/hx)+1, |
|||
где xk, xn и |
hx – начало, конец интервала и шаг счета. |
|
|||
7. |
Для |
закрепления |
практических |
приемов работы |
выполните |
упражнение 1 из раздела 3 самостоятельной работы.
2.3Вычисления по формуле линейной интерполяции
1.Вычислить по формуле линейной интерполяции значения таблично заданной функции.
2.Таблично задана функция Yi = f(xi).
X |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
y=f(x) |
-65.8 |
-33.9 |
-11.1 |
0.2 |
10.0 |
28.9 |
49.5 |
62.2 |
79.7 |
96.3 |
Вычислить по формуле линейной интерполяции
Родионов К.А. Лабораторный практикум |
54 |
y= yi−1 +(x − xi−1 ) yi − yi−1
xi − xi−1
значения функции в точках x = 5.5; 7.25 .
3.В этом задании заранее не известно в каком интервале узловых точек окажется заданное значение аргумента x, а следовательно, применить оператор цикла с известным числом повторений будет затруднительно. Так как порядковый номер точки интервала интерполяции не известен, в этой задаче применим оператор цикла с неизвестным числом повторений
While...do.
4.Наберите код программы, представленный на листинге 4. Самостоятельно оформите описание необходимых переменных и массивов. Организуйте ввод данных в массивы Х и Y.
Листинг 4.
. . . . .
Readln(xA); i = 1
While xA > X[i] do i = i + 1 {Интерполяции значения yA}
yA = Y[i – 1] + (xA – X[i – 1]) *
(Y[i] – Y[i – 1]) / (X[i) – X[i – 1]);
. . . . .
5. Проведите отладку программы и проверьте полученные результаты.
2.4Вычисление определенного интеграла
1.Вычислить интеграл в заданных границах a и b для некоторой гладкой функции f от одной переменной (с заданной точностью).
2.Алгоритм. Метод последовательных приближений, которым мы воспользуемся для решения этой задачи, состоит в многократном вычислении интеграла со все возрастающей точностью, - до тех пор, пока два последовательных результата не станут различаться менее, чем на
заданное число (скажем, ε = 0,001). Количество приближений нам заранее неизвестно (оно зависит от задаваемой точности), поэтому здесь применим только цикл с условием (любой из них).
3. Вычислять одно текущее значение для интеграла мы будем с помощью метода прямоугольников: разобьем отрезок [a,b] на несколько мелких частей, каждую из них дополним (или урежем - в зависимости от
Родионов К.А. Лабораторный практикум |
55 |
наклона графика функции на данном участке) до прямоугольника, а затем просуммируем получившиеся площади. Количество шагов нам известно, поэтому здесь удобнее всего воспользоваться циклом с параметром.
4.На рисунке изобразим функцию f(x) = x2 (на отрезке [1,2]). Каждая из криволинейных трапеций будет урезана (сверху) до прямоугольника: высотой каждого из них послужит значение функции на левом конце участка. График станет "ступенчатым".
5.Наберите код программы, представленный на листинге 3. Самостоятельно оформите описание необходимых переменных и
организуйте ввод данных − границ a и b интервала интегрирования,
погрешность вычисления интеграла ε. Для вычисления значений функции используйте ее предварительное описание и обращение к ней.
Листинг 3.
Function f(x:real) real; begin f:=x*x end;
. . . . . . . . . . . . . .
step:= 1; h:= b-a;
s_nov:= f(a)*h; repeat
s_star:= s_nov; s_nov:= 0; step:= step*2; h:= h/2;
for i:= 1 to step do
s_nov:= s_nov+f(a+(step-i)*h); s_nov:= s_nov*h;
until abs(s_nov - s_star)<= eps; writeln(s_nov);
6. Проведите отладку программы и проверьте полученные результаты.
Родионов К.А. Лабораторный практикум |
56 |
3. САМОСТОЯТЕЛЬНАЯ РАБОТА
Задание 1. Разработать программу для табулирования функции, заданной в соответствии с вариантом задания (таблица 1). Реализовать диалоговый ввод данных параметров функции. Печать результатов оформить в виде таблицы.
№ |
Расчетные формулы |
Условие |
||||||||||
п/п |
||||||||||||
|
|
|
|
|
||||||||
1 |
|
|
|
|
|
|
|
|
|
|
|
t < 0,1 |
a t 2 |
+b sin t + |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
t = 0,1 |
|
ω = a t +b |
|
|
|
|
|||||||
|
|
|
|
|
t > 0,1 |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a t 2 |
+b cost + |
||||||||||
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
2 |
ln t |
|
|
1 ≤ t ≤ 2 |
|||
|
a t |
|
|
|
|
t <1 |
||||||
|
y = 1 |
|
|
|
|
|
|
|
|
|
||
|
|
|
at |
cos(b t) |
t > 2 |
|||||||
|
e |
|
|
|||||||||
3 |
|
|
|
|
|
2 |
|
|
|
|
2 |
x <1,3 |
|
π x3 |
− 7 / x |
|
x =1,3 |
||||||||
|
y = a x |
|
− 7 |
|
x |
|
x >1,3 |
|||||
|
|
|
|
|
|
|
|
|
|
x) |
|
|
|
lg(x + 7 |
|
|
|
|
|||||||
4 |
a x2 |
|
+b x +c |
x <1,2 |
||||||||
|
|
/ x + |
x |
2 |
+1 |
x =1,2 |
||||||
|
ω = a |
|
|
x >1,2 |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(a +bx) / x2 +1 |
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
5 |
π |
x2 |
−7 / x2 |
|
x <1,4 |
|||||||
|
|
x |
3 |
|
+7 |
|
|
x |
|
x =1,4 |
||
|
Q = a |
|
|
|
|
|
x >1,4 |
|||||
|
|
|
|
|
|
|
7 |
|
x + a ) |
|||
|
ln(x + |
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Исходные данные a= 2,5 b = 0,4
a= -0,5 b= 2
a= 1,5
a= 2,8
b=−0,3 c = 4
a= 1,65
Таблица 1.
Диапазон и шаг изменения аргумента
x[1;2] ∆x = 0,05
x[0,7;2] ∆x = 0,1
x[1;2] ∆x = 0,05
x[0,2;2,8] ∆x = 0,2
x[0,7;2] ∆x = 0,1
Родионов К.А. Лабораторный практикум |
57 |
№ |
Расчетные формулы |
Условие |
|||||||||||||
п/п |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
|
|
|
|
2 |
|
x |
|
|
|
x <1 |
|
|
|
1,5 cos |
|
|
|
|
|
x =1 |
|||||||
|
y = |
1,8 a x |
|
|
|
|
|
||||||||
|
|
|
|
|
|
2 |
|
|
|
|
|
1 < x < 2 |
|||
|
|
(x −2) |
+6 |
|
|
||||||||||
|
|
|
|
|
|
x > 2 |
|||||||||
|
|
|
|
tgx |
|
|
|
|
|
|
|
|
|||
|
|
3 |
|
|
|
|
|
|
|
|
|
||||
7 |
x3 x − a |
|
|
|
x > a |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x = a |
|
|
ω = x sin(a x) |
|
|
x < 2 |
|||||||||||
|
|
|
−ax |
cos(ax) |
|||||||||||
|
e |
|
|
||||||||||||
8 |
|
b x −lgbx |
|
|
bx <1 |
||||||||||
|
Q = |
|
|
|
|
|
|
|
|
|
|
|
|
bx =1 |
|
|
1 |
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bx >1 |
|
|
|
lb x +lgbx |
|
|
|||||||||||
9 |
y = |
sin x lg x |
|
|
x > 3,5 |
||||||||||
|
|
|
|
x |
|
|
|
|
|
|
x ≤ 3,5 |
||||
|
|
|
cos2 |
|
|
|
|
|
|
||||||
10 |
|
lg(x +1) |
|
|
|
x >1 |
|||||||||
|
f = |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
a |
|
x |
|
|
x ≤1 |
|||||
|
|
sin 2 |
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
11 |
(ln3 x + x2 )/ |
|
|
|
x < 0,5 |
||||||||||
|
x + |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x = 0,5 |
|
z = |
x +t +1/ x |
|
|
|
||||||||||
|
|
|
|
x > 0,5 |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
2 |
x |
||
|
cos x +t sin |
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
12 |
|
|
|
|
a +b |
|
|
|
|
|
|
|
x < 2,8 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2,8 ≤ x < 6 |
|
|
|
x |
+cos x |
|
|
|
||||||||
|
e |
|
|
|
|
||||||||||
|
s = (a +b) /(x +1) |
x ≥ 6 |
|||||||||||||
|
|
|
x |
+sin x |
|
|
|
|
|
|
|||||
|
e |
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
|
|
|
|
|
|
|
3 |
|
x |
|
|
x >1 |
||
|
a lg x + |
|
|
|
|
|
|
||||||||
|
y = |
|
|
|
|
|
|
|
|
|
|
|
|
2 |
x ≤1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2a cos x +3x |
|
|
Исходные данные a= 2,3
a= 2,5
b= 1,5
−
a= 20,3
t= 2,2
a= 2,6 b= −0,39
a= 0,9
Диапазон и шаг изменения аргумента
x[0,2;2,8] ∆x = 0,2
x[1;5] ∆x = 0,5
x[0,1;2] ∆x = 0,1
x[2;5] ∆x = 0,25
x [0,5;2] ∆x = 0,1
x [0,2;2] ∆x = 0,2
x [0;7] ∆x = 0,5
x [0,8;2] ∆x = 0,1
Родионов К.А. Лабораторный практикум |
58 |
|
№ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Исход- |
Диапазон и |
|
|
Расчетные формулы |
Условие |
|
ные |
шаг изменения |
|
||||||||||||||||
|
п/п |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
данные |
аргумента |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
14 |
a |
+b t |
2 |
|
+c |
i < 4 |
|
|
a= 2,1 |
i [0;12] |
|
|||||||||||
|
|
|
|
|
|
|
4 ≤ i ≤ 6 |
|
b = 1,8 |
∆i = 1 |
|
|||||||||||
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
ω = i |
|
|
|
|
|
|
|
|
|
c = |
|
|||||||||
|
|
|
|
i +b t |
3 |
|
|
i > 6 |
|
|
|
|
||||||||||
|
|
|
|
|
|
|
−20,5 |
|
|
|||||||||||||
|
|
a |
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a= 0,3 |
|
|
||||||
15 |
|
|
|
2 |
|
|
|
|
i2 |
+1 |
|
|
i [0;10] |
|
||||||||
|
|
a |
|
|
i |
|
|
+1 |
|
sin |
|
|
|
|
|
> |
n = 10 |
∆i = 1 |
|
|||
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
sin |
|
n |
|
|
|
n |
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
z = |
|
|
1 |
|
|
2 |
+1 |
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
i |
|
|
|
|
|
|
|||||||||||
|
|
cos i + |
|
|
|
|
|
|
|
|
≤ |
|
|
|
||||||||
|
|
n |
|
sin |
|
n |
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Задание 2. Составить программу для вычисления произведения положительных элементов массива целых чисел X[20].
Задание 3. Составить программу для вычисления суммы 20 членов ряда
20 |
2 |
|
|
z = ∑ |
xi |
|
|
i , где xi −элементы массива (x1, x2, … x20). |
|||
i=1 |
Задание 4. Составить программу для вычисления суммы бесконечного ряда с точностью до ε = 10-4 (суммирование осуществлять, пока абсолютное значение текущего члена ряда не станет меньше ε).
∞ |
x |
2n |
|
||
z =1+∑ |
|
|
(−1)n |
||
(2n)! |
|||||
n=1 |
|
Родионов К.А. Лабораторный практикум |
59 |
Контрольные вопросы
1.Указать последовательность действий, выполняемых при организации циклических участков программы с заданным числом повторений.
2.Какие действия выполняются оператором перехода go to?
3.Указать назначение и правила организации цикла?
4.Перечислить возможные способы организации цикла с заданным числом повторений.
5.Зачем необходимо при отладке программы тестировать все ветви алгоритма?
6.Перечислить возможные способы организации итерационных циклов.
Отчет по лабораторной работе
Результаты выполнения лабораторной работы должны быть сохранены в файлы и представлены для контроля преподавателю. Отчет по лабораторной работе должен содержать: цели и задачи работы, распечатку исходного кода программ, исходные данные задачи и результаты ее решения, иллюстративные материалы.
Родионов К.А. Лабораторный практикум |
60 |