Start tot program – Werken met datastructuren

print

Inhoud


Wat vooraf ging

U hebt reeds kennis gemaakt met de anatomie van een computerprogramma en het programma in goede banen geleid via de control flow.

Dit is het laatste deel in de reeks Start to program. We gaan nog even snel kennis maken met een aantal structuren. Meer bepaald:

  • Lijsten (array)
  • Objecten
  • Databanken

Dit zijn drie belangrijke begrippen, waar u zeker kennis mee moet maken, maar het zijn ook begrippen die naargelang de gekozen programmeertaal specifiek behandeld zullen worden.

  • Lijsten zijn nog vrij “basis” en worden ook wat uitgebreider behandeld.
  • Objecten zijn essentieel in een objectgeoriënteerde programmeertaal en zullen binnen deze objectgeoriënteerde programmeertaal uitgebreid aan bod komen maar worden hier slechts geduid.
  • Databanken zijn eveneens een essentieel begrip maar er zijn zoveel specifieke manieren om met databanken te werken dat hiervoor een afzonderlijke module is uitgetrokken.

Het is dus niet de bedoeling om in de module Start to program reeds diep in te gaan op deze begrippen, maar u moet er wel weet van hebben en dat is de doelstelling van deze post.

Ik ga opnieuw gebruik maken van App lab en van de goede ondersteunende video’s. log u in op App lab (eventueel Game lab) en we kunnen eraan beginnen.


Lijsten (arrays)

 

 

Opmerking: de gebruikte functies insertItem(), appendItem() en removeItem() zijn eigen aan App lab en geen standaard Javascript-functies.

Lijsten worden gebruikt wanneer u meerdere waarden aan eenzelfde variabele wenst toe te kennen.

In het geheugen van de computer staan alle elementen van de lijst na elkaar. De index van het element bepaalt de volgorde, het rangnummer, van het element binnen de lijst/array.

Werken zonder array

Voorbeeld 1 (zonder gebruik te maken van een array)

Stel, u wilt 5 willekeurige getallen bijhouden met een waarde tussen 1 en 6.
//Verwerking
var Getal1 = Math.floor(Math.random() * 6) + 1;
var Getal2 = Math.floor(Math.random() * 6) + 1;
var Getal3 = Math.floor(Math.random() * 6) + 1;
var Getal4 = Math.floor(Math.random() * 6) + 1;
var Getal5 = Math.floor(Math.random() * 6) + 1;

//Uitvoer
var Tekst = "";
Tekst += Getal1 + " - ";
Tekst += Getal2 + " - ";
Tekst += Getal3 + " - ";
Tekst += Getal4 + " - ";
Tekst += Getal5;

write(Tekst)

Het genereren van een willekeurig getal is reeds besproken.

In dit voorbeeld willen we slechts 5 willekeurige getallen genereren, maar stel nu dat u er 100 wilt, of 1000, of… Hebt u zin om er aan te beginnen op deze manier?

De oplossing ligt hem in het gebruik van een lijst/array. Een array wordt immers gebruikt om “meerdere waarden aan eenzelfde variabele toe te kennen” en dat is nu net wat we wensen te doen. We wensen een variabele Getal meerdere, gelijkaardige, waarden toe te kennen.

Werken met een array

De array declareren

Eerst moeten we de array declareren. Dit kan op 2 manieren:

var arraynaam = new Array();

var arraynaam = [];

Om redenen van eenvoud, maar ook een paar technische die ik voorlopig even buiten beschouwing laat, is de tweede methode te verkiezen. We gaan dan ook verder met de var arraynaam = []; methode.

De array kan initieel leeg zijn:

var Getallen = [];

Of de array kan initieel opgevuld worden met waarden:

var Vestigingen = ["Ninove", "Oudenaarde", "Zottegem"];

Elementen binnen een array aanspreken

Na het declareren van de array kunnen de elementen met hun index aangesproken worden. Dit gebeurt als volgt:

arraynaam[index];

Het eerste element in een array heeft index = 0.

De waarde van elementen binnen een array wijzigen of toevoegen

Om de waarde van elementen binnen een array te wijzigen gebruiken we onderstaande code:

arraynaam[index] = waarde;

Bijvoorbeeeld:

Getallen[0] = Math.floor(Math.random() * 6) + 1;
Getallen[1] = Math.floor(Math.random() * 6) + 1;

Indien er zich op dat index-nummer nog geen waarde bevindt wordt de waarde op dat index-nummer toegevoegd. Bevat dat index-nummer reeds een waarde dan wordt die waarde gewijzigd in de nieuwe, toegekende, waarde.

Voorbeeld 2 (met een array)

