Velkommen til IN 147 Program- og maskinvare Dagens tema: Presentasjon av kurset Litt om programmeringsspråket C Registrering av oppmøte Ark 1 av 22 Forelesning 22.1.2001
Foreleserne Sigbjørn Næss Digitaltekniker E-post: Kontor: NERA sigbjorn Kristin Skar Databehandler - arbeider i driftsgruppen E-post: kritisk Kontor: 3415 Telefon: (228) 524 61 Forelesning 22.1.2001 Ark 2 av 22
Kurset Hvadreierkursetsegom? Forelesningene Gruppeundervisningen IN 147 og IN 147A Obligatoriske oppgaver Informasjon Forelesning 22.1.2001 Ark 3 av 22
Hva handler IN 147 om? Kurset IN 147 Program- og maskinvare dreier seg om grensesnittet mellom programmer og datamaskinen: Idé Lag et program som... Java p=newelem(4); C *pi++=&a; Assemblerspråk addi $7,$0,3 Maskinkode 001010 1000 11100... Forelesning 22.1.2001 Ark 4 av 22
Mål for IN 147 Vi skal studere hvorledes man programmerer på et maskinnært nivå for å få tilgang til datamaskinens ressurser, og hvorledes maskinen er konstruert for tilby støtte for programmeringen. Motto for IN 147 Hva er det egentlig som skjer? Prosessor Som eksempel skal vi bruke prosessoren MIPS som blant annet brukes av Silicon Graphics. Dessuten finnes en simulator kalt xspim (prøv man xspim). Forelesning 22.1.2001 Ark 5 av 22
Forelesningene Forelesningene foregår i Auditorium 1, Helga Engs hus mandager 16.15 18 og onsdager 8.15 10.00. Kopi av lysarkene brukt ved mine forelesninger vil bli lagt ut ved terminalstuen i Niels Henrik Abels hus før forelesningene. En oversikt over kurset og alle forelesningene (med lysark) finnes på VVV-siden http://www.ifi.uio.no/~in147/. Dagens forelesning kan for eksempel skrives ut med print -multi4 ~in147/forelesninger/mandag-uke04.pdf Forelesning 22.1.2001 Ark 6 av 22
Gruppeundervisningen IN 147 har en litt egen form for gruppeundervisning. Gruppeundervisningen varer tre timer hver uke. Studentene skal skrive ut ukens oppgaver og gjøre seg kjent med dem før gruppeøvelsen, men ikke løse dem. Gruppene deles i smågrupper på 3 5 personer som skal prøve å løse ukens problemer. Problemene vil oftest være programmeringsoppgaver, men kan også være diskusjonspreget. Noen ganger innebærer oppgaven at studentene må lese utdelt stoff. Gruppelærerne skal være tilgjengelig for spørsmål, men skal ellers ikke delta i løsningen av gruppeoppgavene. Løsningsforslag til oppgavene legges ut på nettet hver fredag. Forelesning 22.1.2001 Ark 7 av 22
Spørretimen (fellesøvelsen) NB! Tidspunktet for spørretimen vil bli endret! I spørretimen kan studentene spørre foreleserne om alt mulig (faglig). Typiske spørsmål kan være: «Jeg skjønte ikke... i forelesningen; kan dere gjenta forklaringen?» «Hvorfor står det... i løsningsforslaget til oppgave...?» «I læreboken står det... ; kan dere forklare dette nærmere?» «Jegharhørtat...;stemmerdet?» Foreleserne vil ikke legge frem noe selv, men bare svare på spørsmål fra studentene. Still gjerne spørsmålene via e-post før spørretimen, slik at vi kan forberede klare svar. Denne formen for gruppeundervisning vil kreve mer initiativ fra studentenes side, men vi tror den vil gi dere betydelig mer utbytte. Forelesning 22.1.2001 Ark 8 av 22
Våre forventninger til dere For at dere skal få fullt utbytte av kurset, forventer vi som forelesere at dere går på forelesningene, deltar aktivt på gruppeøvelsene, tenker ut spørsmål til spørretimen, og programmerer en del selv. Forelesning 22.1.2001 Ark 9 av 22
IN 147 og IN 147A Kurset finnes i to varianter: IN 147 gir 5 vekttall og IN 147A gir 3 vekttall. Begge kursene går samlet fra starten, men IN 147A avsluttes seks uker før IN 147. Forskjeller i innhold Det innholdet man går glipp av ved å ta bare IN 147A, er operativsystemer og I/U, og parallellitet og parallelle datamaskiner. Valg av kurs Det er anledning til å utsette valget mellom IN 147 og IN 147A. Alle er nemlig påmeldt i begge kursene! Man må så melde seg av det kurset man ikke skal ta senest 15. mai (som er to uker før eksamen 29. mai). Forelesning 22.1.2001 Ark 10 av 22
Pensum Læreboken er Patterson & Hennessy: Computer organization & design; the hardware/ software interface, second edition; Morgan Kaufmann, 1998. Dessuten trenger man en oppslagsbok i C. Jeg anbefaler Kernighan & Ritchie: The C programming language, second edition (ANSI C); Prentice Hall, 1988. Nærmere spesifikasjon av pensum finnes på VVV-siden til kurset. Obligatoriske oppgaver Det vil bli tre obligatoriske oppgaver i IN 147 og to i IN 147A. Disse er ennå ikke endelig fastlagt. Forelesning 22.1.2001 Ark 11 av 22
Informasjon Informasjon om IN 147 vil bli spredt via følgende kanaler: forelesningene, gruppeøvelsene, VVV-siden til kurset (http://www.ifi.uio.no/~in147/), filområdet ~in147, og nyhetsgruppen ifi.in147. Siste gang Dette er siste gang IN 147(A) går. Høsten 2001 overtar INF-103. Forelesning 22.1.2001 Ark 12 av 22
Obligatorisk fremmøte Det er foreløbig påmeldt 295 studenter til IN 147(A) og vi venter mange etteranmeldinger. For å finne ut hvor mange som virkelig skal følge kurset, blir det registrert hvem som har møtt frem i dag. De andre mister plassen sin! Husk å registrere deg før du går i dag! Forelesning 22.1.2001 Ark 13 av 22
Programmeringsspråket C Bakgrunn Implementasjon av UNIX ved AT&Ts laboratorium i Palo Alto 1960 75. Navnet kommer fra BCPL B C. Opphavsmannen heter Dennis Ritchie. ANSI-standard i 1988. Formål: Kunne programmere oversiktlig; lettlest kode. Tilgang til maskinens ressurser. Lite maskinavhengige programmer. Kompakte programmer. Raske programmer. Forelesning 22.1.2001 Ark 14 av 22
Cs fortrinn Mulig å skrive raske programmer. Gode muligheter for strukturering av data og program. Svært kompakt kode: Simula C n := n+1; A[++n] *= 3.1; A[n] := A[n]*3.1; Mulig å skrive elegante, oversiktlige og portable programmer. Fast standard (ANSI C) fra høsten 1988. Finnes overalt. Forelesning 22.1.2001 Ark 15 av 22
Cs svake sider Ofte lite portable hvis man ikke tenker på det mens man koder; bedre etter ANSI-C. C tilbyr programmereren større frihet. Kompilatoren vil derfor oppdage færre feil. Java c = (char)((int)c + 1); C c = c+1; Muligheter for kryptisk kode: A[*(*x)++ = y] += 4; Å programmere i Java er som å kjøre en Volvo stasjonsvogn; den duver rolig av gårde på veien, men man kommer trygt frem. Å programmere i C er som å kjøre en Ferrari; den kan gå uhyggelig fort i svingene, men man havner av og til i grøften. ukjent opphavsmann En skrivefeil i C er ingen feil; det er bare et annet program. også ukjent opprinnelse Forelesning 22.1.2001 Ark 16 av 22
Hvorfor er det nyttig å lære C? Det er flere grunner: C er sannsynligvis det mest utbredte språket i dag. C brukes i et flertall av større programmeringsprosjekter. C og UNIX er uløselig knyttet sammen. Med C kan man skrive raskere kode enn de fleste andre språk. Med C kan man skrive svært kompakt kode. Programmering i C gir en følelse av hvorledes datamaskinen fungerer. Forelesning 22.1.2001 Ark 17 av 22
Et minimalt eksempel «Alle» lærebøker i programmering har med følgende lille eksempel: #include <stdio.h> int main(void) { printf("hallo, alle sammen!\n"); } (Det var Kernighan & Ritchies første bok som startet denne moten!) I Java ser programmet slik ut: class Hello { public static void main(string args[]) { System.out.println("Hallo, alle sammen!"); } } Kompilering Følgende kommando kan brukes for å kompilere programmet: cc hallo.c -o hallo Forelesning 22.1.2001 Ark 18 av 22
Forklaring Program Et program er en liste av deklarasjoner av variable og funksjoner: Java Klasse-deklarasjoner C Deklarasjoner Hovedprogrammet «Hovedprogrammet» er en funksjon ved navn main: Java public static void main(... ) { }. { C int main(void) }. Store og små bokstaver Det er forskjell på store og små bokstaver i C. MAIN, Main og main er tre helt ulike navn. Forelesning 22.1.2001 Ark 19 av 22
Funksjoner En C-funksjon ligner veldig på en metode i Java. Den består alltid av fire deler: type på returverdien. Hvis ingen returverdi, skrives void. navn på funksjonen. parameterliste med typeangivelse av hver parameter. Til forskjell fra Java: hvis det ikke er noen parametre, skrives void. kroppen som er selve funksjonen. Den er omsluttet av { og }. Returverdien angis med en return-setning. Forelesning 22.1.2001 Ark 20 av 22
Tekstkonstanter Tekstkonstanter skrives med " foran og bak. Java "En tekst" C "En tekst" I C kan vi legge inn spesialtegn i teksten; det vanligste er \n som angir linjeskift. Java "Hei!\n" C "Hei!\n" Forelesning 22.1.2001 Ark 21 av 22
Utskrift Utskrift skjer via kall på funksjonen printf. Eventuelt linjeskift legges inn i teksten. Java C System.out.print("Hei, "); printf("hei, "); System.out.println("dere!"); printf("dere!\n"); Utskrift av tall Med %d i teksten kan man angi at det skal settes inn et tall. Dette tallet må komme senere i parameterlisten. Java C System.out.println(a + " og " + b); printf("%d og %d\n", a, b); Forelesning 22.1.2001 Ark 22 av 22