Analoog/Digitaal Analoog Digitaal Elementen kunnen alle toestanden aannemen (continu) Digitaal Elementen nemen beperkt aantal toestanden aan (discreet) => Binair: twee toestanden 0 en 1 Wel/niet, aan/uit, geladen/ongeladen Binair geheugen eenvoudiger dan analoog Bit (binary digit) - informatie in één cel Byte (= by eight) - 8 bits bij elkaar
Digitaliseren Van analoog naar digitaal Tekeningen/beelden/foto's: Geluid : digitale audio == compact disc
Machine-instructies De CPU van een computer kan alleen instructies begrijpen die er zijn “ingebakken”. (machine-instructies) De instructies verschillen sterk per CPU: Motorola /Z80 / 8086 / Pentium Machine-instructies zijn voor normale mensen niet leesbaar: 3E 20 1A 37 BC (hexadecimaal geschreven)
talstelsels positiestelsel tientallig heeft 10 cijfers: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 7-tallig 1 2 3 4 5 6 10 11 12 13 14 15 16 20 21 22 2-tallig 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000 16-tallig 1 2 3 4 5 6 7 8 9 A B C D E F 10 positiestelsel tientallig heeft 10 cijfers: 234 betekent 2x100+3x10+4x1 zeventallig heeft 7 cijfers: 2347= 2x49+3x7+4x1=12310 tweetallig heeft 2 cijfers: 1010112= 1x32 + 0x16 +1x8 +0x4 + 1x2 +1x1=4310 zestientallig heeft 16 “cijfers”: na de 9 komt A, B, C, D, E en F 3E16=3x16 + 14x1=6210
Binaire getallen Negatieve getallen m.b.v. één bit voor het teken 16-bits --> van -32767, .., -1, -0, +0,+1, .., +32767 Gebroken getallen: 101.0112= 1x4 + 0x2 +1x1 + 0x1/2+ 1x1/4+1x1/8 Fixed point notatie: ( 234.45) vast aantal bytes voor het gehele deel en vast aantal bytes voor het gebroken deel Floating point notatie: ( 0.17384 E +5) vast aantal bytes voor de significante cijfers (mantisse) en voor de exponent (niet zo veel)
Binair rekenen Optellen: 0+0 = 0, 0+1= 1, 1+0 = 1, 1+1=0 (1 onthouden) Vermenigvuldigen: 0*0 = 0*1 = 1*0 = 0, 1*1 = 1 vb: 10111 101 10111 10111 (2 plaatsen verschoven) 1110011
Mensentaal Mondelinge opdrachten zijn vaak onvolledig en dubbelzinnig “Schiet op!” “Help” “Bereken mijn salaris” “Simuleer een vogel” Een CPU kan hiermee niet overweg
Probleem ? CPU mensentaal machine-instructies
Oplossingen?! 1e niveau (generatie ) : Machinetaal 00000001 01100101 00000001 01100101 00000011 11001001 elementaire instructie geheugenadres 2e niveau (generatie): Assembleertalen HAALOP getal BERGOP resultaat ASSEMBLEERTAAL MACHINETAAL PROGRAMMA ASSEMBLER mnemonic symbolisch adres
Oplossingen ? De mens leert machine-instructies opnieuw leren voor nieuwe computer (computerafhankelijk) ingewikkeld voor grotere programma’s De computer leert mensentaal Kunstmatige Intelligentie in het algemeen complex meest wenselijk 1946 201?
Oplossing ! De mens leert opdrachten te geven in een taal die zowel mensen als computers kunnen begrijpen: (hogere) programmeertaal Opdrachten in deze taal worden door de computer omgezet naar machine-instructies voor CPU. 1946 2??? !
(hogere) programmeertaal voor de mens begrijpbaar: leesbaar inzichtelijk met hulp om foutloos te werken voor de computer begrijpbaar : eenduidig: strikte, formele regels goed in machine-code om te zetten voor meerdere CPU’s geschikt
Vertalen (noodzakelijk) Twee vormen van vertalen: COMPILEREN: hele programma vertalen, nog niet uitvoeren vergelijkbaar met vertalen boek INTERPRETEREN: per opdracht vertalen en meteen uitvoeren vergelijkbaar met vertolken
Geschiedenis Start Assembler: 1-op-1 met machine-instructie 1960 Fortran / Basic / Cobol: complexere opdrachten 1970 Pascal / C: gestructureerd 1980 SmallTalk / C++: objectgeörienteerd 1990 Java: gedistribueerd
Java geschiedenis: genealogie
Programmeertermen Edit - Het opstellen van de tekst in een programmeertaal (broncode of source). Compile - Het omzetten van deze tekst naar machine-instructies. Run - Het uitvoeren van de machine- instructies. Debug - Het herstellen van fouten in de programmeertekst.
Java Pascal Basic bron- code CPU Compiler en opslaan Interpreter machine- instructies Interpreter vertalen en direct uitvoeren Compiler en opslaan OS: uitvoeren “bytecode” JVM en uitvoeren Java Basic Pascal
Java Compilatie-proces bytecode in Java Classes Java Virtual Machine (interpreteren) broncode in de programmeertaal Java Java Compiler CPU Classes in Java Bibliotheek Java (progr), Appletviewer Browser, Server Classes op het Internet
Drie Soorten Fouten Syntax-fout: zondigen tegen de regels. door compiler achterhaald. Run-time fout: programma werkt niet zoals programmeur wil (“crash”). door debuggen of (alpha-) testen achterhaald. Ontwerpfout: programma werkt zoals de programmeur het wil, maar doet niet wat gebruiker wil. Wordt door (beta-)testen achterhaald.
Edit-Compile-Debug Loop start End Edit broncode compileer test syntaxfout? runtime fout? ja nee debug Ontwerpfouten ontdek je zo niet! nee
“Waterval model” Software engineering systeemeisen bepalen Edit-Compile- Debug Loop softwareeisen bepalen software ontwerp programmeren en deeltesten systeem testen “Waterval model” operationeel systeem
Java: Hello World Program HelloWorld.java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } c:\pract>javac HelloWorld.java c:\pract>java HelloWorld Hello World! c:\pract>
Algoritmen Een computer kent alleen simpele opdrachten (elementaire instructieset). Hoe laat je een computer complexe laten uitvoeren? Met behulp van algoritmen!
Wat is een algoritme? Een algoritme legt precies vast hoe een bepaalde taak moet worden uitgevoerd in termen van simpele opdrachten. Eisen: Een algoritme moet eenduidig zijn. Een algoritme moet uitvoerbaar zijn. Een algoritme moet eindigen. Het oudste voorbeeld: bepaal de grootste gemene deler van twee getallen.
Grootste Gemene Deler (Euclides, Alexandria, 300 v.Chr.) Om de GGD van a en b te bepalen, doe het volgende: 1) maak a het grootste getal en b het kleinste, 2) maak c de rest van a gedeeld door b, 3) als c nul is, dan is b het antwoord, 4) anders stop b in a, c in b, en ga naar stap 2.
Nassi-Shneidermann diagram Om een algoritme te ontwerpen, kun je het best gestructureerd te werk gaan. Het NS-diagram helpt je daarbij. Het NS diagram bestaat uit blokken. Ieder blok is 1 opdracht. De blokken kunnen worden samengevoegd. Nassi-Shneidermann diagram
NS: Sequentie Om aan te geven dat opdrachten achter elkaar moeten worden uitgevoerd, plaats je rechthoeken onder elkaar: Doe eerst dit Dan dit En tenslotte dit
NS: Iteratie Om herhaling van een aantal opdrachten aan te geven, zet je een haak om een groep blokken: Doe eerst dit Dan dit En tenslotte dit Zolang het nog moet Totdat het niet meer hoeft
NS: Selectie Je kunt aangeven dat een opdracht alleen onder bepaalde voorwaarden moet worden uitgevoerd: Doe dat Doe dit Voorwaarde voldaan? ja nee
NS: combinatie Omdat het samenvoegen van blokken ook weer blokken oplevert, kun je het voorgaande ook combineren: maak a grootste en b kleinste getal maak c de rest van a gedeeld door b is c nul ? ja nee stop b in a herhaal totdat c nul is het antwoord is b stop c in b bepaal GGD(a,b)
Opdrachten Verken het programma structorizer Teken in structorizer de NS voor GGD Teken een NS-diagram voor de bediening van een (eenvoudige) magnetron