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

While petlja(2)


While petlja(2)


  
Primer 4: Za uneti broj x ispitati da li je prost.

prost=True
i=2
x=int(input('unesite x '))
n=round(x**(1/2))
while i<=n and prost:
    if x%i==0:
        prost=False
    i=i+1
if prost:
    print('broj je prost')
else:
    print('broj nije prost')

Postavljamo promenljivu prost na vrednost tačno jer nam je to jedan od uslova za izvršavanje ciklusa. Ovaj zadatak nam je ujedno i ilustracija rada sa konstantama i promenljivima logičkog tipa.
Da se podsetimo, broj je prost ako nije deljiv ni sa jednim brojem osim sa samim sobom.
Međutim, ciklus ne mora da se izvršava do vrednosti samog broja, već je dovoljno ići do korena. Ako broj do korena nema delilaca, neće ih imati ni nadalje. Pošto je za koren moguća realna vrednost, zaokružili smo ga na ceo sa round.
Uslov za while je da je mogući delilac i ( koji smo na početku stavili na dvojku) manji od korena i da je vrednost promenljive prost tačno.
U ciklusu ispitujemo da li je broj deljiv sa i. Ako jeste, broj automatski nije prost, tako da promenljiva prost dobija vrednost netačno i iz ciklusa se izlazi.
Ako nije, uvećavamo i za 1 i nastavljamo ispitivanje deljivosti.
Uglavnom, čim se u ciklusu pojavi neki delilac broja, završava se, jer broj tada nije prost.
Interesantna je izlazna if. Nema klasičnog uslova nego je stavljena samo promenljiva prost.
Ako joj je vrednost True broj je prost, a ako je False, broj nije prost.

Primer 5: Za uneti broj n prebrojati koliko ima cifara

n=int(input('unesite n '))
k=0
while n>0:
    n=n//10
    k=k+1
print('broj cifara je ',k)

Uneti broj celobrojno delimo sa 10. Istovremeno sa svakim deljenjem brojač uvećavamo za 1. Ciklus se izvršava dok ne dobijemo nulu kao rezultat, što je znak da smo došli do poslednje cifre. Praktično, sa svakim okretanjem ciklusa, tj. sa svakim deljenjem, odbacujemo po jednu cifru i istovremeno brojač cifara uvećavamo za 1.

Primer 6: Za uneti broj n ispitati da li je palindrom

n=int(input('unesite n '))
m=n
s=0
while m>0:
    s=s*10+m%10
    m=m//10
if s==n:
    print('Broj je palindrom')
else:
    print('Broj nije palindrom')

Unosimo prirodan broj. Palindrom je ako ima istu vrednost i ako se čita naopačke, npr 1221 je palindrom. Zadatak ćemo rešiti tako što ćemo formirati drugi broj, kome ćemo obrnuti cifre. Ako su uneti i novodobijeni broj jednaki, to znači da je broj palindrom. Na primer, od broja 1234 napravićemo 4321, a pošto su uneti i dobijeni broj različiti, ovaj broj nije palindrom.
Pošto nam uneti broj n treba na kraju za upoređivanje, sačuvaćemo njegovu vrednost i koristiti pomoćnu promenljivu m koju ćemo menjati u ciklusu.
S je novodobijeni broj sa obrnutim ciframa.
U ciklusu uzimamo  ostatak deljenja broja sa 10 ( to nam je uvek preostala poslednja cifra broja sa desne strane, tj cifra jedinica)
m=1234   m%10=4
Znači u prvom prolasku kroz ciklus novodobijeni broj je 4.
Sada m delimo sa 10 i dobijamo 123
U sledećem prolasku s=s*10+m%10 što znači da od 4 dobijamo 40 i na to dodajemo 3 pa nam je novodobijeni broj 43, a m dobija novu vrednost 12 posle m=123//10.
U sledećem prolasku s=s*10+m%10 što znači da od 43 dobijamo 430 i na to dodajemo 2 pa nam je novodobijeni broj 432, a m dobija novu vrednost 1 posle m=12//10.
U sledećem prolasku s=s*10+m%10 što znači da od 432 dobijamo 4320 i na to dodajemo 1 pa nam je novodobijeni broj 4321, a m dobija novu vrednost 0 posle m=1//10.
Sada je jasno zašto nam je uslov za izvršavanje ciklusa da je m>0. Kada je m=0 "potrošili" smo sve cifre i dobili novi broj čije su cifre obrnute od unetog.
Na izlazu, ako su uneti i novodobijeni broj jednaki, broj je palindrom, ako nisu, nije.

DOMAĆI ZADATAK:

Dobro proučiti ova tri primera i isprobati ih u Pajtonu. Pomoći će vam da shvatite i prethodna tri WHILE zadatka. Ko nije do sada uradio, neka uradi i pošalje prethodne domaće zadatke.

Srećni uskršnji praznici!

Нема коментара:

Постави коментар