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

алгоритмы

.pdf
Скачиваний:
30
Добавлен:
27.05.2015
Размер:
365.18 Кб
Скачать

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

После того, как будут введены и обработаны все n элементов последовательности, необходимо закончить цикл, вывести найденный максимальный элемент последовательности и завершить алгоритм.

Блок-схема алгоритма поиска максимального элемента последовательности

Ввод: n

Ввод: а

Мах = а

i = 2, n, 1

Ввод: a

Нет

Да

 

 

a > Max

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Max = a

 

 

 

 

 

 

 

 

 

 

 

 

Вывод: Max

21

Сортировка элементов одномерного массива

Задача 3. Задан одномерный массив В размера n. Составить алгоритм сортировки элементов массива по возрастанию.

Массив характеризуется размерностью и размером. Размерностью массива является число измерений, которое определяется по числу индексов при обозначении элементов массива. Размер – это границы изменения значений индексов по каждому измерению. Одномерный массив В имеет размерность 1, так как элементы массива обозначаются с помощью одного индекса (Вi), и размер n.

Сортировка заключается в перестановке элементов массива таким образом, чтобы они были расположены в порядке возрастания (убывания) значений с возрастанием номера элемента. Реализация простейшего алгоритма сортировки такова. В одномерным массиве отыскивается элемент с наименьшим значением и меняется местами с первым элементом. Аналогичные действия выполняются с остальными (n – 1) элементами массива, затем с (n – 2) элементами и т.д., пока не останется один элемент – последний, который будет иметь наибольшее значение и будет располагаться на последнем месте.

При разработке алгоритма необходимо сначала организовать ввод массива: ввести количество элементов (n), а также сами элементы массива. Для ввода элементов одномерного массива обычно используется цикл с параметром, так как количество элементов известно из условия задачи, и их нужно вводить последовательно друг за другом начиная с первого. Таким образом, в цикле переменная i, которая определяет номер вводимого элемента Вi, будет изменяться от 1 до n с шагом 1. В теле цикла вводятся значения элементов одномерного массива Вi.

Для сортировки введенных элементов массива необходимо использовать вложенные циклы. Во внешнем цикле переменная i будет изменяться от 1 до (n - 1) с шагом 1. В теле внешнего цикла нужно находить минимальное значение в массиве, размер которого уменьшается в зависимости от того, в который раз происходит поиск минимума: в 1-й раз отыскивается минимум среди элементов

В1, В2,..., Вn, во 2-й - среди элементов B2,..., Вn, в i-й - среди элементов Bi,..., Вn. На каждом шаге запоминается минимальный элемент

(Min) и его номер (k). Для организации такого поиска организуется внутренний цикл по переменной j, которая будет изменяться от

22

(i+1) до n с шагом 1. После нахождения во внутреннем цикле по j минимального элемента, во внешнем цикле по i его нужно поменять местами с i-ым элементом массива.

Блок-схема алгоритма сортировки элементов одномерного массива по возрастанию

Ввод: n

i = 1, n, 1

Ввод: Вi

i

= 1, n - 1, 1

k = i ; Min = Bi

j

= i+1, n, 1

Нет

 

Bi+1 < Min

Да

Min = Bi+1 ; k = i + 1

 

 

Bk = Bi ; Bi = Min

i = 1, n, 1

Вывод: Вi

23

Вычисление суммы цифр в записи числа

Задача 4. Задано натуральное число. Составить алгоритм вычисления суммы цифр в записи числа.

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

Для выделения цифры из числа необходимо: разделить число на 10, целую часть частного умножить на 10 и полученный результат отнять от целой части числа. Полученную цифру добавить в сумму. Эту последовательность действий нужно повторять до тех пор, пока целая часть очередного частного не станет равна 0.

Например, задано число 1234. На каждом шаге необходимо выполнить следующую последовательность действий:

1). 1234 : 10 = 123,4 1234 – 123 10 = 4 s = 4 2). 123 : 10 = 12,3 123 – 12 10 = 3 s = 4 + 3 = 7 3). 12 : 10 = 1,2 12 – 1 10 = 2 s = 7 + 2 = 9

4). 1 : 10 = 0,1 1 – 0 10 = 1 s = 9 + 1 = 10

Деление прекращается, так как целая часть частного стала равна 0. Таким образом, сумма цифр числа 1234 равна 10.

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

Для обработки введенного числового значения (b) нужно использовать цикл с постусловием, так как количество повторений тела цикла из условия задачи неизвестно и будет определяться в процессе его выполнения.

Переменной цикла будет величина del, которая является целой частью частного от деления числового значения b на 10. При каждом выполнении тела цикла выделяется одна цифра (сh) и добавляется в сумму (s). Текущее значение переменной b принимается равным целой части очередного частного от деления на 10. Деление продолжается до тех пор, пока целая часть частного не станет равна

0.

После того, как выполнение цикла будет закончено, необходимо вывести полученную сумму цифр и завершить алгоритм.

24

Блок-схема алгоритма вычисления суммы цифр в записи числа

Ввод: b

s = 0

del = b10

ch = b del 10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s = s + ch

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b = del

 

 

 

 

 

 

 

 

 

Нет

 

Да

 

 

del = 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вывод: s

 

 

 

 

 

 

 

 

 

Целая часть числового значения обозначается в алгоритме квадратными скобками.

Поиск минимального элемента матрицы

Задача 5. Задана матрица C размера m×n. Составить алгоритм поиска минимального элемента матрицы.

Матрица – это двумерный массив, который представляет собой прямоугольную таблицу чисел. В общем случае матрица C имеет следующий вид:

25

 

С

С

С

...

C

 

 

 

11

 

12

 

13

 

 

1n

 

C21

C22

C23

...

