Naredba pridruživanja

Sjedište: CARNET - Arhiva 2021 Loomen
E-kolegij: III. Gimnazija Osijek - Informatika 2
Knjiga: Naredba pridruživanja
Otisnuo/la: Gost (anonimni korisnik)
Datum: ponedjeljak, 28. listopada 2024., 12:20

1. Pridruživanje vrijednosti

Promotrimo sljedeći primjer.
#include <stdio.h>
int main ()
{
    int a,b;
    printf ("\nUpisite dva broja ");
    scanf("%d %d", &a, &b);
    printf ("\n%d",a+b);
    printf ("\n%d",(a+b)/a);
    printf ("\n%d",(a+b)*a);
    printf ("\n%d",((a+b)/a)+((a+b)*a));
    return 0;
}
Nedostatak gornjeg primjera je u tome što svaki put ponovno računa vrijednost zbroja varijabli a i b. To ponavljanje usporava izvođenje programa i nepotrebno opterećuje procesor računala. Izbjeći ćemo ga uporabom naredbe pridruživanja. Na taj ćemo način traženi zbroj izračunati, spremiti u memoriju i pozivati svaki put kada bude potreban.
Naredbom pridruživanja varijablama se zadaju ili mijenjaju vrijednosti.

Svaki programski jezik ima operator pridruživanja. Upotrebljavali smo ga i u zadatku s voćnjakom kad smo recimo izračunavali količinu potrebne žice (ovo je bio zapis u pseudokodu):

         kolicina_zice = 2 * (m + n)

Operator pridruživanja u programskom jeziku C je =. Njegova je uloga da vrijednost izraza s desne strane pridruži varijabli na lijevoj strani. Operator pridruživanja ima najniži prioritet izvršavanja.
Pazite! Naredba pridruživanja nije isto što i znak jednakosti u matematici!

Na primjer, zapišemo li a = 5 , to znači da ćemo broj 5 pohraniti u memoriju kao vrijednost varijable a. Kažemo da smo varijabli a pridružili vrijednost 5. Zapišemo li a = 3 + 5, najprije će se izračunati vrijednost s desne strane pa će se tek onda ta izračunata vrijednost pridružiti varijabli a. Dakle, vrijednost varijable a nakon te naredbe bit će 8.

Opći oblik naredbe za pridruživanje vrijednosti je
      varijabla = izraz;

Sada prethodni program možemo napisati ovako:
#include <stdio.h>
int main ()
{
     int a,b,c,d,e,f;
     printf ("\nUpisite dva broja ");
     scanf("%d %d", &a, &b);
     c=a+b;
     d=c/a;
     e=c*a;
     f=d+e;
     printf ("\n%d",c);
     printf ("\n%d",d);
     printf ("\n%d",e);
     printf ("\n%d",f);
     return 0;
}
Na taj je način pisanje programa olakšano, a i njegova čitljivost. Isto tako, smanjuje mogućnost pogreške pri pisanju izraza.

Primjer

Nakon ovog niza naredbi, za upisane vrijednosti 2814 i 589
main()
{
    int a,b;
    float d;
    scanf("%2d %1d", &a,&b);
    d=a+b;
    printf("%d+%d=%f", a,b,d);
}
na zaslonu će se ispisati 28 + 1 = 29.000000 jer format u funkciji za učitavanje podataka ograničava broj znamenki u varijablama.

Primjer
Kolika će biti vrijednost varijable a nakon izvršavanja naredbi?
main()
{
    int a;
    a=5;
    a=a+6;
}
Vrijednost varijable a nakon naredbe a=5; iznosi 5. Nailaskom na naredbu a=a+6; program će najprije dohvatiti vrijednost varijable a (5). Nakon toga će toj vrijednosti dodati broj 6. Tada će dobiveni zbroj (5 + 6 = 11) pridružiti varijabli a. Dakle, vrijednost varijable a nakon izvršavanja prethodnih naredbi bit će 11.


Uočite da se prethodna vrijednost varijable a (5) „briše” i da na njezino mjesto dolazi nova vrijednost. Nakon druge naredbe starom se vrijednošću varijable nećemo moći ponovno koristiti. To je jedna od čestih pogrešaka na početku programiranja, jednostavno očekujete da možete raditi s obje vrijednosti.


Primjer:
Nakon izvođenja naredbi:
x = 3
y = 7
x = x – 3*y
y = -y
x = x + y
varijabla x imat će vrijednost -25. Korak po korak ovako bismo to riješili:

x = 3
y = 7
x = x – 3*y    x = 3 - 3*7 = 3 - 21 = -18
y = -y    y = -7
x = x + y x = -18 + (-7) = -25

1.1. Zadaci

Zadaci su zapisani pseudokodom!

