010100000110111101101110011000010111011001101100011010100110000101101110011010100110010100100000011010100110010100100000011011010110000101101010011010110110000100100000011110100110111001100001011011100110101001100001
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);
Pretplati se na:
Objavi komentare (Atom)
Nema komentara:
Objavi komentar