Файл: Отчётпо лабораторной работе 4Обработка одномерных массивов данных.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.11.2023

Просмотров: 33

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования «Уфимский государственный нефтяной технический университет»
Кафедра вычислительной техники и инженерной кибернетики
ОТЧЁТ
по лабораторной работе №4
“Обработка одномерных массивов данных”
Вариант № 678
Студент гр. ГБ-21-01
____________
А.Р.Ишбулатов
(подпись, дата)
Ст. преподаватель
____________
Р.М.Харисов
(подпись, дата)
Уфа 2022

2
1. Постановка задачи
Разработать программу получения и обработки одномерного массива, состоящую
из 4 частей.
Часть 1. Вычислить значения 36 элементов одномерного целочисленного массива W
в интервале (-10,6) с использованием генератора случайных чисел.
Для получения целого случайного числа
x на отрезке [a, b] в языке Phyton используется следующий оператор:
x : [random.randint(a,b) in range (N)]
Чтобы при каждом новом запуске программы получить новую последовательность случайных чисел, необходимо в начале программы исполнить оператор RANDOM.
Часть 2. Вычислить среднеарифметическое значение нечетных по значению элементов последний четверти массива.
Среднеарифметическое значение элементов заданного множества А = {a1, a2, a3, …,
an}
вычисляется по формуле n
1
i i
a n
1
n n
a a
a a
S
2 1
=
=
+
+
+
=
Часть 3. Определить максимальное значение ненулевых элементов первой трети массива.
Определить элемент массива – это значит найти его положение (индекс) в массиве и его значение. Если требуемому условию удовлетворяют несколько элементов, то нужно установить индекс и значение каждого из них.
Часть 4. Упорядочить каждые третьи элементы первой четверти по возрастанию квадратов значений.
В исходном массиве упорядочиваются только те элементы, которые удовлетворяют заданным условиям, при этом остальные элементы своё положение сохраняют и вспомогательный массив не используется.
Для проверки правильности упорядочения всего массива или его части выводить все его элементы.
Обязательные требования к программе.
1. Программу разработать для решения задачи в общем виде, для произвольных значений исходных данных: количества элементов n (2<=n<=100) и отрезка [a, b] (b>=a).
2. Решение каждой части в программе реализовать в виде процедуры.
3. Предусмотреть 3 варианта исполнения программы:

Тестовый расчёт

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

Решение задачи для новой последовательности случайных значений элементов массива при новом запуске программы (c Randomize).


3
2. Анализ задачи.
Часть 1.
Исходными данными являются значения количества элементов в массиве n и отрезок
[a, b].
Порядок решения задачи: сначала нужно получить одномерный массив (часть 1),
затем можно вычислить параметр массива (часть 2) или найти нужный элемент (часть 3).
Упорядочение массива (часть 4) нужно выполнить в последнюю очередь, так как перестановка элементов массива при упорядочении может повлиять на вычисление параметра массива и определение нужного элемента.
Для лучшего понимания задачи, выявления её особенностей выполним тестовый расчёт.
Возьмём любые исходные данные, например n=12, а =-3, b = 5. Запишем 12
случайных целых чисел от -3 до 5 – это значения элементов массива W для тестового расчёта.
0, 2, 3, 4, 1, -3, 3, 5, -1, 0, 1, -2
Часть 2.
Для вычисления среднеарифметического значения сначала нужно выделить в общем виде номера элементов последний четверти массива. Номер первого найдем по формуле:
3*12/4+1=10. Номер последнего 12
Запишем элементы третьей четверти массива
X
10
x
11
x
12 0
1
-2
Выделим подчёркиванием нужные элементы: нечетные по значению.
Нужных элементов к = 2. Среднеарифметическое значение
S
t
=
2 / 2 1
=
При вычислении S
t может возникнуть следующая проблема:
1. Не будет нужных элементов (к = 0), например, если все элементы третьей четверти равны 0. В этом случае выведем : «Для среднего арифметического нет нужных элементов».
Выявленные возможные проблемы нужно учесть при разработке алгоритма.
Часть 3.
Для определения максимального значения сначала выделим элементы первой трети массива: номер первого элемента: 1, номер последнего будет 12/3=4.
Запишем элементы первой трети массивы:
X
1
x
2
x
3
x
4 0
2 3
4
Выделим подчёркиванием нужные элементы: ненулевые. Нужных элементов 3,
максимальное значение равно 4, такое значение имеет один элемент: x
4 =
4.
При решении данной задачи могут быть следующие ситуации:

4 1. Не будет нужных элементов;
2. Будет единственный элемент с максимальным значением;
3. Будет множество элементов с максимальным значением.
Часть 4.
При выборочном упорядочивании каждых третьих элементов сначала нужно выделить необходимую часть массива, в нашем случае это первая четверть.
Запишем каждые третьи элементы всего массива:
Элементы x
1
x
2
x
3
Значения элементов
0 2
3
Квадрат значения
0 4
9
Упорядоченные элементы
0 4
9
Всего три числа подошло к необходимым нам условиям. В этом случае, массив будет упорядочен. Кроме этого, может возникнуть проблема, что таких чисел вообще не будет. В
этом случае массив останется неизмененным.
Алгоритм решения задачи.
При разработке алгоритме будем использовать метод декомпозиции: решение задачи сначала опишем в виде основного алгоритма, использующего вспомогательные алгоритмы решения задач частей задания. Затем опишем вспомогательные алгоритмы – модули решения задач каждой части. При разработке и описании алгоритмов используются элементарные структуры алгоритмов, составляющие основу структурного программирования.
Основной алгоритм.
При разработке основного алгоритма нужно учесть обязательные требования,
сформулированные в постановке задачи и рекомендации по разработке сложных программ:
1. Необходимо задачу решать в общем виде, для любых допустимых значений исходных данных.
2. Предусмотреть возможность выполнения 3 вариантов расчёта.
Введём вспомогательную переменную V
t для управления вариантом расчёта: если
V
t
=0 – тестовый расчёт, V
t
=1 – без Randomize, любое другое значение V
t
– расчёт с
Randomize.
3. Модули должны быть относительно независимы: обязательно иметь имя, свои входные, выходные и промежуточные данные, не использовать глобальные переменные.
4. Действия алгоритма поясняются на естественном языке, в обозначениях постановки задачи, не используются конструкции языка программирования.


