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
wertc-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 ElementeDas 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,sEin 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 willwenn 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 schiefint 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 fehlerC:\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 fehlera % 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/Mwenn du intresse hast dann melde dich bitte bei mit.
Grüße Fuat