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

Практикум ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПАСКАЛЬ_Янченко Д.В

.pdf
Скачиваний:
15
Добавлен:
13.03.2016
Размер:
786.83 Кб
Скачать

50

 

 

Контрольный пример.

 

 

Исходные данные N=1, β=5, θ=2, α=3, γ=4. Вычисления производятся

по первому условию (N=1) значение M = 19,496.

 

Исходные данные N=2, β=5, θ=2, α=3, γ=4. Вычисления производятся

по второму условию (N=2) значение M = -92,120.

 

Начало

 

 

Ввод

 

 

N,β,θ,α,γ

 

 

N = 1

Да

 

 

 

 

M =

β

Нет

(1+ sinθ ) α

N = 2

Да

 

 

 

 

 

β

Нет

M =

(1+n cosθ ) γ

Вывод

 

 

M

 

 

Конец

 

 

Рисунок 24 – Алгоритм решения примера 6.1.2

 

Пример 6.1.3. Вычислить значение функции Z по зависимости:

Z = 3 x +t ,

πt3

1

,

если t 0

 

где x =

 

 

 

 

t

 

 

 

 

 

πt

 

,

 

 

если t < 0

 

 

 

 

 

 

 

 

 

 

 

 

В

 

данном

примере необходимо вначале

вычислить значение

переменной х, а затем вычислить функцию Z. Такой процесс называют комбинированный – в данном случае он состоит из двух процессов линейного и разветвляющегося.

Переменные, используемые в задаче:

T, Pi (π ) – вводимые переменные (исходные значения). Переменную Pi можно описать как константу.

51

Z, X – вычисляемые переменные. Причем переменная Х является промежуточной переменной, которая нужна для вычисления переменной Z.

Поскольку при вычислении Z и X будет производиться деление, вычисление арифметических функций, то тип переменных определим как вещественный (REAL).

Встроенные функции, используемые в задаче (см. таблицу 1): Модуль числа πе - функция ABS(Pi*T).

Корень кубический 3 x +t - такой функции в языке Pascal нет, поэтому

преобразуем ее: (x +t)13 (см раздел 1.8.2). Она будет записана в следующем виде EXP(1/3*Ln(X+T)).

Кубическая степень числа T (t3) – аналогично кубическому корню

EXP(3*Ln(T)).

Поскольку условия взаимоисключающие то имеет место первый тип разветвляющегося процесса (рисунок 3а). После ввода исходных значений

вычислим при выполнении условия t 0 значение x ( x =πt

3

1

) в противном

 

t

 

t < 0 ) вычислим x =

 

πt

 

 

 

 

 

 

 

