четвртак, 23. април 2020.

KONCENTRIČNI CIKLUSI

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:

  1. Izračunati aritmetičku sredinu cifara svakog trocifrenog broja.
  2. U skupu celih brojeva rešiti jednačinu x2 - x*y + y2 = x2*y2. (cikluse postaviti do 100)
  3. Naći sve parove prirodnih brojeva (a, b) za koje važi 6ab − b = 2055.

2 коментара:

  1. 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...

    ОдговориИзбриши
    Одговори

    1. Branka Gojkovic
      18:57 (пре 0 минута)
      коме Teodora

      У три циклуса за три цифре, нпр с, д, ј рачунаш (с+д+ј) /3 тј. средњу вредност и одмах штампаш. Значи 899

      Избриши