» »

java pomoč

java pomoč

petzup ::

Potrebujem malce pomoči ker ne vem kako bi točno realiziral problem. Se pravi nek igralec uporabi v naslednjem koraku uporabi takšno stanje ki se je v prejšnjem koraku največkrat uporabilo, trenutno imam rešeno tako ampak seveda ne deluje pravilno:
int[] stevec = new int[2];
			stevec[0] = 0;
			stevec[1] = 0;
			for (int t=0;t<stevilo_korakov;t++){ 
				for (int i=0;i<stevilo_igralcev;i++){
					// najprej nastavi neko random stanje
					stanja[t][i] = (int)(2*Math.random());
					// potem presteva stanja
					if(stanja[t][i] == 0) { // presteje vsa predhodna stanja 0
						stevec[t]++;
					}
					if(stanja[t][i] == 1) { // presteje vsa predhodna stanja 1
						stevec[1]++;
					}
					// ce je stanje 0 veckrat kot 1 nastavi vse na 0
					if(stevec[0] > stevec[1]){
						stanja[t][i] = 0;
					}
					// ce je stanje 1 veckrat kot 0 nastavi vse na 1
					if(stevec[1] > stevec[0]){
						stanja[t][i] = 1;
					}
					// ce se pojavi da se stanje 0 pojavi enako krat kot stanje 1
					if(stevec[0] == stevec[1]){
						stanja[t][i] = (int)(2*Math.random());  // nastavi random stanje
					}
				}
			}

Kar pomeni, grem prvič čez prvi korak, recimo da se stanje 1 največkrat ponovi, bo potem vsem nastavilo v drugem koraku 1 in potem tako naprej tudi v vseh naslednjih korakih...

Math Freak ::

Kakšno napako ti vrne, katere vrednosti lahko zavzame stevilo_korakov, stevilo_igralcev ?

Stevec je tabela dimenzije 2, sepravi ima prostora samo za dve števili, kaj delaš s stevec[t]++?

Verjetno si hotel napisati stevec[0]++ ?

Zgodovina sprememb…

petzup ::

Napake ne vrne nobene, normalno izpiše ampak ne deluje pravilno. Stevilo_korakov zavzame neko poljubno vrednost, prav tako stevilo_igralcev.
Recimo definiram stevilo_korakov = 3; stevilo_igralcev 5; in potem nafila stanja poljubno za vsakega igralca, (stanje 0, stanje 1).
stevec[] je tabela, kjer samo shranjujem za vsako posamezno stanje kolikokrat se pojavilo, da lahko potem na podlagi tega ugotavljam katero stanje se je večkrat uporabilo in tega potem upoštevam v drugem koraku.
Moja napaka stevec[0] je bilo mišljeno znotraj if zanke ja, hvala.
Na kratko, greš čez prvi korak, nastavi item igralcu stanje, stanje ki se največkrat ponovi v prvem koraku upošteva tudi v nadaljne.

Zgodovina sprememb…

  • spremenilo: petzup ()

Math Freak ::

Ne razumem kaj bi rad naredil. Če je stevilo_korakov = 3; stevilo_igralcev = 5; meni izpiše naključno tabelo:

stanja:
00010
00000
00000

stevec 0: 10
stevec 1: 5


Kaj ti tukaj ni všeč?

petzup ::

Dejansko samo v prvem koraku prešteje vsa stanja, in tisto stanje se potem v naslednjem koraku pojavi pri vseh, v tem tvojem primeru:
1. korak 00010
stevec 0:4
stevec 1:1
sepravi bo
2.korak 00000
3.korak 00000
A ti je to čisto po naključju izpisalo tako ali dejansko stvar deluje pravilno?

Math Freak ::

Hmm, sepravi morajo biti vse razen prve vrstice nafilane ali samo z enkami, ali pa samo z ničlami? Recimo:

00111
11111
11111
11111


ali

01001
00000
00000
00000


?

petzup ::

Ja tako je tisto stanje ki se pojavi v koraku največkrat jo potemm naslednji korak v celoti pridobi.

Math Freak ::

Pol pa ne smeš nametat vsega v for zanko. Probaj nekaj takega:

        for (int i = 0; i < stevilo_igralcev; i++) {
            // najprej nastavi neko random stanje
            stanja[0][i] = (int) (2 * Math.random());
            // potem presteva stanja
            if (stanja[0][i] == 0) { // presteje vsa predhodna stanja 0
                stevec[0]++;
            } else if (stanja[0][i] == 1) { // presteje vsa predhodna stanja 1
                stevec[1]++;
            }
        }

        for (int t = 1; t < stevilo_korakov; t++) {
            for (int j = 0; j < stevilo_igralcev; j++) {
                // ce je stanje 0 veckrat kot 1 nastavi vse na 0
                if (stevec[0] > stevec[1]) {
                    stanja[t][j] = 0;
                } // ce je stanje 1 veckrat kot 0 nastavi vse na 1
                else if (stevec[1] > stevec[0]) {
                    stanja[t][j] = 1;
                } // ce se pojavi da se stanje 0 pojavi enako krat kot stanje 1
                else {
                    stanja[t][j] = (int) (2 * Math.random());  // nastavi random stanje
                }
            }
        }


Verjetno bodo težave, če se ničel in enk pojavi enako. To boš verjetno znal popraviti.

Zgodovina sprememb…

Math Freak ::

Najbolje da celotno kodo preoblikuješ, ker določene stvari računaš večkrat brez potrebe.

Primer:
        int vecje = 0;
        for (int i = 0; i < stevilo_igralcev; i++) {
            stanja[0][i] = (int) (2 * Math.random());
            if (stanja[0][i] == 0) {
                stevec[0]++;
            } else if (stanja[0][i] == 1) {
                stevec[1]++;
            }
        }

        if (stevec[1] > stevec[0]) {
            vecje = 1;
        } else if (stevec[1] == stevec[0]) {
            vecje = (int) (2 * Math.random());
        }

        for (int t = 1; t < stevilo_korakov; t++) {
            for (int j = 0; j < stevilo_igralcev; j++) {
                stanja[t][j] = vecje;
            }
        }

Zgodovina sprememb…

Math Freak ::

Tisto kar se pojavi v katerem koraku nisi povedal, zadnjem ali prvem? Če je odgovor prvem, potem je ta koda kul, sicer ne.

petzup ::

Ok tako dela, ampak problem je ker potem v naslednjem koraku, recimo drugo korak, še vedno preveri prvo for zanko in iz nje neko stanje random določi in tudi če dobim iz prvega koraka 00001 se večkrat zgodi da mi potem kar 11111 vrze v naslednjem koraku ven. Predvidevam da bi si po prvem koraku moralo nekako zapomnit da sem to for zanko še šel čez in je ne obdelujem še enkrat?
Se pravi ko grem prvič čez kompletno forzanko, si jo nekako zapomnim in je v drugem koraku več ne upoštevam.
Aja eh sem šele zdaj ugotovil da gre itak potem forzanka od prvega koraka naprej, ampak še vedno stanja ne pridejo ok, primer:
// 0 korak
1
1
1

0:0|1:3
// tule bi morale vse 0 bit 1
// 1 korak
0
0
0
// drugi korak
0
0
0

Zgodovina sprememb…

  • spremenilo: petzup ()

petzup ::

Ok zdej mi je pa ratalo, dela :), Math Freak hvala ti za pomoč.

Spura ::

To je pa zelo Cjevsko napisano. Kak class bi se lahko napisal.

petzup ::

Zopet rabim malce pomoči, imam graf nekaj podobnega temu
in kaj bi rad dosegel je vbistu da vstavim recimo št 9(3x3) in mi izdela takšen graf avtomatsko, se pravi da ne potrebujem vpisovat vsake povezave posebej kot sem do sedaj. Mora pa prid v obliki rešetke seveda. Tu v mojem primeru je podano 3x2 ampak vrjetno če dela za 3x2 bo delalo tudi za vse ostale, ima kdo idejo kako to rešit?

