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
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, ...
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!