Stel, u wilt 5 willekeurige getallen bijhouden met een waarde tussen 1 en 6.
//Declaratie array
var Getallen = [];

//Verwerking
Getallen[0] = Math.floor(Math.random() * 6) + 1;
Getallen[1] = Math.floor(Math.random() * 6) + 1;
Getallen[2] = Math.floor(Math.random() * 6) + 1;
Getallen[3] = Math.floor(Math.random() * 6) + 1;
Getallen[4] = Math.floor(Math.random() * 6) + 1;

//Uitvoer
var Tekst = "";
Tekst += Getallen[0] + " - ";
Tekst += Getallen[1] + " - ";
Tekst += Getallen[2] + " - ";
Tekst += Getallen[3] + " - ";
Tekst += Getallen[4];

write(Tekst)

Ok, we gebruiken nu een array, maar waar is de winst want uiteindelijk moet er nog steeds evenveel getypt worden.

Wel, de winst komt er als we de array opvullen en weergeven gebruikmakend van een lus.

Lussen gebruiken om een array op te vullen en weer te geven

 

We kunnen de array opvullen met willekeurige getallen gebruikmakend van een lus.

var AantalGetallen = 4;
for (var x = 0; x <= AantalGetallen; x++) {
Getallen[x] = Math.floor(Math.random() * 6) + 1;
}

Door de waarde van de variabele AantalGetallen te wijzigen kan u zoveel getallen toevoegen als u wenst. Let op dat u voor AantalGetallen eentje minder neemt dan het getal dat u wenst omdat u moet beginnen te tellen bij 0. Vandaar var AantalGetallen = 4;.

Indien u liever toch AantalGetallen = 5 gebruikt, dat kan, maar denkt er dan aan dat u de lus moet doorlopen zolang de waarde van x kleiner is dan het AantalGetallen. U moet dus het =-teken verwijderen.

for (var x = 0; x < Aantalgetallen; x++)

In plaats van de waarde van de variabele kan je ook de lengte van de array opvragen, eens deze gekend is. Dit doe je met de code:

arraynaam.length

Bijvoorbeeld:

for (var y = 0; y < Getallen.length; y++) {
Tekst += Getallen[y] + " - ";
}

Aangezien de indexering begint bij 0 zal de lengte steeds 1 hoger zijn dan de hoogste index.

Voorbeeld 3 (met een array en een lus)

Stel, u wilt 5 willekeurige getallen bijhouden met een waarde tussen 1 en 6.
//Declaratie array
var Getallen = [];

//Verwerking
var AantalGetallen = 4;
for (var x = 0; x <= AantalGetallen; x++) {
	Getallen[x] = Math.floor(Math.random() * 6) + 1;
}

//Uitvoer
var Tekst = "";
for (var y = 0; y < Getallen.length; y++) {
	Tekst += Getallen [y] + " - ";
}

write(Tekst)

Lijsten sorteren

Alfabetisch sorteren van A naar Z

Een array alfabetisch sorteren van A naar Z kan door gebruik te maken van de sort() methode. De syntax is:

NaamArray.sort();

Alfabetisch sorteren van Z naar A

Om een array alfabetisch te sorteren van Z naar A voeren we eerst een sort() uit en nadien gebruiken we de reverse() methode om de volgorde om te keren. De syntax is:

NaamArray.sort();
NaamArray.reverse();

Numerieke waarden sorteren

Om numerieke waarden (getallen) te sorteren kan ook de sort() methode gebruikt worden maar moet tevens, binnen de sort() methode wordt een functie geplaatst die aangeeft hoe de sortering (van klein naar groot of van groot naar klein) moet gebeuren. De functie krijgt 2 parameters mee (bv. a en b) en de return-waarde bepaalt de volgorde.

De syntax voor het sorteren van numerieke waarden

van klein naar groot (stijgend of op zijn Engels Ascending) is:

NaamArray.sort(function(a, b){return a-b});

van groot naar klein (dalend of op zijn Engels Descending) is:

NaamArray.sort(function(a, b){return b-a});

Voorbeeld 4 (met een array en een lus en gesorteerd)

Stel, u wilt 5 willekeurige getallen bijhouden met een waarde tussen 1 en 6.
//Declaratie array
var Getallen = [];

//Verwerking
var AantalGetallen = 4;
for (var x = 0; x <= AantalGetallen; x++) {
	Getallen[x] = Math.floor(Math.random() * 6) + 1;
}

//Sorteren
Getallen.sort(function(a, b){return a-b});

//Uitvoer
var Tekst = "";
for (var y = 0; y < Getallen.length; y++) {
	Tekst += Getallen [y] + " - ";
}

