2011-05-19 13:16 #0 av: [Fibbe]

Något som är typiskt för programmering rent allmänt är mattematiska uttryck och logiska värden. Detta gör att dessa är väldigt enkla att använda. I denna artikel går vi igenom hur man räknar matematiskt och hur man programmerar logiskt.

Matematiska uttryck

Php har mängder men inbyggda funktioner som kan utföra matematiska uppgifter väldigt enkelt. Här är exempel på de 4 räknesätten:

echo 1 + 1;
echo 5 - 2;
echo 5 * 4;
echo 10 / 5;

Dessa skriver ut svaret till användaren. echo 1 + 1; skriver ut 2 osv...

Detta går även att göra med variabler:

$tal1 = 20;
$tal2 = 10;

$svar = $tal1 / $tal2;

echo $svar;

Koden kommer att skriva 2 till användaren. Detta eftersom 20/10 just är lika med 2.

Även andra mer avancerade uttryck som sin, cos, tan mm... finns att tillgå. Läs om hur dessa används på php.net.

 

 

Logiska värden och if-satser

Logiska värden kan anta två fall, TRUE eller FALSE, med andra ord sant eller falskt. Logiska värden fås ofta genom att jämföra två tal eller två andra värden. Till exempel om vi testar om 2 är större än 3 får vi ett falskt värde, FALSE. Testar vi om 3 är större än 2 får vi ett sant värde, TRUE.

Vi kan använda dessa värden i till exempel if-satser. if betyder om, och det är precis vad det är. När vi skriver en if-sats ställer vi oss frågan om detta är sant.

Exempel:

if (9 > 1)
{
echo "Ja, 9 är större än 1";
}

Om vi skriver ovanstående kod med svenska ord (det kallas pseudokod när man kodar med ord) kan det beskrivas så här:

om 9 är större än 1
gör detta:
skriv "Ja, 9 är större än 1"

Vi kan givetvis även göra detta med variabler:

$tal1 = 1;
$tal2 = 2;

if ($tal1 > $tal2)
{
echo "$tal1 är större än $tal2";
}

Eftersom 1 inte är större än 2 kommer ovanstående kod inte att skriva något till användaren. Vi kan dock lägga till ett stycke kod för att skriva att påståendet är falskt.

Detta görs genom att lägga till else (betyder annars) efter if-satsen:

$tal1 = 1;
$tal2 = 2;

if ($tal1 > $tal2)
{
echo "$tal1 är större än $tal2";
}
else
{
echo "$tal1 är inte större än $tal2";
}

Nu kommer vi alltid att få ett svar från vår if-sats. Om påståendet är falskt kommer vi att gå in i else-delen och skriva "1 är inte större än 2".

 

Avancerade if-satser

Vi kan även komplettera if-satser ännu mer genom att lägga till fler fall. Vi ska nu ta reda på sambandet mellan två tal. Möjliga samband:

Tal1 är större än tal2 ($tal1 > $tal2)

Tal2 är större än tal1 ($tal2 > $tal1)

Tal2 är lika med tal1 ($tal2 == $tal1)

OBS! Det är alltid 2 st lika-med-tecken (=) när man vill jämföra 2 tal, och 1 st lika-med-tecken när man vill tilldela ett värde. Vi vill jämföra om tal1 är lika med tal2 och måste därför använda oss av 2 st.

Som vi ser kommer vi att behöva 3 stycken fall i vår if-sats. I pseudokod skulle vår if-sats se ut så här:

Om tal1 är större än tal2
gör detta:
skriv "tal1 är större än tal2"

annars om tal2 är större än tal1
gör detta:
skriv "tal2 är större än tal1"

annars om tal2 är lika med tal1
gör detta:
skriv "Talen är lika"

Översätter vi detta till Php-kod får vi följande:

$tal1 = 1;
$tal2 = 2;

