(of wouter.vanooijen@hu.nl) Mail: wouter@voti.nl (of wouter.vanooijen@hu.nl) Sheets en verdere info: www.voti.nl/hvu/D3ESOT1 Onderwerp: vervolg C Literatuur: C handboek Kernighan & Ritchie Academic Service ISBN 90 62 334 881 Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
Wat er van u verwacht wordt U bent (natuurlijk) aanwezig Neem de aangeven stof (boek, sheets) goed door U krijgt iedere week opgave(n); de opgave(n) van week N worden in principe op zijn laatst in week N+1 beoordeeld U maak de opgave(n) zelf U maakt de opgaven nauwkeurig, volgens de opgave Afsluitend tentamen, cijfer geldt alleen als alle opgaven voldoende zijn Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
Materiaal (?) Boek: C handboek, Kernighan & Ritchie USB memory stick (floppy?) Handouts DevC++ thuis installeren: http://www.bloodshed.net/devcpp.html Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
Onderwerpen voor vandaag GUI command line redirection DevCpp Characters Opgave: ”+13” Command line parameters Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
GUI programa’s interactief, vaak WIMP GUI doe veel met 1 tool handig voor de ‘eindgebruiker’ minder handig voor de ‘programmeur’: vaak geen command line IE / Netscape (print ...) Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
command-line tools (unix style) doe 1 ding, doe dat goed werk als filter (1 stap in een lopende band) niet interactief handig voor de ‘programmeur’ als onderdeel van een geheel minder handig voor de ‘eindgebruiker’ words : splits een text in regels van 1 woord lines : give line count sort : sorteer unique : remove duplicates from a sorted list grep x : filter (verwijder) alles behalve x Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
Command line opstarten Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
‘command box’ / ‘dos prompt’ ”C:\ ………… T03202>” is de prompt ”C:\ ………… T03202” is de huidige directory Commando’s zijn bv: X: cd directory exit Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
redirection work> kopieer lezen van toetsenbord schrijven naar beeldscherm Einde invoer geeft je aan met <CTRL-Z> <RETURN> work> kopieer <a.txt lezen uit de file a.txt en schrijven naar beeldscherm work> kopieer > b.txt lezen van toetsenbord en schrijven naar de file b.txt Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
redirection work> kopieer <a.txt >b.txt lezen uit de file a.txt en schrijven naar de file b.txt work> kopieer < a.txt | sorteer >b.txt txtkopieer < a.txt > temp sorteer < temp > b.txt lezen, via tussenstap wegschrijven Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
gebruik van Bloodshed DevC++ file > new > project: select ’console application’ give name select ’C project’ select ’make default language’ Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
gebruik van Bloodshed DevC++ Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
gebruik van DevC++ Als Dev-C++ een programma runt wacht het niet aan het einde van het programma Als je je programma wilt testen vanuit DevC++ voeg dan voor de ’return 0’ toe: system( ”pause” ); Als je het programma vanaf de command line runt (en dat is hier uiteindelijk de bedoeling) is dit juiste weer niet de goed! Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
characters Characters (tekens) worden opgeslagen volgens de ASCII code ASCII is 7 bits, hoogste bit is standaard 0 Constanten: tussen enkele quotes: ’a’ Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
ASCII tabel Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
characters Let op: ’0’ is iets heel anders dan 0 char x; x = 0; Welke integer waarde staat er nu in x? x = ’0’; Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
Speciale characters ’\n’ Dit is het teken dat zorgt dat het schrijven verder gaat aan het begin van de volgende regel (er zijn er nog veel meer) Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
characters Datatypes in C: signed char, unsigned char, char char : is een van beiden, de compiler mag kiezen Welke range kan je veilig gebruiken als je een char gebruikt? Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
characters Chars zijn (kleine) integers, je kan er mee rekenen char x; x = ’a’; x = x + 2; Welk bitpatroon staat er nu in x? Welk ASCII character stelt dat bitpatroon voor? Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
Character input / output : stdio.h #include <stdio.h> int c; putchar( c ); c = getchar(); let op: getchar() geeft bij einde invoer EOF terug EOF is een waarde die buiten de char ranges valt geeft dus een int terug, geen char Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
Voorbeeld : copy input to outut #include <stdio.h> int main( int argc, char *argv[] ){ int x; x = getchar(); while( x != EOF ){ putchar( x ); } return 0; Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
Opdracht 1 ”+13” Maak een programma dat zijn invoer weer wegschrijft naar de uitvoer, maar met iedere kleine letter vervangen door de letter 13 plaatsen verderop in het alfabet. gebruikt wrap-around, dus ’z’ + 1 wordt ’a’ een letter die niet een kleine letter is niet veranderen, gewoon onveranderd wegschrijven Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
test Hoe test je ”+13”? Je hebt een invoertekst nodig, er is een file die je net hebt zitten maken. Als je die als invoer aanbiedt moet er leuke rotzooi uitkomen. +13 en dan nog een keer 13 geeft …hoe doe je dat met behulp van redirection? En dan (als je een automaat kan vinden) Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
Layout neem een conventie naar keuze, maar wees consequent! if( b > a ){ a = b; } if( b > a ) { Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
array Een array is een reeks (lijst?) dingen heeft een vaste omvang (het aantal dingen is vast) Alle dingen zijn van het zelfde type (bv alleemaal chars) Een array heeft maar 1 index (dimensie): char woord[ 32 ]; Index loopt vanaf 0: woord[ 0 ] = ’a’; woord[ 31 ] = ’a’; Buiten je grenzen schrijven: woord[ -1 ] = ’a’; woord[ 32 ] = ’a’; Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
array Je kan een array van arrays maken: char regel[ 100 ][ 32 ]; regel[ 0 ][ 0 ] = ’a’; regel[ 99 ][ 31 ] = ’a’; Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
string Een array van characters wordt een string genoemd. Een string constante heeft dubbele quotes: ”hello world” De lengte van een string variable kan van de initiele waarde worden afgeleid: char regel[] = ”hello world”; Standaard wordt een string constante door de compiler afgesloten met een ’\0’ character Hoeveel bytes neemt de string ”Hello world” in beslag? Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
String output printf( format, .... ) De format string bepaald of en wat voor parameters er nog na moeten komen ‘gewone’ tekens in format worden gewoon geprint printf( ”Hello\nworld!” ); Wat print deze regel (precies)? Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
String output %d in de format vereist een integer parameter: int x; printf( ”%d kleine negertjes”, x ); %s in de format vereist een string parameter: printf( ”%s world”, ”Hello” ); printf( ”de regel is: [%s]”, regel ); Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
Command line parameters int main( int argc, char **argv ){ … } argc = aantal parameters argv = array van parameters, iedere parameter is een string = een array van characters argv[ 1 ] = eerste parameter argv[ 1 ][ 0 ] = eerste letter van eerste parameter Wat is hier onlogisch? Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
Opdracht 2 ”parameters” Maak een programma dat zijn parameters afdrukt, precies in dit formaat: Program name : Project1.exe Number of parameters : 2 Parameter 1 : ’hello’ Parameter 2 : ’world’ Print zoveel ‘parameter N’ regels als er parameters zijn. Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
Werk voor volgende week Neem de sheets nog eens door Formuleer vragen over wat je niet begrijpt Maak (voor zover nog niet klaar) de opdrachten af Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology