KONCENTRIČNI CIKLUSI
Ciklusi mogu da se kombinuju jedan sa drugim.
Najprostiji primer je kada treba odštampati brojeve:
11 12 13
21 22 23
31 32 33
Ovde možemo da primetimo da se drugi indeks menja brže od
prvog, i to se može rešiti sa dve
ciklične for petlje:
for i=1 do 3
for j=1 do 3
prikaži (i,j);
Unutrašnja petlja se izvršava (“vrti”) brže od spoljašnje. Dok je i=1, j promeni sve svoje
vrednosti (ovde 1-3); i postaje 2, j opet promeni svoje vrednosti od 1 do 3; i
postaje 3, j opet promeni svoje vrednosti od 1-3.
Ako u spoljašnjoj petlji i uzima vrednosti od 1-N, a j od
1-M, naredbe unutar petlji će se izvršiti N*M puta – u
ovom slučaju 3*3=9 puta.
Koncentrični ciklusi mogu da budu kombinacija sa drugim ciklusima. Najčešće se koriste kod
rada sa matricama, ali i u drugim primerima.
Primer 1:
Naći sve parove prirodnih brojeva a i b, koji
zadovoljavaju jednakost 2ab − b = 1997
for a in range(1,12):
for b in range(1,12):
if
2*a**b-b==1997:
print('a=',a,'b=',b)
U ovom zadatku vidimo da je do rešenja vrlo jednostavno doći
računarom. Jednostavno izvrtimo sve kombinacije za a i b i vidimo za koju važi
data jednakost. Jedina nedoumica je do koje granice postaviti ciklus.
Pošto nam na desnoj strani figuriše 1997, može se zaključiti
da je 11 dovoljno jer je 211 već 2048.
Primer 2:
Naći cifre X i Y tako da važi jednakost:
X25Y+X11=X9YX
Izgleda kao razbijanje neke šifre, ali ovde znamo da X uzima
vrednosti od 1 do 9 a Y od 0 do 9.
Uslov će biti da je 1000*X+2*100+5*10+Y+100*X …..itd
Ako malo sredimo izraz dobijamo da je 11*X-Y=71
for x in range(1,10):
for y in
range(0,10):
if 11*x-y==71:
print('x=',x,'y=',y)
Primer 3:
Naći sve trocifrene brojeve čiji je zbir cifara 7.
Ovde nam ne trebaju
cifre veće od 7, a cifra stotina s takođe kreće od 1.
for s in range(1,8):
for d in
range(0,8):
for j in
range(0,8):
if
s+d+j==7:
print(100*s+10*d+j,end=' ')
Treba uočiti
upotrebu opcionog argumenta end = ' ', koji specificira da se, posle
prikaza željenog teksta, ostane u istom redu (prazan tekst
kao separator izmedu dva
ispisa), odnosno da će sledeći ispis započeti odmah do
prethodnog. Ako se ovaj
argument izostavi, kao
u prethodnim zadacima, sledeći ispis započinje u novoj liniji.
Primer ispisa:
ZADACI ZA VEŽBU:
- Izračunati aritmetičku sredinu cifara svakog trocifrenog broja.
- U skupu celih brojeva rešiti jednačinu x2 - x*y + y2 = x2*y2. (cikluse postaviti do 100)
- Naći sve parove prirodnih brojeva (a, b) za koje važi 6ab − b = 2055.
Profeosrice, da li u prvom zadatku treba da ispišemo aritmetičku sredinu svakog trocifrenog broja, ili ukupnu aritmetičku sredinu svih cifara trocifrenih brojeva? Tj da li je potrebno 899 rešenja ili samo jedno? Hvala unapred...
ОдговориИзбриши
ИзбришиBranka Gojkovic
18:57 (пре 0 минута)
коме Teodora
У три циклуса за три цифре, нпр с, д, ј рачунаш (с+д+ј) /3 тј. средњу вредност и одмах штампаш. Значи 899