Stranica 1 od 1

[Pseudocode] Ciklička struktura

PostPoslato: Ponedeljak, 04. Novembar 2013, 23:00
od blake
Formulacija problema:
• Učitati RIJEC
• Ispitati za svako slovo u riječi RIJEC koliko se puta pojavljuje
• Ispisati sva slova koja se pojavljuju u rijeci RIJEC zajedno s brojem
ponavljanja
– Osnovna ideja za algoritamsko rješenje:
• Učitati riječ RIJEC
• Ako RIJEC sadrži manje od 2 slova ponoviti učitavanje
• Ispitati za svako slovo S u riječi RIJEC:
– ako je neko od prethodnih slova jednako S, tada NADJENO=true, inače
NADJENO=false
• Ako je NADJENO=true, onda je
– BROJAC=broj pojavljivanja slova S desno od S+1
– Ispisati S, BROJAC


Kôd: Obeleži sve
Algoritam:
  1.   DULJINA=0
  2.   Ponavljaj dok nije DULJINA>=2
        1.   Učitaj RIJEC
        2.   DULJINA=dužina riječi RIJEC
  3.   Za b1=1 do DULJINA
        1.   BROJAC=1
        2.   NADJENO=false
        3.   Ako b1>0 tada
              1.   Za b2=1 do b1-1
                    1.   P1=B1-to slovo u RIJEC
                    2.   P2=B2-to slovo u RIJEC
                    3.   Ako je p1=p2 tada
                          1.   NADJENO=true
                          2.   Prekini ponavljanje
        4.   Ako je NADJENO<>true tada
              1.   Ako je b1<DULJINA tada
                    1.   Za b2=b1+1 do DULJINA
                          1.   P1=B1-to slovo u RIJEC
                          2.   P2=B2-to slovo u RIJEC
                          3.   Ako je p1=p2 tada
                                1.   BROJAC=BROJAC+1
                    2.   Ispiši B1-to slovo u RIJEC, BROJAČ


Pod 3. ako neko zna objasnit ( ::

Re: Ciklička struktura

PostPoslato: Utorak, 05. Novembar 2013, 00:45
od Daniel
Pošto je tek pre neki dan objavljen Pravilnik, oprostiću ti nepoštovanje tačke 14. :P
(Upravo sam u podešavanjima foruma povećao visinu polja za programski kôd, kako bi se ceo kôd video odjednom umesto da se skroluje; možda će biti potrebno da u svom browseru stisnete CTRL+F5, kako bi isti, tj. browser, registrovao promenu.)

U ovom bloku se ispituje da li na poziciji b1 imamo prvo pojavljivanje slova u toj reči:

Kôd: Obeleži sve
        3.   Ako b1>0 tada
              1.   Za b2=1 do b1-1
                    1.   P1=B1-to slovo u RIJEC
                    2.   P2=B2-to slovo u RIJEC
                    3.   Ako je p1=p2 tada
                          1.   NADJENO=true
                          2.   Prekini ponavljanje

Izlazni rezultat tog bloka je promenljiva NADJENO. Ako je NADJENO=true, znači da se to slovo već pojavljivalo na nekoj od prethodnih pozicija u datoj reči, a ako je NADJENO=false, to znači da na toj poziciji imamo prvo pojavljivanje tog slova u datoj reči.

S tim, da je u liniji "Ako b1>0 tada" verovatno greška – trebalo bi da bude "Ako b1>1 tada", budući da je b1 ionako uvek veće od nule. Uslov da je b1>1 je i logičan i potreban, zbog naredne linije koja glasi "Za b2=1 do b1-1", u kojoj b1-1 mora biti najmanje 1, tj. b1 mora biti najmanje 2, dakle, mora biti veće od 1.



Naredni blok se izvršava samo ako smo utvrdili da se slovo na tekućoj poziciji prvi put pojavljuje u datoj reči; u suprotnom, ako je već bilo pojavljivanja tog slova, naredni blok preskačemo, vraćamo se na početak petlje i pomeramo na narednu poziciju.

Kôd: Obeleži sve
        4.   Ako je NADJENO<>true tada
              1.   Ako je b1<DULJINA tada
                    1.   Za b2=b1+1 do DULJINA
                          1.   P1=B1-to slovo u RIJEC
                          2.   P2=B2-to slovo u RIJEC
                          3.   Ako je p1=p2 tada
                                1.   BROJAC=BROJAC+1
                    2.   Ispiši B1-to slovo u RIJEC, BROJAČ

U tom bloku se vrši brojanje koliko se puta slovo koje se nalazi na tekućoj poziciji ponavlja do kraja reči. Pošto smo do ovog bloka došli onda kada nije bilo pojavljivanja tog slova na prethodnim pozicijama u reči, broj njegovih ponavljanja od te pozicije pa do kraja reči biće jednak ukupnom broju ponavljanja tog slova u reči – znači, upravo ono što tražimo.

Međutim, mislim da je i ovde greška, jer s ovakvim algoritmom, ako se na kraju reči (na poslednjoj poziciji) nalazi slovo kojem je to jedino pojavljivanje u reči, onda se ono neće ispisivati u rezultatu. Zato bi trebalo poslednju liniju, "Ispiši B1-to slovo u RIJEC, BROJAČ" staviti izvan uslova da je b1<DULJINA, tako da taj poslednji blok izgleda ovako:

Kôd: Obeleži sve
        4.   Ako je NADJENO<>true tada
              1.   Ako je b1<DULJINA tada
                    1.   Za b2=b1+1 do DULJINA
                          1.   P1=B1-to slovo u RIJEC
                          2.   P2=B2-to slovo u RIJEC
                          3.   Ako je p1=p2 tada
                                1.   BROJAC=BROJAC+1
              2.   Ispiši B1-to slovo u RIJEC, BROJAČ

Re: Ciklička struktura

PostPoslato: Utorak, 05. Novembar 2013, 14:37
od blake
Jep, u zadatku je trebalo provjerit ima li grešku...Samo jesi zaboravi zadnji blok izminit?

Re: Ciklička struktura

PostPoslato: Utorak, 05. Novembar 2013, 14:55
od Daniel
blake je napisao:Samo jesi zaboravi zadnji blok izminit?

Nisam zaobravio. Ako uporediš dva poslednja koda iz mog prethodnog posta, videćeš da se razlikuju po tome što u ovom poslednjem kodu linija "Ispiši B1-to slovo u RIJEC, BROJAČ" nije unutar "Ako je b1<DULJINA" uslova.

Re: Ciklička struktura

PostPoslato: Utorak, 05. Novembar 2013, 15:24
od blake
oko sokolovo.