случае (если

 

 

. После этого

вычисляем

значение

 

 

Z =3 x +t и

выводим результат. Как правило,

выводится

значение

переменной Z, но можно вывести и значение промежуточной переменной x. Алгоритм задачи представлен на рисунке 25.

 

 

 

 

 

 

 

 

 

 

Начало

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ввод

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t, π

 

 

 

 

 

 

 

 

 

 

 

 

 

Нет

 

 

Да

 

 

 

 

 

 

t 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

1

 

x =

 

πt

 

 

 

 

 

 

 

 

x =πt

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Z = 3 x +t

Вывод

Z

Конец

Рисунок 25 – Алгоритм решения примера 6.1.3

52

Текст программы на языке Pascal:

Program zad3;

Var

Z, T, X, PI :Real;

Begin

Write(‘ Введите переменные T, PI’);

Readln(T, PI);

If T >= 0 Then X := PI*Exp(3*Ln(T))-7/T

Else X:= ABS(PI*T);

Z:= EXP(1/3*Ln(X+T));

Writeln(‘При T = ‘,T:8:3, ‘ Z = ‘,Z:8:3);

End.

Контрольный пример.

Исходные данные T=2, π = 3,14. Вычисления производятся по первому условию (T 0) значение Z = 2,986.

Исходные данные T=-2, π = 3,14. Вычисления производятся по второму условию (T < 0) значение Z = 1,624.

6.2 Пример решения задания № 2

В задании №2 необходимо составить блок-схему алгоритма и программу на языке Pascal для табулирования некоторой функции. Данный процесс является процессом циклического типа, так как многократно повторяются вычисления по одной и той же функциональной зависимости при различных значениях аргумента, которые представляют собой арифметическую последовательность. Эти вычисления повторяются до тех пор, пока текущее значение аргумента не превосходит своего конечного значения. Независимо от количества значений аргумента для его определения необходимо вводить только три переменные: начальное и конечное значения аргумента и шаг его изменения. При программировании циклического процесса необходимо использовать операторы цикла (оператор цикла с предусловием и оператор цикла с постусловием). Перед началом решения рекомендуется ознакомиться с главами 1, 2 и 3.

Пример 6.2.1 . Разработать блок-схему алгоритма и программу на языке Pascal для вычисления функции:

y = ax2 +k , sin x kx

при x изменяющемся от xн = 0,1 до xк = 2,3 с шагом x = 0,2 .

53

Поскольку необходимо вычислить значения функции y несколько раз (при изменении переменой х), то имеет место циклический процесс.

Переменные, используемые в задаче:

А, К, XN, XK, DX – вводимые переменные (исходные значения). Для организации цикла необходимо ввести переменные XN ( хн - начальное

значение аргумента), XK ( хк - конечное значение аргумента), DX( х - шаг

изменения аргумента). Эти переменные являются исходными данными задачи.

Y, X – вычисляемые переменные. Переменная Х называется переменной цикла.

Встроенные функции, используемые в задаче (см. таблицу 1):

Квадрат числа Х ( х2 ) – SQR(X); Синус числа Х (sin x ) – SIN(X);

Данную задачу, возможно, программировать с использованием оператора цикла с предусловием или с помощью оператора цикла с постусловием. Ниже рассмотрим решение этого примера как с одним, так и с другим оператором.

Для облегчения восприятия вычисленных значений, поместим их таблицу. Для этого перед оператором цикла поместим «шапку» таблицы, которая содержит переменную цикла и вычисляемую переменную.

Алгоритм решения задачи, для оператора цикла с предусловием изображен на рисунке 26.

Текст программы на языке Pascal:

Program zad4; Var

A, K, Y, X, Xn, Xk, dX :Real; Begin

Write(‘ Введите переменные A, K’); Readln(A, K);

Write(‘ Введите переменные Xn, Xk, dX’);

Readln(Xn, Xk, dX);

 

Writeln(‘---------------------------------------

 

‘);

Writeln(‘

X

Y’);

Writeln(‘---------------------------------------

 

‘);

X:= Xn;

 

 

While X <= Xk Do Begin

Y:=(A*SQR(X)+K)/(Sin(X)-K*X);

Writeln(X:8:3, Y:10:3);

X:=X+dX;

End;

54

End.

Начало

Ввод

A, K

Ввод

Xn, Xk, dX

X=Xn

Нет

X Xk

Конец Да

y = ax 2 + k sin x kx

Вывод

X, Y

X = X+dX

Рисунок 26 – Алгоритм решения примера 6.2.1 (цикл с предусловием)

Алгоритм решения задачи, для оператора цикла с постусловием изображен на рисунке 27.

Текст программы на языке Pascal:

Program zad4; Var

A, K, Y, X, Xn, Xk, dX :Real; Begin

Write(‘ Введите переменные A, K’); Readln(A, K);

Write(‘ Введите переменные Xn, Xk, dX’);

Readln(Xn, Xk, dX);

 

Writeln(‘---------------------------------------

 

‘);

Writeln(‘

X

Y’);

 

55

Writeln(‘

---------------------------------------‘);

X:= Xn;

 

Repeat

 

Y:=(A*SQR(X)+K)/(Sin(X)-K*X);

Writeln(X:8:3, Y:10:3);

X:=X+dX;

Until X > Xk;

End.

Начало

Ввод

A, K

Ввод

Xn, Xk, dX

X=Xn

y = ax 2 + k sin x kx

Вывод

X, Y

X = X+dX

X > Xk

Нет

 

Да

Конец

Рисунок 27 – Алгоритм решения примера 6.2.1 (цикл с постусловием)

Контрольный пример.

Исходные данные A=2, K = 5, Xn = 0.1, Xk = 2.3, dX= 0.2. В результате расчета получится следующая таблица:

---------------------------------------

X Y

---------------------------------------

56

0.100

-12.545

0.300

-4.301

0.500

-2.722

0.700

-2.094

0.900

-1.781

1.100

-1.610

1.300

-1.514

1.500

-1.461

1.700

-1.436

1.900

-1.429

2.100

-1.434

6.3 Пример решения задания № 3

В задании №3 необходимо разработать блок-схему и программу на языке Pascal комбинированного процесса, состоящего из циклического участка, внутри которого содержится разветвление. Такой характер задач имеет место в случае потребности вычислить значения функций для нескольких значений аргумента, но вид формулы для вычисления значений функции зависит от значения её аргумента. При этом, как и в задании №2 значения аргумента функции образуют арифметическую последовательность.

Общая структура программы подобна структуре рассмотренной в разделе 6.2, но в теле цикла с помощью оператора условного перехода организуется разветвление, так же как и в программах задания №1.

Пример 6.3.1. Разработать блок-схему алгоритма и программу на языке Pascal для вычисления функции y (пример 6.1.1):

 

x +9,8

,

если

x a

 

2

 

 

 

 

tgx

 

 

 

y = b

 

 

 

 

ex +

 

x ,

если

x > a

 

 

 

x a

 

 

 

 

 

 

 

при х = {0,1;

0,2;

0,3;

0,4; 0,5; 0,6}.

Как следует из условия задачи начальное значение аргумента хн=0,1, конечное хк=0,6, шаг изменения аргумента х=0,1.

Все переменные и функции аналогичны и рассмотрены в примере 6.1.1. К исходным значениям необходимо добавить переменные Xn, Xk и dX. Переменная X является переменной цикла и не вводится.

При составлении алгоритма решения данной задачи, возможно, использовать как оператор цикла с предусловием, так и оператор цикла с постусловием. Алгоритм решения задачи представлен на рисунке 28 (цикл с предусловием).

57

Текст программы будет иметь вид:

Program zad5; Var

X,B,A,Y, Xn, Xk, dX:Real; Begin

Write(‘ Введите переменные B, A’); Readln(B,A);

Write(‘ Введите переменные Xn, Xk, dX’);

Readln(Xn, Xk, dX);

 

Writeln(‘---------------------------------------

 

‘);

Writeln(‘

X

Y’);

Writeln(‘---------------------------------------

 

‘);

X:=Xn;

 

 

While X <= Xk Do Begin

 

If X <= A Then

 

 

Y:=SQRT(ABS(X)+9.8)/(SQR(B)-SIN(X)/COS(X))

Else Y:=EXP(X)+X/(X-A);

Writeln(X:8:3, Y:10:3);

X := X + dX;

End;

End.

Контрольный пример.

Исходные данные A=0,3, B = 2, Xn = 0,1, Xk = 0,6, dX= 0,1. В

результате расчета получится следующая таблица:

--------------------------------------

X Y

--------------------------------------

0.100 0.807

0.200 0.833

0.300 0.861

0.400 5.492

0.500 4.149

0.600 3.822

 

58

 

 

 

Начало

 

 

 

Ввод

 

 

 

B, A

 

 

 

Ввод

 

 

 

Xn,Xk,dX

 

 

 

X=Xn

 

 

Нет

X Xk

 

 

 

 

 

Конец

Да

 

 

Нет

X A

Да

 

x

 

 

 

y = ex + x a

 

y =

x +9,8

 

 

 

b2 tgx

 

Вывод

 

 

 

X,Y

 

 

 

X=X+dX

 

 

Рисунок 28 – Алгоритм решения примера 6.3.1 (цикл с предусловием)

Пример 6.3.2. Разработать блок-схему алгоритма и программу на языке Pascal для вычисления функции М:

 

 

 

β

) α,

