/* File: music_teacher.c
Autore: Stefano - ste_funk
Anno: 2006
Vers: 0.0.1
Info: Realizzato su piattaforma GNU/LInux, ma portabile
senza problemi su Windows o altri.
Music Teacher possiede un algoritmo per il calcolo dinamico delle scale Maggiori
e relative Minori. Utilizza la notazione estera:
C: do - D: re - E: mi - F: fa - G: sol
A: la - B: si
Su Linux compilate con:
gcc music_teacher.c -o music_teacher
gcc music_teacher -c
Ed eseguite con:
./music_teacher
Note: This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation.
*/
#include <stdio.h>
float cod_note[]={67,68,69,70,71,65,66}, scala_utilizz[]={67,68,69,70,71,65,66};
int int_scala_mag[]={ 2,2,1,2,2,2,1};
void stampa_menu(int option[]);
void stampa_note(int option[]);
int crea_scala(int option[]);
void stampa_variazione(int indice, int option[]);
int main(){
int scelte[3], *pnt_to_scelte;
pnt_to_scelte=scelte;
stampa_menu(pnt_to_scelte);
crea_scala(pnt_to_scelte);
stampa_note(pnt_to_scelte);
return 0;
}
int crea_scala(int option[]){
float array_note[7];
int n, i, k, grado=0;
for(n=0;n<option[0];n++){
for(i=0;i<7;i++){
if(int_scala_mag[i]!=int_scala_mag[grado] && int_scala_mag[grado]==option[1])
array_note[i]=scala_utilizz[grado]+0.5;
else
array_note[i]=scala_utilizz[grado];
grado++;
if(grado>6)
grado=0;
}
grado=option[2];
for(k=0;k<7;k++)
scala_utilizz[k]=array_note[k];
}
return 0;
}
void stampa_menu(int option[]){
printf("\n\n\t******************************************************\n");
printf("\t** Music Theacher v0.0.1 **\n");
printf("\t******************************************************\n\n");
printf("\t1 - C Maggiore (A minore)\t2 - G Maggiore(E minore)\n");
printf("\t3 - D Maggiore (B minore)\t4 - A Maggiore(F# minore)\n");
printf("\t5 - E Maggiore (C# minore)\t6 - B Maggiore(G# minore)\n");
printf("\t7 - F# Maggiore (D# minore)\t8 - C# Maggiore(A# minore)\n\n");
printf("\t9 - F Maggiore (D minore)\t10 - Bb Maggiore(G minore)\n");
printf("\t11 - Eb Maggiore (C minore)\t12 - Ab Maggiore(F minore)\n");
printf("\t13 - Db Maggiore (Bb minore)\t14 - Gb Maggiore(Eb minore)\n");
printf("\t15 - Cb Maggiore (Ab minore)\n\n");
printf("\tInserisci il numero della scala maggiore: ");
scanf("%d \n", &option[0]);
if(option[0]<9){
option[1]=2;
option[2]=4;
}
else if(option[0]>8){
option[0]=option[0]-7;
option[1]=1;
option[2]=3;
}
}
void stampa_note(int option[]){
int j=0,k=5;
stampa_variazione(j, option);
for(j=0;j<7;j++){
stampa_variazione(j, option);
}
stampa_variazione(k, option);
for(j=0;j<7;j++){
stampa_variazione(k, option);
k++;
if(k>6)
k=0;
}
}
void stampa_variazione(int indice, int option[]){
int parte;
parte=scala_utilizz[indice];
if((scala_utilizz[indice]- parte)!=0 && option[2]==4)
else if((scala_utilizz[indice]- parte)!=0 && option[2]==3)
else
}