# Oefeningen condities en if-statements

# Oefening 1: BMI

Maak een nieuwe HTML-pagina met naam oef1_bmi.html. Koppel een extern scriptbestand aan de pagina met naam oef1_bmi.js.

Schrijf een mini-applicatie die vraagt naar je gewicht en lengte (in cm!) en je BMI berekent. Hopelijk niet te confronterend 😉

De formule voor het berekenen van je BMI is: gewicht (kg) / (lengte (m) x lengte (m))

Vergeet niet de lengte in centimers om te zetten naar meters tijdens de berekening.

Naargelang de BMI schrijf je een andere boodschap naar het scherm via document.write():

  • Lager dan 18,5: Ondergewicht
  • Tussen 18,5 en 25: Gezond gewicht
  • Tussen 25 en 30: Overgewicht
  • Hoger dan 30: Obesitas

# Oefening 2: Fuif

Maak een nieuwe HTML-pagina met naam oef2_fuif.html. Koppel een extern scriptbestand aan de pagina met naam oef2_fuif.js.

Bouw een kleine applicatie die naar de gegevens van een persoon vraagt om te weten of de persoon welkom is op een speciale themafuif voor jongeren zonder date.

Vraag naar de volgende gegevens via prompt():

  • Naam
  • Leeftijd
  • In een relatie? (j/n)
  • Kleur t-shirt

Gebruik geneste if-statements om te controleren of de persoon naar de fuif mag komen. Om toegelaten te worden moet aan de volgende voorwaarden voldaan worden:

  • De naam mag niet "Henkie" zijn. Henkie is namelijk vervelend op fuiven.
  • Enkel jongeren ouder dan 15 en jonger dan 19
  • Mogen niet in een relatie zijn
  • Moeten een t-shirt met rode, zwarte of gele kleur dragen (het thema is België. Of Duitsland...)

De applicatie moet enkel zeggen of de persoon is toegelaten of niet. De tussenstappen hoeven geen boodschap te krijgen.

EXTRA

Eens de applicatie naar behoren werkt kan je eens proberen de geneste if-statements te vergangen door één enkele if-statement waarin de condities met logische operatoren verbonden worden.

NIEUW: Lower en uppercase

Bij het controleren van gelijkheid tussen twee strings wordt ook standaard gekeken naar de hoofdletters. Zo zal de string "Baard" niet gelijk zijn aan de string "baard" omdat de hoofdletter niet in het tweede woord voorkomt. Vooral bij invoer van de gebruiker, waar je als ontwikkelaar niet weet of er een hoofdletter gaat gebruikt worden, is dit iets dat je moet opvangen.

De beste manier om hier mee om te gaan is door de invoer om te zetten naar kleine letters (lowercase) of hoofdletters (uppercase). Dit kan je doen met de stringfunctie toLowerCase() en toUpperCase(). Ze nemen geen argument aan tussen de ronde haken.

Je gebruikt ze als volgt:

const naam = prompt("Geef aan naam");

if (naam.toLowerCase() === "tania") {
    console.log("Hallo Tania!");
}

Alternatief kan je de omzetting ook al doen bij het bewaren van de invoer. In dat geval ben je echter de originele invoer kwijt.

const naam = prompt("Geef aan naam").toLowerCase();

if (naam === "tania") {
    console.log("Hallo Tania!");
}

# Oefening 3: Quiz

Maak een nieuwe HTML-pagina met naam oef2_quiz.html. Koppel een extern scriptbestand aan de pagina met naam oef2_quiz.js.

Schrijf een webapplicatie die aan de gebruiker een aantal vragen stelt en een score bijhoudt naargelang de gegeven antwoorden. Er worden in totaal vier vragen gesteld, elk met een andere scoretelling en bericht aan de gebruiker:

Vraag 1:

Wat is zacht, schattig en heeft vier poten?

  • Antwoord is "Hond" of "Kat":
    • Boodschap: "Tijd om te aaien!"
    • Score: +2
  • Antwoord is "Hamster" of "Konijn":
    • Boodschap: "Ook schattig maar niet wat we zochten!"
    • Score: +1
  • Antwoord is iets anders:
    • Boodschap: "Kan je misschien schattig vinden, maar niet wat we zochten!"
    • Score: +0

Vraag 2:

