Ulaz i izlaz podataka, naredba pridruživanja

3. Primjeri jednostavnih algoritama

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.

Napomena: Algoritam je objašnjen u pseudojeziku, kako bi ga razumjeli neovisno o programskom jeziku u kojem radite.

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!

Pogledajmo kod u programskim jezicima Python i C:

Python C
a = int(input())
b = int(input())
c = a
a = b
b = c
print(a, b)
    int a, b;
    scanf("%d, %d", &a, &b);
    c = a;
    a = b;
    b = c;
    printf("%d, %d", a, b);


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!

Zadatak: Zapišite algoritam u programskom jeziku Python ili C.