Utolsó frissítés: 2012.02.13.
Facebook Twitter iWiW MySpace Digg Delicious Google bookmarks Startlap Windows Live

Változók II.

Változók értékének megváltoztatása

A változók értékadásának témaköre korántsem merül ki abban, hogy létrehozunk egy változót, adunk neki egy állandó értéket, aztán készen vagyunk! A legtöbb esetben szükség van az érték megváltoztatására (egyébként nem is hívhatnánk őket változóknak). Egy változó értékét a következő módon lehet megváltoztatni:
(mostantól nem fogom kiírni a <?php és ?> tegeket, remélem mindenki számára nyilvánvaló hogy a PHP kódot ilyenek közé kell írni)

	$nev = "Hörb";
	print "A régi név: ";
	print $nev;
	$nev = "DaniL";
	print "<br />Az új név: ";
	print $nev;

Vagyis a változóhoz rendelt értéket úgy változtatjuk meg, hogy egyszerűen újra értéket rendelünk hozzá. A régi és az új érték típusának nem kell megegyeznie, vagyis ha pl. eddig karakterlánc volt akkor azt egy számra is cserélhetjük. A print utasításokat azért raktam bele, hogy ellenőrizni lehessen a változó megváltozását.
Múlt alkalommal szó volt arról, hogy ha a változó nevét a kódba írjuk, ugyanazt a hatást érjük el vele, mintha az értékét írnánk oda. Egy másik változó értékadásához is lehet használni ezt a módszert:

	$ujjak_szama = 10;
	$szamrendszer = $ujjak_szama;

Itt a $szamrendszer értéke 10 lesz (a 10-es számrendszert választjuk, mert az ujjaink száma 10). Persze arra vigyázni kell, hogy már értékkel rendelkező változót használjunk értékadásra, vagyis a fenti példa 2. sorában az $ujjak_szama változónak ismert értékkel kell rendelkeznie!
Ez eddig még teljesen logikusnak tűnik, de akkor gondolkodjunk el azon, hogy vajon mi történik a következő esetben:

	$szamrendszer = 2;
	$ujjak_szama = 10;
	$szamrendszer = $ujjak_szama;

Először mindkét változónak értéket adtunk, ráadásul különbözőt. Ha a 3. sorra úgy nézünk mint egy egyenletre, akkor nem tudjuk megmondani hogy vajon a $szamrendszer és az $ujjak_szama közül melyik fog megváltozni. Nagyon fontos azonban hogy a fenti sorokra ne úgy nézzünk, mint az egyenletekre, mert egy értékadás bal és jobb oldala nem felcserélhető! Minden esetben a bal oldalon egy változó áll, amelynek értéket szeretnénk adni, a jobb oldalon pedig egy ismert értékű kifejezés (lehet változó, egy meghatározott érték vagy ezek bonyolultabb kombinációja), és a bal oldalon lévő változóba a jobb oldali kifejezés értéke kerül. Ebből következik például az is, hogy a 2 = $szamrendszer; kifejezés nem értékadás, ráadásul nyelvtani hiba! A fenti példában tehát az ujjaink száma (szerencsére) nem fog megváltozni, csak a számrendszer! :D
Az előbb ismertetett értékadási módszer karakterláncok esetén is működik!

Sokszor előfordul az az eset, amikor a változót úgy akarjuk megváltoztatni, hogy az új értéknek köze legyen a régi értékhez. Például mit tegyünk, ha (az előző példánál maradva) radioaktív sugárzás ér minket és ezért növelni kell az ujjaink számát 1-gyel? Természetesen a legegyszerűbb, ha azt írjuk hogy $ujjak_szama = 11; azonban sok esetben nem kényelmes ha az új értéket nekünk kell kiszámolni (különben is, erre való a számítógép!), úgyhogy bízzuk ezt a gépre! Ha az $ujjak_szama változó értéke már ismert, akkor - mint említettem - használható értékadásra, akkor is ha az értékadás bal oldalán önmaga áll:

	$ujjak_szama = 10;
	$ujjak_szama = $ujjak_szama + 1;

A 2. sorban az történik, hogy először kiértékelődik a jobb oldalon álló kifejezés. Az $ujjak_szama helyére bekerül a 10-es szám, majd a kijelölt összeadást a gép elvégzi és a kapott eredmény (11) lesz az $ujjak_szama változó új értéke. Eddig ugyan még nem volt szó az összeadás (+) operátorról, de remélem nem sok embernek okoz sokkot a fenti példa. A matematikában már megszokott módon használhatjuk a 4 alapműveletet a kifejezésekben, egész számokon és tizedestörteken egyaránt:
+ (összeadás), - (kivonás), * (szorzás;csillag), / (osztás;perjel)
Figyeljük meg, hogy ha a 2. sorra úgy néznénk mint egy egyenletre, akkor megint értelmetlen dolgot látnánk. Ez is azt mutatja, hogy az értékadásnak semmi köze az egyenletekhez!
A 4 alapműveletet persze két változó között is használhatjuk, sőt tetszőlegesen bonyolult kifejezéseket építhetünk a segítségükkel. Pl. ha azt akarjuk kifejezni, hogy a radioaktív sugárzás erősségétől függ az ujjaink számának növekedése, akkor ezt így programozhatjuk le:

	$ujjak_szama = 10;
	$radio = 5;
	$ujjak_szama = $ujjak_szama + $radio;