C2n

С = C31

C32

C33

...

C3n

,

 

 

 

 

 

 

 

...

...

 

... ... ...

 

C

m1

C

m2

C

m3

...

C

 

 

 

 

 

 

 

 

mn

где m – количество строк, n – количество столбцов матрицы. Обращение к элементу двумерного массива производится по

имени массива с указанием индексов, что обеспечивает прямой доступ к любому элементу массива, например: С11 , Cij,, Сi3 и т.д.

Элемент двумерного массива (матрицы) содержит два индекса, причем первый индекс всегда обозначает номер строки матрицы, а второй – номер столбца.

Ввод/вывод массива производится поэлементно, с использованием циклического алгоритма. Для матрицы допускается ввод как по строкам, так и по столбцам. Способ ввода матрицы определяется тем, какой индекс (строки или столбца) изменяется первым.

При разработке алгоритма необходимо сначала организовать ввод матрицы: ввести количество строк (m) и столбцов (n) матрицы, а также ее элементы. Для ввода элементов массива обычно используют вложенные циклы с параметром, так как количество элементов известно из условия задачи, и их нужно вводить последовательно друг за другом начиная с первого. Таким образом, во внешнем цикле переменная i, которая определяет номер строки в индексе вводимого элемента Cij, будет изменяться от 1 до m с шагом 1, а во внутреннем цикле переменная j, которая определяет номер столбца в индексе вводимого элемента Cij, будет изменяться от 1 до n с шагом 1.

Затем следует определить начальное значение переменной, в которую будет помещаться минимальная величина (Min). В качестве начального минимального значения (Min) можно принять пер-

вый элемент заданной матрицы ( С11 ).

Для обработки матрицы обычно используются вложенные циклы с параметром, если необходимо обрабатывать последовательно один элемент за другим, начиная с первого. В теле внутреннего цикла необходимо сравнивать элемент массива Cij c минимальным значением (Мin). Если значение Cij меньше минимального значе-

26

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

После того, как будут обработаны все элементы матрицы, необходимо закончить внешний цикл, вывести полученное минимальное значение и завершить алгоритм.

Следует отметить, что внутренний цикл выполняется полностью для каждого значения переменной внешнего цикла.

Например, если i – переменная внешнего цикла, а j – переменная внутреннего цикла, тогда:

для i = 1 переменная j принимает значения j = 1, 2, 3, …, n; для i = 2 переменная j принимает значения j = 1, 2, 3, …, n; для i = 3 переменная j принимает значения j = 1, 2, 3, …, n;

. . .

для i=m переменная j принимает значения j = 1, 2, 3, …, n.

Блок-схема алгоритма поиска минимального элемента матрицы

Ввод: m, n

i = 1, m, 1

j = 1, n, 1

Ввод: Cij

А

27

А

i = 1, m, 1

j = 1, n, 1

Вывод: Cij

Мin = С11

i = 1, m, 1

j = 1, n, 1

Нет

Да

 

 

Cij < Min

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Min = Cij

 

 

 

 

 

 

 

 

 

 

 

 

Вывод: Min

ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

Задание 1

1. Установить порядок выполнения операций для вычисления значения выражения F=(Y*Y+X)/(X-Y).

1Y=Y+X

2F=Y/(X-F)

3Y=Y*Y

4F=Y

28

2.Установить порядок выполнения операций так, чтобы при начальных значениях A=1, B=1, C=0, результирующим стало значение C=25.

1С=B+1

2A=A+1

3B=B+A+1

4С=С*5

3.Установить порядок выполнения операций для вычисления значения выражения F=X*(Y-X)+2*X.

1X=2*X

2Y=Y-F

3F=F*Y+X

4F=X

4.Установить порядок выполнения операций так, чтобы при начальных значениях A=0, B=-1, C=-2, результирующим стало значение C=1.

1С=B*2

2B=A*B

3С=С/2

4A=A-1

5.Установить порядок выполнения операций для вычисления значения выражения F=(X*X-Y)*Y+Y.

1F=F+Y

2F=F-Y

3F=F*Y

4F=X*X

 

Задание 2

1. Чему равно значение переменной d после выполнения фраг-

мента алгоритма?

 

k := 30

 

 

выбор

div( k, 12 ) = 2;

d := k;

при

при

mod( k, 12 ) < 5;

d := 2;

при

mod( k, 12 ) > 9;

d := 3;

иначе

 

d := 1;

все

 

 

29

2.Для заданного фрагмента алгоритма подобрать начальное значение Y так, чтобы при начальном значении X=-2 результирующим значением стало A=8.

если X>0 то A=X+5

иначе A=Y+X

если A<0 то A=(X*X)/2

иначе A=X*Y

3.Чему равно значение A при X=3, Y=-6 после выполнения фрагмента алгоритма?

если Y<X, то Y=Y+X если Y<0 то Y=-Y если X<0, то A=X*2

иначе A=X*Y

если A<Y то A=A+Y/2

4.Какие значения примут переменные c и d в результате выполнения фрагмента алгоритма (abs(x) - функция определения модуля x) с начальными значениями a=-5; b=5?

если a*b<0 то c=a-b иначе c=a+b если c ≠ 0 то c = c / abs(c)

d=c*a

5.Задан фрагмент алгоритма, в котором пропущено условие. Вставить условие так, чтобы данный фрагмент алгоритма выяснял, является ли Z гипотенузой прямоугольного треугольника со сторо-

нами X, Y, Z. F=0;

если ______________ то F=1

если F=1 то вывести «ДА» иначе вывести «НЕТ»

Задание 3

1. Какое значение примет переменная A после выполнения фрагмента алгоритма?

A:=10;

I:=1;

нц пока A>I

A:=A-1

I:=I+1

кц

30