Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2022, 20:22   #1
web developer
Пользователь
 
Регистрация: 04.06.2022
Сообщений: 62
По умолчанию Обработка одномерного массива (поиск минимума и максимума, вставка элемента, сортировка)

Код:
from math import *
from random import *
n = int(input("Элементов в массиве(N<=30) N: "))
if n > 30: n = 30
elif n < 5: n = 5
amax = float(input("Пороговое значение А: "))
# Генерация массива и вывод
print("Начальное состояние")
mas = []
for i in range(n):
 mas.append(uniform(-5, 5))
 print("{0: 7.3f}".format(mas[i]), end=" ")
print()
# Нахождение суммы
# Обнуление элементов превысивших порог
asum = 0.0
for i in range(n): # от 0 до n-1
 if abs(mas[i]) < 1.0:
 asum = asum + mas[i]
 if abs(mas[i]) > amax:
 mas[i] = 0.0
# Поиск максимального элемента
max1 = abs(mas[0])
max2 = abs(mas[0])
for i in range(1,n):
 if max1 < abs(mas[i]):
 max2 = max1
 max1 = abs(mas[i])
 else:
 if max2 < abs(mas[i]):
 max2 = abs(mas[i])
j = 0
for i in range(n): # Сортировка массива
 if abs(mas[i]) > 0.00001:
 mas[j] = mas[i]
 j = j + 1
for i in range(j,n): # от j до n-1
 mas[i] = 0.0
61
print("Конечное состояние")
for i in range(n): # Массив после сортировки
 print("{0: 7.3f}".format(mas[i]), end=" ")
print()
print("max1={0:7.3f} max2={1:7.3f} sum={2:7.3f}"
 .format(max1, max2, asum))

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

a

Max); переместить вправо на одну позицию
элементы массива от точки вставки (последний элемент теряется);
освободившемуся элементу присвоить новое значение.
Упорядочить по возрастанию модулей разности элементов массива и нового
значения: |ai - a|

Последний раз редактировалось BDA; 09.06.2022 в 20:34.
web developer вне форума Ответить с цитированием
Старый 09.06.2022, 20:30   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Зачем создавать две одинаковые темы. И это не будет работать - код оформите. Python язык привередливый.
macomics вне форума Ответить с цитированием
Старый 09.06.2022, 20:38   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Лишнюю тему удалил. Тег CODE добавил, но некоторых отступов в коде все еще не хватает. Название темы должно отражать её суть. Кстати, что-то код маловато соответствует тексту условия.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 09.06.2022 в 20:40.
BDA вне форума Ответить с цитированием
Старый 09.06.2022, 20:47   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

по моему он что-то перемудрил.
Код:
from	random	import	random

# Заполнение массива вещественными числами (не нагружая пользователя)
minV, maxV = -1000, 1000
size = 25
arr = [minV + (maxV - minV) * random() for i in range(size)]

# Вывод массива, чтобы увидеть результат ввода
print("\nМассив чисел, заполненный числами от", minV, "до", maxV)
for i in range(size):
	print("arr[", i, "] = ", arr[i])

# Поиск первого минимального и последнего максимального элементов в массиве
minI = 0
maxI = 0
for i in range(1,size):
	if arr[minI] > arr[i]:
		minI = i
	if arr[maxI] <= arr[i]:
		maxI = i
print("Минимальный элемент имеет индекс", minI, ", его значение ", arr[minI])
print("Максимальный элемент имеет индекс", maxI, ", его значение ", arr[maxI])

# Ввод числа из требуемого диапазона значений
val = arr[minI] - 1
while (val < arr[minI]) or (val > arr[maxI]):
	print("Введите внедряемый элемент из диапазона", arr[minI], "..", arr[maxI])
	val = float(input())
	if (val < arr[minI]) or (val > arr[maxI]):
		print("Это число не подходит. Попробуйте еще раз.")

# Внедрение введенного числа в массив
idx = minI + round((maxI - minI) / 2)
for i in range(size - 1, idx, -1):
	arr[i] = arr[i - 1]
arr[idx] = val

