-
Программирование задач обработки одномерных массивов
Рассмотрим на примерах основные этапы решения задач обработки одномерных массивов.
Пример№1. Задан вектор X из n элементов, где n≤10. Разработать схему алгоритма и составить программу для формирования нового вектора Y по следующим формулам:

I Математическое описание задачи
1.
Дано: n, вектор X=Xi,
2. Основные зависимости, необходимые для решения задачи:
Yi=Xi-5 (1)
Yi=Xi+5 (2)
3. Ограничения:
Зависимость (1) выполняется, если Xi>5;
Зависимость (2) выполняется, если Xi5;
4. Найти: вектор
Y=Yi,
.
II Схема алгоритма для формирования нового вектора Y с краткими комментариями представлена на рис. 10.
|
Цикл
вычисления и вывода элементов нового
массива Y на основе исходного X по
заданным формулам, в зависимости от
результатов проверки условия. Будет
использовано 10 элементов вектора Рис. 10. Схема алгоритма формирования нового вектора Y |
III Таблица идентификации переменных и их типов
|
Математическая переменная |
i |
n |
X |
Y |
|
|
Машинная переменная |
i |
n |
X |
Y |
|
|
Тип |
integer |
real |
|||
IV. Текст программы на языке Фортран 90/95
program mas_1
implicit none
integer:: i, n=10
real, dimension(10) :: X,Y
X=(/5.,6.5,0.,-5.2,-6.8,7.1,3.,9.5,-2.2,10.7/) ! инициализация элементов массива
open (2, file='Rezult.txt')
write(2,'(5x,A)') '1. Пример вывода в виде таблицы
!Шапка таблицы
write (2,20); write (2,21); write (2,20)
do i=1,n
if (X(i)>5) then
Y(i)=X(i)-5
else
Y(i)=X(i)+5
end if
write(2,22) i,X(i),Y(i) ! вывод i-го элемента массивов X и Y
end do
write (2,20) !Низ таблицы
write(2,24) '2. Пример вывода в виде циклического списка
write(2,23) (i, X(i), i, Y(i), i=1,n)
! Используемые форматы
20 format (5x,26('-'))
21 format (5x,'| I | X(I) | Y(I) |')
22 format (5x,'|',i4,' |',f6.1,' |',f6.1,' |')
23 format (5x,'X(',i2,')=',f5.1,4x,'Y(',i2,')=',f5.1)
24 format (3x, A, /)
close(2)
end
V Результаты выполнения программы.
Содержимое файла 'Rezult.txt':


Пример№2.
В массиве целых чисел С={Сi},
i=
вычислить количество и сумму чётных,
положительных элементов. Если в массиве
таких элементов не окажется, то вывести
об этом сообщение Исходный массив
создать на интервале [-10,10] с помощью
встроенной функции для генерации
случайных чисел. Количество элементов
в массиве n25
задать произвольно.
I Математическое описание задачи
Введем обозначения: к – количество четных, положительных элементов исходного массива; S – их сумма.
1.
Дано: n,
{Сi},i=![]()
2. Основные зависимости:
к=к+1 (1)
S= S+ Сi (2)
3. Ограничения:
количество элементов в массиве n25;
зависимости (1) и (2) выполняются, если i-й элемент массива Сi >0 и четный;
если в массиве не окажется четных положительных элементов, то вывести об этом сообщение.
4. Найти: к и S.
Рекомендация: Для проверки четности элемента можно использовать встроенную функцию mod(x, y). Эта функция возвращает остаток от деления x на y. Результат имеет один знак с x.
II Схема алгоритма представлена на рис. 11.
III Таблица идентификации переменных и их типов
|
Математическая переменная |
i |
n |
k |
S |
С |
|
Машинная переменная |
i |
n |
k |
S |
С |
|
Тип |
integer |
||||
|
|
Рис. 11. Схема алгоритма
IV Текст программы на языке Фортран 90/95

V Результаты выполнения программы.
Протокол решения задачи.
n=? ! подсказка о вводе кол-ва элементов массива
15 ! значение, введенное с клавиатуры
m=? ! подсказка о вводе значения для инициализации датчика
! случайных чисел
999 ! введено произвольное целое число
Press any key to continue ! Вывод системного сообщения
Содержимое файла 'rez.txt':

Содержание отчета по лабораторной работе
-
Тема и цель лабораторной работы;
-
Условия задач, выданные преподавателем;
-
Математическое описание задач.
-
Схемы алгоритмов.
-
Тексты программ.
-
Листинги с текстом программ (с комментариями) и результатами выполнения.
-
Анализ результатов.
Контрольные вопросы.
-
Какие типовые алгоритмы используются при обработке массивов?
-
Как подсчитать сумму (произведение) всех элементов массива?
-
Как подсчитать сумму (произведение) особых элементов массива?
-
Какой принцип используется при подсчете количества особых элементов массива?
-
Как организуется вычисление среднего арифметического элементов массива?
-
Как организуется вычисление среднего геометрического элементов массива?
-
На каком принципе основан поиск максимального (минимального) элементов массива?
-
На каком принципе основан поиск максимального (минимального) среди особых элементов массива?
-
Назначение встроенной функции mod(x,y)
-
Использование встроенной функции mod(x,y) для проверки кратности чисел.
-
Назначение встроенной функции rаn(S);
Для справки:
Функция ran(S) возвращает псевдослучайное вещественное число из интервала от 0 до 1. Формальный аргумент S должен быть переменной целого типа. Перед обращением к функции ran(S) этой переменной нужно присвоить произвольное целое число, которое используется для инициализации формирования псевдослучайных чисел. Если при повторных запусках программы на выполнение значение S не изменять, то каждый раз будет формироваться одна и та же последовательность псевдослучайных чисел. Это удобно при отладке программы.
Внимание! В качестве фактического аргумента функции ran() можно использовать только целочисленную переменную.
Чтобы получить псевдослучайное число на интервале от a до b следует использовать обращение к функции ran(S) в виде: a + ran(S) (b-a).
Для получения целочисленных псевдослучайных чисел достаточно к результату, возвращаемому функцией ran( ) применить функцию int( ), которая возвращает целую часть вещественного числа.
Примеры создания псевдослучайных чисел:
a) вещественное число на интервале от -5 до 15:
S=15 (произвольное целое число) B =-5+ran(S)*20;
b) целое число на интервале от 20 до 35
r=5 (произвольное целое число) X:=int(20+ran(r)*15;
ст. преп. каф. ЭВМ Скабалланович Т.И.



