Ein Vergleichs problem. wie mache ich es?



  • Hallo leute

    Jeder kennt ein klavier tastatur.Die einzelnen tasten sind von 0-127 mit werten
    Numeriert.
    Da die note C auf der tastatur mehr mals vorkommt hat jeder C seine eigene
    wert

    c-2 = 0
    c-1 = 12
    c0 = 24
    c1 = 36
    c2 = 48
    c3 = 60
    c4 = 72
    c5 = 84
    c6 = 96
    c7 = 108
    c8 = 120
    Es sind 11 Elemente

    Das eingabe Tastatur sendet für jeden C das gedrückt wurde den wert.

    Frage 1: wie kann ich alle C,s unter einen namen ansprechen?
    Frage 2: wie kann ich einen neuen wert zuweisen für das C das gedrückt wurde?

    Ich denke mit Array und Switch lige ich da richtig oder geht es anders?

    Ich möchte sagen wenn C gedrückt wurde dann erhöhe den wert um eine bestimmte
    Zahl.Aber nur den wert des gedrückten C,s

    Ein kleine beispiel code währe net

    Grüße Fuat



  • Hm,

    Du hast C = 24.

    Nun kannst Du doch je nach Oktave ein vielfaches von 12 dazu zählen / abziehen.
    Somit hast Du nurnoch 1 C und den rest berechnest Du .



  • Gute idee danke.

    Aber wie finde ich heraus welche C das ist.

    Ich bin Anfänger Kannst mir ein kleine beispiel schreiben?



  • Meiner Meinung nach ist deine Frage absolut unverständlich! Ich hab ncihtmal ansatzweise kapiert, was du willst.
    Ausserdem isses kein MFC-Problem.
    Verschoben ➡



  • Öhm sorry ... Ins falsche Forum verschoben. Wollts eigentlich ins C++-Forum verschieben. Bitte korrigieren.



  • Ok Danke

    Ich schreibe das programm mit MFC aber du hast recht es ist kein Mfc Problem.



  • Du hast einen Wert zwischen 0 und 128 und willst herausfinden, ob es ein C ist und wie es oktaviert ist? Das geht so:

    if (value % 12 == 0) // es ist ein C
        int oktavierung = value / 12 - 2;
    

    Das ist die Abbildung 0 -> -2, 12 -> -1, ... 120 -> 8.



  • ich habe mein problen versucht so zu lösen
    Aber es fuktioniert nicht so wie ich es will

    wenn ich ein wert ein gebe (48 )entspricht c[4]=48
    dann möchte ich das cs oder d in der gleichen oktave wie c[4] mit klingt.

    \aleph_o

    ich verstehe dein code nicht
    was bedeutet bitte:

    value ?
    warum % ?
    warum value / 12 - 2; ?

    ich bin noch Anfänger und bekomme es einfach nicht hin.

    wie kann ich die noten mit namen ansprechen?

    wenn ich später in meine MFC anwendung ein button mit C anklicke
    Dann möchte ich wenn irgend ein C gespielt wird eine andere note inder gleichen oktave mit klingt.

    so versuche ich es zulösen
    Aber es geht schief

    int main()
    {
    int n=0, i,wert;
    unsigned int c[10],cs[10],d[10];

    c[0]=0; cs[0]=1; d[0]=2;
    c[1]=12; cs[1]=13; d[1]=14;
    c[2]=24; cs[2]=25; d[2]=26;
    c[3]=36; cs[3]=37; d[3]=38;
    c[4]=48; cs[4]=49; d[4]=50;
    c[5]=60; cs[5]=61; d[5]=62;
    c[6]=72; cs[6]=73; d[6]=73;
    c[7]=84; cs[7]=85; d[7]=85;
    c[8]=96; cs[8]=97; d[8]=98;
    c[9]=108; cs[9]=109; d[9]=110;
    c[10]=120; cs[10]=121; d[10]=122;

    cin>>wert;

    for(i=0;i<=n;++i)
    {
    if(wert==c[n])
    {
    cout<<"C ="<<c[n]<<endl;
    cout<<"n="<<n<<endl;
    }
    else
    {
    n++;
    }
    }
    n=0;

    for(i=0;i<=n;i++)
    {
    if(wert==cs[n])
    {
    cout<<"Cs ="<<cs[n]<<endl;
    cout<<n<<endl;
    }
    else
    {
    n++;

    }
    }

    n=0;

    for(i=0;i<=n;i++)
    {
    if(wert==d[n])
    {
    cout<<"d ="<<d[n]<<endl;
    cout<<n<<endl;
    }
    else
    {
    n++;

    }
    }

    return 0;
    }



  • \aleph_o

    Der code funktioniert wunderbar bis auf die ungraden zahlen

    was bedeute bitte diese % oprator?

    wenn ich double wert; schreibe
    dann beschwert sich der compiler mit dem fehler

    C:\Programme\Microsoft Visual Studio\MyProjects\denama\deneme1.cpp(11) : error C2296: '%' : Ungültig, da der linke Operand vom Typ 'double' ist

    Hier ist der code was mache ich falsch?

    int main()
    {

    int wert;

    cin>>wert;

    if (wert % 12 == 0) // es ist ein C
    {
    cout<<"C"<<endl;
    }

    else if (wert % 13 == 0) // es ist ein Cs
    {
    cout<<"Cs"<<endl;
    }
    else if (wert % 14 == 0) // es ist ein D
    {
    cout<<"D"<<endl;
    }
    else if (wert % 15 == 0) // es ist ein Ds
    {
    cout<<"Ds"<<endl;
    }
    else if (wert % 16 == 0) // es ist ein E
    {
    cout<<"E"<<endl;
    }
    else if (wert % 17 == 0) // es ist ein F
    {
    cout<<"F"<<endl;
    }
    else if (wert % 18 == 0) // es ist ein Fs
    {
    cout<<"Fs"<<endl;
    }
    else if (wert % 19 == 0) // es ist ein G
    {
    cout<<"G"<<endl;
    }
    else if (wert % 20 == 0) // es ist ein Gs
    {
    cout<<"Gs"<<endl;
    }
    else if (wert % 21 == 0) // es ist ein A
    {
    cout<<"A"<<endl;
    }
    else if (wert % 22 == 0) // es ist ein Hb
    {
    cout<<"Hb"<<endl;
    }
    else if (wert % 23 == 0) // es ist ein H
    {
    cout<<"H"<<endl;
    }
    return 0;
    }



  • Fuat schrieb:

    Der code funktioniert wunderbar bis auf die ungraden zahlen

    Was funktioniert bei den ungeraden Zahlen nicht?

    was bedeute bitte diese % oprator?
    wenn ich double wert; schreibe
    dann beschwert sich der compiler mit dem fehler

    a % b gibt den Rest bei der Division a / b zurück, wenn a und b ganzzahlig sind (also nicht fload oder double). D.h. es gilt b*(a/b) + a%b == a.

    Hier ist der code was mache ich falsch?

    Du musst die Werte immer modulo 12 nehmen und dann anhand des Restes die Note herausfinden:

    // EDIT: hier war was falsch! Die Oktavierung wird jetzt auch angezeigt.
    int main()
    {
        unsigned int wert;
        cin >> wert;
    
    	if (wert % 12 == 0) // es ist ein C
    	{
    	cout<<"C";
    	}
     else if (wert % 12 == 1) // es ist ein Cs
    	{
    	cout<<"Cs";
    	}
    else if (wert % 12 == 2) // es ist ein D
    	{
    	cout<<"D";
    	}
    else if (wert % 12 == 3) // es ist ein Ds
    	{
    	cout<<"Ds";
    	}
    // [...]
    else if (wert % 12 == 11) // es ist ein H
    	{
    	cout<<"H";
    	}
        cout << (wert/12 - 2) << endl; // Oktavierung
    return 0;
    }
    


  • Tausend Dank \aleph_0

    Es klappt wunderbar.

    Du scheinst dich auch mit musik auszukennen.
    ich suche schon lange jemanden der mir über mail Nachhilfe gibt.
    Natürlich würde ich dich bezahlen.
    Ich bin aus Frankfurt/M

    wenn du intresse hast dann melde dich bitte bei mit.

    fuatkul@web.de

    Grüße Fuat


Anmelden zum Antworten