Ulaz i izlaz podataka, naredba pridruživanja

Sjedište: CARNET - Arhiva 2021 Loomen
E-kolegij: Pripreme za ispit iz informatike na državnoj maturi
Knjiga: Ulaz i izlaz podataka, naredba pridruživanja
Otisnuo/la: Gost (anonimni korisnik)
Datum: nedjelja, 24. studenoga 2024., 13:28

Opis

uvod u pseudojezik

1. Ulaz i izlaz podataka

Svaki se program sastoji od tri odvojena dijela: unosa podataka, obrade i prikaza rezultata.

Želimo li napraviti takav program moramo se upoznati sa naredbom koja će omogućiti korisniku da unese potrebne podatke (npr. preko tipkovnice) i naredbom za prikaz rezultata obrade (npr. na zaslonu monitora). Naredbe koje omogućuju korisniku unos podataka nazivamo ulazne, a naredbe koje omogućuju prikaz rezultata su naredbe za ispis.

1.1. Unos podataka

Naredba za unos podataka u pseudojeziku zapisuje se kao ulaz();

Primjeri:
    ulaz (a);
    ulaz (put, vrijeme);
    ulaz (x, y, z).

Što se događa kada program dođe do naredbe ulaz();?

Kada program dođe do ove naredbe, omogućuje se unos podatka (ili više podataka) s tipkovnice. Uneseni se podatak ili podatci tada spreme u memoriju. Da bi program znao koji podatak čemu služi, osim samog podatka program pamti i naziv (adresu) pod kojim se taj podatak sprema.

1.2. Prikaz rezultata obrade - naredba za ispis

Kada korisnik upiše potrebne podatke i program napravi obradu te izračuna rezultat, taj je rezultat potrebno prikazati na nekom od vanjskih uređaja za prikaz podataka (npr. na zaslonu monitora). Bez prikaza rezultata nema koristi ni od obrade.
Naredbe koje omogućuju prikaz rezultata nazivamo naredbe za ispis.
Naredbu za ispis u pseudojeziku definiramo kao izlaz();


Na primjer:

izlaz(a);
izlaz(rezultat);
izlaz(3+2);

2. Naredba pridruživanja

Svaki programski jezik ima naredbu pridruživanja. Ona varijabli s lijeve strane pridružuje vrijednost izraza s desne strane.

U pseudo jeziku naredba pridruživanja označava se sa :=.

Zbog čega baš :=?


U sljedećim lekcijama pojavit će se naredbe u kojima ćemo ispitivati jednakost izraza s lijeve i desne strane (npr. je li a+b jednako c+d). Za ispitivanje jednakosti koristit ćemo relacijski operator = i pisati a+b=c+d.
Da bi program mogao razlikovati pridruživanje od ispitivanja jednakosti, oni moraju biti drugačijeg oblika. Zbog toga u pseudo jeziku za naredbu pridruživanja koristimo znak :=, a za ispitivanje jednakosti znak =.
Ovakav zapis preuzet je iz programskog jezika Pascal. U programskom jeziku C za pridruživanje se koristi znak =, dok se jednakost ispituje znakom ==.

Primjer 1:

Naredbom a:=5, broj pet "pridružujemo" varijabli a. U stvari, u memorijsku lokaciju koju smo nazvali a upisujemo broj 5.

Primjer 2:

Naredba x:=a+2, najprije će iz memorijske lokacije imena a "dohvatiti" njezinu vrijednost (neka je to vrijednost iz prethodnog primjera, a:=5). Zatim će tu vrijednost (broj 5) zbrojiti sa brojem 2 i na kraju će dobiveni rezultat spremiti u memoriju, na mjesto imena x.

Primjer 3:

Naredba x:=x+4 najprije će iz memorije dohvatiti vrijednost varijable x (neka je to 7), zatim  tom broju dodati broj 4. Dobiveni rezultat (11) spremiti će kao vrijednost varijable x (preko stare vrijednosti 7).

Primjer 4:

Pogledajmo koju će vrijednost imati varijabla x nakon izvođenja sljedećega dijela programa?

x := 3;
y := 2;
x := x – 3 * y;
y := -y;
x := x + y;

U početku je vrijednost varijable x jednaka 3, a vrijednost varijable y je 2.
U sljedećem koraku (x := x – 3 * y;) izračuna se izraz x-3*y (3-3*2=3-6=-3) i dobivena vrijednost "spremi se" u varijablu x (x=-3).
Sljedeća naredba (y := -y;) vrijednost varijable y koja je bila 2 zamjenjuje sa -2.
I na kraju, (x := x + y;) izračuna se vrijednost x+y (-3-2=-5) i rezultat se sprema u varijablu x. Tako je odgovor na pitanje postavljeno na početku primjera: Varijabla x nakon izvođenja sljedećeg dijela programa imat će vrijednost -5.

