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.