Tal, operatorer og matematiske funktioner

Regningsregler

Før vi går i gang med at programmere skal du lige have et overblik over måden man laver betingelser på. Ofte vil programmer fungere efter en skabelone der siger: Hvis noget sker – så gør følgende. Her under er et overblik over de logiske operatorer (regningsarter), som du skal anvende når du programmerer

php > echo 8+2;
10
php > echo 8-2;
6
php > echo 8 + 2;
10
php > echo 8 - 2;
6
php > echo 8 * 2;
16
php > echo 8 / 2;
4
php > echo ( 8 * 2 ) - 4;
12
php > echo 8 * ( 2 - 4 );
-16

Som du kan se overholder PHP regningsreglerne.

Af andre vigtige regningsarter kan nævnes

  • \( \pi \) skrives som pi()
  • \( e \) skrives som exp(1) (den naturlige logaritme)
  • \( a^b \) skrives som pow(a,b) eller a**b
  • \( \sqrt{x} \) skrives som sqrt(x). Man kan også skrive skrive a**1/b eller pow(a,1/b).
php > echo pi();
3.1415926535898
php > echo exp(1);
2.718281828459
php > echo pow(3,3);
27
php > echo 3**3;
27
php > echo sqrt(64);
8
php > echo abs(-10);
10

Modulo

En sidste vigtig regningsregel er modulo, som skrives med %. Denne regningsregel angiver restproduktet af et divisionsstykke. F.eks. er 2 restprduktet af \( \frac{ 10 }{ 8 } \). Det skriver vi som 10%2

php > echo 10%8;
2

På den måde kan vi f.eks. finde ud af hvor mange kasser a 8 stk der kommer ud af 198 enheder ... og hvor mange der er til rest.

php > echo floor(198/8);
24     ← hele antal kasser
php > echo 198%8;
6     ← antal enheder til rest

Absolutte tal

Når man programmere har man ofte brug for at kende forskellen mellem 2 tal. Problemet er, at man ikke altid kan være sikker på om forskellen er en positiv eller en negativ værdi. F.eks. kan forskellen mellem 2 temperaturer f.eks. 17° og 21° være både 4 og -4. Ved at bruge abs() kan vi sikre os at en forskel altid bliver leveret som en positiv værdi.

echo abs(-4);
4

Logiske operatorer

Logiske operatorer anvendes til at undersøge tal og teksstrenge. Det kan f.eks. være hvis vi skal finde ud af om en person er over 18. Det vil vi f.eks. kunne beskrive på følgende måde:

$$ alder \geq 18 $$

eller

$$ alder > 17 $$

Herinder er nogle tabeller med vigtige logiske operatorer

Det samme som ...

Disse operatorer anvender vi når noget er det samme som ... eller ikke er. Læg mærke til at der anvendes to == til "lig med". Det skyldes at et enkelt = kun anvendes når vi laver variabler. Et sidste vigtigt tegn er !. Når det sættes foran en logisk operator, så får operatoren den modsatte betydning.

Forskelle på om vi anvender to eller tre = handler om vi sammenligner tal eller tekststrenge.

Operator Beskrivelse Eksempel
== Lig med 5 == 8 → falsk
!== Ikke lig med 5 !== 8 → sand
=== Identisk med 5 === "5" → falsk

Læg mærke til at jeg bruger var_dump() til at bestemme om udsagnet er sandt eller falsk.

php > var_dump(5==8);
bool(false)
php > var_dump(5!==8);
bool(true)
php > var_dump(5==="5");
bool(false)

I forhold til ...

Operator Beskrivelse Eksempel
> større end 5 > 8 → falsk
< mindre end 5 < 8 → sand
>= Større end eller lig med 5 >= 8 → falsk
<= Mindre end eller lig med 5 <= 8 → sand
php > var_dump(5>8);
bool(false)
php > var_dump(5<8);
bool(true)
php > var_dump(5>=8);
bool(false)
php > var_dump(5>=8);
bool(false)

Er det sandt ...

Nogle gange har vi brug for at der er flere ting der skal være opfyldt. Andre gange skal det kun være et kriterie blandt mange. Her anvender man nedestående

Operator Beskrivelse Eksempel
x and y Både x og y skal være sand x=6 ; y=3

(x < 10 and y > 1) → sand
x && y
x or y Kun en behøver at være sand x=6 ; y=3

(x == 6 or y == 1) → sand
x || y
x xor y Kun en må være sand x=6 ; y=3

(x == 6 xor y == 1) → sand
!x Udsagnet x er ikke sandt x=6 ; y=3

!(x==y) → sand
php > $x = 6;
php > $y = 3;
php > var_dump($x<10 and $y>1);
bool(true)
php > var_dump($x<10 && $y>1);
bool(true)
php > var_dump($x==6 or $y==1);
bool(true)
php > var_dump($x==6 || $y==1);
bool(true)
php > var_dump($x==6 xor $y==1);
bool(true)
php > var_dump($x==6 xor $y==3);
bool(false)
php > var_dump(!($x==$y));
bool(true)

En til eller fra

Når man programmerer har man ofte brug for at lade et tal vokse eller falde mens programmet kører. Dette kalder man for increments. Det kan f.eks. være, hvis programmet tæller antallet af loginforsøg. Se nedestående eksempler