write(Tekst)

Het sorteren gebeurt uiteraard nadat de waarden zijn ingelezen en toegekend aan de array en voor de waarden worden weergegeven.

Een array updaten (Javascript)

We hebben reeds gezien dat de gebruikte functies insertItem(), appendItem() en removeItem() uit bovenstaande video eigen zijn aan App lab en geen standaard Javascript-functies.

Misschien toch even kort aanhalen hoe u dit in Javascript kunt doen (en dus ook in App Lab).

Elementen toevoegen met de push() methode

Om elementen aan een array toe te voegen kent javaScript de push() methode. Het voordeel is dat u zelf geen index-nummer moet meegeven en dat de push() methode altijd het volgende vrije index-nummer neemt zodat u een mooi oplopende reeks van index-nummers krijgt. De syntax is:

NaamArray.push(waarde);

Voorbeeld:

var Vestigingen = ["Ninove", "Oudenaarde", "Zottegem"];
Vestigingen.push("Nieuwe vestiging");
write(Vestigingen);

Met bovenstaande code wordt “Nieuwe vestiging” toegevoegd aan de array Vestigingen op index 3.

Elementen verwijderen met de pop() methode

Om het laatste element uit een array te verwijderen kent JavaScript de pop() methode. De syntax is:

NaamArray.pop();

Voorbeeld:

var Vestigingen = ["Ninove", "Oudenaarde", "Zottegem"];
Vestigingen.pop();
write(Vestigingen);

Elementen van een array verbinden met een specifiek teken

Met write(Vestigingen) wordt de array weergegeven met de elementen gescheiden door een komma. Om de array expliciet als een string weer te geven kan je hem converteren naar het type string met de methode toString().

Vestigingen.toString()

Op zich wijzigt dit echter niets aan de uitvoer.

Wilt u geen komma’s zien tussen de elementen maar bv. Streepjes dan kan de methode join() gebruikt worden met tussen de haakjes (en tussen “”) het teken waarmee de elementen van de array verbonden (joined) moeten worden.

Vestigingen.join(" - ")

Voorbeeld:

var Vestigingen = ["Ninove", "Oudenaarde", "Zottegem"];
Vestigingen.push("Nieuwe vestiging");
write(Vestigingen.join(" - "));

Nagaan of een waarde in een array voorkomt

Om na te gaan of een waarde in een array voorkomt kan de methode indexOf() gebruikt worden. De methode indexOf() geeft de index terug waarde de waarde gevonden is. Staat de waarde niet in de array dan geeft indexOf() de waarde -1 terug.
NaamArray.indexOf(waarde);

Voorbeeld:

var Vestigingen = ["Ninove", "Oudenaarde", "Zottegem"];
var GevondenOp = Vestigingen.indexOf("Oudenaarde");
write(GevondenOp);

De variabele GevondenOp krijgt de waarde 1 in bovenstaand voorbeeld.


Objecten

 

Als u rondom u kijkt dan ziet u overal objecten.

Deze objecten hebben allemaal eigenschappen/properties en wellicht ook methoden (dingen die een object kan doen of dingen die u met een object kan doen).

Een wagen, een object, heeft een aantal eigenschappen/properties. Denk aan het merk, het model, het gewicht, de kleur,…

Een wagen heeft ook een aantal methoden. Denk aan starten, stoppen, rijden, remmen,….

Alle wagens hebben dezelfde eigenschappen/properties maar de waarden die aan deze eigenschappen worden toegekend kunnen verschillen. Sommige wagens zijn van het merk BMW en hebben een zwarte kleur, anderen zijn van het merk Fiat en hebben een rode kleur.

Alle wagens hebben dezelfde methoden maar een BMW zal anders starten, stoppen, rijden en remmen dan een Fiat.

Een object is een groep van gerelateerde eigenschappen die u gevarieerde waarden kunt toekennen.

Een object versus een variabele

Een variabele bevat 1 enkele waarde. Bijvoorbeeld:

var wagen = "BMW";

Een object is als een variabele maar bevat meerdere waarden. Bijvoorbeeld:

var wagen = {merk:"BMW", model:"X3", kleur:"blauw"};

U haalt nu een specifieke eigenschap op via:

objectName.propertyName

Bijvoorbeeld:

var wagen = {merk:"BMW", model:"X3", kleur:"blauw"};
write(wagen.kleur);

Van een lijst naar een object

Stel, u wilt niet enkel de vestigingen van het PCVO Dender en Schelde bijhouden maar ook hun adres en telefoonnummers.

