Možda nećete povjerovati, ali baš NITKO, tko mi je prvi put došao da nauči Python, nije znao odgovoriti na jednostavno pitanje: "Zamijeni vrijednosti dvije varjable!" Zaključak donesite sami.

Neka je: a=1 i b=2, te želimo zamjeniti var. a i b. To možemo prikazati sljedećom zamjenom:  a->b->a (a ide u b   i   b ide u a).

Trebamo napisati dio programa koji zamijenjuje vrijednosti varijabli a i b.

Prvi najnespretniji pokušaj je često:

a=2

b=1

print("a=",a)

print("b=",b)

Zašto on nije dobar iako ispisuje ispravne vrijednosti a=2 i b=1?
Zato jer se oslanja na konkretne početne vrijednosti var. a i var. b koje u nekom drugom trenutku mogu biti potpuno drukčije (npr. a=7 i b=0) i za koje program neće dobro raditi! Program uvijek mora biti što je moguće općenitiji i ne smije pretpostaviti nikakve konkretne početne vrijednosti varijabli.

Drugi, najčešći pokušaj kod učenika glasi:

a=b

b=a

koji također ne radi... Znate li zašto? ...

Zato jer se naredbom a=b GUBI STARA VRIJEDNOST var. a.

Nužno je uočiti da naredba a=b NIJE MATEMATIČKA JEDNAKOST, nego predstavlja PRIDRUŽIVANJE vrijednosti koja se dobije sa desne strane izraza varijabli navedenoj s lijeve strane. 

Dakle s lijeve strane može postojati samo IME JEDNE VARIJABLE.

Zbog toga niti u jednom programskom jeziku nije moguće napisati:

a+1=1   ili   a+b=c  ....

No moguće je i vrlo često se koristi izraz:

a=a+1

koji znači: uzmi STARU VRIJEDNOST VARIJABLE a, zbroji je s 1 i konačan reultat upisi kao NOVU VRIJEDNOST varijable a. Drugim riječima pojednostavljeno možemo reći:

novi a = stari a + 1

Na taj način postojeću vrijednost varijable a zamjenjujemo s vrijednošću koja je za 1 veća od predhodne. Na taj način vrlo često vršimo različita PREBROJAVANJA.

Vrijednost uvećanu za 1 nazivamo inkrement, a umanjenu za 1 zovemo dekrement.

Prilikom pridruživanja nove vrijednosti varijabli navedenoj s lijeve strane se njen predhodni sadržaj nepovratno GUBI, te stoga pokušaj ZAMJENE sadržaja varijabli a i b sa naredbom a=b ne daje željeni rezultat jer smo s njom IZGUBILI PREDHODNU VRIJEDNOST var. a. Isti neuspjeh će doživiti i naredba b=a, samo što će se tada izgubiti predhodne vrijednost var. b. Znači u oba slučaja ne možemo napraviti zamjenu STARIH VRIJEDNOSTI ...

I? Što nam je činiti?

Budući da niti a=b niti b=a nije dobar put, moramo UVESTI JEDNU NOVU, POMOĆNU VARIJABLU s kojom ćemo SAČUVATI, KOPIRATI, UDUPLATI STARU VRIJEDNOST var. a. 

kopija = a

Sada smo u varijablu kopija upisali STARU VRIJEDNOST var. a i sada je var. a SLOBODNA da u nju upišemo vrijednost var. b BEZ POSLJEDICE GUBLJENJA STARE VRIJEDNOSTI koja je sačuvana u pomoćnoj varijabli kopija.

Sada za NOVU VRIJEDNOST var. a upisujemo STARU VRIJEDNOST var. b:

a=b

Sada je var. b SLOBODNA da u nju upišemo bilo što, dakle BEZ POSLJEDICE GUBLJENJA STARE VRIJEDNOSTI koja je sačuvana u var. a.

 

I zadnji korak je da kao NOVU VRIJEDNOST var. b upišemo STARU VRIJEDNOST var. a.

b=a    :)

Ipak ovo NIJE TOČNO jer je u var. a NOVA VRIJEDNOST dakle, stara vrijednost var. b.

b=kopija

je točna naredba jer je u var. kopija sačuvana STARA vrijednost var. a.

 

Na kraju napišimo potpuni sljed ISPRAVNIH naredbi:

 

kopija = a

a = b

b = kopija

print("a=",a)

print("b=",b)

 

Na taj način možemo izvršiti BILO KAKVU ZAMJENU i više od 2 varijable SAMO S JEDNOM POMOĆNOM VARIJABLOM.

 

Za vježbu i provjeru razumijevanja upravo objašnjenog pokušajte napraviti programe za sljedeće zamjene:

a->c->b->a

a->d->b->c->a

 

Ažurirano (Subota, 29 Siječanj 2022 19:45)