Я не знаю, почему эта программа не скомпилируется. Это говорит мне, что есть проблема, но я просто не знаю, что не так с этим кодом.
Я прохожу вводный курс CS50 для Гарварда онлайн, и у меня возникают проблемы с записью этой частоты функций. Я знаю, что это можно запрограммировать гораздо проще, но у меня просто нет опыта, чтобы сделать это намного более плавным и элегантным в программировании. Проблема, похоже, в самом конце функции. Я предполагаю, что забыл вернуть значение, но я не знаю, что происходит.
//Calculates frequency (in Hz) of a note
#include <cs50.h>
#include <string.h>
#include <math.h>
#include <stdio.h>
int frequency(string note);
int main(void)
{
string note = get_string();
printf("Piano Note: ");
frequency(note);
return 0;
}
int frequency(string note)
{
char key = note[0];
char accidental;
int octave;
int counter = 0;
while (note != '\0')
{
counter++;
}
if(counter == 3)
accidental = note[1];
octave = note[2];
if(counter == 2)
octave = note[1];
if (counter == 3)
{
if (key == 'A')
{
if (accidental == '#')
{
if(octave == 4)
{
return 466;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 * pow((double)2, (double)1/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 * pow((double)2, (double)1/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
}
else if (accidental == 'b')
{
if(octave == 4)
{
return 415;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)1/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)1/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
}
}
else if (key == 'B')
{
if (accidental == '#')
{
if(octave == 4)
{
return 523;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 * pow((double)2, (double)3/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 * pow((double)2, (double)3/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if (accidental == 'b')
{
if(octave == 4)
{
return 466;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 * pow((double)2, (double)1/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 * pow((double)2, (double)1/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
}
else if (key == 'C')
{
if (accidental == '#')
{
if(octave == 4)
{
return 277;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 / pow((double)2, (double)8/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if (octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)8/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
else if (accidental == 'b')
{
if(octave == 4)
{
return 247;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 / pow((double)2, (double)10/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if (octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)10/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
}
else if (key == 'D')
{
if (accidental == '#')
{
if(octave == 4)
{
return 311;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 / pow((double)2, (double)6/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)6/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
else if (accidental == 'b')
{
if(octave == 4)
{
return 277;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 / pow((double)2, (double)8/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)8/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
}
else if (key == 'E')
{
if (accidental == '#')
{
if(octave == 4)
{
return 349;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 / pow((double)2, (double)4/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)4/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
else if (accidental == 'b')
{
if(octave == 4)
{
return 311;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 / pow((double)2, (double)6/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)6/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
}
else if (key == 'F')
{
if (accidental == '#')
{
if(octave == 4)
{
return 370;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 / pow((double)2, (double)3/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)3/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}}
else if (accidental == 'b')
{
if(octave == 4)
{
return 330;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 / pow((double)2, (double)5/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)5/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
}
else if (key == 'G')
{
if (accidental == '#')
{
if(octave == 4)
{
return 415;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 / pow((double)2, (double)1/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)1/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
else if (accidental == 'b')
{
if(octave == 4)
{
return 370;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 / pow((double)2, (double)3/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)3/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
}
}
if (counter == 2)
{
if(key == 'A')
{
if(octave == 4)
{
return 440;
}
else if(octave < 4)
{
int count = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int divisor = 0, hertz = 440;
while(divisor != count)
{
hertz /= 2;
divisor++;
}
return hertz;
}
else if(octave > 4)
{
int count = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int divisor = 0, hertz = 440;
while(divisor != count)
{
hertz *= 2;
divisor++;
}
return hertz;
}
}
else if(key == 'B')
{
if(octave == 4)
{
return 494;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 * pow((double)2, (double)2/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 * pow((double)2, (double)2/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
}
else if(key == 'C')
{
if(octave == 4)
{
return 262;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 / pow((double)2, (double)9/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if (octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)9/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
}
else if(key == 'D')
{
if(octave == 4)
{
return 294;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 / pow((double)2, (double)7/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)7/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
}
else if(key == 'E')
{
if(octave == 4)
{
return 330;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 / pow((double)2, (double)5/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)5/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
}
else if(key == 'F')
{
if(octave == 4)
{
return 349;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 / pow((double)2, (double)3/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)3/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
}
else if(key == 'G')
{
if(octave == 4)
{
return 392;
}
else if(octave > 4)
{
int count = 0, shade = 0;
for(int i = 4; i < octave; i++)
{
count++;
}
int answer = (440 / pow((double)2, (double)2/12));
while(shade != count)
{
answer *= 2;
shade++;
}
return answer;
}
else if(octave < 4)
{
int count = 0, shade = 0;
for(int i = 4; i > octave; i--)
{
count++;
}
int answer = (440 / pow((double)2, (double)2/12));
while(shade != count)
{
answer /= 2;
shade++;
}
return answer;
}
}
}
}}}}}}}}}}}}