--*- coding: utf-8; -*-- INF2270 Oppgaver uke 4 (21.-25.1.2013) Om det ikke blir tid til alle oppgavene, er oppgave 1-4 viktigst. Alle oppgavene egner seg til ? l?ses ved en datamaskin. Oppgave 1 En uh?ytidelig selvtest i programmering P? filen /hom/inf2270/programmer/100.tall er det 100 heltall mellom 0 og 1000. Skriv et program som leser disse 100 tallene og skriver ut summen og det st?rste tallet; bruk et vilk?rlig programmeringsspr?k du liker. Ta tiden du bruker p? ? taste inn programmet og f? det til ? virke, fra det f?rste tastetrykket i innskrivingen til svaret er riktig (nemlig ?24133 541?). Oppgave 2 L?s oppgave 1 i C. Oppgave 3 Tilordningen i C t = (time(NULL)/3600+1)%24; vil sette t til klokkeslettet, alts? hvilken time det er p? dagen akkurat n?r programmet kj?rer (0-23). (Det er ikke n?dvendig ? forst? hvordan dette skjer, men interesserte kan lese 'man 2 time'.) Ta utgangspunkt i ?Hallo, alle sammen!?-programmet som ble vist p? forelesningen 14.1. Modifiser dette slik at det skriver ?God morgen, alle sammen!? klokken 6-9 ?God dag, alle sammen!? klokken 10-17 ?God kveld, alle sammen!? klokken 18-21 ?God natt, alle sammen!? ellers. Hint For ? kunne bruke systemfunksjonen 'time' m? du ha med #include i begynnelsen av programmet ditt. Oppgave 4 Skriv C-funksjonen int hexval (unsigned char c) som konverterer et hex-tegn ('0'-'9', 'a'-'f' eller 'A'-'F') til sin verdi 0-15. Vi kan anta at det alltid er et lovlig hex-tegn i c n?r funksjonen kalles. Her er et kort testprogram du kan bruke til ? sjekke om funksjonen virker: #include int hexval (unsigned char c) { ... } /* Ogs? vektorer kan initialiseres! */ unsigned char ca[5] = { '0', '4', 'A', 'b', 'f' }; int main (void) { int i; for (i = 0; i < 5; ++i) printf("hexval('%c') gir %d\n", ca[i], hexval(ca[i])); return 0; } Oppgave 5 Skriv C-funksjonen int isspacex (unsigned char c) som oppf?rer seg som standardfunksjonen 'isspace', dvs returnerer ?sann? (dvs en verdi som ikke er 0) om c er et mellomromstegn, dvs ' ' (blank, ASCII 32), LF (linjeskilletegn, ASCII 10) eller TAB (tabulatortegn, ASCII 9); hvis ikke skal den returnere 0. Skriv ogs? et testprogram. Oppgave 6 Standardfunksjonen int strcmp (unsigned char s1[], unsigned char s2[]) sammenligner to tekster og returnerer en verdi som er <0 om s1 kommer f?r s2 =0 om s1 og s2 er like >0 om s1 kommer etter s2 Skriv 'strcmpu' i C; den skal oppf?rer seg likt 'strcmp'. Her er et testprogram: #include int strcmpu (unsigned char s1[], unsigned char s2[]) { : } void test (unsigned char s1[], unsigned char s2[]) { printf("strcmpu(\"%s\", \"%s\"): %d\n", s1, s2, strcmpu(s1,s2)); } int main (void) { test("Abc", "Abcd"); test("Abc", "Abc"); test("Abcd", "Abc"); test("Ab?", "Abcd"); } Oppgave 7 (Ukens n?tt for spesielt interesserte) Spiller det noen rolle om parametrene i forrige oppgave er deklarert som ?char?, ?signed char? eller ?unsigned char??