INF2270 Oppgaver uke 6 (6.-11.2.2008) (Oppgave 2 og 4 er viktigst, men b?de 1 og 3 er ganske raske ? l?se om man kjenner sin C.) Oppgave 1 Skriv et program som ber om et tall; s? skal det skrive ut hvor mange dusin dette er, og hvor mange som blir til overs. (Et dusin er 12 stykker.) Gi et antall: 29 29 er 2 dusin og 5. Hint: Operatorene ?+?, ?-?, ?*? og ?/? gir som forventet sum, differanse, produkt og kvotient. Ved divisjon av heltall f?r man svaret _uten_ avrunding, s? 9 / 5 gir 1 Operatoren ?%? gir resten ved en divisjon, for eksempel 9 % 5 gir 4 Oppgave 2 Skriv en makro #define STREQ(s1,s2) som sjekker om de to tekstene er like. Tanken er at den kan brukes i if-tester: if (STREQ(s,"Abc")) ... Hint: Hvordan sammenligner man to tekster i C? Oppgave 3 P? forelesningen ble det p? ark 4 vist en MIN-makro med mange parenteser: #define MIN(x,y) ((x)<(y) ? (x) : (y)) Hvorfor er ikke definisjonen kun #define MIN(x,y) x int main(int argc, char *argv[]) { int ix; for (ix = 1; ix < argc; ix++) { printf("%s", argv[ix]); if (ix < argc-1) printf(" "); } printf("\n"); } Da vil f?lgende skje n?r vi bruker programmet `wc': % wc echo.c 12 30 186 echo.c Filen har alts? 12 linjer, 30 ord og 186 tegn. En linje er definert som ?tekst avsluttet med '\n'? mens ord er definert som ?sekvens av ikke-blanke tegn?. Hint Hvis man henter inn definisjonsfilen ctype.h ved ? skrive #include f?r man funksjonen ?isspace(c)? som kan brukes til ? teste om ?c? er et blankt tegn eller ikke. Blanke tegn omfatter vanlig mellomrom (' '), linjeskift ('\n'), tabulator ('\t') og andre. Skriv programmet ?wc? slik at det leser filen angitt som parameter og skriver ut hvor mange linjer, ord og tegn det er der. Oppgave 5 GNU-programmet `tac' (`cat? baklengs) leser standard-inn og skriver ut innholdet baklengs, dvs siste linje f?rst, s? nest siste linje, osv. Eksempel p? bruk: > tac F?rste linje Siste linje ?Kontroll-D? Siste linje F?rste linje (Man trykker p? ?Kontroll-D? (dvs ?Control?- og ?D?-tasten samtidig) for ? angi slutt p? filen n?r man leser fra tastaturet.) Skriv dette programmet. Anta at ingen linjer er p? mer enn 200 tegn. Hint: Bruk en liste til ? ta vare p? linjene. Hint: C-funksjonen `gets' leser inn en hele linje fra en fil. Sl? opp p? man-siden for ? se p? hvilke parametre den har.