Instructie Programmeren Task 7

Slides:



Advertisements
Verwante presentaties
HET CSE NEDERLANDS. Je spreekt toch al jaren
Advertisements

Het Forum Hoe ga je te werk met het forum?
Instructie Programmeren Task 1 5JJ70. Task 1.1: Hello World •Klik naast de laatste accolade in de grijze kantlijn om een breakpoint neer te zetten, anders.
Sander Mager Roel Lafeber CE2A. Sinds een aantal maanden ben ik erg fanatiek de game ‘’Candy Crush’’ aan het spelen. Een klasgenootje van mij speelde.
Uitleg installatie SAM Broadcaster v3 en v4 met de MySQL database
EVMINX4 Week 3 Algoritmen en Datastructuren (ALDAT)
Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.
PROS2 Les 11 Programmeren en Software Engineering 2.
om deze presentatie uit te voeren
Instructie Programmeren Task 1 5JJ70. Task 1.1: Hello World Klik naast de laatste accolade in de grijze kantlijn om een breakpoint neer te zetten, anders.
Instructie Programmeren Debuggen 5JJ70. Debuggen: Wat is het probleem Je programma compileert, maar werkt niet zoals verwacht, wat nu? Vraag je af: wat.
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
Assenstelsels en het plotten van Functies in LOGO
Instructie Programmeren Task 5
Hoe werkt een powerpoint?
Numerieke Natuurkunde
Flow controle Keuzes maken. Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
GESPRG Les 7 Gestructureerd programmeren in C. 92 Verwisselen Schrijf een functie waarmee twee int variabelen verwisseld kunnen worden. void wissel(int.
1 Datastructuren Een informele inleiding tot Skiplists Onderwerp 13.
Interpreteren van data
MET DANK AAN COLLEGA’S IN DEN LANDE ! vee 2012
Schijvenbeheer Disk Management t/m
Instructie leerling- activatiecode
Heel kleine getallen.
Samenvatting Havo 5.
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  programma draaien vanuit ROM.
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 3 redirection,
PEMSY1http:// 1  Herhaling nieuwe instructies van vorige week  nieuw: combineren van assembler en C  oefeningen: assembler.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Een (vaste) melodie spelen op de PC speaker 
Online filmpjes maken. (
Online filmpjes maken. (
Instructie Programmeren Task 4 5JJ70. Task 4.1: Iteratief proces Het doel van de opdracht is de uitgangsspanning van een transistor te bepalen met de.
Torens van Hanoi ● Uitgevonden door Franse Wiskundige Edouard Lucas in ● Beschreven in zijn wiskundig “spelletjesboek” Récréations Mathématiques.
Instructie Programmeren Task 3 5JJ70. Task 3.1: MIPS Rating Volg de beschrijving in de opdracht om het aantal assembly instructies in de loop uit te vinden.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Een embedded systeem: ARM bord.
Instructie Programmeren Introductie 5JJ70. Insturen opdrachten Inleveren via Peach 3: Registreren met als naam je identiteitsnummer.
Beeldbewerking.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Docentinstructie: Het is aan te bevelen de eerste dia’s klassikaal te tonen en met uitleg te bespreken. Als na zes dia’s een korte demo van Celsius/Fahrenheit.
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 8: Gebruikersinterface © 2014, Gertjan Laan, versie 2.
Let’s go! ›Beginnerspresentatie ›Starten met prospero ›Verschil CMS en web navigator ›Nieuwe content > nieuwe folder aanmaken ›Bestanden uploaden ›Linkobject.
Shake Song Fort van de Verbeelding Bovenbouw Groep 7 en 8 (en soms ook groep 6)
Welkom! maandag 16 November 2015 Les B-2.
Hoe maak ik een PowerPoint presentatie?
Les 3 - Operators Workshop Php Basic. ICT Academy Php Basic Content Operators Wiskundig Toewijzing Vergelijking.
Inloggen >> Gegevensaanlevering en controle in Peridos In Release 3.3 van Peridos is er een nieuwe module gebouwd voor het aanleveren en bekijken van gegevens.
Trimester 2. Hfdst 1: e-Presentatie, master! e-Presentatie Met de hulp van Powerpoint gaan we leren hoe we een elektronische presentatie kan maken.
Na de praktijk, de theorie.. Zoals een gehaktmolen 1.Je stopt er iets in. 2.Je hoeft niet te weten wat er binnenin gebeurt. 3.Het resultaat verschijnt.
Inhoud Optellen en aftrekken. Vermenigvuldigen en delen.
Meest voorkomende vragen bij examenteksten.
Meest voorkomende vragen bij examenteksten.
Programmeren met Reeksen
PHP arrays.
Gameprogrammeren: Lists en interfaces
NSCCT Instructie groep 5
NSCCT Instructie groep 6
Zeeslag Bron: csunplugged.org / csunplugged.nl.
Slim tellen.
Samengestelde zinnen.
Small Basic Console deel 2
Slim tellen.
NSCCT Instructie groep 5
NSCCT Instructie groep 6
GGD en KGV.
Software Development fundamentals
Python – For loop + strings
Transcript van de presentatie:

Instructie Programmeren Task 7 5JJ70

Task 7: Hash Dictionary Het doel van deze opdracht is: Een structuur in het geheugen vullen met random zinnen samengesteld uit een lijst woorden Je moet op een snelle manier kunnen bepalen of een bepaalde zin in het geheugen staat Je programma en geheugenstructuur moet te vullen zijn met een zeer groot aantal zinnen (1~4mln) binnen een redelijke tijd (minder dan ongeveer 30 seconden) Wanneer het zinnen dictionary leeggemaakt wordt, moet het gebruikte geheugen allemaal vrijgegeven worden Hierbij maak je gebruik van hashing

Task 7: Hash Dictionary – Random sentence De random sentence functie heeft de volgende vorm: void random_sentence(char * line) De functie neemt dus een pointer naar een plaats in het geheugen waar de random zin terecht moet komen als argument De random zinnen stel je samen uit een lijstje met woorden: const int NWORDS = 3; char* randWords[NWORDS] = {“BOM", “RITA", “WIMLEX"}; De random functie die in de opdracht genoemd wordt bestaat niet meer. Om een random getal tussen 0 en NWORDS -1 te genereren kun je het volgende gebruiken: #include <stdlib.h> int my_rand_nr = rand()% NWORDS; Vervolgens kun je in een lusje iedere keer een random getal genereren. Dit getal gebruik je om je randWords array te indexeren en zo iedere keer een woord te selecteren

Task 7: Hash Dictionary – Random sentence Random woorden toevoegen aan de zin kan met behulp van strcat(): De hoeveelheid woorden die je in een zin stopt mag je zelf bepalen (zorg wel voor een redelijk aantal, anders zijn er te weinig verschillende zinnen) Je kunt ook gebruik maken van sprintf. Hiermee print je naar een variabele zoals je normaal naar het scherm print: Let op: De doelocatie en de bronlocatie van deze functies mogen niet overlappen, anders is het effect onvoorspelbaar: char str1[9] = "Test zin"; char dest[40] = ""; strcat(dest, str1); // dest bevat nu de string “Test Zin” strcat(dest, str1); // dest bevat nu de string “Test ZinTest Zin” strcat(dest, " einde"); // dest bevat nu de string “Test ZinTest Zin einde” char str2[30]; int a = 3; sprintf(str2, "Dit is een test %d", a); // str2 bevat nu: "Dit is een test 3“ sprintf(str2, "str1: %s", str1); // str2 bevat nu: "str1: Test zin" char som[40] = “= 2"; sprintf(som, "1 + 1 %s", som); // som bevat "1 + 1 = 1 + 1 = "

Task 7: Hash Dictionary – Hashing Hashen kun je zien als het labelen van een zin binnen een bepaalde categorie. Zinnen die dezelfde hashwaarde opleveren worden samen gegroepeerd. Wil je weten of een string in het woordenboek staat, dan ga je kijken in de categorie die hoort bij de hashwaarde van die string. Vervolgens hoef je alleen binnen die categorie precies naar de inhoud van de string te kijken met string-compare. De hash functie bevat een “magic number” in de regel: hashval += *line+31*hashval; Dit nummer bepaalt de spreiding van je zinnen over de verschillende categorieën Test het effect van verschillende nummers, je kunt hier behoorlijk wat snelheidswinst halen!

Task 7: Hash Dictionary – Hashing Het toevoegen van zinnen gaat via de volgende procedure: Genereer een random zin Hash deze zin Gebruik de hashwaarde om de categorie waar de zin thuishoort te bepalen Maak in deze categorie ruimte voor een extra pointer Maak ruimte voor de zin zelf Kopieer de zin in die ruimte Kopieer de pointer naar die zin in de extra ruimte in de categorie

Task 7: Hash Dictionary – Geheugenstructuur De structuur wordt uitgelegd in de opdracht; lees deze goed door! Het functioneren van de structuur is afhankelijk van de 0 pointer die het einde van de lijst pointers in de categorieën staat, vergeet deze nooit! Haal de groottes van een lijst en de index van het laatste item niet door elkaar! Bijvoorbeeld: Het laatste item heeft index 3, de grootte van de lijst is 4 Wil je de lijst 1 groter maken aan de hand van de index van het laatste item (n), dan wordt de lijst dus (n+2) items groot.

Task 7: Hash Dictionary – Clear commando Free de ruimte waar je pointers opslaat niet voordat je die pointers gefreed hebt! Je programma werkt wanneer: Het nooit crasht Het al het geheugen dat het alloceert ook weer vrijgeeft. Je kunt dit bekijken met de task manager.

Task 7: Hash Dictionary – Clear commando Vooral het vrijgeven van geheugen kan erg lang duren. Door te kiezen voor de release configuratie wordt het geheugen management een stuk sneller alleen je programma is niet meer te debuggen. Zorg dus eerst voor een werkend programma, en test dan eens in de release stand. Run vervolgens je programma van buiten Visual C++. Dit geeft de snelste resultaten. Gebruik de versie uit de release map: Zorg dat je naar de steady state van je programma kijkt. Vlak na het opstarten gebruikt je programma vaak minder geheugen dan nadat het een keer gewerkt heeft, zie het voorbeeld op de volgende slides.

Task 7: Hash Dictionary – Clear commando Startup geheugengebruik: In dit voobeeld: 7104kb Geheugengebruik na read 1000000: Bijv: 81.624kb

Task 7: Hash Dictionary – Clear commando Geheugengebruik na clear: 15.360kb Geheugengebruik na 2e read commando: 81.624kb

Task 7: Hash Dictionary – Clear commando Geheugengebruik na 2x clear: 14.356kb Dit is kleiner dan 15.360kb en dus waarschijnlijk correct. Het geheugengebruik van een programma kan fluctueren, maar mag nooit continu stijgen