Wpisy otagowane ‘operatory’

Kto trafił szóstkę?

czwartek, 6 Grudzień 2012

Poprzedni artykuł zakończyłem krótkim zadaniem. Prosiłem o policzenie, bez wykonywania tego kodu na serwerze, jaką liczbę wyświetli poniższy kod.

<?php
	$a=8;
	echo $a--+5*--$a+3*$a--+$a++-2*$a;
?>

Nie kwapiliście się specjalnie z odpowiedziami. Nie wiem, czy to brak pewności siebie, by ujawnić swoje obliczenia, czy niechęć do liczenia czegokolwiek. Fakty są takie, że 3 osoby podały 5 odpowiedzi, a żadna z nich nie była poprawna. W związku z tym postanowiłem wyjaśnić ten, przyznam że podchwytliwy, przykład. W tym celu rozbiję obliczenia na kilka kolejnych etapów, z których każdy opatrzę komentarzem. Dla przypomnienia: ++ zwiększa wartość zmiennej o 1, –– zmniejsza. Operator przed zmienną zmienia jej wartość przed jej użyciem, za zmienną po jej użyciu

<?php
	$a=8;
	echo $a--;				//W tej linii operator zmniejsza wartość zmiennej o 1, ale po jej użyciu. 
						//$a jest równe 7, ale użyte w instrukcji (wyświetlone) było 8 
						//(operator za zmienną).
 
	$a=8;
	echo $a--+5*--$a;			//Do 8 dodajemy 5*6. Wartość zmiennej $a została ponownie zmniejszona. 
						//Tym razem przed jej użyciem (operator przed zmienną). Instrukcja wyświetli 38
 
	$a=8;
	echo $a--+5*--$a+3*$a--;		//Do 38 dodajemy 3*6, ale $a równe jest 5. Użyta była wartość przed 
						//zmniejszeniem (operator za zmienną). Instrukcja wyświetli 56
 
	$a=8;
	echo $a--+5*--$a+3*$a--+$a++;		//Do 56 dodajemy poprzednią wartość $a czyli 5, a następnie 
						//zwiększamy ją o 1 (operator za zmienną). Instrukcja wyświetli 61
 
	$a=8;
	echo $a--+5*--$a+3*$a--+$a++-2*$a;	//Od 61 odejmujemy 2*6. Instrukcja wyświetli 49
?>


Operatory arytmetyczne w PHP

sobota, 1 Grudzień 2012

W PHP operatory służą do wykonywania działań na zmiennych. Jest to zagadnienie dosyć proste, ale w pewnych przypadkach bywa dosyć ciekawe. Na tych właśnie przypadkach będę chciał się skupić. Dla porządku przedstawiam tabelkę zawierającą operatory arytmetyczne z przykładami ich zastosowania.

operator przeprowadzana operacja
+ dodawanie $a=$b+3;
- odejmowanie $a=$b-3;
* mnożenie $a=$b*3;
/ dzielenie $a=$b/3;
% dzielenie modulo (zwraca liczbę całkowitą stanowiącą resztę z dzielenia)
++ inkrementacja $a++ ( dodaje do zmiennej wartość 1)
–– dekrementacja $a––(odejmuje od zmiennej wartość 1)

Myślę, że 4 pierwsze operatory nie wymagają żadnych wyjaśnień. Kolejny operator % czyli dzieleni modulo wyjaśnię na dodatkowym przykładzie. Załóżmy, że mamy do wyświetlenia na stronie 37 ikonek. Chcemy to zrobić w tabelce mającej 4 kolumny. Od razu widać, że ostatni wiersz tabeli nie będzie wypełniony do końca. Aby tabelka wyglądała przyzwoicie, musimy wiedzieć ile pustych komórek należy umieścić w ostatnim wierszu. Tę wartość możemy policzyć np. w taki sposób:

<?php
	$elementy = array('ikona1.png', 'ikona2.png', ..., 'ikona37.png');	//tablica z 37 ikonkami
	$liczba_kolumn = 4;
	$liczba_pustych_komorek_na_w_ostatnim_wierszu = $liczba_kolumn - count($elementy) % $liczba_kolumn;
?>

Mam tablicę $elementy z 37 ikonkami i zmienną $liczba_kolumn. W kolejnej instrukcji funkcją count() obliczam ilość elementów tablicy i otrzymuję wartość 37. Na otrzymanym wyniku wykonuję operację modulo (%), która w wyniku daje mi wartość 1. Odejmuję tę wartość od liczby kolumn i otrzymuję ilość komórek, które muszę uzupełnić.

Kolejne dwa operatory to inkrementacja i dekrementacja. Obydwa mogą występować zarówno przed, jak i po zmiennej. Jeżeli występują przed, to wartość zmiennej jest najpierw zmieniana przez operator, a dopiero potem nowa wartość jest wykorzystywana. Jeżeli operator jest umieszczony za zmienną, to najpierw wykorzystywana jest wartość zmiennej, a dopiero później działa operator inkrementacji lub dekrementacji.

Doskonale zdaję sobie sprawę, że powyższe wyjaśnienie może być mało czytelne, dlatego posłużę się ponownie przykładem:

<?php
	$a=5;
	echo $a++;		//najpierw wyświetlana jest wartość zmiennej - czyli 5, a następnie operator '++' zmienia jej wartość do 6.
	echo $a;		//wyświetlana jest nowa wartość - czyli 6
	echo ++$a;		//ty razem najpierw zwiększa się wartość zmiennej do 7 i ta właśnie nowa wartość jest wyświetlana
?>

Myślę, że teraz wszyscy już doskonale rozumieją na czym to polega. Jeżeli ktoś chciałby się sprawdzić, to proszę policzyć, ale bez komputera, jaki wynik wyświetli poniższy kod. Wyniki proszę podawać w komentarzach. Jeżeli zetknąłeś się z tym tematem po raz pierwszy, nie przejmuj się, jeżeli sprawi Ci trudność. Na jednym ze szkoleń, które ostatnio prowadziłem, przy 8 uczestnikach, padło 9 różnych odpowiedzi.

<?php
	$a=8;
	echo $a--+5*--$a+3*$a--+$a++-2*$a;
?>