if ($tal1 > $tal2)
{
echo "$tal1 är större än $tal2";
}
elseif ($tal2 > $tal1)
{
echo "$tal2 är större än $tal1";
}
elseif ($tal2 == $tal1)
{
echo "Talen är lika";
}

Testa gärna denna kod och ändra värde på tal1 och tal2. Då är det lätt att se att det faktiskt fungerar.

Denna kod går dock att göra lite mer effektiv, man ska sträva efter att göra så få jämförelser som möjligt. Vi testar först om tal1 är större än tal2, sen testar vi om tal2 är större än tal1. Om inget av dessa är sant måste talen vara lika. Därför är den sista delen onödig och kan med fördel översättas till en enkel else-sats:

$tal1 = 1;
$tal2 = 2;

if ($tal1 > $tal2)
{
echo "$tal1 är större än $tal2";
}
elseif ($tal2 > $tal1)
{
echo "$tal2 är större än $tal1";
}
else
{
echo "Talen är lika";
}

 

Lathund för jämförelser att använda i if-satser:

<            Mindre än
<= Mindre eller lika med
> Större än
>= Större eller lika med
== Exakt lika med
!= Inte lika med

Nästlade if-satser

Vi vill jämföra två variabler, ibland vill vi kontrollera om tal1 är större än tal2 och ibland om tal2 är större än tal1. Vi skapar en ny variabel som heter $fall1. Om denna variabel är sann (TRUE) så ska vi jämföra om tal1 är större än tal2, annars jämföra om tal2 är större än tal1.

Pseudokod:

fall1 sätts till TRUE
tal1 sätts till 1
tal2 sätts till 2

om fall1 är sant
gör detta:

om tal1 är större än tal2
gör detta:
skriv "Det är sant enligt fall1"

annars gör detta:
skriv "Det är falskt"

annars (om fall1 är falskt)
gör detta:

om tal2 är större än tal1
gör detta:
skriv "Det är sant enligt fall2"

annars gör detta:
skriv "Det är falskt"

I Php-kod skulle detta bli följande:

$fall1 = TRUE;
$tal1 = 1;
$tal2 = 2;


if ($fall1)
{
if ($tal1 > $tal2)
{
echo "Det är sant enligt fall1";
}
else
{
echo "Det är falskt";
}
}
else
{
if ($tal2 > $tal1)
{
echo "Det är sant enligt fall2";
}
else
{
echo "Det är falskt";
}
}

Detta kallas för nästlad if-sats, vi har if-satser i en annan if-sats. Just i det här fallet går koden att göras mycket enklare och effektivare när vi lärt oss att använda and och or.

 

And och or

Ibland vill vi jämföra fler variabler i vår if-sats. Vi vill kanske veta om 1 är mindre än 2 och 2 är mindre än 3 samtidigt. Detta görst med and-operatorn i Php, den skrivs som 2 st och-tecken, &&.

Exempel:

if (1 < 2 && 2 < 3)
{
echo "Ja, 1 är mindre än 2 och 2 är mindre än 3";
}

När and-operatorn används måste påståendena på båda sidorna om && vara sant för att if-sasten ska bli sann.

Vill vi använda or-operatorn så skriver vi 2 st streck (sitter på samma tangent som < och >), ||.

Exempel:

if (1 < 2 || 2 < 3)
{
echo "Antingen så är 1 mindre än 2
eller så är 2 mindre än 3
eller så är både 1 mindre än 2 och 2 mindre än 3";
}

För att denna if-sats ska bli sann så måste minst en sida av || vara sant.

Det går givetvis även att kombinera dessa. Då är det lämpligt att använda paranteser för att markera vad vi vill jämföra.

Exempel:

if ( (1 < 2 || 2 < 3) && (1 == 1) )
{
echo "1 == 1 och 1 < 2 och/eller 2 < 3";
}

 

 

Prova själv

Försök att optimera koden i "nästlade if-satser" med hjälp av and- eller or-operatorn istället för nästlade if-satser. Vi kan sedan diskutera olika förslag i den här tråden.

 

 

Nästa artikel i serien »