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:

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!

 

www.informatika-programozas.hu - Ez a programozási feladat nehéz lesz!


Nézzük meg a futtatható Java-kódot:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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");):

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 



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.