// Autor: Florian BAUER // MatNr: 0125773 // e-mail: flobauer@gmx.at // Runde 1 (EPROG) // Beispiel Nr: 1148 // // Musiknoten und eine Tonart werden eingelesen; es wird ueberprueft, ob die Noten in dieser Tonart vorkommen. // // Bitte unbedingt die zugehoerige Dokumentation beachten, dort findet man die genauen Erklareungen zu den Programmschritten import eprog.*; public class notcheck extends EprogIO { public static void main (String[]args) { // Definieren der Variablen. Genaue Beschreibung der Variablen in der notcheck.txt String chromTonl="cc#dd#eff#gg#aa#h", eing_noten="", tonart="", startton="",noten_neu="",ausg_noten="",ausga_temp=""; final int maxzeichen=30; int i=0,length=0,j=1, tonindex=0; boolean spez_err=false; // Einlesen der Noten eing_noten=readWord(); length=eing_noten.length(); //Laenge des Strings der eingelesenen Noten als Variable definieren // Definieren der im Programm erzeugten Variablen (zb: note1, note2, ....) char [] note = new char [length+1]; String [] temp = new String [length+1]; int [] x = new int [length+1]; //ueberpruefen der maximallaenge lt. Spezifikation if (length > maxzeichen) spez_err=true; // ueberpruefen ob nur Noten verwendet wurden, die auch in der chromatischen Tonleiter vorhanden sind: // 2 Schritte: // 1.) "zerlegen" des Eingabestrings in lauter einzelne kleine Strings mit jeweils der Note oder Note+# // 2.) ueberpruefen ob die einzlenen Strings in der chrom.Tonleiter enthalten sind //1.)Schritt: for (i=0;i Startton ist der Ton, bei dem die Tonleiter beginnt tonindex=chromTonl.indexOf(startton); //Index des Starttons herausfinden //2.) erzeuge einen String in dem alle Noten vorhanden sind, die in der Tonart vorhanden sind. // (zB.: Bei c-Dur: "cdefgah"; bei e-moll:"ef#gahcd" // Dazu werden 7 Strings erzeugt, welche die einzelnen vorhandenen Noten enthalten // If-else Schleife fuer die Unterscheidung -Dur oder -moll String noteneus1="", noteneus2="", noteneus3="", noteneus4="", noteneus5="",noteneus6="", noteneus7=""; //a.) Tonart=" -Dur" => Absteande der Noten siehe .txt if((dur.equals(neu)) || (dur2.equals(neu))) // wenn Tonart= Dur { //1.te Note erzeugen char noteneu1=chromTonl.charAt(tonindex); //an den Stellen 1,4,8,11,14 befindet sich ein "#", daher muss es gesondert behandelt werden if(tonindex==1 ||tonindex==4 || tonindex==8 || tonindex==11 ||tonindex==14) //wenn # { noteneus1=noteneus1+noteneu1+"#"; //dann "#" zum String hinzufuegen } //an allen Stellen an denen sich kein "#" befindet: else { noteneus1=noteneus1+noteneu1; } //Index erhoehen um ... Schritte //an Stelle 6 und 16 einen Schritt weniger machen, da hier die Noten "E" und "H" //stehen, welche keinen zugehoerigen Halbton besitzen. if(tonindex==6 ||tonindex==16) {tonindex=tonindex+2;} else {tonindex=tonindex+3;} if(tonindex>16) tonindex=tonindex-17; //notwendig, damit der Index nach dem "H" wieder auf "C" springt. //2.te Note erzeugen char noteneu2=chromTonl.charAt(tonindex); if(tonindex==1 ||tonindex==4 || tonindex==8 || tonindex==11 ||tonindex==14) { noteneus2=noteneus2+noteneu2+"#"; } else { noteneus2=noteneus2+noteneu2; } if(tonindex==6 ||tonindex==16) {tonindex=tonindex+2;} else {tonindex=tonindex+3;} if(tonindex>16) tonindex=tonindex-17; //3.te Note erzeugen (ACHTUNG, bei -Dur ist der Abstand bei der 3.Note geringer als bei den anderen. siehe .txt char noteneu3=chromTonl.charAt(tonindex); if(tonindex==1 ||tonindex==4 || tonindex==8 || tonindex==11 ||tonindex==14) { noteneus3=noteneus3+noteneu3+"#"; } else { noteneus3=noteneus3+noteneu3; } if(tonindex==0 ||tonindex==3 ||tonindex==6 ||tonindex==7||tonindex==10||tonindex==13||tonindex==16) {tonindex=tonindex+1;} else {tonindex=tonindex+2;} if(tonindex>16) tonindex=tonindex-17; //4.te Note erzeugen char noteneu4=chromTonl.charAt(tonindex); if(tonindex==1 ||tonindex==4 || tonindex==8 || tonindex==11 ||tonindex==14) { noteneus4=noteneus4+noteneu4+"#"; } else { noteneus4=noteneus4+noteneu4; } if(tonindex==6 ||tonindex==16) {tonindex=tonindex+2;} else {tonindex=tonindex+3;} if(tonindex>16) tonindex=tonindex-17; //5.te Note erzeugen char noteneu5=chromTonl.charAt(tonindex); if(tonindex==1 ||tonindex==4 || tonindex==8 || tonindex==11 ||tonindex==14) { noteneus5=noteneus5+noteneu5+"#"; } else { noteneus5=noteneus5+noteneu5; } if(tonindex==6 ||tonindex==16) {tonindex=tonindex+2;} else {tonindex=tonindex+3;} if(tonindex>16) tonindex=tonindex-17; //6.te Note erzeugen char noteneu6=chromTonl.charAt(tonindex); if(tonindex==1 ||tonindex==4 || tonindex==8 || tonindex==11 ||tonindex==14) { noteneus6=noteneus6+noteneu6+"#"; } else { noteneus6=noteneus6+noteneu6; } if(tonindex==6 ||tonindex==16) {tonindex=tonindex+2;} else {tonindex=tonindex+3;} if(tonindex>16) tonindex=tonindex-17; //7.te Note erzeugen char noteneu7=chromTonl.charAt(tonindex); if(tonindex==1 ||tonindex==4 || tonindex==8 || tonindex==11 ||tonindex==14) { noteneus7=noteneus7+noteneu7+"#"; } else { noteneus7=noteneus7+noteneu7; } //Herstellen der neuen Tonleiter als String: (zusammenfuegen der einzelnen Noten-Strings noten_neu=noteneus1+noteneus2+noteneus3+noteneus4+noteneus5+noteneus6+noteneus7; } // b.) -moll Tonleiter. Gleiche Prozedur wie bei -Dur, nur das die kuerzeren Abstaende bei Note 2 und 5 zu verwenden sind else { //1.te Note erzeugen char noteneu1=chromTonl.charAt(tonindex); if(tonindex==1 ||tonindex==4 || tonindex==8 || tonindex==11 ||tonindex==14) { noteneus1=noteneus1+noteneu1+"#"; } else { noteneus1=noteneus1+noteneu1; } if(tonindex==6 ||tonindex==16) {tonindex=tonindex+2;} else {tonindex=tonindex+3;} if(tonindex>16) tonindex=tonindex-17; //2.te Note erzeugen (ACHTUNG Abstand!) char noteneu2=chromTonl.charAt(tonindex); if(tonindex==1 ||tonindex==4 || tonindex==8 || tonindex==11 ||tonindex==14) { noteneus2=noteneus2+noteneu2+"#"; } else { noteneus2=noteneus2+noteneu2; } if(tonindex==0 ||tonindex==3 ||tonindex==6 ||tonindex==7||tonindex==10||tonindex==13||tonindex==16) {tonindex=tonindex+1;} else {tonindex=tonindex+2;} if(tonindex>16) tonindex=tonindex-17; //3.te Note erzeugen char noteneu3=chromTonl.charAt(tonindex); if(tonindex==1 ||tonindex==4 || tonindex==8 || tonindex==11 ||tonindex==14) { noteneus3=noteneus3+noteneu3+"#"; } else { noteneus3=noteneus3+noteneu3; } if(tonindex==6 ||tonindex==16) {tonindex=tonindex+2;} else {tonindex=tonindex+3;} if(tonindex>16) tonindex=tonindex-17; //4.te Note erzeugen char noteneu4=chromTonl.charAt(tonindex); if(tonindex==1 ||tonindex==4 || tonindex==8 || tonindex==11 ||tonindex==14) { noteneus4=noteneus4+noteneu4+"#"; } else { noteneus4=noteneus4+noteneu4; } if(tonindex==6 ||tonindex==16) {tonindex=tonindex+2;} else {tonindex=tonindex+3;} if(tonindex>16) tonindex=tonindex-17; //5.te Note erzeugen (ACHTUNG ABSTAND!) char noteneu5=chromTonl.charAt(tonindex); if(tonindex==1 ||tonindex==4 || tonindex==8 || tonindex==11 ||tonindex==14) { noteneus5=noteneus5+noteneu5+"#"; } else { noteneus5=noteneus5+noteneu5; } if(tonindex==0 ||tonindex==3 ||tonindex==6 ||tonindex==7||tonindex==10||tonindex==13||tonindex==16) {tonindex=tonindex+1;} else {tonindex=tonindex+2;} if(tonindex>16) tonindex=tonindex-17; //6.te Note erzeugen char noteneu6=chromTonl.charAt(tonindex); if(tonindex==1 ||tonindex==4 || tonindex==8 || tonindex==11 ||tonindex==14) { noteneus6=noteneus6+noteneu6+"#"; } else { noteneus6=noteneus6+noteneu6; } if(tonindex==6 ||tonindex==16) {tonindex=tonindex+2;} else {tonindex=tonindex+3;} if(tonindex>16) tonindex=tonindex-17; //7.te Note erzeugen char noteneu7=chromTonl.charAt(tonindex); if(tonindex==1 ||tonindex==4 || tonindex==8 || tonindex==11 ||tonindex==14) { noteneus7=noteneus7+noteneu7+"#"; } else { noteneus7=noteneus7+noteneu7; } //Herstellen der neuen Tonleiter als String (zusammenfuegen der einzelnen Noten-Strings) noten_neu=noteneus1+noteneus2+noteneus3+noteneus4+noteneus5+noteneus6+noteneus7; } // Vergleiche eingegebene Noten mit neuer Tonart: //Hier wird ein Vergleich der eingegebenen Noten mit dem NotenString der neu erzeugten Tonart durchgefuehrt, //um herauszufinden, welche der eingegebenen Noten enthalten sind und welche nicht. //Die nichtenthaltenen Noten muessen laut Spez. in () gesetzt werden. int ind=0; //hilfsvariable fuer einen Index int length2=noten_neu.length(); //laenge des Strings der neu erzeugten Tonart for(j=1;j