U zou kunnen drie lijsten (steden, adressen en telefoonnummers) aanmaken en deze opvullen met de juisten waarden om deze vervolgens te doorlopen op basis van hun index.

De code ziet er ongeveer als volgt uit:

//met een array
var steden = ["Ninove", "Oudenaarde", "Zottegem"];
var adressen = ["Centrumlaan 160", "Minderbroedersstraat 6", "Sabina van Beierenlaan 35"]
var telefoonnummers = ["054/31.78.60", "055/31.32.87", "09/360.19.93"]

for(x = 0; x <= 2; x++){
  write(steden[x] + " - " + adressen[x] + " - " + telefoonnummers[x])
}

U merkt wellicht zelf wel op dat het heel moeilijk is om de data synchroon te houden over deze arrays en hoe meer eigenschappen u wenst toe te voegen hoe moeilijker dit wordt.

Een object kan voor een oplossing zorgen.

Declareer eerst de array:

var vestigingen = [];

Maak vervolgens de objecten aan en voeg ze push() toe aan de array, bijvoorbeeld voor Ninove kan dit er als volgt uitzien:

Ninove = {stad: "Ninove", adres:"Centrumlaan 160", telefoon:"054/31.78.60"};
vestigingen.push(Ninove);

Gebruik opnieuw een lus om de array te doorlopen en verwijs naar de gewenste eigenschappen.

for(x = 0; x <= vestigingen.length; x++){
write(vestigingen[x].stad + " - " + vestigingen[x].adres + " - " + vestigingen[x].telefoon)
}

De volledige code wordt nu:

//met een object
var vestigingen = [];

Ninove = {stad: "Ninove", adres:"Centrumlaan 160", telefoon:"054/31.78.60"};
vestigingen.push(Ninove);

Oudenaarde = {stad: "Oudenaarde", adres:"Minderbroedersstraat 6", telefoon:"055/31.32.87"};
vestigingen.push(Oudenaarde);

Zottegem = {stad: "Zottegem", adres:"Sabina van Beierenlaan 35", telefoon:"09/360.19.93"};
vestigingen.push(Zottegem);


for(x = 0; x < vestigingen.length; x++){
  
  write(vestigingen[x].stad + " - " + vestigingen[x].adres + " - " + vestigingen[x].telefoon)
}

Deze code is weliswaar langer maar gemakkelijker uit te breiden en te synchroniseren en dus efficiënter in het onderhouden van de code.

U weet nu wat objecten zijn en hoe ze zich verhouden tegenover variabelen en lijsten. Als u zich verder verdiept in objectgeoriënteerd programmeren zult u ook zien hoe u methoden kunt toevoegen en hoe u een klasse kunt maken voor een object. Maar als kennismaking volstaat dit.


Databanken

Leren werken met databanken is een cursus op zich, we gaan hier dan ook slechts kennismaken met een aantal basisbegrippen en een introductie hoe ze zouden kunnen gebruikt worden in App Lab.

Het woord database/databank wordt voor verschillende begrippen gebruikt:

  • De opgeslagen gegevens als zodanig.
  • De wijze waarop de gegevens zijn opgeslagen: datamodel.
  • De software waarmee databases kunnen worden aangemaakt en benaderd: Database management systeem (DBMS).

Een database/databank (de opgeslagen gegevens als zodanig) moet aan de volgende minimale voorwaarden voldoen om als database gezien te worden.

  • Gegevens moeten eenvoudig kunnen worden opgeslagen.
  • Gegevens moeten eenvoudig kunnen worden opgezocht.
  • Gegevens moeten gewijzigd kunnen worden.
  • Gegevens moeten verwijderd kunnen worden zonder dat dit de werking van dat systeem nadelig beïnvloedt.
  • Gegevens mogen niet dubbel worden opgeslagen.

Een database, gegevensbank of databank is een digitaal opgeslagen archief, ingericht met het oog op flexibele raadpleging en gebruik.

 


Behandelde Basiscompetenties uit de module ICT Programmeren – Start to program

  • IC BC228 – kent de verschillende principes en onderdelen op basis waarvan een programma kan opgebouwd worden
  • IC BC237 – kan een eenvoudig programma wijzigen
  • IC BC239 – kan bij het programmeren een juiste logica volgen
  • IC BC240 – kan een eenvoudig programma maken
  • IC BC242 – kan een programma uittesten
  • IC BC243 – kan een programma documenteren
  • IC BC352 – begrijpt het systeem en de functies die achter een programma zitten

Real programmers count from 0

Geef een reactie

  • Abonneer je op deze website d.m.v. e-mail

    Voer je e-mailadres in om je in te schrijven op deze website en e-mailmeldingen te ontvangen van nieuwe berichten.