Skálavariációk VIIb.

Skálavariáció-katalógus

 

Futtatható Java-kód

 

Az előző fejezetben említettük a nagyjából 1 millió skálavariáció megjelenítésének problémáját. A megoldás csakis egy program megírása lehet, amely ízlésesen kilistázza nekünk az eredményeket. Mivel egyik szakmám szerint programozó vagyok külön Java-programozási honlappal (www.informatika-programozas.hu), ez nem lehet gond. Belátom, hogy a téma kifejtése egy kissé távol esik a "klasszikusnak" mondható gitároktatástól, ám üzenem avatott művelőinek, hogy nem én vagyok fantaszta, hanem fantáziátlanságukban ők maradtak le, de nagyon...

 

Nos, nézzük is meg az alapkódot (amelynek magyarázatába most nem bocsátkozom). A kód megszámolja a rész-, és végeredményeket, mindeközben pedig kilistázza az összes variációt és kiírja a futtató környezet (például Eclipse) konzolára:

 

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();
    }
}

 

A kód lehetne elegánsabb is (programozóknak üzenem: tojok az objektumorientáltságra), ám a kód jelenlegi egyetlen célja, hogy korrekt módon mielőbb kiírja az elvárt eredményeket. Ezt alapjában véve megtenné, ha nem futottunk volna bele, az 1. hibába: a konzol nem képes követni a kiírási sebességet, ezért a szöveg csonkolódik. Mindenesetre a kiírás vége így néz ki, amely nagyon nagy valószínűséggel bizonyítja matematikai számításaink helyességét:

 

...

 

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

 

Sajnos tovább kell motoszkálnunk a kódban, még pedig olyan módon, hogy a végeredményeket egy külön állományba írja:

 

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!");
}
}

 

A kód az eredményeket egy külső ListFull.txt nevű állományba vezeti, amelynek mérete nem elhanyagolhatóan 38 MB körüli lesz. No de legalább már megvan!

 

Pénzes-féle Gitáriskola - www.gitariskola.hu - Letöltés

 

Innentől a követendő elv a következő: van 7 db skálavariáció-csoportunk...

...amelyet a mindenkori böngésző biztonságos futásának veszélyeztetése nélkül elemenként a 4 hangból álló skálavariáció-csoportig tudunk megmutatni, utána pedig a listázást .txt típusú állományba folytatjuk.