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.
Нема коментара:
Постави коментар