Java [1242]

Zapisz się
Dodaj kartkę Dodaj bana
Powód wlepienia kartki
Wybierz wątek docelowy z listy lub wpisz jego ID
  • red2000

    Witam!
    Zabralem sie z ciekawosci za programowanie i troche mnie wciagnelo.
    Niestety nie jestem w stanie uzyc znalezionych w sieci informacji/przykladow do swoich potrzeb.
    Ponizej (przystosowana do wyrwania z kontekstu) czesc wiekszego kodu w Java, na ktorej niestety utknalem:

    int n = 6;/ / Zbior liczb, z ktorych generowane beda kombinacje;
    int PozycjaOrg = 1;/ /Pozycja jednej kombinacji liczb w tablicy. Z wartoscia 1 okresla jednoczesnie miejsce pierwszej kombinacji i puli/zbioru liczb z ktorych generowane sa nastepne kombinacje.
    int Pozycja = 2;/ / Pozycja generowanej kombinacji liczb w tablicy.
    long IloscKombinacji = 15;
    int k = 4;/ / Liczba elementow w generowanej kombinacji.
    int i = 1;
    int j = 0;
    int p = k;
    int [][] Tablica = { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
    {1, 2, 3, 4, 5, 6} };
    while (p>=1) {
    if (Tablica[Pozycja][k] == n) {
    p = p - 1;
    j = 0;
    } else { p=k; }
    j++;
    if (p>=1) {
    Pozycja++;
    for(i=k; i>=p; i--) {
    if (i==k) {
    for (int Przepisanie = 1; Przepisanie <= p - 1; Przepisanie++) {
    Tablica[Pozycja][Przepisanie] = Tablica[Pozycja - 1][Przepisanie];
    } }
    Tablica[Pozycja] = Tablica[PozycjaOrg][i + j];
    } } } } }

    Zadaniem powyzszego ma byc wygenerowanie wszystkich k-elementowych kombinacji ze zbioru n-elementowego podanego w poczatkowej czesci wielowymiarowej tablicy i zapisywaniu tych kombinacji w kolejnych wymiarach tablicy.
    Program przebiega prawidlowo do 5-tej kombinacji ale od 6-tej zapetla sie na zlych wynikach i generuje na przemian dwie bledne kombinacje.
    Bardzo prosze o pomoc w znalezieniu bledow i/lub ewentualne sugestie jak rozwiazac problem.

    Pozdrawiam
  • KosciaK

    Do samego kodu i Twojego problemu niestety nie jestem w stanie się odnieść bo trochę ciężko go ogarnąć....
    Kilka rad na przyszłość:
    1. Najlepiej wkleić kod na przykład tutaj: http://rafb.net/paste/ i podać linka - wtedy każdy na spokojnie może przejrzeć sobie ładnie sformatowany i pokolorowany kod
    2. Dobrze jest wklejać kod, który się skompiluje - łatwiej wtedy coś z tym zrobić i poprawiać
    3. W Javie warto stosować się do ogólnie przyjętych konwencji pisania kodu ( http://java.sun.com/docs/codeconv/)... W skrócie:
    a) nazywanie zmiennych za pomocą pojedynczych liter to ZŁY pomysł. Sam za tydzień spojrzysz do swojego kodu i nie będziesz wiedział co i jak
    b) nazwy zmiennych, metod zaczynamy z małych liter, jeśli składa się z wielu słów to z dużej litery jest drugie słowo np: nazwaZmiennej
    c) w pętli for chyba jednak poręczniej zastosować "i", "j" "k" jako nazwę zmieniającej się w pętli zmiennej. A jeśli nie poręczniej to i tak większość tak stosuje
    d) zdecyduj się czy używasz formy "zmienna = zmienna + 1;" czy "zmienna++;"

    A co do samego problemu. Weź sobie kartkę papieru, ołówek, gumkę i rozrysuj sobie algorytm, według którego działasz w formie schematu blokowego.
  • red2000

    Bardzo dziekuje za cenne uwagi, dzieki nim szybciej sie ucze.
    Na poczatek ad. 1: http://rafb.net/p/1skQu292.html
    Nad reszta bede pracowal sukcesywnie :o)
  • red2000

    Ciągle, jednak liczę na pomoc w postaci kodu do opisanego wcześniej generowania kombinacji. Może Ktoś już ma gotowca(?) Cokolwiek, pls...
  • george

    >red2000 napisał
    >Bardzo dziekuje za cenne uwagi, dzieki nim szybciej sie
    >ucze.
    >Na poczatek ad. 1: http://rafb.net/p/1skQu292.html
    >Nad reszta bede pracowal sukcesywnie :o)

    404 Not Found
  • red2000

    No właśnie, niestety wygląda na to, że po określonym czasie (tu chyba 24h) kod automatycznie znika z serwisu :o(
  • Maciek Makowski

    Mozna na przyklad tak: http://rafb.net/p/uTUS2K95.html
  • Maciek Makowski

    Ale lepiej w Pythonie: [(e1, e2, e3) for e1 in range(5) for e2 in range(5) for e3 in range(5) if e1 < e2 and e2 < e3]
  • red2000

    Dzięki ale jeśli możesz - wklej jeszcze raz, pls.
  • Maciek Makowski

    Proszę: http://www.mmakowski.com/temp/Combs...
  • red2000

    Bardzo dziękuję, zaraz przyjrzę się temu :o)
  • red2000

    Działa! :oD