# Вывод массива после внедрения числа
print("\nМассив чисел после внедрения нового элемента")
for i in range(size):
	print("arr[", i, "] = ", arr[i])

# Сортировка элементов и вывод результата
for i in range(size):
	minX = i
	for j in range(i + 1, size):
		if abs(arr[minX] - val) > abs(arr[j] - val):
			minX = j
	if i != minX:
		temp = arr[i] + arr[minX]
		arr[i] = temp - arr[i]
		arr[minX] = temp - arr[minX]
	print("arr[", i, "] = ", arr[i])

# Вывод результата в виде, который позволит проконтролировать сортировку
# print("\nМассив чисел, приведенный")
# for i in range(size):
# 	arr[i] = abs(arr[i] - val)
# 	print("arr[", i, "] = ", arr[i])

Последний раз редактировалось macomics; 09.06.2022 в 21:13.
macomics вне форума Ответить с цитированием
Старый 10.06.2022, 00:31   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

1. Когда то один учёный (одни относят это ко временам Франклина 1700-ые, а другие утверждают, что это предложение Ампера - 1820) принял для себя, а потом с ним согласились и остальные, что ток течёт от положительного потенциала к отрицательному.
Прошло некоторое количество лет. Другие учёные узнали, что носителем заряда является отрицательно заряженная частица (электрон) и она двигается от отрицательного потенциала к положительному (да, да, есть и йоны и катионы ..., но ...).
Надо бы изменить принятое ранее соглашение, но НЕТ!

2. Было время, когда персоналки стали появляться на рабочих местах достаточно массово. Один из символов клавиатуры называется "Коммерческое Эт" - @. Но, некоторые люди стали придумывать ему своё название и теперь почтовый адрес произносят в ругательном стиле - "собака". Мне знакомы такие названия, как "кошечка", "обезьянка". Ну почему не сказать просто: ViktorR At mail.ru. Это и короче и звучит благозвучнее.

И сколько ещё можно привести подобных примеров.

3. МФТИ открыли курсы по Python. И вот молодой человек, вероятно студент, рассказывает о списках и кортежах.
Списки он называет массивами, а корт'ежи - кортеж'ами. Он делает ударение на последнем слоге.
И вот, в очередной раз мне приходится объяснять своим студентам и преподавателям (править их произношение и понимание), что есть технические термины. Под этими терминами понимается конкретный смысл. Надо правильно ставить ударение, например, произнесите фразу:"Свадебные кортежи".

О представлении списка массивом говорил и писал тут неоднократно.

В Python нет такого понятия как массив, например, как это есть в Pascal или C, Basic, Fortran и др. языках. В Python понятие массива вводится опосредовано - через библиотеки, т.е. внешние структуры.
Существенным отличием списа от массива является не тип его элементов (можно строить списки с однотипными элементами), а то, как строится код, обрабатывающий элементы списка.
При обработке элемента списка код строится индивидуально, для каждого элемента. Не зависимо от того, одного или разного типа его элементы.
При обработке элементов массива, которые реализованы через библиотеки, код строится один на все элементы. Если грубо, то все элементы массива передаются в один обработчик, что существенно ускоряет обработку.
Со списком такого не будет, даже если этот список составлен из однотипных элементов.
Но тема развивается и поток неправильных терминов начинает спокойно распространяться от начинающих через ... и т.д.

PS: Довольно поздно и я утомился.
Возможно от этого и полезло это занудство.
Протестное состояние только усиливается.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 10.06.2022, 02:09   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Если будешь выбирать названия, то поплывешь как яхта. Если что-то ведет себя как массив, заполняется как массив и выводится как массив, то это УТКА. Если со списком код работает как с массивом, то пусть он будет массивом, пока не понадобятся основы построения (главное не забывать о чем говоришь).
Цитата:
Сообщение от ViktorR Посмотреть сообщение
Ну почему не сказать просто: ViktorR At mail.ru.
По-русски это звучит изуверски. Лучше сказать "на" или "у". ViktorR на/у mail.ru