1. Kolika je vrijednost cjelobrojne varijable x nakon izvršavanja sljedećih naredbi?
        a. x = 17 div 3
        b. x = 17 mod 3
        c. x = 25 div 5 + 16 mod 5 + 1
        d. x = 13 div 4*12 mod 5*3

2. Kolika će biti vrijednost varijable a nakon izvođenja sljedećih naredbi?
    a = 184
    a = a div 10 mod 10

3. Kolika će biti vrijednost varijable b nakon sljedećeg bloka naredbi?
     a = 821
     b = a div 100 + a div 10 mod 10 + a mod 10

4. Dan je algoritam u pseudojeziku:
     ulaz (a, b)
     c = a + b
     d = a - b
     e = a*b
     izlaz (c, d, e)
Kolike će biti vrijednosti varijabli c, d i e ako je početna vrijednost varijable a = 5, a varijable b = 6?

5. Kolika je vrijednost varijable x nakon izvođenja sljedećeg algoritma?
    x = 13
    y = 12
    x = 2*x – 3*y
    y = -2*y
    x = x + y

6. Koju će vrijednost imati varijable x i y nakon izvođenja sljedećega programskog odsječka?
    x = 254
    x = x div 10
    y = x div 10
    z = y + x mod 10

7. Koju će vrijednost poprimiti varijabla p nakon izvođenja dijela programa?
    p = -8
    r = 5
    r = r – p
    p = p – r
    p = p – r

Zadatke riješite u svoje bilježnice!

1.2. Rješenja zadatka

Zadaci su zapisani pseudokodom!

1. Kolika je vrijednost cjelobrojne varijable x nakon izvršavanja sljedećih naredbi?
        a. x = 17 div 3 = 5
        b. x = 17 mod 3 = 2
        c. x = 25 div 5 + 16 mod 5 + 1 = 5 + 1 + 1 = 7
        d. x = 13 div 4 * 12 mod 5 * 3 = 3 * 12 mod 5 * 3 = 36 mod 5 * 3 = 1 * 3 = 3

2. Kolika će biti vrijednost varijable a nakon izvođenja sljedećih naredbi?
    a = 184
    a = a div 10 mod 10

Rješenje: a = a div 10 mod 10 = 184 div 10 mod 10 = 18 mod 10 = 8

Nova vrijednost varijable a je 8 odnosno znamenka desetica polaznog broja.

3. Kolika će biti vrijednost varijable b nakon sljedećeg bloka naredbi?
     a = 821
     b = a div 100 + a div 10 mod 10 + a mod 10

Rješenje: b = a div 100 + a div 10 mod 10 + a mod 10 =

= 821 div 100 + 821 div 10 mod 10 + 821 mod 10 =

= 8 + 82 mod 10 + 1 = 8 + 2 + 1 = 11

 

Ovaj izraz računa sumu znamenki troznamenkastog broja.

 b = a div 100 + a div 10 mod 10 + a mod 10

 

4. Dan je algoritam u pseudojeziku:
     ulaz (a, b)
     c = a + b
     d = a - b
     e = a*b
     izlaz (c, d, e)
Kolike će biti vrijednosti varijabli c, d i e ako je početna vrijednost varijable a = 5, a varijable b = 6?

Rješenje:

a = 5

b = 6

c = a + b → c = 5 + 6 = 11
d = a – b d = 5 – 6 = -1
e = a * b e = 5 * 6 = 30

5. Kolika je vrijednost varijable x nakon izvođenja sljedećeg algoritma?
    x = 13
    y = 12
    x = 2*x – 3*y
    y = -2*y
    x = x + y

Rješenje:

    x = 13
    y = 12

    x = 2*x – 3*y x = 2 * 13 – 3 * 12 = 26 – 36 = -10
    y = -2*y y = -2 * 12 = -24
    x = x + y x = -10 + (-24) = -34

Napomena: pripazite uvijek treba uvrstiti zadnju izračunatu vrijednost varijable jer se ona nalazi u memoriji!

6. Koju će vrijednost imati varijable x i y nakon izvođenja sljedećega programskog odsječka?
    x = 254
    x = x div 10
    y = x div 10
    z = y + x mod 10

Rješenje:

    x = 254
    x = x div 10 x = 254 div 10 = 25
    y = x div 10 y = 25 div 10 = 2
    z = y + x mod 10 z = 2 + 25 mod 10 = 2 + 5 = 7

 

7. Koju će vrijednost poprimiti varijabla p nakon izvođenja dijela programa?
    p = -8
    r = 5
    r = r – p
    p = p – r
    p = p – r

Rješenje:

    p = -8
    r = 5
    r = r – p r = 5 – (-8) = 13
    p = p – r p = -8 – 13 = -21
    p = p – r p = -21 – 13 = -34