Hoe heet de vriend van de pop Barbie?

  • Antwoord is "Ken":
    • Boodschap: "En ze leefden nog lang en gelukkig!"
    • Score: +1
  • Antwoord is iets anders:
    • Boodschap: "Dan is ze vreemd gegaan."
    • Score: -1

Vraag 3:

Hoeveel stuks telt een bakkersdozijn?

  • Antwoord is 13:
    • Boodschap: "Mooi dat je dat weet!"
    • Score: +2
  • Antwoord zit er meer dan 2 naast:
    • Boodschap: "Je zit er serieus naast!"
    • Score: -1
  • Antwoord zit er maximum 2 naast:
    • Boodschap: "Dichtbij!"
    • Score: +0

Vraag 4:

Welke toets vind je op een toetsenbord tussen de "E" en de "T"?

  • Antwoord is "R":
    • Boodschap: "Je hebt waarschijnlijk toch gespiekt, geen punten!"
    • Score: +0
  • Antwoord is iets anders:
    • Boodschap: "Je kon toch wel even naar beneden kijken?"
    • Score: -2

Naargelang de score toon je op het einde een ander bericht:

  • 5 (maximum): "Fantastisch resultaat, quizmaster!"
  • 3-4: "Niet slecht! Volgende keer nog beter."
  • Minder dan 3: "Er bestaan ook andere hobbies dan quizzen..."

Gebruik voor het vragen naar een antwoord de prompt() functie en voor het tonen van boodschappen de alert() functie.

# Oefening 4: Zin analyseren

Maak een nieuwe HTML-pagina met naam oef4_zin.html. Koppel een extern scriptbestand aan de pagina met naam oef4_zin.js.

Schrijf een kleine applicatie die een zin analyseert op de volgende zaken en boodschappen via document.write() weergeeft:

  • Als de woorden "ik", "mij" of "me" voorkomen in de zin schrijf je de boodschap: "De zin heeft iets te maken met jou."
  • Naargelang de lengte van de zin schrijf je één van de volgende boodschappen:
    • Langer of gelijk aan 30 karakters: "De zin is zeer lang."
    • Langer of gelijk aan 20 karakters maar minder dan 30: "De zin is redelijk lang."
    • Korter dan 20 karakters: "De zin is kort."
  • Als de zin niet wordt afgesloten met een punt, uitroepteken of vraagteken: "Je hebt de zin niet afgesloten met een leesteken!"
  • Als de eerste letter geen hoofdletter is: "De zin begon niet met een hoofdletter."
  • Als de zin slechts uit één woord bestaat: "De zin bestaat slechts uit één woord!"

Laat de analyse alleen draaien als de gebruiker daadwerkelijk een zin heeft ingegeven. Als de invoer leeg is wordt de analyse overgeslagen.

NIEUW: Stringfuncties

Strings hebben een aantal ingebouwde functies (stringfuncties) waarvan je gebruik kan maken. In de meeste gevallen geven ze informatie over de string of knippen/selecteren ze een deeltje eruit. Je kan een stringfunctie uitvoeren door ze te chainen (met een . achteraaan de string) aan de string waarop je de functie wil uitvoeren. Wanneer een stringfunctie een boolean als waarde teruggeeft, betekent dit dat ze ook in if-statements kan worden gebruikt, net zoals zelf opgestelde condities (die ook een boolean teruggeven).

includes()

Geeft true terug als het argument (tussen de ronde haken) van de functie in de string voorkomt. Het argument moet een andere string zijn.

const zin = "Geboren te Aarschot";
zin.includes("Aarschot"); // true

if (zin.includes("Aarschot")) {
    console.log("Je bent geboren in Aarschot");
}

Varities hierop zijn startsWith() en endsWith() om na te kijken of een string begint of eindigt met een andere string.

NIEUW: Lengte van een string

Om de lengte van een string op te vragen kan je gebruikmaken van de eigenschap length van de string. Het geeft de lengte terug als getal. Spaties tellen elk als één karakter.

const zin = "Hoe lang is deze zin?";
console.log(zin.length) // Geeft 21

NIEUW: Strings en index

Om één bepaald karakter uit een string te selecteren kan je gebruikmaken van de index van het karakter. De index is een getal dat overeenkomt met de positie van het karakter en begint te tellen vanaf nul. De index volgt achter de string tussen vierkante haken [ ].

const zin = "De vos zoekt de kippen";
console.log(zin[0]); // D
console.log(zin[3]); // v