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

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

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

40

Данный алгоритм отличается от ранее рассмотренных (сумма и произведение) тем, что при выполнении условия происходит не накапливание текущего элемента в переменной (К), а увеличение этой переменной на единицу (т.е. счетчик).

Переменная (К), в которой происходит увеличение счетчика на единицу, имеет целочисленный тип. В нашем примере в раздел описания переменных необходимо добавить следующую строку:

K : Integer;

Алгоритм представлен на рисунке 17.

Элемент программы выглядит следующим образом:

k:=0;

For i:=1 to n do

If <условие> Then k:=k+1;

К = 0

 

I = 1

 

условие

Да

 

Нет

К = К + 1

 

I = I + 1

 

I N

Да

 

 

Нет

Рисунок 17– Алгоритм определения количества элементов массива удовлетворяющих заданному критерию

Необходимо отметить, что данный алгоритм всегда используется для определения количества элементов по заданному условию. Использование алгоритма без условия приведет к тому, что элемент K будет равен общему количеству элементов в массиве N.

41

5.5.8Нахождение минимального (максимального) элемента массива

Нахождение минимального (максимального) значения осуществляется последовательным перебором и сравнением всех элементов массива.

Вобщем случае для нахождения минимума (максимума) задаются начальным значением, равному какому либо элементу массива (или заведомо малой (большой) величине). Как правило, за начальное значение берется первый элемент массива, т.е. принимается, что MIN=A[1] или MAX=A[1]. Затем последовательно проверяется, так ли это, т.е. проверяется условие:

На максимум A[i] > MAX На минимум A[i] < MIN.

Если условие не выполняется, то в переменной MAX или MIN заносится текущий элемент массива.

Переменная MAX (MIN) должна иметь тот же тип что и массив.

Внашем примере в раздел описания переменных необходимо добавить следующую строку:

MAX : Real; или

MIN : Real;

Алгоритм нахождения минимума представлен на рисунке 18.

Элемент программы:

min:=a[1];

For i:=1 to n do

If a[i]<min Then min:=a[i];

Как уже отмечалось ранее, алгоритм нахождения максимума аналогичен алгоритму нахождения минимального значения. В алгоритм и текст программы необходимо вместо переменной MIN вписать переменную MAX, и заменить условие. Алгоритм и элемент программы (рисунок 19).

max:=a[1]; For i:=1 to n do

If a[i]>max Then max:=a[i];

42

MIN = A1

I = 1

MIN< AI

Нет

I = I + 1

I N

Да

MIN = AI

Да

Нет Рисунок 18 – Алгоритм нахождения минимального значения массива

MAX = A1

I = 1

MAX> AI

Нет

I = I + 1

I N

Да

MAX = AI

Да

Нет Рисунок 19 – Алгоритм нахождения максимального значения массива

43

5.5.9Нахождение порядкового номера элемента в массиве, отвечающего какому либо признаку

Алгоритм аналогичен алгоритму нахождения количества элементов массива удовлетворяющих заданному условию. В случае если условие выполняется, то в переменной фиксируется индекс элемента. Переменная носит целочисленный тип. В нашем примере в раздел описания переменных необходимо добавить следующую строку:

II : Integer;

Алгоритм выглядит следующим образом (рисунок 20).

II = 0

I = 1

условие

Нет

I = I + 1

I N

Нет

Да

II = I

Да

Рисунок 20 – Алгоритм нахождение порядкового номера элемента в массиве, отвечающего какому либо признаку

Элемент программы выглядит следующим образом:

ii:=1;

For i:=1 to n do

If <условие> Then ii:=i;

44

5.5.10 Среднее значение всех элементов массива

Для нахождения среднего значения одномерного массива необходимо просуммировать все значения массива и разделить найденную сумму на количество элементов:

n

Ai

X = i=1n .

Таким образом для нахождения среднего значения массива нам необходимо воспользоваться алгоритмом нахождения суммы (4.5.3) и дополнить его делением найденной суммы на количество элементов.

В раздел описания необходимо добавить вещественную переменную

SR: SR : REAL;

Алгоритм нахождения среднего значения одномерного массива представлен на рисунке 21.

S = 0

I = 1

S = S + Ai

I = I + 1

Да

I N

Нет

Sr = S / N

Рисунок 21 – Алгоритм нахождения среднего значения одномерного массива

Элемент программы выглядит следующим образом:

S:=0;

for i:=1 to n do

S:= S + A[I]; Sr := S / N;

45

5.5.11 Среднее значение элементов массива удовлетворяющих заданному критерию

