rafael2003ggwp
11.07.2021 17:07

Python питон

создайте класс melody, который будет моделировать процесс подбора мелодии. для этого нужно уметь:
преобразовывать мелодию в строку, записывая ноты через запятую, первая нота с заглавной буквы,
добавлять ноту в конец уже имеющейся мелодии — метод append,
заменять последнюю ноту другой — метод replace_last (без проверки её существования),
удалять последнюю ноту — remove_last (также без проверки),
начинать всё с начала (стирать все ноты) — метод clear,
возвращать длину мелодии (количество нот в ней) при вызове функции len от неё,
а также транспонировать всю мелодию вверх или вниз (сдвиги > > и < < ), если это удаётся сделать внутри одной октавы (без циклического сдвига), если же хотя бы одна нота выходит за пределы октавы, возвращать копию исходной мелодии.
используйте те же константы, что и для предыдущей (тестирующая система будет импортировать их из вашего кода):
n = 7
pitches = ["до", "ре", "ми", "фа", "соль", "ля", "си"]
long_pitches = ["до-о", "ре-э", "ми-и", "фа-а", "со-оль", "ля-а", "си-и"]
intervals = ["прима", "секунда", "терция", "кварта", "квинта", "секста", "септима"]

формат ввода
каждый тест представляет собой код, в котором будут использоваться ваши классы.

1 пример
ввод

from solution import (
note, melody,
n, pitches,
long_pitches, intervals,
)
melody = melody([note('фа'), note('ми'), note('ре'), note('до'), note('ля'
print(melody)
melody.replace_last(note('си', true))
print(melody)
melody.remove_last()
print(melody)
melody.append(note('соль', true))
melody.append(note('соль', true))
print(melody)

вывод

фа, ми, ре, до, ля
фа, ми, ре, до, си-и
фа, ми, ре, до
фа, ми, ре, до, со-оль, со-оль

2 пример
ввод

from solution import (
note, melody,
n, pitches,
long_pitches, intervals,
)
melody = melody([note('до'), note('ми'), note('соль',
print(melody, len(melody))
print( len(
melody.clear()
print(melody, len(melody))

вывод

до, ми, со-оль 3
0
0

3 пример
ввод

from solution import (
note, melody,
n, pitches,
long_pitches,
intervals
)

melody = melody([note('ля'), note('соль'), note('ми'), note('до',
print(melody)
print(melody() > > 2)
melody_up = melody > > 1
melody_down = melody < < 1
melody.replace_last(note('соль'))
print('> > 1: ', melody_up)
print('< < 1: ', melody_down)
print(melody)

вывод

ля, соль, ми, до-о

> > 1: си, ля, фа, ре-э
< < 1: ля, соль, ми, до-о
ля, соль, ми, соль

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
VERLIA
25.05.2020 20:00
R=A+B+C, где
A=53₁₀,
B=653₈,
C=DA₁₆,
R=R₂
Эту задачу можно решать разными выбор зависит от умения решающего выполнять сложение в той или иной системе счисления. Но в любом варианте, сначала нужно представить А, В, С в какой-то одной системе счисления.

Посмотрим, как это будет выглядеть, если пользоваться привычной нам десятичной системой.
653₈ = 6·8²+5·8¹+3·8⁰ = 6·64+5·8+3 = 427
DA₁₆ = 13·16¹+10·16⁰ = 218
R₁₀ = 53+427+218 = 698
Переводим полученное число в двоичную систему, получая R₂:
698/2=349, остаток 0
349/2=174, остаток 1
174/2=87, остаток 0
87/2=43, остаток 1
43/2 =21, остаток 1
21/2=10, остаток 1
10/2=5, остаток 0
5/2=2, остаток 1
2/2=1, остаток 0
1/2=0, остаток 1
Выписываем остатки в обратном порядке: 1010111010.
Это и есть ответ.

А теперь допустим, что мы хорошо владеем восьмеричной системой счисления.
1) получим А₈
53/8=6, остаток 5
6/8=0, остаток 6
Выписываем остатки в обратном порядке: А₈=65
2) получим С₈, для чего перейдем сначала в двоичную систему
С₂=1101 1010 (просто заменяем каждую цифру четырьмя двоичными).
А теперь разобьем справа налево полученное значение по три разряда и каждую полученную триаду заменим восьмеричной цифрой.
11 011 010₂ = 332₈
3) Выполним сложение R₈=A₈+B₈+C₈
    65          740
+653        +332
       
  740        1272
Складывать в восьмеричной системе просто, если знать одну маленькую хитрость. 8 отличается от 10 на 2, поэтому и результат сложения в восьмеричной системе на 2 больше, чем в десятичной, если число превышает 7. Смотрим: 5+3=8, но это в десятичной, а в восьмеричной это на 2 больше, т.е. 10. Поэтому мы пишем 0 и +1 идет в следующий разряд. 6+5=11 и еще +1 от переноса, итого 12. Но в восьмеричной на 2 больше, т.е. 14. 4 пишем. +1 перенос. 6 и +1 от переноса - 7. Вот и получили 740.
4) Мы нашли R₈, переходим к R₂.
Заменяем каждую восьмеричную цифру тремя двоичными:
1272₈=1 010 111 010₂
Мы получили тот же ответ, что и в предыдущем расчета.

Так что - дело привычки. Второй вариант кажется "непосвященному" сложнее, но на самом деле в нем меньше арифметики и если нет под рукой калькулятора, то может оказаться и быстрее, и удобнее.

ответ: 1010111010
0,0(0 оценок)
Ответ:
falinova07
07.04.2023 20:22
Одно из "быстрых по написанию" решений, не учитывающих фактор наличия упорядоченности массивов. Это разумно: за решение - не та цена, за которую есть смысл составлять и отлаживать эффективный алгоритм поиска по упорядоченным массивам.

// PascalABC.NET 3.1, сборка 1256 от 21.06.2016
begin
  var x:=ArrRandom(ReadInteger('p='),-20,20).Sorted;
  var y:=ArrRandom(ReadInteger('q='),-10,15).Sorted;
  var z:=ArrRandom(ReadInteger('r='),1,18).Sorted;
  x.Println; y.Println; z.Println;
  var r:=x.Intersect(y.Intersect(z));
  if r.Count=0 then Writeln('Нет общих элементов')
  else begin Write ('Общие элементы: '); r.Println end
end.

Тестовое решение
p= 15
q= 13
r= 18
-19 -16 -15 -11 -7 -7 -2 0 0 2 4 7 10 14 20
-8 -6 -4 -4 -4 -3 -1 4 4 9 13 13 15
1 1 2 2 2 4 4 5 6 9 10 12 12 14 14 15 15 17
Общие элементы: 4
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота