INF1070 Oppgaver uke 4 (23.-27.1.2006) Om det ikke blir tid til alle oppgavene, er oppgave 1-3 viktigst. Oppgave 1 Skriv et C-program som leser 100 tall og skriver ut summen og det største tallet. Oppgave 2 Tilordningen 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å hvordand ette skjer, men interesserte kan lese `man 2 time´.) Ta utgangspunkt i «Hallo, alle sammen!»-programmet som ble vist på forelesningen 16.1. Modifisér 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. Oppgave 3 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 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 4 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 5 Gitt følgende program der funksjonen `strcatc' utvider teksten `s' med tegnet `c': #include #include void strcatc (char s[], char c) { ... } char teststr[20]; void test (char c) { printf("Før: \"%s\".", teststr); strcatc(teststr, c); printf("\tEtter innsetting av '%c': \"%s\".\n", c, teststr); } int main (void) { strcpy(teststr, ""); /* Initiering er nødvendig! */ test('a'); test('b'); test('c'); test('.'); test('.'); test('å'); return 0; } Programmet sjekker om funksjonen virker ved å teste den på ulike data. Når programmet kjøres, skal det skrive: Før: "". Etter innsetting av 'a': "a". Før: "a". Etter innsetting av 'b': "ab". Før: "ab". Etter innsetting av 'c': "abc". Før: "abc". Etter innsetting av '.': "abc.". Før: "abc.". Etter innsetting av '.': "abc..". Før: "abc..". Etter innsetting av 'å': "abc..å". Skriv funksjonen `strcatc'. 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 `strcmpx' i C; den skal oppfører seg likt `strcmp'. Her er et testprogram: #include int strcmpx (unsigned char s1[], unsigned char s2[]) { : } void test (unsigned char s1[], unsigned char s2[]) { printf("strcmpx(\"%s\", \"%s\") gir %d\n", s1, s2, strcmpx(s1,s2)); } int main (void) { test("Abc", "Ab"); test("Abc", "Abc"); test("Abc", "Abcd"); return 0; } 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»?