3. Primjeri jednostavnih algoritama

Proučimo sada nekoliko osnovnih algoritama koji se često pojavljuju u programiranju

3.1. Primjer 1 - opseg i površina pravokutnika

Sljedeći algoritam za zadane duljine stranica pravokutnika (a i b) računa i ispisuje njegov opseg i površinu

ulaz (a,b);
O:=2*(a+b);
P:=a*b;
izlaz (O,P);

Provjerimo!

Neka je a=5, a b=6.

Nakon naredbe O:=2(a+b), vrijednost varijable O jednaka je 2*(5+6)=2*11=22, a nakon naredbe P:=a*b, vrijednost varijable P=5*6=30.
Uvrštavanjem brojeva 5 i 6 (vrijednosti varijabli a i b) u formule za površinu i opseg pravokutnika lako možemo provjeriti da su rezultati jednaki!

3.2. Primjer 2 - rastavljanje dvoznamenkastog broja na znamenke

Algoritam koji dvoznamenkasti broj rastavlja na znamenke

ulaz (a);
desetica:=a div 10;
jedinica:=a mod 10;
izlaz (desetica, jedinica);

Objašnjenje:

Ako dvoznamenkasti broj (npr. 25) podijelimo cjelobrojno s deset, rezultat će biti znamenka desetice (25 div 10=2).
Pogledamo li ostatak dijeljenja zadanog broja s 10, vidjet ćemo da je to upravo znamenka jedinice (25 mod 10 = 5). I to je upravo gornji algoritam!

Zadatak za vježbu:

Primjenjujući analogiju iz prethodnog primjera napišite algoritam koji troznamenkasti broj rastavlja na znamenke

3.3. Primjer 3 - zamjena vrijednosti varijablama

Algoritam za zamjenu vrijednosti dvije varijable

Ima li varijabla a jednu vrijednost, a varijabla b drugu, u nekoliko naredbi možemo tim varijablama zamijeniti vrijednosti!
Ne radi se o tome da varijable samo ispišemo na zaslon u obrnutom redoslijedu, već o tome da stvarno fizički zamjene vrijednosti: ona vrijednost koja je na početku programa bila upisana na adresu a, na kraju će biti upisana na adresu b i obrnuto.

Napišemo li ovakav algoritam:

ulaz (a,b);
b:=a;
a:=b;
izlaz (a,b);

što smo dobili?

Ako su na početku vrijednosti bile: a=3, b=7, uvrštavanjem u dani algoritam dobijemo: b:=a (odnosno b=3). Time smo preko prethodne vrijednost varijable b (7) "prepisali" sadašnju vrijednost varijable a (3). I staru vrijednost varijable b smo izgubili!!!
Izlaz iz našeg programa bio bi: 3, 3, a to nije ono što smo trebali!

Ovaj problem u praksi rješavamo na dva načina:

a) pomoću treće (pomoćne) varijable (kao kada želimo sadržaje dviju posuda zamijeniti, pa uzmemo treću posudu)

ulaz (a,b);
c:=a;
a:=b;
b:=c;
izlaz (a,b);

Objašnjenje:
U treću "posudu", c, privremeno smo spremili sadržaj jedne varijable (neka je to sadržaj varijable a - koristimo li vrijednosti iz uvodne diskusije, c=3). Sada slobodno možemo "prepisati" preko sadržaja varijable a novu vrijednost, jer smo "napravili kopiju" stare vrijednosti. Znači, slobodno napravimo a:=b. Sadržaj varijable a sada postaje sadržaj varijable b (a=7). I na kraju "dohvatimo" vrijednost iz pomoćne varijable c (3) i pridružimo je varijabli b (b=3). I imamo ono što smo tražili! Na početku je vrijednost varijable a bila jednaka 3, a vrijednost varijable b bila je 7, a na kraju je vrijednost varijable a jednaka 7, a vrijednost varijable b jednaka je 3!

b) bez pomoćne varijable - pomoću operacija zbrajanja i oduzimanja:

ulaz (a,b);
a:=a+b;
b:=a-b;
a:=a-b;
izlaz (a,b);

