Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

курсовая работа delphi / 220c1d9e87ed431a50a13ca7836572fe_Lab_Pascal-Delphi(TMS_A5)__________лекции

.pdf
Скачиваний:
42
Добавлен:
04.06.2015
Размер:
2.02 Mб
Скачать

Последовательности действий при выполнении этих циклов таковы:

 

Для 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= yi1 +(x xi1 ) yi yi1

xi xi1

значения функции в точках 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