Суть данного алгоритма практически полностью аналогична предыдущему. Отличия заключаются в том, что необходимо найти сумму элементов которые удовлетворяют заданному критерию и определить количество этих элементов. Т.е. используются алгоритмы нахождения суммы по критерию (4.5.4) и алгоритм нахождения количества элементов (4.5.7). Алгоритм представлен на рисунке 22.

S = 0

К = 0

I = 1

Да

условие

S = S + Ai

Нет

K = K + 1

I = I + 1

Да

I N

Нет

Sr = S / K

Рисунок 22 - Алгоритм нахождения среднего значения одномерного массива по заданному критерию

Элемент программы выглядит следующим образом:

S:=0;

K:=0;

46

for i:=1 to n do

If <условие> Then Begin

S:= S + A[I]; K:=K+1;

End; Sr := S / K;

47

6 ПРИМЕРЫ ВЫПОЛНЕНИЯ КОНТРОЛЬНЫХ ЗАДАНИЙ

6.1 Пример решения задания № 1

Задание №1 предусматривает разработку блок-схемы алгоритма и программы на языке Pascal разветвляющегося вычислительного процесса. Перед началом решения рекомендуется ознакомиться с главами 1, 2 и 3.

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

 

x +9,8

,

если

x a

 

2

 

 

tgx

 

 

 

y = b

 

 

 

 

ex + x ,

если

x > a

 

 

x a

 

 

 

 

 

 

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

X, B, A – вводимые переменные (исходные значения); Y – вычисляемая переменная.

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

Встроенные функции, используемые в задаче (см. таблицу 1): экспонента числа Х ( ex ) – функция EXP(X);

квадрат переменной B (b2)– функция SQR(B); модуль числа Х ( x ) – функция ABS(X);

квадратный корень ( x +9,8 ) – в данном случае вначале необходимо

записать первую функцию – квадратный корень, и в его аргументах записать модуль числа Х плюс значение 9,8 – SQRT(ABS(X)+9.8);

тангенс числа Х (tgx ) – поскольку такой функции в языке Pascal не существует, придется эту функцию преобразовать cossin xx - SIN(X)/COS(X).

Составление алгоритма решения задачи.

Необходимо ввести переменные X, B, A, вычислить и вывести полученное значение Y. В случае если значение Х меньше или равно значению А ( x a ) переменная Y вычисляется по первой зависимости

x +9,8

y = b2 tgx . В противном случае, если значение Х больше значения А

вычисляется вторая формула y = ex + x x a . То есть в этой задаче мы имеем первый вид разветвляющегося процесса (рисунок 3а) поскольку условия

48

взаимоисключают друг друга. Алгоритм решения задачи представлен на рисунке 23.

 

 

 

 

 

 

Начало

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ввод

 

 

 

 

 

 

X, B, A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Нет

 

 

 

 

 

 

 

X A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y = ex +

 

x

 

 

 

 

 

 

y = x +9,8

x a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b2 tgx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вывод

Y

Конец

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

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

Program zad1; Var X,B,A,Y:Real; Begin

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

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, ‘ и А = ‘,A:8:3, ‘ Y = ‘,Y:8:3); End.

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

Исходные данные X=2, A=5, B=2. Вычисления производятся по первой ветви ( x a ) значение Y = 0,555.

Исходные данные X=5, A=2, B=2. Вычисления производятся по второй ветви ( x > a ) значение Y = 150,000.

49

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

(1+

 

β

) α,

если n =1

sinθ

M =

 

 

 

(1+n

β

 

) γ,

если n = 2

 

 

 

 

cosθ

 

 

 

 

 

 

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

N, BETA ( β ),

ALFA (α ), TETA (θ ), GAMMA (γ ) – вводимые

переменные (исходные значения); M – вычисляемая переменная.

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

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

Косинус числа θ - функция COS(TETA);

В отличие от примера 6.1.1 в этой задаче будет использоваться второй вид разветвляющегося процесса (рисунок 3б) – условия не взаимоисключающие. При N = 1, будет вычисляться значение

M = (1+ sinβθ ) α , в противном случае переходим к проверке следующего условия N = 2. При выполнении этого условия вычислим значение функции

M = (1+n cosβθ ) γ .

Алгоритм решения задачи приведен на рисунке 24. Текст программы на языке Pascal:

Program zad2; Var

N, BETA, ALFA, TETA, GAMMA, M :Real; Begin

Write(‘ Введите переменные N,BETA,ALFA,TETA, GAMMA’);

Readln(N, BETA, ALFA, TETA, GAMMA);

If N = 1 Then M := (1+BETA/SIN(TETA))*ALFA;

If N = 2 Then M := (1+N*BETA/COS(TETA))*GAMMA; Writeln(‘При N = ‘,N:8:3, ‘ M = ‘,M:8:3);

End.