Описать класс 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();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.667 из 5
Похожие ответы