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

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

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

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

Добавлен: 26.10.2023

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

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

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

Министерство науки и высшего образования Российской федерации
Федеральное государственное образовательное учреждение высшего образования
«Уфимский государственный нефтяной технический университет»
Институт цифровых систем, автоматизации и энергетики
Кафедра вычислительной техники и инженерной кибернетики
Лабораторная работа №4 по дисциплине
«Программирование и алгоритмизация» на тему:
«ОБРАБОТКА ОДНОМЕРНЫХ МАССИВОВ»
Вариант №945
Выполнил:
Студент гр. АГдсз-22-01
Д. Р. Сафиуллина
Проверил: ст. преподаватель
Р. М. Харисов
Уфа 2023

Постановка задачи
Создать программу получения и обработки одномерного массива-вектора, состоящую из 4-х частей.
Часть 1: Вычислить значения 39 элементов одномерного целочисленного массива R в интервале (-8, 7) с использованием генератора случайных чисел.
Часть 2: “Вычислить среднегеометрическое значение четных по номеру элементов первой четверти массива.
Часть 3: Определить значение, по модулю самое близкое к заданному числу С среди принадлежащих [a/2; b/2] элементов последней трети массива.
Часть 4: “Упорядочить положительные элементы второй четверти массива по убыванию значений.
Анализ
Исходными данными являются значения количества элементов в массиве R.
Порядок решения задачи: сначала нужно получить одномерный маcсив, размером 39 (часть 1); затем можно вычислить среднегеометрическое значение четных по номеру элементов первой четверти массива - по модулю(!), т.к. есть и отрицательные значения(часть 2); затем вычислить самое близкое к заданному числу значение C (часть 3). Отсортировать положительные элементы второй четверти массива по убыванию значений
(часть 4)
Алгоритм
Для первой части:

Для второй части
Для третьей части

Для четвертой части:
Листинг
Часть 1
from random import *
R = [randint(-8,7) for i in range(39)] print (R)
Часть 2
import math from random import * array = [randint(-8,7) for i in range(39)] print (array) k=0 a=1 for i in range(0,10): if (i % 2 == 0) and ((array[i]<0) or (array[i]>0)) :
a = a*array[i] k = k+1
P = pow(abs(a), (1/k)) print("Среднегеометрическое массива R =",P)
Часть 3
import math from random import * array = [randint(-8,7) for i in range(39)] print (array)
Min = max(array)
C=3 a=array[0] for i in range(26,39): if ((array[i]<=3.5) and (array[i]>=-4)) and(abs((C-abs(array[i])) Min = abs(abs(C)-abs(array[i])) a = array[i] print("Самое близкое по модулю =",a)
Часть 4
import math from random import * lst = [randint(-8,7) for i in range(39)] print("Исходный массив") print (lst) def mySort(a): temp = [] for i in range(10,20): if a[i] > 0: temp.append(a[i]) #закидываем в конец a[i] = " " temp.sort() #сортировка for i in range(10,20): if a[i] == ' ': a[i] = temp.pop() #возвращаем на прежние номера, уже отсортированные return a print("Отсортированный массив") print(mySort(lst))
Результаты и выводы:
Результаты по первой части:


Алгоритм вывод массив размером N = 39, каждый повторение элементы различны от предыдущего. Задача реализована верно.
Результат для второй части:
Программа нашла среднегеометрическое значение четных по номеру элементов первой четверти массива. Т.к. в массиве присутствуют отрицательные элементы, брался модуль от произведения. R =
2.491461879231035. Результат совпадает с ручным расчетом.
Результат для третьей части:
Программа вычислила, что самое близкое по модулю к нашему заданному числу C = 3 – есть 3, среди всех элементов последней трети массива принадлежащих отрезку [-4; 3.5]. Программа работает верно для многих повторений. Код составлен верно.
Результат для четвертой части:
Из рисунка видно, что программа сортирует положительные элементы в порядке убывания по значению во второй четверти массива. Работа программы верна для множества повторений – код составлен верно.