Provjerimo ovaj algoritam na konkretnom primjeru:
Neka je na početku a:=3, b:=7.
U prvom koraku zbrojimo ta dva broja i rezultat spremimo kao vrijednost varijable a (a=10).
U drugom koraku, od dobivene vrijednosti varijable a (10) oduzmemo vrijednost varijable b (7) i tako dobivenu vrijednost pridružimo varijabli b (b=3).
U trećem koraku, od vrijednosti varijable a (10) oduzmemo novo dobivenu vrijednost varijable b (3) i dobiveni broj spremimo kao vrijednost varijable a (a=10-3=7).
I tako smo, jednostavnim matematičkim operacijama, zamijenili vrijednosti varijablama, bez da smo opterećivali memoriju dodatnom varijablom!

4. Zadatci s provedenih ispita

  1. (2010, ljetni rok, zadatak 21)  Koju će vrijednost imati varijabla x nakon izvođenja sljedećega dijela programa?
    x := 20;
    y := -5;
    x := x + y;
    y := x + y;
    x := x + y;

    A. 10
    B. 15
    C. 20
    D. 25

  2. (2010, ljetni rok, zadatak 25)  Koja će biti vrijednost varijable t nakon izvođenja sljedećega dijela programa?
    a := 1;
    b := 2;
    c := 3;
    t := NE (a < b) I (a < c) ILI NE (b < c);

  3. (2010, jesenski rok, zadatak 21) Ako varijable x,y i z imaju početnu vrijednost 3, koja će varijabla i dalje imati vrijednost 3 nakon izvođenja sljedećega dijela programa?

    x := x + y;
    y := y + x - z;
    z := z – y + x;

    A. x
    B. y
    C. z
    D. niti jedna

  4. (2011, ljetni rok, zadatak 22) Koju će vrijednost imati varijabla x nakon izvođenja sljedećega dijela programa?
    x := 17;
    y := x MOD 4;
    x := x + y;
    y := x MOD 4;
    x := x + y;
    y := x MOD 4;

    A. 0
    B. 17
    C. 18
    D. 20
     
  5. (2011, ljetni rok, zadatak 25) Koja će biti vrijednost varijable t nakon izvođenja sljedeće naredbe?
    a := 7;
    b := 9;
    c := 3;
    t := NE ( NE (a < b) I (a < c) ILI NE ((c < b) ILI NE (c < a)))

  6. (2011, jesenski rok, zadatak 22) Koju će vrijednost imati varijabla y nakon izvođenja sljedećega dijela programa?
    x := 17;
    y := x MOD 4;
    x := x + y;
    y := x MOD 4;
    x := x + y;
    y := x MOD 4;

    A. 0
    B. 17
    C. 18
    D. 20

  7. (2011, jesenski rok, zadatak 25) Koja će biti vrijednost varijable t nakon izvođenja sljedeće naredbe?
    a := 7;
    b := 9;
    c := 3;
    t := NE ( NE (a > b) I NE (a < c) ILI NE (c < b))

  8. (2012, ljetni rok, zadatak 17) Koje će vrijednosti imati varijable a i b nakon izvođenja sljedećeg dijela programa?
    a:= -32;
    b:= 8;
    b:= abs(a)/b + b mod 5;

    A. a = 32, b = 2
    B. a = –32, b = 7
    C. a = –32, b = 5
    D. a = 32, b = 7

  9. (2012, ljetni rok, zadatak 20) Iznos od n kuna potrebno je isplatiti novčanicama u apoenima od 1, 10 i 100 kuna.
    Koji će od sljedećih algoritama ispisati minimalni broj novčanica kojima je moguće isplatiti navedeni iznos pod pretpostavkom da imamo dovoljan broj novčanica u svim apoenima?

    A.
       a := n mod 1;
       b := n mod 10;
       c := n mod 100;
       izlaz(a + b + c);
    B.
       a := n div 100;
       b := n div 10;
       c := n div 1;
       izlaz(a + b + c);
    C.
       a := n div 100;
       b := n mod 10 div 10;
       c := n mod 10;
       izlaz(a + b + c);
    D.
       a := n mod 10;
       b := n div 10 mod 10;
       c := n div 100;
       izlaz(a + b + c);

  10. (2012, ljetni rok, zadatak 30) Koja će biti vrijednost varijable b nakon izvođenja sljedećih naredbi?
    a := 2;
    b := 3;
    a := a * b;
    b := 3 * a;

  11. (2012, jesenski rok, zadatak 17) Koja će biti vrijednost varijable b nakon izvođenja sljedećeg dijela programa?
    a:=4;
    b:=5;
    b:=sqrt(sqr(b)-4*a);

    A. 5
    B. 4
    C. 3
    D. 2

  12. (2012, jesenski rok, zadatak 20) Koji od sljedećih algoritama pretvara sekunde (s) u oblik sati (sati), minute (min) i sekunde (nove_sekunde)?

    A. sati:= s mod 3600 div 3600;
        min:= s mod 3600 div 60;
        nove_sekunde:= s mod 3600 mod 60;

    B. sati:= s mod 3600;
        min:= s mod 3600 div 60;
        nove_sekunde:= s mod 3600 mod 60;

    C. sati:= s div 3600;
        min:= s mod 3600 div 60;
        nove_sekunde:= s mod 3600 mod 60;

    D. sati:= s div 3600;
        min:= s mod 3600 mod 60;
        nove_sekunde:= s div 3600 mod 60;

  13. (2012, jesenski rok, zadatak 30) Koja će biti vrijednost varijable a nakon izvođenja sljedeće naredbe?
    a := 7 * 5 mod 12 div 2;

  14. (2013, ljetni rok, zadatak 17) Zadane su naredbe:
    x := a / b;
    y := x - trunc(x);
    Koja ih od navedenih naredbi može zamijeniti?

    A. y := (a mod b) / b;
    B. y := (a div b) / b;
    C. y := (a div b) mod b;
    D. y := (a mod b) div b;

  15. (2013, ljetni rok, zadatak 29) Koja će biti vrijednost varijable x nakon izvođenja sljedećega dijela programa?
    a := 1;
    b := a - 1;
    c := a + b;
    x := (a > b) ILI (b > c) I (c > a);

  16. (2013, ljetni rok, zadatak 30) Koja će biti vrijednost varijable t nakon izvođenja sljedeće naredbe?
    t := sqr(3) mod 5 + sqr(3) div 5;
     
  17. (2013, jesenski rok, zadatak 17) Koja će vrijednost biti pohranjena u varijabli z nakon izvođenja sljedećega dijela programa?
    x := 12;
    y := 3;
    x := x + y;
    y := x div y;
    z := x - y;

    A. 7
    B. 9
    C. 10
    D. 15

  18. (2013, jesenski rok, zadatak 30) Koja će biti vrijednost varijable t nakon izvođenja sljedeće naredbe?
    t := sqr(9) mod 3 * sqr(10 div 3);

  19. (2014, ljetni rok, zadatak 30) Koja će biti vrijednost varijable x nakon izvođenja sljedeće naredbe?
    x := 4 + 3 * 7 mod 2;

  20. (2014, jesenski rok, zadatak 30) Koja će biti vrijednost varijable x nakon izvođenja sljedeće naredbe?
    x := 4 - 3 * 3 div 7;

  21. (2015, ljetni rok, zadatak 17) Koja će vrijednost biti pohranjena u varijabli c nakon izvođenja sljedećega dijela
    programa?
    a := 1;
    b := -2;
    a := a + b;
    b := b - a;
    c := a * b;

    A. –2
    B. –1
    C. 1
    D. 3

  22. (2015, ljetni rok, zadatak 29) Koja će biti vrijednost varijable x nakon izvođenja sljedećega dijela programa?
    a := 3;
    b := 3;
    c := 1;
    x := (a > b) I (a > c) I (b > c);

  23. (2015, ljetni rok, zadatak 30) Koja će biti vrijednost varijable t nakon izvođenja sljedeće naredbe?
    t := sqr(10) div sqr(3) mod sqr(3);

  24. (2015, jesenski rok, zadatak 29) Koja će biti vrijednost varijable x nakon izvođenja sljedećega dijela programa?
    a := 2;
    b := 3;
    c := 1;
    x := (a > b) ILI (a > c) ILI (b > c);

  25. (2015, jesenski rok, zadatak 30) Koja će biti vrijednost varijable t nakon izvođenja sljedeće naredbe?
    t := round(sqrt(10)) mod 2 + sqr(10) div 2;

  26. (2016., ljetni rok, zadatak 30) Koja će biti vrijednost varijable x nakon izvođenja sljedeće naredbe?
    x := 7 * 6 div 5 mod 4;
     

4.1. Rješenja

  1. D
  2. 0
  3. C
  4. D
  5. 1
  6. A
  7. 0
  8. B
  9. D
  10. 18
  11. C
  12. C
  13. 5
  14. A
  15. 1
  16. 5
  17. C
  18. 0
  19. 5
  20. 3
  21. C
  22. 0
  23. 2
  24. 1
  25. 51
  26. 0