add:
Цитата:
Сообщение от ViktorR Посмотреть сообщение
Мне знакомы такие названия, как "кошечка", "обезьянка".
Запишите еще "кракозябра".

Последний раз редактировалось macomics; 10.06.2022 в 03:53.
macomics вне форума Ответить с цитированием
Старый 10.06.2022, 08:48   #7
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

Ох у ж мне эти адепты плоской земли
Нет никаких кортежей, списков или массивов. Есть "ноль" и "единица".
Valick вне форума Ответить с цитированием
Старый 10.06.2022, 11:34   #8
web developer
Пользователь
 
Регистрация: 04.06.2022
Сообщений: 62
По умолчанию

macomics, спасибо большое
web developer вне форума Ответить с цитированием
Старый 10.06.2022, 18:18   #9
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Понимаю, что это не место для бла-бла, но отвечу:
macomics
Цитата:
Если будешь выбирать названия, то поплывешь как яхта. Если что-то ведет себя как массив, заполняется как массив и выводится как массив, то это УТКА. Если со списком код работает как с массивом, то пусть он будет массивом, пока не понадобятся основы построения (главное не забывать о чем говоришь).
Выбирая отдельные признаки (заполнение, вывод) и используя их в качестве признака для присвоения клички, можно далеко зайти.
Если у самолёта есть крылья и он может "двигаться" по земле, то это не значит, что он птица.
Во всякой структуре (объекте) есть правила и понятия. То, что вы используете кастрюлю для хранения штанов или как стул ещё не значит, что эта кастрюля стала шкафом или стулом.
Просто вещи надо называть своими именами и в этом нет никакой проблемы.
Попробуйте вашему массиву (аля списку) присвоить значение, которое отличается по типу. Со списком проблем не будет, а с массивом будут. Так что даже признак "заполнение" не работает по полной.
Цитата:
По-русски это звучит изуверски. Лучше сказать "на" или "у". ViktorR на/у mail.ru
Не стану возражать, но чаще используется калька. К тому же этот знак используется не только в почтовом адресе. У сущности есть имя и следует этим именем пользоваться, а не демонстрировать свою "грамотность".
Цитата:
Запишите еще "кракозябра".
Да не стану я составлять словарь всех кликух. А их, за моё время, набралось предостаточно.
Замечу, что "кракозябра" - это больше к тексту, который выводится не в подходящей кодировке, а не к этому символу. Тут, но только для вас: "белочка"

Valick
Цитата:
Ох у ж мне эти адепты плоской земли
Нет никаких кортежей, списков или массивов. Есть "ноль" и "единица".
Этот принцип ответа ("Сам дурак") мне хорошо известен. Вот только по существу есть что сказать?

PS: Если что не так или кто-то в обиду поймёт, то простите.
Нет никакого умысла. Просто я за букву Ё.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 11.06.2022, 01:13   #10
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Если у самолёта есть крылья и он может "двигаться" по земле, то это не значит, что он птица.
Во всякой структуре (объекте) есть правила и понятия. То, что вы используете кастрюлю для хранения штанов или как стул ещё не значит, что эта кастрюля стала шкафом или стулом.
Просто вещи надо называть своими именами и в этом нет никакой проблемы.
Попробуйте оптимизировать программу на Python с учетом токов порождаемых в процессоре при выполнении тех или иных его команд для уменьшения рассеиваемой мощности. Думаю вы всю жизнь на такое потратите. Если для задачи достаточно наличие структуры, которая ведет себя как массив, тогда чтобы не запутывать её решение - не надо применять лишние термины и особенности построения.

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск минимума и максимума в массиве. komrade Помощь студентам 3 12.06.2017 07:14
Обработка одномерного массива - поиск среднего, поиск минимального, сортировка (Паскаль) nadez Паскаль, Turbo Pascal, PascalABC.NET 3 18.03.2014 08:45
Плавное увеличение прозрачности элемента от минимума до максимума hon JavaScript, Ajax 3 26.05.2013 14:43
поиск максимума и минимума на sql volfmen15 БД в Delphi 4 07.02.2012 17:48
Поиск минимума/максимума в массиве gwarthy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 28.01.2010 22:27