Описать класс Note музыкальных звуков - C#
Формулировка задачи:
В европейской музыке весь диапазон музыкальных звуков делится на
октавы, которые можно пронумеровать числами от −3 до 5. Октавы с неположи-
тельными номерами имеют собственные названия: субконтроктава (−3), контр-
октава (−2), большая октава (−1), малая октава (0).
В каждой октаве 12 музыкальных звуков (нот): до, до-диез, ре, ре-диез, ми,
фа, фа-диез, соль, соль-диез, ля, ля-диез, си.
Описать класс Note музыкальных звуков. Определить в нем:
• конструктор, принимающий номер октавы и номер звука (считать, что но-
та до имеет номер 0);
• копирующий конструктор;
• метод Frequency, возвращающий частоту ноты (нота ля первой октавы име-
ет частоту 440 Гц, частота каждой следующей ноты больше в p12 2 раз);
• операции прибавления и вычитания целого числа, позволяющие получить
следующие и предыдущие звуки в общей последовательности;
5 Структуры и классы | 25• перегруженный метод ToString, возвращающий текстовое описание звука
(например, «до-диез 2-й октавы» или «ля субконтроктавы»).
Решение задачи: «Описать класс Note музыкальных звуков»
textual
Листинг программы
using System; namespace Noteproject { enum Notes { До=0, ДоДиез, Ре, РеДиез, Ми, Фа, ФаДиез, Соль, СольДиез, Ля, Лядиез, Си } enum Octava { Субконтрактова=-3, Контрактова, Большая, Малая, Первая, Вторая, Третья, Четвертая, Пятая } class NoteClass:ICloneable { public double Frequency { get; set; } private Octava Octava { get; set; } private Notes Nota { get; set; } private readonly double[] _sub; public NoteClass(Octava octava,Notes note) { Octava = octava; Nota = note; _sub = new double[] {16352, 17324, 18353, 19445, 20602, 21827, 23125, 24500, 25957, 27500, 29135, 30868}; Freq(); } public NoteClass(Octava o,Notes n,double freq):this(o,n) { Frequency = freq; } private void Freq() { var n = (int) Octava+3 ; double p = _sub[(int) Nota]; for (int i = 0; i < n; i++) { p *= 2; } this.Frequency = p; } public override string ToString() { return "Октава "+ this.Octava + " " +"Нота "+ this.Nota +" "+"Частота "+ string.Format("{0:##,###}Hz",Frequency); } public object Clone() { return new NoteClass(Octava, Nota, Frequency); } public static NoteClass operator +(NoteClass n, int count) { return new NoteClass(n.Octava,n.Nota,n.Frequency+count); } public static NoteClass operator -(NoteClass n, int count) { return new NoteClass(n.Octava, n.Nota, n.Frequency - count); } } class Program { static void Main() { NoteClass[]notes=new NoteClass[] { new NoteClass(Octava.Большая,Notes.Соль), new NoteClass(Octava.Контрактова,Notes.ДоДиез), new NoteClass(Octava.Пятая,Notes.Фа), new NoteClass(Octava.Третья, Notes.Ми), }; foreach (var note in notes) { Console.WriteLine(note); } Console.WriteLine(); NoteClass n=new NoteClass(Octava.Первая,Notes.Ля); Console.WriteLine(n); NoteClass n1 = n + 5; Console.WriteLine(n1); Console.WriteLine("Клонирование:"); NoteClass n2 = n1.Clone() as NoteClass; Console.WriteLine(n2); Console.ReadKey(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д