A fenti példában a $radio változóba rakjuk a radioaktivitás erősségét kifejező számot, majd az ujjaink száma ettől függően fog változni.

Bocs hogy ilyen idétlen példákat találok ki :D, de talán így könnyebb megérteni az dolgot. És most teszteld le hogy ez tényleg sikerült-e!

Házi feladat

Lehet hogy a mostani feladat egy kicsit nehezebb, de ez ne riasszon el senkit, az eddigi ismeretek elegendőek a megoldásához!

1.) A feladat első része az lenne, hogy 2 hatványait kéne kiíratni mondjuk 21-től 24-ig úgy, hogy a 2-es számot egy változóban tárolod el, és a számolások lehető legnagyobb részét a gépre bízod! Lehet a kimenet pl. ilyen:
2 hatványai: 2, 4, 8, 16, ...
Segítség: a hatványozás műveletére a PHP nyelvben nincs operátor, így azt szorzásra kell visszavezetni, felhasználva hogy 2n+1 = 2n * 2

Megoldás

Az egymás utáni hatványok kiszámítását szorzással végezhetjük el, és a kényelmes kezelhetőség érdekében egyetlen változót hozunk létre, majd ezt szorozzuk meg mindig 2-vel a következő hatvány értékének kiszámításához. Ezt a múlt órán tanult értékadási módszerrel tehetjük meg ($x = $x * 2 alakú kifejezésekkel). Így egy lehetséges megoldás az alábbi módon néz ki:

		<html>
		<head>
		  <title>Házi2 - 1. rész</title>
		</head>
		<body>

		<?php
		$hatvany = 2;              // $hatvany = 2^1
		print "2 hatványai: ";
		print $hatvany;
		print ", ";
		$hatvany = $hatvany * 2;   // $hatvany = 2^2
		print $hatvany;
		print ", ";
		$hatvany = $hatvany * 2;   // $hatvany = 2^3
		print $hatvany;
		print ", ";
		$hatvany = $hatvany * 2;   // $hatvany = 2^4
		print $hatvany;
		print ", ...";
		?>

		</body>
		</html>

A kódsorok mellé írt // jellel kezdődő (zöld színű) sorvégek nem tartoznak hozzá a programhoz, csak a megértést segítik! Látható, hogy először a 8. sorban létrehozzuk a legelső hatványt (21) a $hatvany változóban és kiírjuk a "2 hatványai:" szöveg után. Majd a 22-t kell kiszámítanunk, amit a $hatvany = $hatvany * 2 értékadással (12. sor) rakunk bele a változóba. Ezután ezt is kiíratjuk és így tovább. A számok közé érdemes elválasztó karaktereket is kiíratni (print ", ";) ahogy a fenti példában is látszik!

2.) Másodszorra próbáld meg úgy elkészíteni a programot, hogy ha a fenti változó értékét 3-asra változtatjuk (viszont semmi mást nem csinálunk a kóddal!), akkor a kimeneten ez jelenik meg:
3 hatványai: 3, 9, 27, 81, ...

Megoldás

Tehát úgy kell megírnunk a programot hogy egyetlen változó értékét megváltoztatva az új értéket tekintse a program alapszámnak és ennek a hatványait írja ki. Ezt úgy érhetjük el, hogy bevezetünk egy új változót, amit a fenti 2-esek helyére írhatunk. Ezt $szam valtozónak elnevezve a program így néz ki:

		<html>
		<head>
		  <title>Házi2 - 2. rész</title>
		</head>
		<body>

		<?php
		$szam = 3;                     // szorzó illetve alapszám
		$hatvany = $szam;              // $hatvany = 3 = 3^1
		print $szam;
		print " hatványai: ";
		print $hatvany;
		print ", ";
		$hatvany = $hatvany * $szam;   // $hatvany = 3*3 = 3^2
		print $hatvany;
		print ", ";
		$hatvany = $hatvany * $szam;   // $hatvany = 3*3*3 = 3^3
		print $hatvany;
		print ", ";
		$hatvany = $hatvany * $szam;   // $hatvany = 3*3*3*3 = 3^4
		print $hatvany;
		print ", ...";
		?>

		</body>
		</html>

A 9. sorban a $hatvany változónak a már létrehozott $szam változóval adtunk értéket, hogy ne kelljen ott is átírni a 2-es számot 3-asra. A "3 hatványai:" szövegben lévő 3-as számot is változó használatával írattuk ki. A leglényegesebb különbség az előző változathoz képest azonban az, hogy a $hatvany változó értékének megváltoztatására a $szam változót használtuk. Mellékesen megjegyzem hogy a 10. és 12. sorban egyaránt a 3-as számot írjuk ki, tehát mindegy melyik változót használjuk. Azért használtam először a $szam változót a kiírásra, mert a "3 hatványai: 3, ..." szövegben az első 3-as az alapszám, a második 3-as viszont az alapszám első hatványa. A $szam és $hatvany változók tehát logikailag különböznek egymástól, de persze a program működése szempontjából ez lényegtelen.
Ha más szám hatványát akarjuk kiíratni, akkor egyszerűen át kell írnunk a 8. sorban lévő 3-as számot valami másra, és kész!

Ha működik a program, akkor érdemes letesztelni más számokra is, mondjuk írj be a szám helyére tizedestörtet! És akkor legyél büszke is a programodra, mert először készítettél olyan PHP kódot, ami helyetted képes számolásokat végezni!