Tussenopdrachten in V6
Opdrachten in de Les
In de les moeten wij soms kleine opdrachten maken, waarin we bijvoorbeeld in excel een programma moeten maken die getallen van Decimaal naar Binair vertaald, of een paar vragen beantwoorden over processors. Op deze pagina kun je deze opdrachten downloaden.
Spring naar: Periode 1, Periode 2
Periode 1
Koffiezet-automaat
Download: Link
Beschrijving: Als eerste opdracht van deze periode moesten we een koffiezet-automaat maken. Voor deze opdracht moesten we gebruik maken voor de logische poorten simulator MMLogic. Zo gezegd, zo gedaan. Ik maakte een lijstje met wat ik wilde dat het apparaat moest kunnen:
- Verschillende keuzes
- Lampjes die aangeven wat het apparaat aan het doen is
- Geld inwerpen
- Schoonmaakknop
- Lampjes die aangeven wat voor koffie gezet is
- Een knop waarmee je het product pakt
- Je moet wachten tot je koffie gezet is
Met dat plan in mijn achterhoofd ging ik aan het werk. Het ging soepel, er waren alleen twee dingen die het me soms wat moeilijker maakten. Die waren 1) Het programma MMLogic komt soms wat buggy over, waardoor je in het ergste geval opnieuw moet beginnen of dat het soms niet werkt zoals het zou moeten en 2) De timer component in MMLogic is wat moeilijk om de werkwijze ervan uit te vogelen, maar het was niet onmogelijk en is me wel gelukt. Al had het best wat makkelijker gemogen als je het mij vraagt. Het resultaat is hierboven te downloaden.
Stelsel vergelijkingen met 3 onbekenden
Download: Link
Beschrijving: Als volgende tussenopdracht moesten we een programma maken in excel dat voor een stelsel vergelijkingen met 3 onbekenden de onbekenden uit kan rekenen. Er zijn een paar methodes hiervoor, waaronder de eliminatiemethode, substitutiemthode, een methode doe matrices werkt, en vast nog wel meer. Ik heb gekozen om het met de eliminatiemethode te doen. Dit houdt in dat je de formules zo vermenigvuldigt, deelt, optrekt en aftrekt dat je uiteindelijk in een formule de Z overhebt, in een formule de Y en de Z en in een formule de X, Y & Z alledrie nog onbekend zijn. Wat je dan doet is dat je de Z invult waardoor je de Y kan uitrekenen. Als je de Y en de Z hebt kun je de X uitrekenen omdat er dan nog maar 1 onbekende is. Afijn, mijn berekeningen kun je hier bekijken: Stap 1, Stap 2, Stap 3.
- Stap 1: Hier schrijf ik de formules eerst netjes op, en vervolgens deel ik elke formule door zijn eigen X-coefficient. Hierdoor krijgt elke formule maar 1 X. Hierna trek ik formule 1 van formule 2 en 3 af, waardoor die nog maar 2 onbekenden hebben. Het ziet er echter vreselijk rommelig uit (rechtsonder)
- Stap 2: In deze stap schrijf ik de formules eerst (weer) netjes op, zodat ik verder kan rekenen. Dan deel ik vervolgens beide formules door hun Y-coefficient, die inmiddels er al wat complexer uitziet. Let op dat ik dit alleen met de laatste twee formules doe, en niet met de eerste. Hierdoor hebben de laatste twee formules maar 1 Y. Daarna trek ik formule 2 van formule 3 af. Nu volgt de laatste stap.
- Stap 3: Hier ronden we de formule af. Ik heb de tweede formule van de derde formule afgetrokken, waardoor de derde formule geen onbekende Y meer bevat en dus nog maar 1 onbekende heeft! Dat betekent dat de Z nu bekend is. Als we vervolgens Z invullen in formule (2) in Stap 2, kunnen we de Y uitrekenen. En als de Y & Z allebei bekend zijn, kunnen we ze invullen in formule (1) in Stap 1, waardoor X de enige onbekende is en we die ook uit kunnen rekenen! Klaar is kees.
Deze methode werkt erg fijn. Hij is redelijk snel en geordend, waardoor je er niet zoveel tijd aan kwijt bent en je weinig kans hebt op schrijffouten. Het nadeel is wel dat zodra a nul wordt de formule niet meer werkt, aangezien er best wel vaak gedeeld wordt door a en delen door nul is flauwekul. Oplossing hiervoor zou zijn dat je voor elke mogelijkheid een aparte formule maakt, dus als a = 0 dan formule 1, als e = 0 dan formule 2, etc. Dit is echter voor zover ik kan inschatten met mijn ervaring erg veel werk, meer dan je aan een tussenopdracht moet besteden. Een andere oplossing is dat je de formules zo op volgorde zet dat die nul geen belangrijke plaats heeft in de formule (dus: dat hij geen deler is). Dit is echter wederom meer werk dan ik vind dat je kan besteden aan een tussenopdracht. Samenvattend vond ik dit wel een interessante opdracht, al was het voor mijn gevoel wel meer rekenwerk dan programmeren.
Enigma
Download: Link
Beschrijving: Deze tussenopdracht ging over coderen-decoderen en het apparaat Enigma. Het werd vooral gebruikt door de Nazis in de tweede wereldoorlog. Het is een elektromechanisch apparaat dat telkens als je een letter indrukt jou een andere letter laat zien, op basis van een hoop instellingen. Die instellingen bestonden uit 3 wieltjes die je kon draaien zoals jij wilde, en een kabelkastje aan de voorkant. De essentie van het apparaat werkt op deze manier:
- Je drukt een letter in. Er gaat een signaaltje over het speciale pad van deze letter.
- Dit signaaltje gaat door de wieltjes. Die wieltjes kunnen op verschillende manieren staan, en elke opstelling heeft zijn eigen uitkomst. Nadat het signaal door de wieltjes heen is gegaan (en dus op het spoort gezet is naar een andere letter) gaat het rechter wieltje een plekje verder. Als het rechterwieltje 1 keer rond is geweest, gaat het middelste wieltje 1 plekje verder. Als het middelste wieltje 1 keer rond is geweest gaat het linkerwieltje 1 plek verder. Op die manier heeft elke letter een andere combinatie, zelfs als je twee keer dezelfde letter hebt.
- Dan gaat het signaal nog door het kabelkastje. Dit is eigenlijk heel simpel: normaal als het signaal naar a zou gaan, gaat hij gewoon naar a. Maar bij het kabelkastje kun je de kabels zo veranderen dat als het signaal naar a gaat, het signaal wordt doorgestuurd naar b, c, d, welke letter je maar wilt. Zo kun je het nog moeilijker maken om de code te kraken.
Dit is ongeveer hoe de Enigma werkt. De kracht van het apparaat zat hem in de vele (en met vele bedoel ik 158 miljoen miljoen miljoen!) mogelijkheden waarop je het apparaat in kan stellen. Daarnaast stelde het apparaat zichzelf na elke letter weer anders in! Elke letter werd dus in essentie met een ander algoritme gecodeerd. Het enige zwakke punt was dat beide partijen, de verzender en de ontvanger, beiden de instellingen moesten weten, omdat ze anders het bericht niet goed zouden kunnen coderen/decoderen. Het is supersterk, maar niet onbreekbaar. Uiteindelijk is het apparaat in 1940 na een lange tijd toch gekraakt.
Geinspireerd door de Enigma begon ik aan mijn eigen (de)codeerprogramma: Ceasar+. Ik heb gebruik gemaakt van Ceasars algoritme. Dat is een leuk en simpel algoritme om berichtjes te coderen. Het werkt op deze manier:
- Neem een letter
- Vertaal deze letter naar een cijfer (a = 1, b = 2, etc.)
- Tel bij deze letter 13 op
- Trek van dit getal als deze meer is dan 26 26 af
- Maak van dit getal weer een letter (1 = a, 2 = b, etc.)
- Herhaal dit voor alle letters
Dit heb ik dus ook zo in Excel geprogrammeerd, maar dan met een verschil dat je zelf kan kiezen hoeveel plekken de letters "opgeschoven" worden, en dat de cijfers ook een bepaalde hoeveelheid opgeschoven kunnen worden, met een hoeveelheid die je ook zelf kan kiezen. Voordeel aan dit algoritme is dat het simpel en snel is. Nadeel is... Tja, het is simpel dus makkelijk te kraken, en het is algemeen bekend in de moderne wereld dus het is een beveiliging van niks. Een ander nadeel is dat het geen rekening houdt met speciale tekens (!, &, $, etc.) al is dit geen groot nadeel want die kun je in mijn ogen beter toch weglaten.
Al met al vond ik dit best een leuke opdracht. Het was wel grappig wat op te zoeken over Enigma en uit te vogelen hoe dat apparaat ongeveer werkt. Het uitzoeken, begrijpen en implementeren van een simpeler codeeralgoritme was ook leuk om te doen.
Periode 2
Raaklijn
Download: Link
Beschrijving: Voor deze opdracht moest ik een programma maken dat van een tweedegraadsformule de grafiek tekent, en op een zelf aan te geven punt de raaklijn tekent.
Analyse: Ik moet eerst aan de gebruiker vragen a, b & c in te voeren. Ook vraag ik aan hem het coordinaat van de raaklijn, zodat ik weet waar de raaklijn ligt. Als laatste vraag ik aan de gebruiker de minimale x en de maximale x te berekenen. Dit heb ik nodig omdat je anders de hele grafiek weer zou moeten geven, en aangezien de grafiek oneindig is kan dat niet. Op deze manier hoef ik dus maar een stukje van de grafiek te laten zien. Dan laat ik excel op basis van deze informatie alles berekenen (punten van de normale grafiek, punten van de raaklijn, etc.) en plot ik deze in hetzelfde diagram. Als laatste geef ik alle informatie (de 3 formules: de originele formule, de afgeleide, en de formule van de raaklijn) nog een keer weer. Het programma is dan klaar.
Programma: Het programma werkt op deze manier: je kunt links de variabelen invullen. Met de variabelen bedoel ik de coefficienten van de formule (a, b & c), het minimale en maximale x coordinaat van de grafiek en de x waarvan je de raaklijn wilt weten. Met deze informatie kan excel aan het werk. Eerst berekent hij van 20 punten tussen de minimale en maximale x het y coordinaat, die hij vervolgens doorgeeft aan het diagram: hier plot ik de originele grafiek.
Daarna wordt de richtingscoefficient op het raakpunt bepaald, evenals het y coordinaat van het raakpunt. Nu het programma het y coordinaat van het raakpunt (y), het x coordinaat van het raakpunt (x) en de richtingscoefficient van dat punt heeft (a), kan het b van het startpunt berekenen (in de lineare formule y = ax + b). Als je a & b weet kun je vervolgens voor een verzameling x'en de y berekenen. Het programma doet dat, en plot ze vervolgens in hetzelfde diagram als waar de tweedemachts vergelijking in geplot was. Als laatste wordt, puur voor de informatie, boven het diagram nog weergegeven welke formules er in het programma gebruikt zijn.
Er zit ook nog een systeempje in dat aangeeft wanneer de input niet correct is ingevoerd en de output dus ook niet betrouwbaar is. Als minimum x of maximum x gelijk zijn / op een verkeerde manier meer of minder dan elkaar zijn, of als raakpunt x buiten het bereik minimux x maximum x ligt, dan geeft het programma aan dat er wat mis is. Het programma rekent echter wel verder met die waarden. De output is dan wel onbetrouwbaar, maar daar kun je rekening mee houden want het programma geeft dit aan.
Reflectie: Ik vond dit een niet heel erg moeilijke maar best leuke tussenopdracht. Het programma heeft 2 nadelen. De eerste is dat de resolutie van de grafieken niet flexibel/precies is. Het programma berekend slechts 20 punten om de grafieken te tekenen, wat opzich 9 van de 10 keer wel prima is, maar als je een bijzondere grafiek hebt krijg je misschien weergave problemen. Bovendien kun je het aantal punten niet aanpassen; het zijn er altijd 20. Het tweede nadeel is dat je de grafieken niet goed kunt aflezen. Bij de kleinere getallen lukt dat nog, maar zodra de getallen groter wordt dit veel moeilijker. De opdracht was echter om de grafiek en raaklijn samen weer te geven en dat is gelukt, dus ik vindt het niet een groot probleem. Als je echter iets exact wil berekenen is het geen slimme actie om mijn programma erbij te pakken.