Pebkac ::

Če prav razumem, ti hočeš tak graf predstaviti z incidenčno matriko? Po mojem bi bilo veliko bolj enostavno in učinkovito, če graf predstaviš z matriko, katere elementi so kar vozlišča, s tem da itak veš, da so sosedi od A[i][j] točno štirje: A[i - 1][j], A[i + 1][j], A[i][j - 1], A[i][j + 1]
Da si olajšaš delo si lahko potem napišeš funkcijo ki ti za določeno koordinato vrne vse sosede, s tem da preverja pogoj če si na robu grafa, da ne vračaš nesmiselnih sosedov.

Na ta način boš lahko 3×3 graf naredil enostavno s 3×3 matriko namesto 9×9.

Teja2 ::

Hei. Potrebovala bi pomoč.
Naloga:
Oglejmo si posebno trojiško drevo. Prvo poddrevo vsebuje elemente, ki so manjši od trenutnega elementa. Drugo, srednje drevo vsebuje elemente, večje od trenutnega elementa, vendar manjše od njegovega kvadrata. Tretje poddrevo vsebuje vse preostale elemente.
Napišite metoda za vstavljanje novega elementa v drevo.

A mogoče kdo ve kako se to naredi ?

ragezor ::

da, vem.

kje se je pa tebi ustavilo?

pomoje bi lahko ustvarili kak lepljivek, ki bi opisal kako vprasati za pomoc.
1. prilepi celotno besedilo naloge ali uvrsti vprasanje v kontekst.
2. prilepi svojo dosedanjo kodo na forum ali pastebin
3. opisi svoje razmisljanje kako si prisel do svoje kode in kje se ti je zataknilo

Teja2 ::

Besedilo je celotno. To je to kar je od naloge. ;)
Problem je ker ne vem niti kako bi začela....
Učim se programiranje za izpit. pa sem naletela na to nalogo, na staremu izpitu.

ragezor ::

Verjetno bi bilo treba zacet s predavanji skozi leto in delat domace naloge.

Tele naloge ne bos resila brez da ves kaj so drevesa in verjetno ste se ucili algoritem za iskanje po drevesu ali vstavljanje v drevo. Sicer ni tezko pogruntat kako deluje search in vstavljanje (zelo podobno) ampak ne brez tega da ves kaj so drevesa.

Teja2 ::

Predavanja sem obiskovala in domače naloge tudi delala. Vendar mi smo imeli domače naloge le na vajah in na vajah nismo nič z drevesi delali.
Glede na moje zapiske z predavanj bi potem bila koda za to, tale :
boolean vstavi(int a){
if(glava > a){
if(levi == null){
levi = new Drevo();
levi.glava = a;
return(true);
}else{
return(levi.vstavi(a));
}
}else{
if(desni == null){
desni = new Drevo();
desni.glava = a;
return(true);
}else{
return(desni.vstavi(a));
}

ragezor ::

to mas za binarno drevo, ki ima samo "levi" in "desni", ti pa moras razsiriti metodo, da hendla se "sredinski".

pa za tvoje dobro si razjasni kaj je Drevo in upam, da ves, da je funkcija vstavi metoda objekta Drevo.

kr?en ::

Binary search tree @ Wikipedia

Primeri so dani. Samo dodas se za tretji element.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Izdelava algoritma

Oddelek: Znanost in tehnologija
61554 (934) Klemen86
»

Resne težave z razumevanjem osnov programiranja (strani: 1 2 )

Oddelek: Programiranje
8016694 (13206) RatedR
»

Združevanje polj [C]

Oddelek: Programiranje
7994 (858) ragezor
»

Spreminjanje vrednosti v polju [C]

Oddelek: Programiranje
102182 (1981) specing
»

[Raptor] Razcep na prafaktorje

Oddelek: Šola
242448 (1990) Math Freak

Več podobnih tem