Naredba pridruživanja

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