29.04. ANALIZA 2. ZADATKA
(bez obzira koji se programski jezik koristi za rešavanje)
Zadatak je sekvencijalni (pipeline): svaki korak proizvodi rezultat koji se koristi u sledećem. Svaki deo treba da se ispisuje u
************** Odgovor 1 **************
...
************** Odgovor 2 **************
...
************** Odgovor 3 **************
...
************** Odgovor 4 **************
...
************** Odgovor 5 **************
...
🔹 2.1. PROVERA URAVNOTEŽENOSTI
Šta se radi:
- Unosi se string s
- Broje se mala slova, velika slova i cifre
- Proverava se uslov da li je
mala = velika = cifre - Ako je uslov zadovoljen ispisuje se
String je uravnotezen., a ako nije onda se ispisujeString nije uravnotezen.
Učitaj string s
odredi dužinu stringa
N ← duzina / 4
RibaRibiGrizeRep2026
mala ← 0
velika ← 0
cifre ← 0
ZA svaki karakter c u s:
AKO je c malo slovo:
mala ← mala + 1
INAČE AKO je c veliko slovo:
velika ← velika + 1
INAČE AKO je c cifra:
cifre ← cifre + 1
AKO mala = velika I velika = cifre:
Ispis "String je uravnotezen"
INAČE:
Ispis "String nije uravnotezen"
2.2. FORMIRANJE SEKVENCI
Od ulaznog stringa treba da se formira N sekvenci, svaka dužine 4. Sekvenca i uzima elemente: i, i+N, i+2N, i+3N
Izlaz je svaka sekvenca u novom redu i bez dodatnog teksta.
Riip
ibz2
bie0
aGR2
Rre6
kreiraj praznu listu sekvence
ZA i od 0 do N-1:
sek ← prazan string
ZA j od i do duzina-1, korak N:
sek ← sek + s[j]
dodaj sek u sekvence
ispiši sek
🔹 2.3. TRANSFORMACIJA SEKVENCI
Od sekvenci iz prethodnog koraka treba da se dobiju nove sekvence, uzimajući u obzir sledeća pravila transformacije:
| Tip | Pravilo |
|---|---|
| malo slovo | sledeće (z → a) |
| veliko slovo | prethodno (A → Z) |
| cifra | cifra + indeks u sekvenci |
Napomena: Indeks je pozicija unutar sekvence (0–3)
Izlaz je svaka transformisana sekvenca u novom redu
Qjjq jca5 cjf3 bFQ5 Qsf9
kreiraj praznu listu noveSekvence
ZA svaku sekvencu sek u sekvence:
nova ← prazan string
ZA i od 0 do dužina(sek)-1:
c ← sek[i]
AKO je c malo slovo:
AKO je c = 'z':
nova ← nova + 'a'
INAČE:
nova ← nova + sledeće slovo od c
INAČE AKO je c veliko slovo:
AKO je c = 'A':
nova ← nova + 'Z'
INAČE:
nova ← nova + prethodno slovo od c
INAČE AKO je c cifra:
vrednost ← (numerička vrednost cifre c) + i
nova ← nova + karakter te vrednosti
dodaj nova u noveSekvence
ispiši nova
2.4. FORMIRANJE s2 I NAJDUŽI PODNIZ
Prvo treba sve sekvence da se spajaju redom u string: s2 = sek1 + sek2
+ ... + sekN
Prikazati dobijeni string s2
Zatim treba da se odredi najduži podniz slova, gde cifre prekidaju niz.
s2 ← prazan string
ZA svaku sekvencu sek u noveSekvence:
s2 ← s2 + sek
ispiši s2
maxPodniz ← prazan string
trenutni ← prazan string
ZA svaki karakter c u s2:
AKO je c slovo:
trenutni ← trenutni + c
AKO dužina(trenutni) > dužina(maxPodniz):
maxPodniz ← trenutni
INAČE:
trenutni ← prazan string
ispiši maxPodniz
ispiši dužinu(maxPodniz)
s2: Qjjqjca5cjf3bFQ5Qsf9 Najduzi podniz slova: Qjjqjca Duzina: 7
2.5. FORMIRANJE MATRICE
Od stringa koji je dobijen u prethodnom koraku prvo izračunati dimenziju kvadratne matrice koja nam je potrebna
Korak 1 - dimenzija matrice: Traži se najmanje m takvo da je m² ≥ dužina(s2)
Korak 2 - popunjavanje: popunjava se red po red:
| Tip karaktera | Upis |
|---|---|
| slovo | ASCII vrednost |
| cifra | negativna vrednost |
| prazno mesto | 0 |
Korak 3 - Izlaz: matrica dimenzije m × m gde su elementi razdvojeni razmakom ili tabom.
81 106 106 113 106
99 97 -5 99 106
102 -3 98 70 81
-5 81 115 102 -9
0 0 0 0 0
// FORMIRANJE MATRICE
len ← dužina(s2)
m ← 1
DOK m * m < len:
m ← m + 1
// POPUNJAVANJE MATRICE
k ← 0
ZA i od 0 do m-1:
ZA j od 0 do m-1:
AKO k < len:
AKO je s2[k] slovo:
ispiši ASCII vrednost s2[k]
INAČE (cifra):
ispiši negativnu vrednost cifre
k ← k + 1
INAČE:
ispiši 0
novi red
Kako izgleda tok podataka u ovom zadatku - gde svaki korak zavisi od prethodnog:
ulazni string s
↓
sekvence
↓
transformisane sekvence
↓
s2
↓
najduži podniz
↓
matrica