--*- coding: utf-8; -*-- INF2270 Oppgaver uke 4 (20.-24.1.2014) 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»?