trebamo unijeti dva ulazna podatka (c- cijena jedne …...1 pojašnjenje: trebamo unijeti dva ulazna...

13
1 Pojašnjenje: Trebamo unijeti dva ulazna podatka (C- cijena jedne jabuke i N-broj jabuka) pomoću naredbe TextWindow.ReadNumber, izračunati njihovu ukupnu cijenu ispremiti taj podatak pod imenom U te ispisati rezultat U pomoću naredbe TextWindow.Writeline. Rješenje: c= TextWindow.ReadNumber() N= TextWindow.ReadNumber() U= c*N TextWindow.WriteLine(U)

Upload: others

Post on 21-Jan-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

1

Pojašnjenje: Trebamo unijeti dva ulazna podatka (C- cijena jedne jabuke i N-broj jabuka) pomoću naredbe

TextWindow.ReadNumber, izračunati njihovu ukupnu cijenu ispremiti taj podatak pod imenom U te ispisati

rezultat U pomoću naredbe TextWindow.Writeline.

Rješenje:

c= TextWindow.ReadNumber() N= TextWindow.ReadNumber() U= c*N TextWindow.WriteLine(U)

2

3

Pojašnjenje:

Trebamo unijeti dva ulazna podatka (A- ukupan broj pogodaka Hrvatske i B- ukupan broj pogodaka Španjolske

na rukometnoj utakmici) pomoću naredbe TextWindow.ReadNumber:

A= TextWindow.ReadNumber() B= TextWindow.ReadNumber()

Nakon toga trebamo provjeriti da li je A (broj pogodaka Hrvatske) veći od B (broj pogodaka Španjolske) If A>B Then te ako jest ispisati „Hrvatska“ (Hrvatska je pobijedila)

TextWindow.WriteLine("HRVATSKA")

Ukoliko to nije bilo ispunjeno pitamo se dalje da li je A (broj pogodaka Hrvatske) manji od B (broj pogodaka

Španjolske)

ElseIf A<B Then

te ako jest ispisati „Španjolska“ (Španjolska je pobijedila)

TextWindow.WriteLine("ŠPANJOLSKA")

Ukoliko to nije bilo ispunjeno pitamo se dalje da li je A (broj pogodaka Hrvatske) jednak B (broj pogodaka

Španjolske)

ElseIf A=B then te ako jest ispisati „NERJEŠENO“ (rezultat je bio nerješen)

TextWindow.WriteLine("Španjolska")

Na kraju moramo završiti IF grananje naredbom ENDIF

EndIf

Rješenje:

A= TextWindow.ReadNumber() B= TextWindow.ReadNumber() If A>B Then TextWindow.WriteLine("HRVATSKA") ElseIf A<B then TextWindow.WriteLine("ŠPANJOLSKA") ElseIf A=B then TextWindow.WriteLine("NERIJEŠENO") EndIf

NAPOMENA:

Posljednje tri naredbe:

ElseIf A=B then TextWindow.WriteLine("NERIJEŠENO") EndIf

Mogli smo napisati i ovako:

Else TextWindow.WriteLine("NERIJEŠENO") EndIf

Pojašnjenje: Naredbu Else koristimo kada niti jedan od prethodnih uvjeta (A>B niti A<B) nije bio točan. U ovom

slučaju ukoliko broj A nije bio veći niti manji od broja B tada brojevi moraju biti jednaki pa se ne trebamo pitati

jesu li jednaki.

4

5

Zadatak: PEKING Pojašnjenje: Kao ulazni podatak imamo jedan broj IKZ (Indeks kakvoće zraka). Taj broj se uvijek nalazi u jednom od

određenih raspona (npr. Između 50 i 100). Ovisno o tome u kojem se rasponu IKZ nalazi, trebamo ispisati

određenu poruku.

Unesimo najprije IKZ s tipkovnice:

IKZ= TextWindow.ReadNumber()

Promotrimo zatim prvi redak u tablici s mogućim rasponima i odgovarajućim porukama. (IKZ <= 50 | „Dobra

kvaliteta zraka“). Ispitajmo da li je IKZ manj ili jednak 50 (If IKZ <=50). Ukoliko jest ispišimo poruku

(TextWindow.WriteLine“Dobra kvaliteta zraka“)

Program nam sada izgleda ovako:

IKZ= TextWindow.ReadNumber() If IKZ<=50 Then TextWindow.WriteLine("Dobra kvaliteta zraka")

Ukoliko je unešeni IKZ bio manji ili jednak 50 ispisat će se „Dobra kvaliteta zraka“ i program završava. Što ako

je unešeni IKZ bio veći od 50?

U tom slučaju postavljamo iduće pitanje: da li je IKZ manji ili jednak 100 (ElseIf IKZ <=100); vidi drugi redak

tabele u zadatku te ako jest ispišemo poruku: „Umjerena kvaliteta zraka“.

Program nam sada izgleda ovako:

IKZ= TextWindow.ReadNumber() If IKZ<=50 Then TextWindow.WriteLine("Dobra kvaliteta zraka") ElseIf IKZ<= 100 then TextWindow.WriteLine("Umjerena kvaliteta zraka")

Isti postupak je potrebno provesti za svaki redak tabele i na kraju završiti grananje IF naredbom ENDIF:

IKZ= TextWindow.ReadNumber() If IKZ<=50 Then TextWindow.WriteLine("Dobra kvaliteta zraka") ElseIf IKZ<= 100 then TextWindow.WriteLine("Umjerena kvaliteta zraka") ElseIf IKZ<= 150 then TextWindow.WriteLine("Zrak nezdrav za osjetljive grupe") ElseIf IKZ<= 200 then TextWindow.WriteLine("Nezdrav zrak") ElseIf IKZ<= 300 then TextWindow.WriteLine("Vrlo nezdrav zrak") ElseIf IKZ<= 500 then TextWindow.WriteLine("Opasan zrak") EndIf

6

7

2. Zadatak: TRI Pojašnjenje: Kao ulazni podatak imamo samo jedan broj (N), a kao izlazni podatak broj koji je djeljiv s 3 i najbliži je unesenom broju N. Promotrimo slijedeće primjere:

Ako unesemo broj 3 program treba ispisati 3 (3 je djeljivo s 3)

Ako unesemo broj 4 program treba ispisati 3 (4 nije djeljivo s 3, a najbliži broj je 3). Uočimo još i koliki je ostatak dijeljenja. 4:3 = 1 i ostatak 1

Ako unesemo broj 5 program treba ispisati 6 (4 nije djeljivo s 3, a najbliži broj je 3). Uočimo još i koliki je ostatak dijeljenja. 5:3 = 1 i ostatak 2

Ovakav uzorak se ponavlja za sve iduće brojeve: o Ako unesemo 6 ispisujemo 6 o Ako unesemo 7 ispisujemo 6 o Ako unesemo 8 ispisujemo 9 itd.

Možemo zaključiti:

Ukoliko neki broj N dijelimo s 3, broj može biti djeljiv s 3 bez ostatka (ostatak=0), ostatak može biti 1 i ostatak može biti 2 i onda opet ispočetka bez ostatka, ostatak 1, ostatak 2...

ukoliko je broj N djeljiv s 3 bez ostatka, ispisujemo taj broj N

ukoliko je ostatak dijeljenja N:3 jednak 1 ispisujemo broj za jedan manji od N (N-1)

ukoliko je ostatak dijeljenja N:3 jednak 2 ispisujemo broj za jedan veći od N (N+1) Isprobajmo: n= TextWindow.ReadNumber() ostatak= Math.Remainder(n,3) If ostatak=0 Then TextWindow.WriteLine(n) ElseIf ostatak=1 then TextWindow.WriteLine(n-1) ElseIf ostatak=2 then TextWindow.WriteLine(n+1) EndIf

Pažljivijim čitanjem zadatka uočimo što piše pod napomena: 0 nije prirodan broj!

Pitate se kakve to ima veze s našim zadatkom? E pa jeste li pokušali kao N unijeti brojku 1? Kao rezultat vam

se ispiše 0 !

I što sad? Ne brinite program radi ispravno za sve ostale brojeve osim za N=1.

To ćemo riješiti na način da se u grananju If najprije pitamo je li N=1. Ukoliko je N=1 ispišemo brojku 3 i to je

to.

n=TextWindow.ReadNumber() ostatak=Math.Remainder(n,3) If n=1 then TextWindow.WriteLine("3") ElseIf ostatak=0 Then TextWindow.WriteLine(n) ElseIf ostatak=1 then TextWindow.WriteLine(n-1) ElseIf ostatak=2 then

8

TextWindow.WriteLine(n+1) EndIf

9

3. Zadatak: SKOKOVI

Pojašnjenje:

Zadatak je na prvi pogled prilično jasan. Unesemo 5 brojeva, odbacimo najmanji i najveći te ispišemo zbroj

ostalih. Ali, kako ćemo to isprogramirati?!

Krenimo redom:

Najprije trebamo unijeti 5 brojeva. Mogli bismo to napraviti kao A= TextWindow.ReadNumber(), B=… i tako

svih 5 brojeva do E. Pošto nam nije bitno pamtiti svaku ocjenu već samo njihov zbroj, unos i zbrajanje možemo

napraviti na slijedeći način:

For x=1 To 5 ocjena= TextWindow.ReadNumber() zbroj= zbroj + ocjena EndFor

Idući korak je odrediti najveću i najmanju ocjenu. Kao pomoć za određivanje najveće i najmanje ocjene koristit

ćemo još 2 varijable. Za spremanje najveće ocjene će nam poslužiti varijabla koju ćemo nazvati MAX, a za

spremanje najmanje ocjene varijabla koju ćemo nazvati MIN. Na početku programa odredimo:

MAX=0

MIN =11

Zašto baš ovi brojevi? Uočimo kako u zadatku piše da kao ulazne podatke imamo 5 brojeva između 1 i 10.

Kako sad najveća (MAX) jednako 0, a najmanja (MIN) jednako 11?

Zbog toga što želimo da prva unesena ocjena svakako bude veća od varijable MAX i manja od varijable MIN

Dakle naš program sada izgleda ovako:

MAX= 0 MIN= 11 For x=1 To 5 ocjena= TextWindow.ReadNumber() zbroj= zbroj + ocjena EndFor

U Idućem koraku za svaku unešenu ocjenu pitamo se je li ona do sada najveća unešena ocjena (If

ocjena>MAX) te ukoliko jest najveća spremamo tu ocjenu u varijablu MAX (then MAX= ocjena). Ukoliko nije ne

radimo ništa.

Isto tako za svaku unešenu ocjenu pitamo se je li ona do sada najmanja unešena ocjena (If ocjena<MIN) te

ukoliko jest spremamo tu ocjenu u varijablu MIN (then MIN= ocjena). Ukoliko nije ne radimo ništa.

10

Ovdje je bitno naglasiti kako nakon svakog ispitivanja moramo završiti IF naredbu sa ENDIF, a ne postavljati

iduće pitanje sa ELSEIF. Razlog: Neka ocjena može biti i najmanja i najveća istodobno. Ukoliko bi zadovoljila

uvjet da je najveća, ELSEIF se nebi niti ispitivao te bi najmanja ocjena ostala početna (MIN=11)

Dakle naš program sada izgleda ovako:

MAX= 0 MIN= 11 For x=1 To 5 ocjena= TextWindow.ReadNumber() If ocjena > MAX Then MAX= ocjena EndIf If ocjena < MIN Then MIN= ocjena EndIf zbroj= zbroj + ocjena EndFor

Preostaje nam još od zbroja svih ocjena (ZBROJ) oduzeti najveću (MAX) i najmanju (MIN) ocjenu te ispisati rezultat: rezultat=zbroj-MAX-MIN TextWindow.WriteLine(rezultat)

Konačno rješenje:

MAX= 0 MIN= 11 For x=1 To 5 ocjena= TextWindow.ReadNumber() If ocjena > MAX Then MAX= ocjena EndIf If ocjena < MIN Then MIN= ocjena EndIf zbroj= zbroj + ocjena EndFor rezultat=zbroj-MAX-MIN TextWindow.WriteLine(rezultat)

11

12

Postupak rješavanja:

Ulazni podaci za program su n (broj pjesmi) te zatim n puta m(minute) i s (sekunde) trajanja svake pjesme

Najprije moramo učitati broj pjesmi n:

n= TextWindow.ReadNumber()

Zatim n puta (za svaku pjesmu) unosimo njeno trajanje u m(minutama) i s(sekundama)

For x=1 To n m= TextWindow.ReadNumber() s= TextWindow.ReadNumber() EndFor Ispis iz zadatak treba biti ukupno trajanje svih pjesmi u minutama i sekundama. Kako bismo to izračunali najprije ćemo izračunati ukupno trajanje svih pjesmi u sekundama te zatim iz tog podatka preračunati koliko je to minuta i sekundi… Nakon unosa minuta i sekundi za svaku pjesmu, trebamo izračunati njihovo trajanje u sekundama: minute pomnožimo sa 60 (da dobijemo sekunde) te im pribrojimo sekunde:

For x=1 To n m= TextWindow.ReadNumber() s= TextWindow.ReadNumber() trajanje= m*60 + s EndFor Ovakvim načinom zbrajanja kao krajnji rezultat u varijabli trajanje dobili bismo samo duljinu zadnje unesene pjesme. Ispravan način zbrajanja dobit ćemo tako da zadnjem izračunatom trajanju pribrojimo minute i sekunde svake pjesme i to opet spremimo u varijablu trajanje. Ovakav način zbrajanja u programiranju nazivamo brojač te ga koristimo na slijedeći način: brojač= brojač + vrijednost koju treba pribrojiti ; u našem primjeru to bi bilo:

trajanje= trajanje + (m * 60 + s) Ukoliko napravimo sve od navedenog naš program bi sada izgledao ovako:

n= TextWindow.ReadNumber() For x=1 To n m= TextWindow.ReadNumber() s= TextWindow.ReadNumber() trajanje= trajanje + (m * 60 + s) EndFor Na kraju programa ispišimo sadržaj varijable trajanje:

TextWindow.WriteLine(trajanje) Pokrenimo naš program da vidimo napredak te unesimo za n vrijednost 2 (2 pjesme) Nakon toga unosimo n puta (2 puta u ovom primjeru) broj m(minute) i s(sekunde): unesimo redom 1, 20, 3, 10 Program bi nam trebao ispisati ukupno trajanje svih pjesmi u sekundama: trajanje= 1*60+20+3*60+10= 270 Kako bismo iz 270 dobili koliko je to minuta? 270 podijelimo sa 60 i odbacimo ostatak 270/60=4 i ostatak 30 Naredba Math.Floor nam vraća rezultat dijeljenja bez ostatka. Iskoristimo je i naš rezultat spremimo u varijablu minute

minute= Math.Floor(trajanje/60) u našem primjeru bit će minute=4 Sekunde ćemo dobiti na sličan način samo što nam ovaj puta ne treba rezultat dijeljenja, već ostatak. Naredba Math.Remainder nam vraća ostatak kod dijeljenja (bez obzira na rezultat). Ako bi iz našeg primjera:

13

270/60=4 i ostatak 30 željeli dobiti samo ostatak 30 (rezultat 4 nas ne zanima) iskoristit ćemo naredbu Math.Remainder i naš rezultat spremimo u varijablu sekunde.

sekunde= Math.Remainder(trajanje,60) Preostaje nam još pogledati točan oblik izlaznog rješenja u zadatku: Minute: XXXXX Sekunde: XXXXX Ispišimo naše rješenje u tom obliku:

TextWindow.WriteLine("Minute: " + minute) TextWindow.WriteLine("Sekunde: " + sekunde) Cjelokupno rješenje:

n= TextWindow.ReadNumber() For x=1 To n m= TextWindow.ReadNumber() s= TextWindow.ReadNumber() trajanje= trajanje + (m * 60 + s) EndFor minute= Math.Floor(trajanje/60) sekunde= Math.Remainder(trajanje,60) TextWindow.WriteLine("Minute: " + minute) TextWindow.WriteLine("Sekunde: " + sekunde)

Sažetak: Skup naredbi: n= TextWindow.ReadNumber() For x=1 To n ... EndFor Koristimo kada se broj ponavljanja unosi na početku programa Brojač je uvijek formata: brojač = brojač + …

Naredbe Math.Floor i Math.Remainder gotovo uvijek koristimo u paru i to sa istim parametrima u zagradi

s razlikom što se kod naredbe Math.Floor koristi znak /, a kod Math.Remainder znak ,