Ofte skal man kun lægge en til eller trække en fra, her anvender man ++ eller --

php > $a = 0;
php > $a++;
php > echo $a;
1
php > $a--;
php > echo $a;
0

Skal variablerne vokse eller aftage med andre faktorer gør man som herunder.

php > $a = 1;
php > echo $a;
1
php > echo $a += 1;
2
php > echo $a += 1;
3

Det samme kan man gøre med -, * og / (minus, gange og dividere). Se eksempel

php > $antal = 4;          ← sætter a til 4
php > echo $antal +=3;     ← a + 4 = 7
7
php > echo $antal *=4;     ← 7 * 4 = 28
28
php > echo $antal /=7;     ← 28 / 7 = 4
4
php > echo $antal -=4;     ← sætter 4 - 4 = 4
0

Afrunding

Der er tre måder at runde et tal af på med PHP

  • round() afrunder tallet som normalt
  • ceil() runder op til det nærmeste hele tal
  • floor() runder ned til det nærmeste hele tal
php > echo round(2.25);
2
php > echo round(2.75);
3
php > echo ceil(2.25);
3
php > echo ceil(2.75);
3
php > echo floor(2.25);
2
php > echo floor(2.75);
2

Tilfældige tal

Til at lave tilfældige tal anvender man mt_rand(). Herunder er der lavet et simpelt program der kaster med en 6 sidet terning.

php > echo mt_rand(1,6);
6
php > echo mt_rand(1,6);
3
php > echo mt_rand(1,6);
1
php > echo mt_rand(1,6);
3

Taltyper

PHP arbejder med to forskellige taltyper. Integers (heltal) og float (decimaltal). Det gode ved det er at PHP selv finder ud af det.

Se nedestående eksempel,hvor vi anvender funktionen var_dump() til at finde ud af hvilken type input er.:

php > var_dump(7);
int(7)
php > var_dump(3.14);
float(3.14)
php > var_dump("hej");
string(3) "hej"

var_dump() fortæller altså at:

  • 7 er et heltal (Integer)
  • 3.14 er et decimaltal (float)
  • "Hej verden" er en tekststreng (string)

Konvertering af tekst/tal

Når man sender et input til PHP kommer det altid som en tekststreng. Derfor skal man kunne konvertere mellem integers, float og string (heltal, decimaltal og tekststrenge). Det gør man ved at anvende:

  • intval() - konverterer til interger (heltal)
  • floatval() - konverterer til float (decimaltal)
  • strval() - konvertere til string (tekststreng)

php > $a = "7";
php > $b = "3.14";
php > echo var_dump($a,$b);     ← vis datatypen på variablerne a og b
string(1) "7"
string(4) "3.14"
php > $a = intval($a);
php > $b = floatval($b);
php > echo var_dump($a,$b);      ← vis de nye datatypen på variablerne a og b
int(7)
float(3.14)
php > $a = strval($a);
php > $b = strval($b);
php > echo var_dump($a,$b);      ← vis de nye datatypen på variablerne a og b
string(1) "7"
string(4) "3.14"

Logaritmer

PHP har 2 logaritme funktioner. Den naturlige logaritme og 10-tals logaritmen:

  • log() - svarer til \( ln(x) \)
  • log10() - svarer til \( log(x) \)

Derudover gælder det at:

  • exp() - svarer til \( e^x \)
php > $e = exp(1);          sætter $e = e 
php > echo log($e);			
1
php > echo log10(1000);		
3

For at anvende den inverse funktion skal man anvende:

$$ log_a(x) = y \Leftrightarrow a^y = x $$

Trigonometriske funktioner

De trigonometriske funktioner er: cos(), sin() og tan(). Deres inverse funktioner er: acos(), asin() og atan(). Vær opmærksom på at PHP anvender radianer til trigonometriske beregninger.

php > $a = pi();     sætter variablen $a = π
php > echo cos($a);
-1
php > echo sin($a/2);
1
php > echo tan($a/4);
1
php > echo acos(-1);
3.1415926535898      = π
php > echo asin(1);
1.5707963267949      = π/2
php > echo atan(1);
0.78539816339745     = π/4

For at omskrive mellem grader og radianer anvendes:

  • deg2rad() - omskriver fra grader til radianer
  • rad2deg() - omskriver fra radianer til grader

php > echo deg2rad(45);
0.78539816339745
php > echo rad2deg(pi());
180

Talsystemer

For at omskrive fra fra et talsystem til et andet andvendes base_convert().

Ofte har man behov for at omskrive mellem binære (2-talssystem), decimal (10-talssystem) og hexadecimal (16-talssystem). Det gøres med:

  • bindec() - omskriver fra binær til decimal
  • decbin() - omskriver fra decimal til binær
  • hexdec() - omskriver fra hexadecimal til decimal
  • dechex() - omskriver fra decimal til hexadecimal

php > echo bindec("1001");
9
php > echo decbin(9);
1001
php > echo hexdec("FF2D");
65325
php > echo dechex(65325);
ff2d

Læg mærke til at det binære og hexadecimale tal skal skrives i anførselstegn - altså som tekststrenge.