Gyakorlati alapok
7 hangú skála hangjainak teljes variációja
Belátom, zenében jártasak nemigen fogják megérteni a fejezet tartalmát. Ráadásul nem is klasszikus zeneelméletről beszélünk, hanem annak továbbfejlesztett, jóval modernebb, Pénzes-féle meghatározásairól, hiszen az előbbiben nem szerepelnek úgynevezett matematikai skálavariációk. Ezen okból a témát nem magyarázom tovább, mert azok kellő részletességgel elérhetők a...
Skálavariációk és a SV VII. - Skálavariáció-katalógus - Bevezetés
...című fejezetekben.
Ami a Java-kódokat illeti, az alábbi implementációk kilistázzák egy 7 hangból álló skála teljes (ismétléses) variációs lehetőségét. A 7 db hangot a 0-1-2-3-4-5-6 számsorrenddel helyettesítjük. Ez összesen 960799 db variációt fog jelenteni, mert:
-
1 hangból álló skálavariáció-csoport - 71 = 7 hangból áll,
-
2 hangból álló skálavariáció-csoport - 72 = 49 hangból áll,
-
3 hangból álló skálavariáció-csoport - 73 = 343 hangból áll,
-
4 hangból álló skálavariáció-csoport - 74 = 2401 hangból áll,
-
5 hangból álló skálavariáció-csoport - 75 = 16807 hangból áll,
-
6 hangból álló skálavariáció-csoport - 76 = 117649 hangból áll,
-
7 hangból álló skálavariáció-csoport - 77 = 823543 hangból áll,
7 + 49 + 343 + 2401 + 16807 + 117649 + 823543 = 960799 db.
Ettől a mennyiségtől már nem csak mi akadunk ki, hanem a kiíró konzol is, amely így nem lesz képes a kiírás gyorsaságát követni és csonkolni fogja a végeredményt. A megoldás, hogy a 2. kódban az eredményeket egy külön .txt kiterjesztésű file-ba vezetjük be. Filekezelésről még nem beszéltünk (Filekezelés című fejezetcsomag), ez még messze megelőzheti a Honlaptérképben szisztematikusan fentről lefelő haladó tanuló tudását, éppen ezért a fejezet haladó anyagot tartalmaz!
Nézzük meg a futtatható Java-kódot:
public class Main {
static int countFull = 0;
public static void level1() {
for(int i = 0; i < 7; i++) {
countFull++;
System.out.print(countFull + ".: " + i + "\n");
}
}
public static void level2() {
int countPartial = 0;
System.out.println();
for(int i = 0; i < 7; i++) {
for(int j = 0; j < 7; j++) {
countFull++;
countPartial++;
System.out.print("Rész: " + countPartial + ". - Teljes: " +
countFull + ". - " + i + j);
System.out.println();
}
}
}
public static void level3() {
int countPartial = 0;
System.out.println();
for(int i = 0; i < 7; i++) {
for(int j = 0; j < 7; j++) {
for(int k = 0; k < 7; k++) {
countFull++;
countPartial++;
System.out.print("Rész: " + countPartial + ". - Teljes:
" + countFull + ". - " + i + j + k);
System.out.println();
}
}
}
}
public static void level4() {
int countPartial = 0;
System.out.println();
for(int i = 0; i < 7; i++) {
for(int j = 0; j < 7; j++) {
for(int k = 0; k < 7; k++) {
for(int l = 0; l < 7; l++) {
countFull++;
countPartial++;
System.out.print("Rész: " + countPartial + ". -
Teljes: " + countFull + ". - " + i + j + k + l);
System.out.println();
}
}
}
}
}
public static void level5() {
int countPartial = 0;
System.out.println();
for(int i = 0; i < 7; i++) {
for(int j = 0; j < 7; j++) {
for(int k = 0; k < 7; k++) {
for(int l = 0; l < 7; l++) {
for(int m = 0; m < 7; m++) {
countFull++;
countPartial++;
System.out.print("Rész: " + countPartial + ". -
Teljes: " + countFull + ". - " + i + j + k + l + m);
System.out.println();
}
}
}
}
}
}
public static void level6() {
int countPartial = 0;
System.out.println();
for(int i = 0; i < 7; i++) {
for(int j = 0; j < 7; j++) {
for(int k = 0; k < 7; k++) {
for(int l = 0; l < 7; l++) {
for(int m = 0; m < 7; m++) {
for(int n = 0; n < 7; n++) {
countFull++;
countPartial++;
System.out.print("Rész: " + countPartial +
". - Teljes: " + countFull + ". - " + i + j + k + l + m + n);
System.out.println();
}
}
}
}
}
}
}
public static void level7() {
int countPartial = 0;
System.out.println();
for(int i = 0; i < 7; i++) {
for(int j = 0; j < 7; j++) {
for(int k = 0; k < 7; k++) {
for(int l = 0; l < 7; l++) {
for(int m = 0; m < 7; m++) {
for(int n = 0; n < 7; n++) {
for(int o = 0; o < 7; o++) {
countFull++;
countPartial++;
System.out.print("Rész: " +
countPartial + ". - Teljes: " + countFull + ". - " + i + j + k + l + m + n +
o);
System.out.println();
}
}
}
}
}
}
}
}
public static void main(String[] args) {
level1();
level2();
level3();
level4();
level5();
level6();
level7();
}
}
Végeredmény:
...
Rész: 823538. - Teljes: 960794. - 6666661
Rész: 823539. - Teljes: 960795. - 6666662
Rész: 823540. - Teljes: 960796. - 6666663
Rész: 823541. - Teljes: 960797. - 6666664
Rész: 823542. - Teljes: 960798. - 6666665
Rész: 823543. - Teljes: 960799. - 6666666
A kód gyenge pontja a konzol reakcióideje, amely már említett módon a
végeredmény kiírását csonkolja, ezért azt kénytelenek vagyunk külső állományba
vezetni (FileWriter
fileWriter = new FileWriter("C:\\ListFull.txt");):
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class Main {
public static void main(String[] args) throws IOException {
FileWriter fileWriter = new FileWriter("C:\\ListFull.txt");
PrintWriter printWriter = new PrintWriter(fileWriter);
int countFull = 0;
int countPartial = 0;
String s = "";
String str1 = "";
for(int i = 0; i < 7; i++) {
countFull++;
countPartial++;
str1 = Integer.toString(i);
s = str1;
printWriter.print(countFull + ".: " + i + "\n");
}
String str2 = "";
countPartial = 0;
for(int i = 0; i < 7; i++) {
for(int j = 0; j < 7; j++) {
countFull++;
countPartial++;
str1 = Integer.toString(i);
str2 = Integer.toString(j);
s = str1 + str2;
printWriter.print("Rész: " + countPartial + ". - Teljes: "
+ countFull + ". - " + s + "\n");
}
}
String str3 = "";
countPartial = 0;
for(int i = 0; i < 7; i++) {
for(int j = 0; j < 7; j++) {
for(int k = 0; k < 7; k++) {
countFull++;
countPartial++;
str1 = Integer.toString(i);
str2 = Integer.toString(j);
str3 = Integer.toString(k);
s = str1 + str2 + str3;
printWriter.print("Rész: " + countPartial + ". -
Teljes: " + countFull + ". - " + s + "\n");
}
}
}
String str4 = "";
countPartial = 0;
for(int i = 0; i < 7; i++) {
for(int j = 0; j < 7; j++) {
for(int k = 0; k < 7; k++) {
for(int l = 0; l < 7; l++) {
countFull++;
countPartial++;
str1 = Integer.toString(i);
str2 = Integer.toString(j);
str3 = Integer.toString(k);
str4 = Integer.toString(l);
s = str1 + str2 + str3 + str4;
printWriter.print("Rész: " + countPartial + ". -
Teljes: " + countFull + ". - " + s + "\n");
}
}
}
}
String str5 = "";
countPartial = 0;
for(int i = 0; i < 7; i++) {
for(int j = 0; j < 7; j++) {
for(int k = 0; k < 7; k++) {
for(int l = 0; l < 7; l++) {
for(int m = 0; m < 7; m++) {
countFull++;
countPartial++;
str1 = Integer.toString(i);
str2 = Integer.toString(j);
str3 = Integer.toString(k);
str4 = Integer.toString(l);
str5 = Integer.toString(m);
s = str1 + str2 + str3 + str4 + str5;
printWriter.print("Rész: " + countPartial + ".
- Teljes: " + countFull + ". - " + s + "\n");
}
}
}
}
}
String str6 = "";
countPartial = 0;
for(int i = 0; i < 7; i++) {
for(int j = 0; j < 7; j++) {
for(int k = 0; k < 7; k++) {
for(int l = 0; l < 7; l++) {
for(int m = 0; m < 7; m++) {
for(int n = 0; n < 7; n++) {
countFull++;
countPartial++;
str1 = Integer.toString(i);
str2 = Integer.toString(j);
str3 = Integer.toString(k);
str4 = Integer.toString(l);
str5 = Integer.toString(m);
str6 = Integer.toString(n);
s = str1 + str2 + str3 + str4 + str5 +
str6;
printWriter.print("Rész: " + countPartial +
". - Teljes: " + countFull + ". - " + s + "\n");
}
}
}
}
}
}
String str7 = "";
countPartial = 0;
for(int i = 0; i < 7; i++) {
for(int j = 0; j < 7; j++) {
for(int k = 0; k < 7; k++) {
for(int l = 0; l < 7; l++) {
for(int m = 0; m < 7; m++) {
for(int n = 0; n < 7; n++) {
for(int o = 0; o < 7; o++) {
countFull++;
countPartial++;
str1 = Integer.toString(i);
str2 = Integer.toString(j);
str3 = Integer.toString(k);
str4 = Integer.toString(l);
str5 = Integer.toString(m);
str6 = Integer.toString(n);
str7 = Integer.toString(o);
s = str1 + str2 + str3 + str4 + str5 +
str6 + str7;
printWriter.print("Rész: " +
countPartial + ". - Teljes: " + countFull + ". - " + s + "\n");
}
}
}
}
}
}
}
fileWriter.close();
System.out.println("Done!");
}
}
Végeredmény:
C: meghajtón egy ListFull.txt nevű, a teljes
eredménylistát tartalmazó állomány (mérete kb. 38 MB!)
Azok számára, akik a fenti kódot nem szeretnék futtatni, a teljes list
letölthető innen is:
SV VIIa. - Skálavariáció-katalógus - Futtatható Java-kód.