5
3.1 Основной алгоритм.
S=0
K=0
Sa=0
i=3*N//4,N,1
Wi/2=1
S=S+Wi
K=K+1
YES
NO
K>0
NO
Вывод "Нет ответа"
YES
Sa=S/K
i=1,N,1
W=[random.randint(a,b) for i in range N
Вывод W
Начало
1
max=-10**30
i=1,N//3,1
Wi>0
YES
maxK=i
YES
NO
NO
Вывод max,
K
1
i=1, N//4, 2
Wi=0
Wj^2x=Wi
Wi=Wj
Wj=x j=i+1,N,2
Конец
Вывод Wi
Wj=0
YES
NO
YES
NO
YES
NO

4. Таблицы переменных задачи
Таблица переменных основного алгоритма
Смысл переменных
Обозначение
Тип переменной
Примечания в
алгоритме в
программе
Исходные данные:
Вариант расчёта
V
t
V
t
Целый
V
t

Z
Размер массива
N
N
Целый
1< n <100
Наименьшее значение элемента a
a
Целый a [-32761;
32767]
a <=b
Наибольшее значение элемента b
b
Целый b [-32761;
32767]
a <=b
Промежуточные данные:
i i
Целый i=
1
,
n
,
1
Номер элемента массива
Результаты:
S
S
Веществ.
S
t

R
Среднеарифметическое значение
Вектор
W
W
Одномерный массив
Таблица переменных алгоритма получения вектора (Part_1)
Смысл переменных
Обозначение
Тип переменной
Примечания в
алгоритме в
программе
Входные данные:
Вариант расчёта
V
t
V
t
Целый
V
t

Z
Размер массива
N
N
Целый
1< n <100
Наименьшее значение элемента a
a
Целый a [-32761;
32767], a <=b
Наибольшее значение элемента b
b
Целый b [-32761;
32767], a <=b
Промежуточные данные:
i i
Целый i=
1
,
n
,
1
Номер элемента массива
Выходные данные:
W
W
Одномерный массив
W[a;b]
Массив

8
Таблица переменных алгоритма вычисления среднеарифметического
значения (Part_2)
Смысл переменных
Обозначение
Тип переменной
Примечания в алгоритме в программе
Входные данные:
Размер массива
N
N
Целый
1Массив
W
W
Одномерный массив
W
i

[a;b]
Промежуточные данные:
i i
Целый i=
1
,
n
,
1
Номер элемента массива
Количество нужных элементов
K
K
Целый k≥0
Сумма
P
P
Целый
P Z
Выходные данные:
S
t
S
t
Вещественный
S
t

R
Среднеарифметическое значение
Таблица переменных алгоритма определения максимального элемента
(Part_3)
Смысл переменных
Обозначение
Тип переменной
Примечания в алгоритме в программе
Входные данные:
Размер массива
N
N
Целый
1Наименьшее значение элемента a
a
Целый
Наибольшее значение элемента b
b
Целый
Массив
W
W
Одномерный массив
W[a;b]
Промежуточные данные:
i i
Целый i=
1
,
n
,
1
Номер элемента массива
Результаты:
K
K
Целый
Номер максимального элемента
Значение максимального элемента max max
Целый


9
Таблица переменных алгоритма упорядочения массива (Part_4)
Смысл переменных
Обозначение
Тип переменной
Примечания в
алгоритме в программе
Входные данные:
Размер массива
N
N
Целый
1Массив
W
W
Одномерный массив
W
i

[a;b]
Промежуточные данные:
i i
Целый i=
1
,
n
,
1
Номер первого элемента в неупорядоченной части массива
Номер следующего элемента в неупорядоченной части массива j
j
Целый j=
1
,
n
,
1
Номер нужного элемента
K
K
Целый k Z
Буфер обмена c
c
Целый
Выходные данные:
W
W
Одномерный массив
Вектор
5. Текст программы на Python
import random
N=36
a=-10
b=6
W= [random.randint(a,b) for i in range(N)]
print(W,end="")
S=0
K=0
Sa=0
for i in range(3*N//4,N,1):
if W[i]%2==1:
if W[i]!=0:
S=S+W[i]
K=K+1
K!=0
Sa=S/K
print("Sa=",Sa)
max=-10**30
for i in range(0,N//4,1):
if W[i]>0:
if maxmax=W[i]

10
K=i print("max=",max)
print("K=",K)
for i in range(0,2*N//4,2):
W[i]!=0
for j in range(i+1,2*N//4,1):
W[j]!=0
if W[j]**2x=W[i]
W[i]=W[j]
W[j]=x print(W)
6. Результаты расчета
Результаты расчета тестового примера:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Исходный массив:
0, 2, 3, 4, 1, -3, 3, 5, -1, 0, 1, -
2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Среднее арифметическое St= 1.0000
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
максимальное значение ненулевых элементов первой трети массива max = 4
имеют W[4] = 4
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Упорядоченный массив каждой третьи элементов первой четверти по возрастанию квадратов значений:
0 2 3 4 1 -1 3 0 -1 0 1 1
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Результаты контрольного расчёта совпали с результатами ручного тестового расчёта,
что подтверждает правильность программы.
Результаты расчёта для заданных значений исходных данных (c Randomize).
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Исходный массив:
[4, -2, 3, -9, -4, 3, -10, 6, 6, -5, -6, 6, 6, 3, -7, -1, -6, -10, -4, -6, 6, -7,
-3, 1, -6, -2, -1, -7, -9, -9, -9, -6, -8, -8, -9, 4]
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Среднее арифметическое St=-8.6
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
максимальное значение ненулевых элементов первой трети массива max = 6
имеют [7] = 6
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Упорядоченный массив каждой третьи элементов первой четверти по возрастанию квадратов значений:
[-1, 4, -2, -9, 3, -4, 3, -10, 3, 6, -5, 6, 6, 6, -6, -7, -6, -10, -4, -6, 6, -7,
-3, 1, -6, -2, -1, -7, -9, -9, -9, -6, -8, -8, -9, 4]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Результаты расчёта для n=100, a=-10, b=10 c Randomize.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Исходный массив:

11
[-1, -8, 3, 3, 2, -4, -2, 1, -5, 9, -9, -3, -1, 1, -6, 10, -8, -3, -6, -9, -6,
10, -1, 9, -9, -9, -3, -9, 6, -5, 3, -10, -4, -9, 8, -7, 4, -4, -7, -5, 5, 7, 0,
1, -4, 3, 1, -3, 2, 7, -10, -5, 7, -8, 5, -8, -10, 0, 1, 0, 4, -1, 2, 7, 2, -9,
-10, -4, -1, -6, 6, -4, -2, 3, 2, 5, 9, -4, 9, 3, -6, 7, 1, 3, 2, -10, 2, 9, 9,
8, -8, 8, -3, -1, 5, 10, 6, -4, -2, -4]
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Среднее арифметическое St=
4.666666666666667
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
максимальное значение ненулевых элементов первой трети массива max=10
имеют W[15] = 10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Упорядоченный массив каждой третьи элементов первой четверти по возрастанию квадратов значений:
[0, -8, 1, 3, -1, -4, 1, 3, -1, 9, -1, -9, 1, -5, 1, 10, -2, -8, 2, -9, 2, 10, -
3, 9, -3, -9, 3, -9, -3, -9, -3, -10, 3, -9, -4, 8, -4, -7, 4, -7, -4, 7, -5, -6,
5, -6, -5, -6, 6, 7, -10, -5, 7, -8, 5, -8, -10, 0, 1, 0, 4, -1, 2, 7, 2, -9, -
10, -4, -1, -6, 6, -4, -2, 3, 2, 5, 9, -4, 9, 3, -6, 7, 1, 3, 2, -10, 2, 9, 9, 8,
-8, 8, -3, -1, 5, 10, 6, -4, -2, -4]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++