INF1070 Oppgaver uke 3 (17.-21.1.2005) 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+2)%24; vil sette t til klokkeslettet, alts? hvilken time det er p? dagen (0-23). (Senere i kurset f?r vi forklaring p? hvordan dette virker.) Ta utgangspunkt i ?Hallo, alle sammen!?-programmet som ble vist p? forelesningen 10.7. 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'. Hint Notasjonen ?char s[]? angir at `s' er en char-vektor. N?r en vektor overf?res som parameter, trenger vi ikke angi antall elementer, men vi m? ha med hakeparentesene slik at C-kompilatoren forst?r at det er en vektor. 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) Spiller det noen rolle om parametrene er deklarert som ?char?, ?signed char? eller ?unsigned char??