если n =1

(1

+

 

 

sinθ

M =

 

 

 

 

(1+n

β

) γ,

если n = 2

 

 

 

 

cosθ

 

 

 

 

 

при β ={20; 25; 30; 35; 40; 45; 50; 55; 60}

Как следует из условия задачи начальное значение аргумента βн=20, конечное βк=60, шаг изменения аргумента β =5.

59

Все переменные и функции аналогичны и рассмотрены в примере 6.1.2. К исходным значениям необходимо добавить переменные Bn, Bk и dB. Переменная BETA является переменной цикла и не вводится.

При составлении алгоритма решения данной задачи, возможно, использовать как оператор цикла с предусловием, так и оператор цикла с постусловием. Алгоритм решения задачи представлен на рисунке 29 (цикл с постусловием).

Начало

 

 

 

Ввод

 

 

 

N,θ,α,γ

 

 

 

Ввод

 

 

 

βн, βк,∆β

 

 

 

β = βн

 

 

 

N = 1

Да

 

 

 

 

 

 

 

β

 

Нет

M = (1+ sinθ ) α

N = 2

Да

 

 

 

 

 

Нет

M = (1+n

β

) γ

 

 

cosθ

 

Вывод

 

 

 

β,M

β= β+∆β β > βк Нет

Да

Конец Рисунок 29 – Алгоритм решения примера 6.3.2 (цикл с постусловием)

Текст программы на языке Pascal: