Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 1803.pdf
Скачиваний:
14
Добавлен:
30.04.2022
Размер:
2.24 Mб
Скачать

13.Если условие пункта 2 – ложь, то необходимо вывести сообщение о том, что в массиве не было положительных элементов, а значит, задача не имеет решения. Разветвление закончено.

14.Конец алгоритма.

2.11.Задания для самостоятельной работы

1.Вычислить сумму натуральных чётных чисел не больших заданного натурального числа N.

2.Вычислить факториал натурального числа N.

3.Дано натуральное число N. Определить K – количество делителей этого числа, меньших чем само заданное число N (Например, для N=12 делители 1, 2, 3, 4, 6. Количество K=5).

4.Дано натуральное число N. Определить, является ли оно простым. Натуральное число N называется простым, если оно делится без остатка только на единицу и на само себя. Число 19 - простое, так как делится только на 1 и 19,

ачисло 12 не является простым, так как делится на 1, 2, 3, 4, 6 и 12.

5.Из N заданных вещественных чисел определить наибольшее число.

6.Целые числа вводятся до тех пор, пока не ввели число 0. Найти наименьшее число среди положительных. Если найденный минимум – не единственный (есть повторы), определить, сколько их.

7.Водятся числа до тех пор, пока не введет число 0. Определить среднее арифметическое всех введенных чисел.

8.Водятся числа до тех пор, пока не введет число 0. Вычислить процент положительных и отрицательных чисел.

9.Вводится последовательность из N положительных целых чисел. Найти наименьшее число среди чётных элементов последовательности.

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

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

12.Водятся числа до тех пор, пока не введет число 0. Вычислить среднее значение чётных элементов последовательности.

13.Водится одномерный массив из N произвольных чисел, найти среднее значение отрицательных элементов этого массива.

14.Водится одномерный массив из N произвольных чисел, Определить, содержит ли массив хотя бы два соседних одинаковых числа.

15.Водятся числа до тех пор, пока не введет число 0. Найти наибольшее число среди чисел больших, чем заданное число K.

16.Водятся числа до тех пор, пока не введет число 0. Вычислить сумму и количество отрицательных чисел среди введенных.

56

17.Задан массив из N действительных чисел. Найти сумму положительных и сумму отрицательных элементов этого массива.

18.Задан массив из N элементов. Вычислить, сколько раз элементы в

19.Дано K массивов из N элементов, 2. Определить количество

массивов, элементы которых возрастают.

20. В массиве из N вещественных чисел определить количество простых чисел.

21. Вывести на экран таблицу значений утроенных косинусов в интервале от -B до B с шагом H.

22. Ввести целое положительное число K. Вычислить сумму натуральных нечётных чисел, не превышающих это число и произведение натуральных

чётных чисел, не превышающих число K.

 

 

 

 

 

 

 

 

 

23.

Ввести целое положительное число K. Вычислить количество

натуральных чисел кратных двойке и не превышающих число K.

 

24.

Задано

целое

положительное

 

 

число

n.

Определить

значение

выражения:

 

 

 

 

! .

 

 

 

выражения:

целое

= =1

n.

Определить

значение

25.

Задано

положительное

 

 

число

 

 

 

=

 

 

2 .

 

 

 

 

 

 

=1

 

 

 

 

 

 

 

!

 

 

 

 

 

 

 

 

26.

Задано

целое

положительное

 

 

число

n.

Определить

значение

выражения:

 

 

=1

−2 .

 

 

 

выражения:

целое

= (+1)!

n.

Определить

значение

27.

Задано

положительное

 

 

число

 

 

 

 

 

=1

3

 

 

 

выражения:

целое

положительное

(5)!

n.

Определить

значение

28.

Задано

 

=

 

 

 

число

 

 

 

 

 

 

10

 

 

 

 

.

 

 

 

 

 

 

 

p = 2

i

 

 

 

 

 

29.

Задано

целое

i=0

 

число

n.

Определить

значение

положительное

 

 

выражения:

57

 

 

 

 

 

 

i=515 i

 

 

 

 

 

 

 

 

 

число

 

N,

( >

1)

Составить алгоритм

вывода

30. Вводится целое

P =

 

 

 

 

.

 

 

 

 

 

.

наименьшего целого числа K, при

 

котором выполняется неравенство

 

 

 

 

 

 

(2n + 1)!

 

 

алгоритм

вывода

31. Вводится целое

число

 

N,

 

 

.

Составить

 

5 >

 

наибольшего целого числа K, при

котором выполняется неравенство

5 <

.

 

 

 

 

( >

1)

 

 

 

 

32.Найти минимальное число большее 100, которое нацело делится на 15.

33.Найти минимальное из трех заданных чисел.

34.Найти произведения двух наименьших чисел из трех заданных.

2.12. Вложенные циклы

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

В общем виде сложный цикл, например, может выглядеть как на рис. 70.

ПЦВШ=НЗ,КЗ

ПЦВТ=НЗ1,КЗ

ТЦ

Рис. 70. Блок-схема вложенного цикла

Здесь ТЦ – тело внутреннего цикла.

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

58

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

недопустимы. Например, конструкции на рисунке 71 а, 71 б – допустимы, а на рисунке 71 в – нет.

 

а)

[

 

 

 

 

 

 

 

 

 

 

б)

в)

 

[

 

 

 

 

 

 

Рис. 71

ПЦВШ – параметр внешнего цикла (т.е. счетчик повторений внешнего цикла).

ПЦВТ – параметр вложенного (внутреннего) цикла (т.е. счетчик повторений вложенного цикла).

НЗ, НЗ1 – начальное значение переменной цикла. КЗ, КЗ1 – конечное значение переменной цикла.

 

 

11

12

1

Пример 20. Вычислить сумму элементов в каждой строке двумерного

массива

=

21

22

2 .

 

 

.

 

.

.

.

 

 

1

2

 

Т. е. вычислить:

 

 

 

 

 

 

 

для

 

 

=

 

 

 

= 1, .

 

 

=1

 

 

 

 

Обозначения:

A – заданный массив;

N – количество строк в массиве A;

M – количество столбцов в массиве A;

i – номер текущей строки в заданном массиве;

j – номер текущего столбца в заданном массиве;

S – сумма элементов каждой строки заданного массива.

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

59

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

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

Вводить двумерный массив также нужно поэлементно, причем пусть порядок чтения элементов массива будет – по строкам, т.е. сначала считаем

первую строку, затем вторую и т.д.

Тогда внешний цикл –

по

строкам,

внутренний – по столбцам.

 

 

 

= 1,

 

Итак. В этом алгоритме в каждой строке (цикл по строкам,

 

)

повторяются действия:

 

 

 

 

– обнуляется сумма (для каждой строки накапливание суммы начинаете

сначала);

( = 1,

 

 

 

 

 

 

 

 

 

– далее в цикле по столбцам

 

) перебираются

все

столбцы

 

складываются;

 

 

 

выбранной строки, и элементы в них стоящие

 

 

 

 

– выводится результат сложения всех элементов выбранной строки. Блок-схема алгоритма решения представлена на рис. 72.

Алгоритм решения:

1. Вводим размерность массива N, M.

2. Вводим массив (чтение по строкам). Значит, внешний цикл с параметром i – номер строки изменяется от 1 до N. Для вех значений этого номера (т.е. для каждой строки) изменяющихся в указанном диапазоне выполняется вложенный цикл. Т.е. вложенный цикл выполнится N раз.

3. Вложенный цикл – по столбцам. Номер столбца изменяется от 1 до M. Для всех значений этого номера (т.е. для каждого столбца) изменяющегося в указанном диапазоне выполняется тело вложенного цикла.

4. Тело вложенного цикла содержит одно действие – элемент в

выбранной строке и выбранном столбце

вводится. Рекомендация.

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

5. Начинаем обрабатывать массив. Поскольку для каждой строки процесс накапливания суммы нужно начинать с нуля, то внешний цикл будет по

60

строкам. Для всех строк, номера которых будут изменяться от 1 до N, буем выполнять тело цикла, состоящее из трех действий.

6. Первое действие вложенного цикла – обнуление суммы текущей строки.

7. Второе действие вложенного цикла – циклическая конструкция, в которой сумма элементов строки накапливается. Т.е. это цикл по столбцам, номера которых меняются от 1 до M. Для каждого номера из указанного диапазона выполняется тело вложенного цикла.

8. Тело вложенного цикла состоит из одного действия. Вычисляется сумма. Т.е. к текущей сумме прибавляется элемент массива А с указанными

номерами i и j. Это действие

выполняется

пока

. Номер столбца

нет).

 

>

прохода внутреннего

модифицируется (увеличивается

на 1) после каждого

 

цикла. Вложенный цикл завершится, когда

 

(т.е. столбца с таким номером

9. Третье действие внешнего цикла, которое выполнится после оконча-

ния вложенного цикла – вывод номера текущей строки и вычисленной сумы элементов в этой строке.

10. Далее все циклически повторяется с пункта 6, пока .

11. Переменная внешнего цикла i изменяется (увеличивается) на 1 послекаждого> прохода внешнего цикла. Внешний цикл завершится, когда станет

(т.е. строки с таким номером нет). 12. Конец алгоритма.

Начало

Ввод

i=1,N

Вводj=1,M

i=1,N

S=0 Конец

j=1,M

=S+ Aij

Вывод i,S

Рис. 72. Блок-схема алгоритма задания примера 20

61

Пример 21. Найти

сумму элементов в каждом столбце двумерного

массива А, в котором N строк и M столбцов.

 

 

 

 

 

 

для

выше, только

 

=подобен

алгоритму=,1,приведенному

Алгоритм этой задачи

=1

 

 

 

 

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

Блок-схема алгоритма решения представлена на рис. 73.

Начало

Ввод N,M

i=1,N

j=1,M

j=1,M

S=0

Конец

i=1,N

Рис. 73. Блок-схема алгоритма решения задания примера 21

62

Пример 22.

двумерного массива:

где > 0.

Вычислить

сумму всех положительных элементов

 

 

= ,

=1 =1

Здесь нужно сложить все положительные элементы массива, а для этого понадобится перебрать все элементы двумерного массива и для каждого из них выяснять – текущий элемент положительный или нет.

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

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

В этом задании использованы обозначения предыдущей задачи, только здесь:

S – сумма всех положительных элементов массива. Блок-схема алгоритма на рис. 74.

Пример 23. Найти максимальный из положительных элементов двумерного массива.

Обозначения:

N – количество строк в массиве;

M – количество столбцов в массиве; i – номер строки в массиве;

j – номер столбца в массиве; A – двумерный массив;

MAX – максимальный из положительных элементов заданного массива.

Алгоритм этой задачи подобен алгоритму задачи 19. Только для ввода и обработки двумерного массива потребуется организовать вложенный цикл. В данном примере внешний цикл – по строкам (в нем перебираются все строки массива), а внутренний цикл – по столбцам (в нем(перебираются, ) все столбцы массива). Для каждого выбранного места в массиве производится анализ – положительный ли элемент, стоящий на текущем выбранном месте и если он

63

положительный превосходит ли он текущий максимум. Если оба эти условия – истина, то текущий максимум( , ) изменится, он станет равным элементу, стоящему на ткущем месте .

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

Направление обхода позиций элементов в массиве – поочередно выбираются все элементы в первой строке массива, когда она закончится, поочередно выбираются все элементы второй строки и так далее для всех строк массива. Блок-схема описанного алгоритма представлена на рис. 75.

Начало

Ввод

i=1,N

j=1,M

 

S=0

 

 

i=1,N

 

 

j=1,M

 

нет

 

да

 

 

 

 

 

Конец

 

Рис. 74. Блок-схема алгоритма решения задания примера 22

64

начало

Ввод N,M

 

i=1,N

 

 

 

 

j=1,M

 

 

 

 

 

 

 

нет

i=1,N

11

 

да

 

 

 

 

 

 

 

j=1,M

 

 

 

 

 

нет

 

да

 

 

 

 

нет да

элементов в массиве

конец

Рис. 75. Блок-схема алгоритма решения задания примера 23

65

Чтобы избежать длинных линий в блок схеме можно использовать разрывы. Тогда эта же блок схема будет выглядеть как на рис. 76 а) - рис.76 б) в случае, если разрывы линий потока были на одной странице и на разных страницах текста, а на рис. 77 – использованы только разрывы линий потока на одной странице текста.

Начало

Ввод N,M

1

i=1,N

 

j=1,M

1

а)

 

Ввод

L 85

а)

Рис. 76. Начало. Фрагмент блок-схемы решения задачи примера 23

66

 

L 84

 

 

 

11

3

i=1,N

 

 

 

2

j=1,M

3

 

нет

 

да

 

 

нет

 

да

 

=

 

 

2

 

нет

да

элементов в массиве

Вывод MAX

Конец

б)

Рис. 76. Окончание. Фрагмент блок-схемы решения задачи примера 23

67

Начало

Ввод N,M

1

i=1,N

 

j=1,M 1

3

i=1,N

11

 

2

j=1,M

3

нет

 

да

 

 

нет

 

да

 

 

 

 

2

 

нет

да

элементов в массиве

Вывод MAX

Конец

Рис. 77. Блок-схемы решения задачи примера 23

68