ponedjeljak, 28. siječnja 2013.

Pseudokod - zadaci (2)


1.Ako je izvršavanjem sljedećeg programa vrijednost varijable s jednaka 144, 
kolika je ulazna vrijednost varijable k? 

ulaz (k);
s:=0;
za j:=1 do k činiti s:=s+k;
izlaz (s);


Odgovor:

Imamo petlju koja ide od 1 do unesenog broja i za svaki okretaj zbraja
računa konačnu sumu, odnosno program prikazuje kako funkcionira množenje
broja. Ako k bude 3 konačni rezultat će biti 9, odnosno 3*3.

Znači da bi s bio 144, ulaz mora biti 12.



2.Što će biti ispisano na zaslonu računala nakon izvođenja sljedećeg niza naredbi?

y := 0;
x := 10;
dok je x>4 činiti
{
x:=x-1;
y:=y+1;
z:=8;
dok je (z>5) I (x>=z) činiti
{
z:=z-1;
y:=y+1;
}
}
izlaz(y);


Odgovor:



Vidimo da će se ovaj blok naredbi izvršavati sve dok je x > 4. Svakim izvršavanjem
x se smanjuje za 1. z varijabla se uvijek vrati na vrijednost osam i smanjuje se
dok ne dođe do 5, odnosno svaki put 3 puta, što uvećava y varijablu 3 puta. No to
će se dogoditi samo ako je još uz to x varijabla veća od z. Na početku je x varijabla
veća (9), u sljedećem krugu se smanji na 8, pa je y još uvijek jednak z, no nakon ta dva
izvršavanja x postaje 7, i budući da se x samo može smanjivati, unutarnji uvjet se više
neće izvršavati. Ipak svakim krugom se y varijabla povećava za 1. Veliki uvjet će biti
ispunjen 6 puta, što znači da će y biti 6, a budući da će se mali izvršiti samo dva puta
(2*3=6), 6 + 6 će nam dati konačan rezultat.

Izlaz koji vraća y varijablu će biti 12.


3.Koje vrijednosti ispisuje sljedeći programski dio? 
(Round zaokružuje realni broj na najbliži cijeli broj,Trunc daje cijeli dio realnog broja x) 

i := 28;
faktor:= Trunc(i/2);
z:=1;
dok je faktor>1 činiti
{
ako je (i mod faktor = 0)onda
z := z + faktor;
faktor := Round(faktor/2);
}
izlaz (z);


Odgovor:
_______________________
i          |  28   28  28  28  28
faktor  | 14    7     4    2    1
z         |  1     15   22  26  28


Početni broj 29 koji je smješten u varijabli i se neće mijenjati. Ovaj program zapravo
prvo uzme polovinu broja, ako je taj broj djeljiv s izvornim brojem dodaje ga u varijablu
z i prepolavlja broj sve dok ne dođe do broja 1.

z je na kraju 28


4.Što računa sljedeći programski dio?
 (mod je ostatak pri cjelobrojnom dijeljenju) 

ulaz (x,y);
ako je x<y onda
{
pom := x;
x := y;
y := pom;
}
z:=y;
dok je x mod y <>0 činiti
{
z := x mod y;
x := y;
y := z;
}
izlaz (z);


Odgovor:

Ovaj program traži najveći zajednički djelitelj dva broja. Prvi dio programa prebaci
brojeve tako da uvijek x bude onaj veći. Drugi dio programa koristi takozvani Euklidov
algoritam, odnosno provjerava, ako veći broj nije djeljiv s manjim uzima njihov ostatak,
x postaje stari y, a y postaje ostatak i tako sve dok ne budu dva broja djeljiva. Tada će
biti ispisan najveći zajednički djelitelj.


5.Napiši pseudokod za program koji unosi prirodni broj u oktalnom brojevnom sustavu 
i pretvara ga u broj u dekadskom brojevnom sustavu.

Odgovor:

ulaz(n);
zn := 1;
N := 0;
dok je n div 10 <> 0 činiti
{
N := N + n mod 10 * zn;
zn := zn * 8;
n := n div 10;
}
N := N + n * zn;
izlaz(N);

Ovo rješenje je duže, odnosno u  morali smo dodati još jednu liniju koda kako bi
zahvatili i zadnju znamenku jer ona ne bi bila ubrojena, budući da n div 10 bi
tada rezultirao s nula.
Ovo je kraće rješenje:

ulaz (n);
zn := 1;
N := 0;
dok je (n>0) činiti
{
N := N + n mod 10 * zn;
zn := zn * 8;
n:= n div 10;
}
izlaz (N);

Nema komentara:

Objavi komentar