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

WHILE PETLJA (3)


REŠENJA I OBJAŠNJENJA ZADATAKA TREĆE VEŽBE

Zadaci treće lekcije ciklusa su se pokazali kao najlošije urađeni do sada, ne zbog težine nego zbog znatnog pada vaše koncentracije i nemilosrdnog korišćenja copy/paste opcije. Zato vas molim da dobro izanalizirate ova objašnjenja i uvidite greške koje ste napravili. Vrlo je važno da ovo naučite jer će nam ciklusi biti nephodan deo programa koje budemo radili.

1. Napisati program koji za dati prirodan broj n ispituje da li je stepen broja 3.

Uputstvo: Uslov za izvršavanje je da je broj deljiv sa 3
U ciklusu broj transformišemo u njegov količnik sa brojem tri

n=int(input("unesite n"))
while n%3==0:
    n=n//3
if n==1:
     print("Broj je stepen broja 3")
else:
     print("Broj nije stepen broja 3")

Dato vam je uputstvo kog se velika većina uopšte nije pridržavala. Najveća greška je bila, kao i u ostala dva zadatka, definisanja n kao float. Ako sam zadala da je broj deljiv sa 3, onda je po logici jasno da je broj ceo i koristimo celobrojno deljenje i ostatak. Znači n=n//3 Mnogi su imali n/3, n*(1/3) i slične konstrukcije. Objašnjavala sam da operacije sa realnim brojevima imaju određenu tačnost i razlikuju se od operacija sa celim brojevima. Npr. može se desiti da umesto 0 dobijemo rezultat 0.000001. Većina bi pomislila – možeš misliti razlike - ali ako je u pitanju radioaktivni uranijum, razlika je ogromna.

2.     Napisati program koji će iz niza brojeva nepoznate dužine izračunati posebno sumu parnih i  proizvod neparnih brojeva.



print('unesite broj, za kraj niza unesite nulu')
sp=0
pn=1
x=int(input('x='))
while x!=0:
    if x%2==0:
        sp=sp+x
    else:
        pn=pn*x
    x=int(input('x='))
print('proizvod neparnih',pn)
print('suma parnih',sp)

I u ovom zadatku masovno ste unosili x kao float, a onda ispitivali da li je paran.


3.     Odrediti najmanji broj uzastopnih  brojeva počevši od 1 čija je suma veća od  unetog broja N

Uputstvo: Uslov za izvršavanje je da je suma <=N

U ciklusu računamo sumu, uvećavamo broj za 1 i brojač za 1

n=int(input('unesite granicu'))
s=0
i=1
br=0
while s<=n:
    s=s+i
    br=br+1
    i=i+1
print('Ima',br,'sabiraka')

U ovom zadatku pitanje je bilo, ako npr. unesem broj 32, koliko najmanje brojeva saberem počevši od 1 da dobijem broj oko 32 ( tj. kad vrednost sume pređe datu granicu stajemo sa ciklusom)
Iako je u uputstvu naglašeno da je suma <=N, velika većina je pisala uslov da je i<=n što nema nikakvog smisla.
S=1+2+3+4+5+6+7 U ovom slučaju rezultat bi bio 7 sabiraka. Opet je velika većina kao rezultat navodila vrednost promenljive i koji nije tačan, jer se u ciklusu i još jednom uveća za jedan. Zato je trebalo uvesti brojač koji počinje od nule, kao u ovom rešenju, ili eventualno kao rezultat dati i-1.

Znači, zaključak je da treba dobro razmisliti o zadatku, rešiti ga, isprobati na nekolilo test-primera i videti da li korektno radi. Ako vam neko od drugova pošalje rešenja, ne uzeti ih zdravo za gotovo već uočiti greške, jer se većina ovih grešaka mogla videti pukim testiranjem.

DOMAĆI ZADATAK:
Pročitati lekciju o tipovima podataka za prvi razred, dobro će vam doći.
Na sednici se spominjalo da iz raznih predmeta radite prezentacije, tako da  ko ima, može mi poslati, jer je to i vežba iz informatike pa može da se dobije plus i iz tog dela.





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

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