Hodnota proměnné podle vstupu – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Hodnota proměnné podle vstupu – .NET – Fórum – Programujte.comHodnota proměnné podle vstupu – .NET – Fórum – Programujte.com

 

Honza
~ Anonymní uživatel
451 příspěvků
1. 11. 2012   #1
-
0
-

Ahoj, začínám v c# a nějak jsem narazil na console.beep, tak jsem si s tim hrál a chtěl sem počítač naučit skákal pes, to se mi nakonec povedlo, ale teď bych to chtěl udělat pěkně, pak možná aby hrál podle vstupu co napíšu, zatim píšu tóny do stringu. Nejdřív jsem si uložil frekvence tónů do int, a pak do stringu noty jak jdou za sebou. Potom jsem udělal cyklus, který by měl projet celý string a přehrávat tóny:

 static void Main(string[] args)
        {
           // int i;
           // for(i=0; i<200; i++)
            //{

              //  Console.WriteLine((char)i + "[" + i + "] ");
           // }

            Console.WriteLine();
            Console.WriteLine();
           
           
            int c = 262;
            int d = 294;
            int e = 330;
            int f = 349;
            int g = 392;
            int a = 440;
            int h = 494;
            int c2 = 524;
            int p = 38;
            string pes = "ggepggepggaggf"; 
            int delka = pes.Length;
            int t;
            Console.WriteLine("hraju");

            for (t = 0; t < delka; t++)
            {
                int ton = Convert.ToChar(pes[t]);
                Console.Beep(ton, 500);
                Console.Write("t = " + t);
                Console.WriteLine(" " + ton);
                
            }

            Console.WriteLine("konec");
            Console.ReadKey(); 
        }
    }

jenže teď mi při písmenu g hraje frekvenci podle ascii kódu g, takže nějakých 103, místo hodnoty proměnné g = 392. Nevím jak mu vysvětlit, že nemá brát to g jako písmeno, ale jako proměnnou.

Moc děkuju za nakopnutí kupředu.

Nahlásit jako SPAM
IP: 193.84.36.–
m4r100
Návštěvník
1. 11. 2012   #2
-
0
-

Zbytecne to konvertujes do toho typu char. Console.Beep prijima parametry (int, int);

Udelej si seznam int:

int[] pes = new int[]{g,g,e};

A potom uz jenom volej prvky v tom seznamu.

Console.Beep(pes[t], 500);
Nahlásit jako SPAM
IP: 94.113.26.–
ingiraxo+15
Grafoman
2. 11. 2012   #3
-
0
-

#1 Honza
protože ty beres ascii hodnotu toho písmena místo toho jak sis to přednastavil (první řádek ve for)

jinak spíš si udělej nějaký pole, kam si uložíš tyhle hodnoty, třeba slovník nebo něco vlastního.. např. takto

    static class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            Piano piano = new Piano(
                new Nota('a', 100),
                new Nota('b', 200),
                new Nota('c', 300),
                new Nota('d', 400),
                new Nota('e', 500),
                new Nota('f', 600));

            piano.Zahraj("abcdef");
        }
    }

    public class Piano
    {
        private List<Nota> noty = new List<Nota>();

        public Piano(params Nota[] noty)
        {
            this.noty.AddRange(noty);
        }

        public void Zahraj(string text)
        {
            for (int i = 0; i < text.Length; i++)
            {
                Nota nota = noty.Find(n => { return (n.Nazev.CompareTo(text[i]) > 0); });

                if (nota.Nazev != '\0')
                    Console.Beep(nota.Frekvence, nota.Delka);
            }
        }
    }

    public struct Nota
    {
        public char Nazev;
        public int Frekvence;
        public int Delka;

        public Nota(char nazev, int frekvence)
        {
            Nazev = nazev;
            Frekvence = frekvence;
            Delka = 500;
        }

        public Nota(char nazev, int frekvence, int delka)
            : this(nazev, frekvence)
        {
            Delka = delka;
        }
    }
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
m4r100
Návštěvník
2. 11. 2012   #4
-
0
-

#3 ingiraxo
To jsi mu to ulehcil, psal, ze zacina z C# a ty na neho hned genericke typy, lambda vyrazy,... :D

Nahlásit jako SPAM
IP: 94.113.26.–
ingiraxo+15
Grafoman
2. 11. 2012   #5
-
0
-

#4 m4r10
ah, jsem asi přehlíd =D

no ok, tady je teda řešení bez použití těchto "vychytávek".. doufám, že sem autora neodradil ^^ 

        [STAThread]
        static void Main(string[] args)
        {
            // sudý prvek je nota a lichý prvek je frekvence
            object[] noty = { 'a', 100, 'b', 200, 'c', 300, 'd', 400, 'e', 500, 'f', 600 };
            // vstupní text (třeba z konzole)
            string text = "abcdef";

            for (int i = 0; i < text.Length; i++)
            {
                // získá index noty (vzhledem k tomu, že pole je úmyslně typu object,
                // tak bude hledat pouze na sudých pozicích ^.^)
                // pokud notu nenajde, tak vrací -1
                int index = Array.IndexOf(noty, text[i]);

                // zahraje tón (frekvence máme na lichým prvku, takže +1)
                if (index != -1)
                    Console.Beep((int)noty[index + 1], 500);
            }
        }
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Honza
~ Anonymní uživatel
451 příspěvků
2. 11. 2012   #6
-
0
-

Díky moc, sice první příspěvek od ingiraxo nechápu :), ale díky!!

Nahlásit jako SPAM
IP: 77.104.245.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 14 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý