1. Introduksjon. Pekere og referanser.

Størrelse: px
Begynne med side:

Download "1. Introduksjon. Pekere og referanser."

Transkript

1 Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag 1. Introduksjon. Pekere og referanser. Mildrid Ljosland og Else Lervik Lærestoffet er utviklet for faget LV195D Objektorientert programmering i C++ 1. Introduksjon. Pekere og referanser. Resymé: Leksjonen introduserer studenter med ulik bakgrunn til faget. Deretter starter vi ganske tungt med pekere og referanser. Dette er både vanskelig og grunnleggende, og det anbefales at du bruker god tid på dette emnet. Til slutt tar vi med litt om bruk av tekstfiler og spesielt det tilfellet der vi har << og getline() om hverandre. Innhold 1.1. INTRODUKSJON TIL KURSET NY C++ STANDARD Nytt klassebibliotek Ny datatype: bool Nytt reservert ord: namespace Nye header-filer Nytt om for-setningen Nytt om main() Et moderne C++-program HVA GJØR VI DENNE UKA? Til studenter med bakgrunn i C (og ikke C++) Til studenter med bakgrunn i C Til studenter med bakgrunn i Java Å LAGE OG BRUKE EN PEKER Oppgaver (løsninger bakerst i leksjonen) TABELL SOM PEKER CONST-PEKERE ARITMETIKK PÅ, OG SAMMENLIKNING AV PEKERE Å addere et heltall til en peker Å subtrahere to pekere Sammenlikning PEKERE MÅ BEHANDLES MED FORSIKTIGHET! Oppgaver, forts REFERANSER Oppgaver, forts ARGUMENTOVERFØRING Verdioverføring Referanseoverføring LØSNINGER TIL OPPGAVENE FORAN ENKEL FILBEHANDLING Å BRUKE << OG GETLINE() OM HVERANDRE Referanser til lærebøkene. Hovedtemaet pekere og referanser er dekker på følgende måte:

2 1. Introduksjon. Pekere og referanser. side 2 av 24 H. M. Deitel & P. J. Deitel: C++ How to Program, 7.Ed: Kap Else Lervik og Mildrid Ljosland: Programmering i C++, Stiftelsen TISIP og Gyldendal, 2003: Kap inneholder omtrent det samme som leksjonen. (Kapittel i leksjonen er en omarbeidet utgave av kapittel i boka: Else Lervik og Mildrid Ljosland: Grunnleggende programmering i C++. Gyldendal 1993) 1.1. Introduksjon til kurset Velkommen til kurs i Objektorientert programmering basert på C++! I løpet av semesteret skal vi arbeide oss gjennom størstedelen av den standardiserte delen av C++. Samtidig skal vi bli kjent med grunnleggende objektorientert tankegang, hvordan dette uttrykkes i modelleringspråket UML og hvordan vi programmerer det i C++. Dette er ikke en snau målsetting, og det krever både modning og arbeidsinnsats. Det tar tid å lære seg å tenke objektorientert (som et svangerskap, minst ni måneder, sier mange!), og det tar masse tid å lære seg å programmere i C++. Dere har selvfølgelig et problem når dere sitter hjemme i deres egen stue og skal finne kompileringsfeil og andre feil i programmet. Det har lett for å gå i stå, og man har ingen å spørre der og da. Det vi tilbyr er diskusjonsforum på Internett ( news ). Jeg håper at dere vil bruke dette forumet jevnlig. Dere er dessuten velkommen til å sende e-post til meg og eventuell veileder (se opplysninger om veileder på forsiden av faget). Sitt iallfall ikke å slit med den samme feilen i timesvis, legg akkurat det problemet til side (ved for eksempel å kommentere det bort) og prøv heller å løse en annen del av oppgaven, dersom mulig. Det beste er selvfølgelig om dere klarer å finne så mange feil som mulig selv. Kompileringsfeil er en side av saken. De kan av og til være forferdelig vriene å forstå. Her er det vanskelig å gi generelle råd, annet enn å prøve (enda en gang!) å forstå hva feilmeldingen sier. Men ettersom det ofte krever svært gode kunnskaper i C++ (som dere da per definisjon ikke har), er det ikke alltid enkelt. Kjørefeil finner dere enklest ved å bruke debugger. Dere kan selvfølgelig legge inn skrivesetninger mange steder i programmet, men det erstatter sjelden en god debugger. Det er vanskelig å gi noen oppskrift på bruk av debugger, da det varierer fra verktøy til verktøy. Vedlegg H og I (på nettet) i Deitel&Deitel viser bruk av debuggerne i henholdsvis Visual Studio og GNU C++. Leksjonene inneholder flere mindre oppgaver med løsning som dere bør gjøre for å lære stoffet. Det vil ofte være helt nødvendig å ha gjort disse oppgavene for å klare innleveringsoppgavene, som naturlig nok er litt større. Dere får 12 innleveringsoppgaver, og minst åtte av dem må være godkjent for å få gå opp til eksamen. Selvfølgelig bør alle 12 øvingsoppgavene gjøres, nye temaer behandles jo hver eneste uke. Som vanlig er jeg fleksibel når det gjelder innleveringsfristene, men dette er ikke et kurs der alle øvingsoppgavene kan gjøres i løpet av en uke! 1.2. Ny C++ standard Vel, ny og ny standarden kom i 1998, og de fleste kompilatorene støtter den etter hvert. Mange av dere har kanskje lært grunnleggende C++ ved å bruke eldre bøker, og da er det et par ting dere bør være oppmerksomme på.

3 1. Introduksjon. Pekere og referanser. side 3 av Nytt klassebibliotek Den mest betydelige forskjellen er at C++ nå kommer med et standard klassebibliotek, blant annet er datatypen string et meget velkomment tilskudd til språket. Den gjør strenghåndteringen betydelig enklere. Å bruke string krever en viss forståelse for objektorientert tankegang. Vi kommer derfor tilbake til denne datatypen når vi begynner med objektorientering neste uke. Ellers er Standard Template Library (STL) en del av dette biblioteket. Deler av STL behandles i leksjon 10 og Ny datatype: bool C++ har nå fått en egen primitiv datatype for logiske verdier. Datatypen heter bool og aktuelle verdier er true og false. Denne datatypen tar vi i bruk så snart den trengs. Tidligere har man ofte laget sin egen logiske type ved å bruke for eksempel enum. Se side 152 i Deitel & Deitel, side 49 i Lervik og Ljosland Nytt reservert ord: namespace Det nye reserverte ordet namespace (navnerom) gjør håndtering av navnekonflikter ved utvikling av større systemer mye ryddigere. Nå kommer imidlertid ikke vi til å lage så mange navnerom, men vi trenger å bruke allerede definerte navnerom nå helt fra begynnelsen av. Og aller mest vil vi bruke navnerommet som heter std, som omfatter alle standardbibliotekene. Det oppnår vi ved å sette følgende direktiv i begynnelsen av programmene våre: using namespace std; Generelt bør man imidlertid kvalifisere navnene der de brukes, eventuelt spesifisere eksakt hvilke navn i et navnrom man bruker. Det vil si, slik: std::cout << Velkommen til C++!\n ; kvalifiserer navnet der det brukes eller slik: using std::cout; spesifiserer eksakt hvilke navn som using std::endl; skal brukes i programmet I eksemplene og løsningsforslagene i dette kurset nøyer vi oss imidlertid med setningen using namespace std; i begynnelsen av programmet. Detaljer angående namespace, se kapittel 24.4 i Deitel & Deitel (på nettet, fra side XLV og utover), eventuelt kap i Lervik og Ljosland Nye header-filer Foran namespace-direktivet plasserer vi de include-kommandoene vi trenger. Du er kanskje vant med at header-filene heter for eksempel string.h og stdlib.h. I henhold til den nye standarden er.h fjernet. Filnavnene som hører til standard C-biblioteket har fått en c foran seg, eksempel: cstring, cctype, sctdlib, osv.

4 1. Introduksjon. Pekere og referanser. side 4 av Nytt om for-setningen Se eksempel side 202 i Deitel & Deitel, 416 i Lervik og Ljosland. Dersom du, slik som her, definerer løkketelleren inne i for-setningen, er det for-setningen som beskriver rekkevidden av denne variabelen. Dette er nytt i 1998-standarden av C++. Tidligere var rekkevidden blokken rundt for-setningen. Dette var fortsatt tilfelle i for eksempel versjon 6 av Microsoft Visual Studio C++. Nå har jeg ikke sjekket versjonene innimellom, men i Microsoft Visual Studio 2005 er iallfall dette rettet opp Nytt om main() Første linje i hovedprogrammet skal ikke lenger være void main(void), men int main(). Dette fører til at main() også bør ha retur-verdi, vanligvis Et moderne C++-program ModerneCppProgram.cpp #include <iostream> C++-bibliotek, filendelsen h er tatt bort #include <cstring> C-bibliotek, filendelsen er borte, det er... #include <cctype>... kommet en c først i navnet using namespace std; bruker standard navnerom int main() { ikke void her! char tekst[20]; her vil vi etter hvert bruke string cout << "Skriv et ord: "; cin >> tekst; for (int i = 0; i < strlen(tekst); i++) { strlen fins i <cstring> tekst[i] = toupper(tekst[i]); toupper() og tolower() fins i <ctype> cout << "Bare store bokstaver: " << tekst << endl; for (int j = 0; j < strlen(tekst); j++) { tekst[j] = tolower(tekst[j]); cout << "Bare små bokstaver: " << tekst << endl; return 0; nødvendig pga at main() er av typen int Men, så fungerer ikke kompilatoren helt som den skal likevel. Dersom jeg prøver å bruke løkketelleren i i begge løkkene får jeg feilmelding. Så akkurat det har ikke Visual C fått med seg Dette unngås ved å bruke ulike navn på løkketellerne. Kanskje din kompilator er bedre?

5 1. Introduksjon. Pekere og referanser. side 5 av Hva gjør vi denne uka? Ettersom bakgrunnen deres er forskjellig vil dere nok oppleve denne første leksjonen noe ulikt. Temaet er pekere og referanser 1. De store tankene om objekter og sånt venter vi derfor med til neste uke. Men les gjerne kapittel 1.19 (side 60-63) i Deitel & Deitel allerede nå! Til studenter med bakgrunn i C (og ikke C++) Pekere er velkjent for de av dere som er rene C-programmerere, og som tar dette kurset for å lære objektorientering. Referanser er imidlertid nytt, og det er sentralt i forbindelse med funksjoner i C++. Dere trenger å lære dere litt om C++ input/output. Det er egentlig veldig enkelt, eller iallfall er det enkelt det lille vi trenger vi nå. Studer eksemplet foran (kompiler og kjør det!) Du trenger ikke å angi formateringsstrenger slik du må med printf() og scanf(). En standard formatering blir brukt. En kort innføring finner du på Du kan også lese side i Lervik og Ljosland. Bruk ikke C++-biblioteker for innlesing/utskrift sammen med C-bibliotekene for det samme. I C brukes ofte DEFINE for å lage konstanter. I C++ bruker vi const som er en modifikator som brukes i forbindelse med en variabeldeklarasjon, eksempel: const maksantall = 20; Variabelen maksantall kan ikke endre verdi. Du er vant med å definere variabler i begynnelsen av en funksjon. I C++ definerer vi en variabel i nærheten av (men foran) det stedet der den brukes første gang. Dette er ikke helt gjennomført i Deitel & Deitel-boka, men det er en god ting ettersom vi da ofte kan initiere variabelen i samme setning som vi definerer den. Eksempel: #include <iostream> using namespace std; int main() { cout << "Skriv tallene som skal summeres. " << endl; cout << "Avslutt med 0 eller negativt tall" << endl; int tall; int sum = 0; cin >> tall; while (tall > 0) { sum = sum + tall; cin >> tall; cout << "Summen er " << sum; return 0; 1 til Java-programmere: En referanse i Java er det samme som en peker i C++. I Java har vi ikke noe som ligner på det som kalles for referanser i C++.

6 1. Introduksjon. Pekere og referanser. side 6 av 24 Funksjoner i C++ kan du lese om i Lervik og Ljosland kapittel 4. Deitel & Deitel gjennomgår ikke funksjoner uten i tilknytning til klasser. Men kort sagt, det du gjør i C kan du også gjøre i C++. Imidlertid bruker man sjelden adresseoverføring for å lage ut-argumenter. C++ har i stedet noe som heter referanseoverføring. Vi kommer tilbake til ulike typer argumentoverføring senere i denne leksjonen Til studenter med bakgrunn i C++ Dette kurset bygger på det som ble gjennomgått i faget Programmering i C++. Fagbeskrivelsen sier følgende om emnene i det faget: Datatyper, betingelser og løkker, uttrykk, funksjoner, funksjonsbibliotek, tabeller, tekststrenger, strukturer, datafiler, sortering, søking. Program som består av flere filer. Bruk av "header"-filer. Kompilering og lenking i integrerte programmeringsomgivelser og bruk av "debugger". Algoritmer, skrittvis forfining, testing og feilsøking. Kort sagt betyr dette at du har erfaring med strukturert programmering i C++. Du har ingen kjennskap til klasser og nesten ingen kjennskap til pekere. Denne uka bruker vi på temaet pekere. Dette er egentlig helt grunnleggende i C++ (og i C), og det vil være et emne vi kommer tilbake til flere ganger utover i kurset. Pekere oppleves av mange som svært vanskelig. Du må virkelig tenke, og blyant, viskelær og papir er gode hjelpemidler når du skal ha dette på plass. I tillegg må du lage små programmer som prøver ut at du tenker riktig Til studenter med bakgrunn i Java Du har aldri programmert verken C eller C++. Derimot har du god greie på objektorientering. Dette kurset er egentlig ikke laget for deg, men dersom du insisterer på å følge det og er motivert nok, så får du det nok til. Du vil nok spesielt oppleve problemer i begynnelsen. Du trenger rett og slett å gå gjennom de første kapitlene i bøkene (Deitel & Deitel, kap. 1-5, , og 8.10, Lervik og Ljosland, kap. 1-9) for å gjøre deg kjent med de grunnleggende forskjellene. Men fortvil ikke, mye er likt, iallfall når du kommer til klasser. Det som nok vil ta mest tid for deg, er forskjeller i grunnfilosofien bak de to språkene: C++ passer ikke så godt på deg som det Java gjør. Det vil si at du får færre feilmeldinger. Ting som Java-kompilator eller kjøresystem fanger opp, blir ikke fanget opp av C++. I stedet får du logiske feil som det kan være svært vanskelig å finne ut av. Merk deg spesielt følgende: - Lær at du ikke trenger å putte main() inn i en klasse! Se på de små programeksemplene foran i denne leksjonen. - Lær å bruke cin og cout til enkel innlesing og utskrift i konsollvinduet. - Husk at alle variabler må gis verdi i programmet. Dersom du ikke gjør det får de en tilfeldig verdi. Og da blir selvfølgelig resultatene feil! - Algoritmeabstraksjon, Lervik og Ljosland, f.eks. kap. 6.7, slå også opp i indeksen bakerst i boka. Her ser du prinsippet for gammeldags, strukturert programmering: Algoritmer på flere nivåer og skrittvis forfining. Uten å knytte algoritmene til objekter. Deitel & Deitel er blitt så moderne nå, at dette knapt er tatt med. Men tankegangen går i korthet ut på at du deler kompliserte algoritmer opp i mindre håndterbare deler og det er jo nettopp det du er vant med fra objektorientert programmering der en funksjon er liten, og den gjør kun én ting.

7 1. Introduksjon. Pekere og referanser. side 7 av 24 - En funksjon i C++ er det samme som en metode i Java. Du oppdager at funksjoner kan sende data ut gjennom parameterlisten. Og du lærer hva en referanse i C++ er. Det er ikke det samme som en referanse i Java. - Funksjoner i strukturert programmering er ikke knyttet til objekter. Slik ligner de på klassemetoder i Java. Alle data som du er vant til at er samlet i objektet, må i stedet sendes fram og tilbake via parameterlisten (og eventuelt returverdien). Eksempler på bruk av slike funksjoner finner du i kap. 4 i Lervik & Ljosland. - Tabeller i C++ er ikke objekter. De kjenner ikke til sin egen lengde. Du kan gjerne bruke ugyldig indeks, kjøresystemet regner ut den adressen du ber om og henter ut eller lagrer data der, uavhengig av om datacellen tilhører tabellen eller ikke. Dette kan selvfølgelig få uante konsekvenser. Tabellstørrelsen må være kjent under kompilering. Du lager ikke tabeller ved å bruke new. - Du må kunne litt om tekststrenger slik de var i C++ før klassen string kom. Deitel&Deitel, kap dekker temaet relativt grundig, Lervik og Ljosland nevner det såvidt i kap Dessverre er det mye du ikke kan gjøre med klassen string, og mange biblioteksfunksjoner krever at du har strengene på denne gammeldagse måten. - I Java kompilerer du til class-filer, og kjører en tolker som oversetter til maskinkode der og da. Et C++-program kompileres direkte til maskinkode. De kompilerte filene lenkes sammen til et kjørbart program. Dette er en viktig forskjell, les kap i Deitel & Deitel, kap.1.2 i Lervik og Ljosland. Til slutt: C++ er ikke plattformuavhengig. Eksempelvis kan tallområdet for heltall være forskjellige på ulike plattformer. (Slik er det ikke i Java.) Dette er en av grunnene til at Deitel&Deitel har Portability Tips, se f.eks. Tip 1.3 side 52 Du trenger å programmere litt før du begynner på leksjonen. Prøv f.eks å lage varianter av eksemplene i boka Å lage og bruke en peker En peker er en variabel som kan inneholde adressen til en annen variabel. En stjerne * i variabeldefinisjonen markerer at vi snakker om en peker. Eksempel: int tallet; int *pekeren; pekeren = &tallet; *pekeren = 6; Merk Når &-tegnet står på høyre side av = i en variabeldefinisjon eller i en tilordningssetning, betyr det at vi skal finne adressen til det som kommer bak, og la denne adressen være verdien til det som står på venstre side (eksempel: int *pekeren = &tallet;).

8 1. Introduksjon. Pekere og referanser. side 8 av 24 Variablene tallet og pekeren er vist på figur 1. Figur 1: To måter å representere en peker 100 tallet 6 tallet pekeren 100 pekeren A: Peker tegnet som datacelle med adresse B: Peker tegnet som datacelle med pil int *pekeren forteller at variabelen pekeren er en peker til en int, slik at den kan inneholde adressen til en int-variabel. Ved å skrive pekeren = &tallet gir vi pekeren en verdi som forteller hvor tallet er lagret. Hvis tallet er lagret på adresse 100, vil pekeren få verdien 100. *pekeren = 6 betyr at den adressen som pekeren viser til (adresse 100, dvs. tallet), skal få verdien 6. * kalles dereferanseoperatoren, og leses gjerne det som variabelen peker til. I vårt eksempel: Det som pekeren peker til er en int, og den skal få verdien 6. & er adresseoperatoren og leses "adressen til". I vårt eksempel: pekeren får som verdi adressen til tallet. & og * er motsatte operatorer, de opphever hverandre. Uttrykket *&pekeren betyr det samme som &*pekeren og det samme som pekeren. Ved å bruke en peker, kan vi bruke en variabel uten å angi navnet på den. *pekeren = 6 forandrer verdien på variabelen tallet, men gjør ingenting med pekeren. Dette kalles indirekte adressering, og utnyttes i en del situasjoner Oppgaver (løsninger bakerst i leksjonen) Oppgave 1 Følgende er gitt: int i = 3; int j = 5; int *p = &i; int *q = &j; Tegn opp datacellene med innhold etter at disse definisjonene er utført. Lag et lite program som skriver ut både adressen til, og innholdet av disse fire variablene. Ved utskrift av adressen (eksempelvis, adressen til variabelen j: cout << &j) får du skrevet ut adressen i 16-tallsystemet. Dersom du vil ha den ut i 10-tallsystemet, må du caste: (cout << (int) &j). Stemmer utskriften med tegningen din? Oppgave 2 Vi går ut fra at datacellene har innholdet fra oppgave 1. Hva blir skrevet ut når følgende programbit utføres?

9 1. Introduksjon. Pekere og referanser. side 9 av 24 *p = 7; *q += 4; *q = *p + 1; p = q; cout << *p << " " << *q << endl; Tegn gjerne opp datacellene etter hver enkelt setning Tabell som peker Fra tidligere er det kjent at navnet på en tabell er en adresse. int tabell[10]; forteller kompilatoren at den skal sette av plass til ti heltall, og at tabell brukes som betegnelse for tabellen. Merk Når vi skriver bare tabell, tolkes det som adressen til første element i tabellen. Vi kan la en peker peke til et element i tabellen: int *heltallspeker = &tabell[4]; eller vi kan la pekeren peke til (begynnelsen av) tabellen: int *heltallspeker= tabell; som er det samme som int *heltallspeker= &tabell[0]; Når heltallspeker peker til begynnelsen av tabell, kan heltallspeker og tabell brukes om hverandre. Vi kan skrive tabell[2] = 5; heltallspeker[3] = 8; det samme som tabell[3] = 8 *heltallspeker = 0; det samme som heltallspeker [0] = 0 og som tabell[0] = 0 *tabell = tabell[2]; det samme som tabell[0] = tabell[2] Bruk den skrivemåten du syns er mest naturlig ut fra sammenhengen const-pekere Du er vant med å bruke const for å navngi en konstant, eksempel: const maks = 100; Vi vil trenge å bruke const i forbindelsen med pekere. Det er med på å gjøre programmene våre sikrere. Eksempel: Du er kjent med strlen()-funksjonen for å finne lengden av en streng. Funksjonsprototypen ser slik ut: size_t strlen(const char *tekst);

10 1. Introduksjon. Pekere og referanser. side 10 av 24 Når vi angir en peker på denne måten, betyr det at det som pekeren peker til, er konstant. Vi sier at det er en konstantpeker. Kompilatoren vil da passe på at vi ikke prøver å forandre det. Skriver vi tekst[0] = 'A' inni funksjonen, vil vi få kompileringsfeil. Merk at pekeren ikke er konstant, det er bare det den peker til, som er det. Dermed er det lov å skrive tekst = &tekst[1]; Vi kan ikke la en ikke-konstantpeker peke til det samme som en konstant-peker, for da kunne vi likevel ha forandret på det som konstantpekeren peker til. Det er altså ikke lov å skrive char *pekeren = tekst når tekst er definert som en konstantpeker, mens const char *pekeren = tekst går bra. Den motsatte veien går også bra. Det kan aldri skje noe galt om vi sier at en ikke-konstant skal betraktes som en konstant, dvs. vi kan la en konstantpeker peke til en variabel. Derfor kan vi godt la en variabel være aktuelt argument når det formelle er en konstantpeker. char entekst[81]; cin >> entekst; cout << "Lengden på teksten er " << strlen(entekst); For å angi at pekeren er en konstant, skriver vi int *const pekeren = &tall; Leses: Konstanten pekeren er en peker til int. Som andre konstanter, kan en pekerkonstant bare initieres, ikke tilordnes verdi. pekeren = &tall2; er ulovlig. Men det den peker til, kan godt forandres: *pekeren = 5; gjør at tall får verdien 5. Vi kan også lage en peker som både selv er en konstant, og det den peker til er en konstant: const int *const pekeren = &tall; Konstanten pekeren er en peker til en konstant heltalls-datacelle Aritmetikk på, og sammenlikning av pekere Å utføre aritmetiske operasjoner på en adresse har bare begrenset interesse. Hva skulle f.eks. resultatet bety hvis vi multipliserer to adresser med hverandre? Følgende aritmetiske operasjoner er definert: Å addere et heltall til, eller subtrahere et heltall fra, en peker. Å subtrahere en peker fra en annen. Dessuten har vi følgende sammenlikningsoperasjoner: Å finne ut om to pekere er like eller ulike Å finne ut hvilken av to pekere som er størst eller minst Å addere et heltall til en peker Når vi adderer 1 til en peker, vil den peke til neste datacelle.

11 1. Introduksjon. Pekere og referanser. side 11 av 24 Eksempel: double tabell[5]; double *pekeren; pekeren = tabell; pekeren peker til tabell[0] *pekeren = 0.0; tabell[0] får verdien 0.0 *(pekeren + 1) = *pekeren; tabell[1] får samme verdi som tabell[0] pekeren++; pekeren peker til tabell[1] Merk Når vi adderer et heltall til en peker flytter vi oss så mange dataceller som tallet forteller. Addisjonen regnes i samme enhet som den datatypen pekeren peker til, uavhengig av hvor mange byte denne datatypen bruker. Uttrykket *(pekeren + N) betyr nøyaktig det samme som uttrykket pekeren[n] pekeren tabell[0] tabell[1] tabell[2] tabell[3] tabell[4] pekeren + 4 Figur 2: Pekeraddisjon Figur 2 viser at når pekeren peker til tabell[0], vil pekeren + 4 peke til variabelen fire plasser videre i primærlageret, dvs. tabell[4]. Følgende lille program viser hvordan pekeraddisjon virker: pekeraddisjon.cpp #include <iostream > using namespace std; int main() { const int m = 5; int heltall[m]; double flyttall[m]; cout << "heltallsadresser:\n"; Adressene skrives ut på heks.form hvis casting ikke benyttes. for (int i = 0; i < m; i++) cout << (int)(heltall + i) << endl; cout << "\nflyttallsadresser:\n"; for (i = 0; i < m; i++) cout << (int)(flyttall + i) << endl; return 0; Kjøring av programmet: heltallsadresser:

12 1. Introduksjon. Pekere og referanser. side 12 av Vi ser at adressene endrer seg med 4 for hver gang i øker med 1. En datacelle av typen int legger beslag på 4 byte flyttallsadresser: En datacelle av typen double legger beslag på 8 byte. Dermed øker adressen med 8 hver gang i øker med Pekeraddisjon kan utnyttes til å gå gjennom en hel tabell: const int lengde = 10; int tabell[lengde]; int *pekeren = tabell; for (int teller = 0; teller < lengde; teller++) { *pekeren = 0; pekeren++; Her starter vi med å la pekeren peke til element 0. Inni løkka får den variabelen som pekeren peker til, verdien 0, deretter blir pekeren sin verdi økt slik at den peker til neste element. Uttrykket *pekeren + 1 tolkes som (*pekeren) + 1 fordi + har lavere prioritet enn *. Ønsker vi verdien av det som pekeren + 1 peker til, må vi skrive *(pekeren + 1). En oversikt over prioritetene til operatorene finner du i vedlegg A i Deitel & Deitel (side 1042). I Lervik og Ljosland finner du oversikten i vedlegg 2, side Å subtrahere to pekere Vi kan finne antall elementer mellom to posisjoner, ved å ta differansen mellom adressene til dem. const char *tekst = "Et eksempel"; const char *start = tekst; while (*tekst!= '\0') tekst++; int lengde = tekst - start; cout << "Tekstlengden er lik " << lengde << endl; Eksemplet finner lengden til teksten Et eksempel. tekst og start er begge pekere. Differansen mellom dem forteller hvor langt det er mellom adressene de peker til. Som ved addisjon, regnes differansen i samme enhet som det pekerne peker til. Hvis tekst - start har verdien 2, er det to tegn mellom det som start peker til og det som tekst peker til. Utskriften fra eksemplet blir: Tekstlengden er lik Sammenlikning To pekere av samme type kan sammenliknes med hensyn på likhet og ulikhet: if (peker1 == peker2)... tester om peker1 og peker2 inneholder samme adresse, dvs. peker til den samme variabelen.

13 1. Introduksjon. Pekere og referanser. side 13 av 24 if (*peker1 == *peker2) tester om det de peker til, er likt. Alle pekere kan sammenliknes med 0. Vi kan også teste om en peker er større eller mindre enn en annen peker. Da vil vi finne ut hvordan det de peker til er plassert i forhold til hverandre i primærlageret. Vanligvis vil dette bare være aktuelt når vi ønsker å teste om et tabellelement er foran eller bak et annet. pekeren = tabell; slutt = &tabell[aktuelllengde]; adressen rett etter tabellslutt while (pekeren < slutt) {... pekeren++; Her lar vi pekeren slutt peke til slutten av tabellen. while-løkka går gjennom alle tabellelementene Pekere må behandles med forsiktighet! Når du tar i bruk pekere, vil du fort oppdage at det kan skje mye rart hvis du ikke passer nøye på. Advarsel Sørg alltid for at en peker peker til noe fornuftig før du bruker den! Som for enhver annen variabel, vil det alltid stå en eller annen verdi i pekeren når den opprettes. Siden denne verdien tolkes som en adresse, kan den lede hvor som helst i primærlageret. Det kan ha store konsekvenser å forandre på verdien i denne adressen. Du kan ha havnet i det området av primærlageret som styrer programutføringen. Da kan programmet gjøre merkelige ting "av seg selv", eller maskinen kan gå helt i stå. I heldigste fall kan du få en feilmelding. Det vil avhenge av hvilken kompilator du bruker. Eller du kan ha havnet i dataområdet for programmet ditt, slik at du forandrer verdi på en variabel uten å være klar over det. I en del tilfeller kan du være "heldig", slik at det ikke skjer noen synlig skade. Men da kan problemet dukke opp på et seinere stadium, f.eks. når du skal forandre litt på programmet, eller når du skal installere det hos oppdragsgiver... For å unngå å ødelegge noe på denne måten, er det en god regel å la alle pekere initieres til 0 hvis de ikke straks får en annen verdi. Adresse 0 brukes ikke til noe fornuftig, slik at du ikke kan ødelegge noe om du legger en verdi her. Men gjør du det, vil du kanskje få en feilmelding som lyder "Null pointer assignment" ved slutten av programutføringen. Og da er det helt sikkert en feil i programmet. 0 kan ikke betraktes som et vanlig tall i denne forbindelsen, andre tall enn 0 gir kompileringsfeil. Advarsel Ikke tro at du kan få en tabell ved å definere en peker!

14 1. Introduksjon. Pekere og referanser. side 14 av 24 En tabell krever mange lagerplasser. Kompilatoren må ha beskjed om hvor mange lagerplasser som skal brukes. Hvis du derimot bare definerer en peker, setter kompilatoren bare av plass til pekeren. Eksempel: Skriver du char *linje; strcpy(linje, "Dette er farlig!!"); vil det settes av plass til pekeren linje. Teksten vil bli lagret på den plassen linje peker til, som kan være hvor som helst siden linje ikke har fått noen verdi. Derfor kan den ødelegge andre ting, og selv bli ødelagt seinere i programmet. Skriver du derimot char *linje = "Dette går ganske bra!"; eller helst const char *linje = "Dette går helt bra!"; vet kompilatoren hvor mye plass den skal reservere, slik at tekststrengen blir lagret på et trygt sted, og linje satt til å peke til den. Men det blir reservert bare akkurat nok plass, så du kan få problemer hvis du forlenger teksten seinere i programmet, derfor er det lurt å la den være const Oppgaver, forts. Oppgave 3 Hva vil skje hvis du skriver char *linje = 0; strcpy(linje, "Dette er en tekst"); Oppgave 4 Finn ting som kan gå galt i følgende programbit. char tekst[5]; char *pekeren = tekst; char letetter = 'e'; cin >> tekst; while (*pekeren!= letetter) { *pekeren = letetter; pekeren++; 1.9. Referanser En referanse er et ekstra navn på en allerede eksisterende variabel. int tallet; int &ref = tallet; ref = 6; tallet++;

15 1. Introduksjon. Pekere og referanser. side 15 av 24 &ref betyr at ref er en referanse. int &ref kan leses "ref er en referanse til en int". Ved å skrive int &ref = tallet angir vi at ref skal være et annet navn på tallet. Da kan vi etterpå bruke både ref og tallet som betegnelse på den samme lagerplassen, slik at begge ender med å ha verdien 7 i eksemplet. tallet 7 ref Når &-tegnet står på venstre side av = i en erklæring, får vi en referanse (eksempel: int &ref = tallet;). En referanse kan ikke erklæres uten at vi samtidig forteller hvilken variabel den refererer til Oppgaver, forts. Oppgave 5 Finn alle syntaksfeil i følgende programbit: int a = 5; int &b; int *c; c = &b; *a = *b + *c; &b = 2; Oppgave 6 Figur 3: En referanse Vi har definert variabelen double tall a) Definer en peker som skal peke til tall. b) Definer en referanse som skal referere til tall. c) Vis tre måter å få tilordnet verdi til tall på Argumentoverføring Vi har to typer argumentoverføring i C++: - Verdioverføring: Funksjonen jobber med en kopi av det aktuelle argumentet. Denne metoden brukes ved overføring av enkle variabler, dersom disse variablene er innargumenter. Metoden brukes også ved overføring av tabeller uansett om disse er inn-, inn- /ut- eller ut-argumenter. Da kalles det ofte adresseoverføring. - Referanseoverføring: Funksjonen får en referanse til den aktuelle variabelen. Det vil si at funksjonen jobber med den samme variabelen som den kallende funksjonen, eventuelt under et annet navn. Denne metoden brukes for enkle variabler som er kombinerte inn-/utargumenter eller bare ut-argumenter. (Referanseoverføring eksisterer ikke i C. Der bruker man adresseoverføring også for enkle variabler dersom de skal være ut-argumenter.)

16 1. Introduksjon. Pekere og referanser. side 16 av 24 Vi skal se nærmere på argumentoverføring i lys av det nylig gjennomgåtte stoffet om pekere og referanser Verdioverføring Eksempel 1 const int makslengde = 10; int main() { int entabell[makslengde]; nullstill(makslengde, entabell);... void nullstill( int antall, Inn int *tabell) { Ut for (int teller = 0; teller < antall ; teller++) { tabell[teller] = 0; Inni funksjonen nullstill() er tabell erklært som en peker, men brukes som en tabell. I main() er entabell en adresse, og den brukes som aktuelt argument der funksjonen krever en peker. Bak kulissene skjer følgende ved kallet: int antall = makslengde; int *tabell = entabell; Det vil si at formelt argument settes lik aktuelt argument. I begge tilfellene har vi verdioverføring, det er verdiene til de aktuelle argumentene som sendes over. Vi ser at adresseoverføring er et spesialtilfelle av verdioverføring. De formelle argumentene vil fungere som lokale variabler inni funksjonen. Og her er tabell en peker. På grunn av at *(tabell + teller) er det samme som tabell[teller] kan vi inni funksjonen bruke []-notasjonen. Se figur 4. Siden tabell er erklært som en peker, vil det bare settes av plass til denne pekeren inni funksjonen. Tar vi sizeof(tabell) inni funksjonen, får vi beskjed om hvor mye plass en peker til int tar, i vår kompilator 4 byte. Hvis vi derimot tar sizeof(entabell) i main(), får vi vite hvor mye plass hele tabellen tar, i vårt eksempel 10 * 4 byte. Prøv det gjerne selv! Det at en tabell og en peker kan brukes om hverandre, kan vi utnytte til å "lure" funksjonen til å tro at tabellen starter et annet sted enn den i virkeligheten gjør. int *pekeren = &entabell[3]; nullstill(5, pekeren); gjør at entabell[3], entabell[4],...,entabell[7] blir nullstilt, mens de andre elementene blir stående urørt. Siden funksjonen får overført adressen til entabell[3], vil den tolke det som om tabellen starter der. tabell[0] vil derfor være entabell[3] og tabell[1] vil være entabell[4], osv. Vi trenger ikke å gå veien om pekeren. Vi kan også skrive nullstill(5, &entabell[3]);

17 1. Introduksjon. Pekere og referanser. side 17 av 24 I hovedprogrammet: makslengde 10 entabell?????????? I nullstill(): antall 10 tabell int antall nullstill() = makslengde main() ; int *tabell nullstill() = entabell main() ; Figur 4: Verdioverføring Eksempel 2 Her er et eksempel på hvordan vi kan kopiere en tekststreng: void kopier(const char *fra, char *til) { while (*fra!= '\0') { *til = *fra; fra++; til++; *til = '\0'; Vi utnytter at adresseoverføring er verdioverføring. Adressene fra og til er verdioverført. Inni funksjonen kan de godt endres uten at det har noen innvirkning på de aktuelle argumentene. Bare når vi endrer det som pekerne peker til, får det varig virkning. Her ser vi også at vi bruker const foran argumentet fra. Det betyr at funksjonen ikke kan forandre på det denne pekeren peker til. Det er i samsvar med at dette argumentet er et innargument. Den som bruker funksjonen kan føle seg trygg på at tekststrengen fra ikke blir forandret Referanseoverføring Vi bruker referanser ved ut-argumenter i funksjoner: byttverdi.cpp #include <iostream> using namespace std; void byttverdi(int &talla, int &tallb) { int hjelp= talla; talla = tallb; tallb = hjelp;

18 1. Introduksjon. Pekere og referanser. side 18 av 24 int main() { int tallen; int tallto; cout << "Skriv to tall: "; cin >> tallen >> tallto; if (tallen > tallto) { byttverdi(tallen, tallto); cout << "I rekkefølge: " << tallen << " " << tallto; cout << endl; return 0; Det som skjer idet funksjonen kalles, er at de formelle argumentene initieres til de aktuelle argumentene. Det fungerer som om vi hadde skrevet setningene int &talla = tallen; int &tallb = tallto; talla og tallb blir referanser, og det de refererer til, er tallen og tallto. Så når talla får verdien tallb inne i funksjonen, så vil også tallen få denne verdien, siden det er den samme variabelen. (I motsetning til ved verdioverføring, da ville vi fått setningen int talla = tallen, slik at det ble to forskjellige variabler.) Løsninger til oppgavene foran Oppgave 1 Svar: adresser: I 3 J 5 P 100 Q 102 På figuren er adressene til datacellene skrevet på (dette er selvfølgelig eksempler på adresser). Pekeren p er vist både med datainnhold (som er adressen til i) og med en pil til i. På samme måte for q. Programmet som viser dette ser slik ut: #include <iostream> using namespace std; int main() { int i = 3; int j = 5; int *p = &i; int *q = &j; cout << "Variablene: " << endl; cout << "i: " << i << endl; cout << "j: " << i << endl; cout << "p: " << (int) p << endl; cout << "q: " << (int) q << endl << endl; cout << "Adressene: " << endl;

19 1. Introduksjon. Pekere og referanser. side 19 av 24 cout << "&i: " << (int) &i << endl; cout << "&j: " << (int) &j << endl; cout << "&p: " << (int) &p << endl; cout << "&q: " << (int) &q << endl; return 0; /* Utskrift: Variablene: i: 3 j: 3 p: q: Adressene: &i: &j: &p: &q: */ Her ser vi at p og q inneholder adressene til i og j. Oppgave 2 Kodelinjene nummereres a), b), c), osv. a) Det P peker til skal settes lik 7. Det vil si at I får verdien 7. I 7 J 5 P Q b) Det Q peker til skal økes med 4. Det vil si at J økes med 4 til 9. I 7 J 9 P Q c) Det Q peker til skal settes lik det P peker til + 1. P peker til I, som har verdien 7. Q peker til J, og J får dermed verdien 7+1=8. I 7 J 8 P Q d) P skal settes lik Q. Men innholdet i P og Q er adresser. Det betyr altså at P skal settes til å peke på det samme som Q. I 7 J 8 P Q e) Tallet 8 blir skrevet ut to ganger.

20 1. Introduksjon. Pekere og referanser. side 20 av 24 Oppgave 3 Du vil få kjørefeil "Null pointer assignment". Du prøver å lagre teksten i adresse null. Oppgave 4... cin >> tekst; while (*pekeren!= letetter) {... Det innleste ordet kan være for langt Ikke sikkert det finnes i det hele tatt I begge tilfeller forsetter maskinen videre i primærlageret, slik at andre data blir ødelagt. Uforutsigbare ting kan skje hvis vi prøver å kjøre programmet. Oppgave 5 int a = 5; int &b = a; int *c; c = &b; a = b + *c; b = 2; Må initieres a og b er ikke pekere Adressen til en variabel kan ikke forandres Oppgave 6 a) double *peker = &tall; b) double &ref = tall; c) tall = 3; ref = 3; *peker = 3; Enkel filbehandling Repetisjon. Følgende program leser tall fra en datafil. Programmet leser fram til filslutt. Studer kommentarene tallfil.cpp Programmet leser tall fra fil og skriver summen av tallene til skjermen. #include <fstream> #include <iostream> #include <cstdlib> using namespace std; const char filnavn[] = "tallfil.dat"; int main() {

21 1. Introduksjon. Pekere og referanser. side 21 av 24 ifstream innfil; definerer filvariabel innfil.open(filnavn); åpner filen if (!innfil) { innfil kan brukes som et logisk uttrykk cout << "Feil ved åpning av innfil." << endl; exit(exit_failure); uthopp fra programmet int tall; int sum = 0; innfil >> tall; leser et "ord" fra filen while (!innfil.eof()) { leser fram til filslutt sum += tall; innfil >> tall; cout << "Summen er " << sum << endl; innfil.close(); return 0; Neste program viser utskrift til fil. Formateringen setw(4) betyr at tallet etterpå skrives ut høyrejustert over fire kolonner toerpot.cpp Programmet skriver toerpotenser til fil. Alle toerpotenser mindre enn halvparten av maksimalverdien til "long int" skrives ut. #include <climits> #include <cstdlib> #include <fstream> #include <iomanip> #include <iostream> using namespace std; const char filnavn[] = "toerpot.dat"; int main() { ofstream utfil; utfil.open(filnavn); if (!utfil) { cout << "Feil ved åpning av utfil." << endl; exit(exit_failure); long int toerpotens = 1L; int potens = 0; while (toerpotens <= LONG_MAX / 2L) { potens++; toerpotens *= 2L; utfil << "2 opphøyd i " << setw(4) << potens << " er " << toerpotens << endl; utfil.close(); return 0;

22 1. Introduksjon. Pekere og referanser. side 22 av 24 Vi ser at vi leser og skriver mot fil akkurat på samme måte som vi leser og skriver mot tastatur og skjerm Å bruke << og getline() om hverandre Repetisjon. Vi bruker << til å lese inn ett ord (fra tastatur eller fra datafile). Ordet tolkes som tall eller tekst i henhold til datatypen til variablene vi leser inn i. Vi bruker funksjonen getline() for å lese inn en linje. Eksempel: char Tekst[100]; cout << Skriv en tekst: ; cin.getline(tekst, 100); maks 100 tegn leses inn, inkl. \0 Inndataene vil gjerne være en blanding av tall og tekst. Tallene, ofte flere pr. linje, ønsker vi å lese inn med cin >>, mens vi vil lese inn teksten linjevis med cin.getline( ). >> hopper over ordskiller, inkludert linjeskift. Funksjonen getline( ) søker etter linjeskift og avslutter innlesingen når et slikt påtreffes. Linjeskiftet leses altså ikke inn. Øverst på figur 5 er det vist hva som skjer hvis programmet etter å ha lest inn et tall (Alder) med cin >>, leser inn en tekst (Stilling) med cin.getline( ). Pilene viser hvor langt i innbufferet programkontrollen er kommet etter at de to setningene er utført. Stilling blir tom. Uten bruk av ignore( ) : Etter cin >> Alder; 5 \n F r i s ø r \n Etter cin.getline(stilling, Linjelengde); Med ignore( ) : Etter cin >> Alder; Innbuffer Innbuffer 5 \n F r i s ø r \n Etter cin.ignore( Linjelengde, \n ); Etter cin.getline(stilling, Linjelengde);

23 1. Introduksjon. Pekere og referanser. side 23 av 24 Figur 5: Effekten av ignore()-funksjonen Funksjonen ignore( ) gjør det mulig å hoppe over tegn i inn-bufferet. Funksjonskallet cin.ignore(10, '#'); betyr at vi vil at programmet skal hoppe over tegn i inn-bufferet fram til og med tegnet '#', men ikke mer enn 10 tegn. Første argument angir maksimalt antall tegn som skal hoppes over. Andre argument er stopptegnet. Datatypen er int, men det går bra å sende inn char her. Prototypen til ignore( ) ligger på <iostream>. I eksemplet på figuren vil vi at programmet skal hoppe over tegn fram til og med linjeskift. Funksjonskallet cin.ignore(linjelengde, '\n'); medfører at programmet hopper over resten av linja (maksimalt Linjelengde tegn). Alt som står fram til og med linjeskift hoppes over (kanskje er det ingenting, kanskje noen blanke, kanskje tall og tekst). Programmet nedenfor viser eksemplet fra figuren satt inn i en sammenheng person.cpp Prøver getline() og ignore() #include <iostream> using namespace std; const int Linjelengde = 81; int main() { char Navn[Linjelengde]; char Adr[Linjelengde]; int Alder; char Stilling[Linjelengde]; cout << "Navn: "; cin.getline(navn, Linjelengde); cout << "Adresse: "; cin.getline(adr, Linjelengde); cout << "Alder: "; cin >> Alder; cin.ignore(linjelengde, '\n'); cout << "Stilling: "; cin.getline(stilling, Linjelengde); cout << Navn << endl << Adr << endl << Alder << endl << Stilling << endl; return 0; /* Kjøring av programmet: Uten ignore() Navn: Kari Ås Adresse: Storgt 17, 7000 Trondheim

24 1. Introduksjon. Pekere og referanser. side 24 av 24 Alder: 26 Stilling: Kari Ås Storgt 17, 7000 Trondheim 26 Med ignore() Navn: Kari Ås Adresse: Storgt 17, 7000 Trondheim Alder: 25 Stilling: Frisør Kari Ås Storgt 17, 7000 Trondheim 25 Frisør */ Programmet er kjørt med og uten ignore( )-setningen. Det første eksemplet viser kjøring uten ignore( ). Etter ledeteksten Stilling: begynner utskriften. Setningen cin.getline(stilling, Linjelengde); fører bare til at tegnet '\n' i inn-bufferet hoppes over. (Se øverst på figuren). Stilling blir en tom tekststreng, noe vi ser av at kjøreutskriften ikke viser noe etter at alderen (26) er skrevet ut. 2 2 Vi må bruke ignore( ) foran getline( ) hvis >> er brukt. Bruker vi ignore( ) en gang for mye risikerer vi å miste ei hel linje med data. Løsningen på dette er å kontrollere hvilket tegn som er det neste og så hoppe over det bare hvis det er en blank. Løkka while (isspace(cin.peek())) cin.ignore(); sørger for at blanke (og ikke andre tegn) hoppes over.

2. Pekere og referanser.

2. Pekere og referanser. Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag 2. Pekere og referanser. Mildrid Ljosland og Else Lervik 12.08.2013 Lærestoffet er utviklet for faget IFUD1048 C++ for programmerere med

Detaljer

Pekere og referanser.

Pekere og referanser. lesson.md Pekere og referanser. Leksjonen gir en innføring i pekere og referanser, samt argumentoverføring. Skrevet av Mildrid Ljosland, Else Lervik og Ole Christian Eidheim. Eksemplene for denne leksjonen

Detaljer

1. Grunnleggende C++ 1.1. Introduksjon til kurset og til C++ Innhold

1. Grunnleggende C++ 1.1. Introduksjon til kurset og til C++ Innhold Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag 1. Grunnleggende C++ Else Lervik 12.08.2013 Lærestoffet er utviklet for faget IFUD1048 C++ for programmerere med grunnlag i lærestoff fra

Detaljer

Grunnleggende C++ Introduksjon til kurset og til C++

Grunnleggende C++ Introduksjon til kurset og til C++ lesson.md Grunnleggende C++ Leksjonen introduserer studentene til kurset og til C++. Etter å ha gått gjennom leksjonen skal de være i stand til å skrive enkle C++ programmer. De skal kunne bruke kontrollstrukturer,

Detaljer

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Kandidatnr: Eksamensdato: 25. mai 2005 Varighet: 4 timer (9:00 13:00) Fagnummer: LO182D Fagnavn: Programmering i C++ Klasse(r): FU

Detaljer

Del 1 En oversikt over C-programmering

Del 1 En oversikt over C-programmering Del 1 En oversikt over C-programmering 1 RR 2016 Starten C ble utviklet mellom 1969 og 1973 for å re-implementere Unix operativsystemet. Er et strukturert programmeringsspråk, hvor program bygges opp av

Detaljer

Kapittel 1 En oversikt over C-språket

Kapittel 1 En oversikt over C-språket Kapittel 1 En oversikt over C-språket RR 2015 1 Skal se på hvordan man En innføring i C Skriver data til skjermen Lese data fra tastaturet Benytter de grunnleggende datatypene Foretar enkle matematiske

Detaljer

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Kandidatnr: Eksamensdato: Varighet: Fagnummer: Fagnavn: Klasse(r): Studiepoeng: Faglærer(e): Hjelpemidler: Oppgavesettet består av:

Detaljer

Del 4 Noen spesielle C-elementer

Del 4 Noen spesielle C-elementer Del 4 Noen spesielle C-elementer 1 RR 2016 Header-filer inneholder Prototypene til funksjonene i standard biblioteket Verdier og definisjoner som disse funksjonene bruker #include #include

Detaljer

Programmeringsspråket C

Programmeringsspråket C Programmeringsspråket C Bakgrunn Implementasjon av Unix ved AT&Ts laboratorium i Palo Alto 1960 75. Navnet kommer fra BCPL B C. Opphavsmannnen heter Dennis Ritchie. ANSI standard i 1988; omtrent alle følger

Detaljer

Innhold Innledning 1. 5 Løkke som kontrollstruktur 131 5-1 Et program med løkke som kontrollstruktur 132. vii

Innhold Innledning 1. 5 Løkke som kontrollstruktur 131 5-1 Et program med løkke som kontrollstruktur 132. vii Innledning 1 1 Datamaskiner og programmer 5 1-1 Datamaskiner, programmer og programmering 6 1-2 Fra kildekode til kjørbart program 12 1-3 Elementene i et C++-program 15 1-4 Livsløpet til programmer 24

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Kandidatnr: Eksamensdato: 26.mai 2005 Varighet: 0900-300 Fagnummer: Fagnavn: Klasse(r): LV95D Objektorientert programmering i C++ nettstudenter

Detaljer

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Programmering i C++ Løsningsforslag Eksamen høsten 2005 Programmering i C++ Eksamen høsten 2005 Simen Hagen Høgskolen i Oslo, Avdeling for Ingeniørutdanning 7. desember 2005 Generelt Denne eksamensoppgaven består av tre oppgaver, pluss en ekstraoppgave. Det

Detaljer

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program Oversikt INF1000 Uke 1 time 2 Variable, enkle datatyper og tilordning Litt repetisjon Datamaskinen Programmeringsspråk Kompilering og kjøring av programmer Variabler, deklarasjoner og typer Tilordning

Detaljer

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4 Forelesning inf - Java 4 Repetisjon: arrayer Tema: Løkker Arrayer Metoder Ole Christian Lingjærde,. september Deklarere og opprette array - eksempler: int[] a = new int[]; String[] a = new String[]; I

Detaljer

Forelesning inf Java 4

Forelesning inf Java 4 Forelesning inf1000 - Java 4 Tema: Løkker Arrayer Metoder Ole Christian Lingjærde, 12. september 2012 Ole Chr. Lingjærde Institutt for informatikk, 29. august 2012 1 Repetisjon: arrayer Deklarere og opprette

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Kandidatnr: Eksamensdato: 21.desember 2007 Varighet: 0900-1300 Fagnummer: Fagnavn: Klasse(r): LV195D Objektorientert programmering i C++ nettstudenter

Detaljer

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon Kort om meg INF1000 Uke 2 Variable, enkle datatyper og tilordning Fredrik Sørensen Kontor: Rom 4311-NR, Informatikkbygget Brukernavn/e-post: fredrso@ifi.uio.no Utdanning: Dataingeniør, 2000 Cand.Scient,

Detaljer

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering Institutt for datateknologi og informatikk Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering Faglig kontakt under eksamen: Frode Haug Tlf: 950 55 636 Eksamensdato: 14.august 2017 Eksamenstid

Detaljer

INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus 1 INF1000 undervisningen Forelesningene: Første

Detaljer

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september INF1000 undervisningen INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Forelesningene: Første

Detaljer

Debugging. Tore Berg Hansen, TISIP

Debugging. Tore Berg Hansen, TISIP Debugging Tore Berg Hansen, TISIP Innhold Innledning... 1 Å kompilere og bygge et program for debugging... 1 Når debugger er i gang... 2 Symbolene i verktøylinjen... 3 Start på nytt... 3 Stopp debugging...

Detaljer

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

TDT4102 Prosedyre og Objektorientert programmering Vår 2015 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyre og Objektorientert programmering Vår 2015 Øving 3 Frist: 2014-02-07 Mål for denne øvinga:

Detaljer

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes. Dagens tema Dagens tema C-programmering Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes. Adresser og pekere Parametre Vektorer (array-er) Tekster (string-er) Hvordan ser minnet

Detaljer

Obligatorisk oppgave 1 INF1020 h2005

Obligatorisk oppgave 1 INF1020 h2005 Obligatorisk oppgave 1 INF1020 h2005 Frist: fredag 7. oktober Oppgaven skal løses individuelt, og må være godkjent for å kunne gå opp til eksamen. Før innlevering må retningslinjene Krav til innleverte

Detaljer

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java INF høsten 2 Uke 4: 3. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Mål for uke 4: Innhold uke 4 Repetisjon m/ utvidelser:

Detaljer

Inn og ut i C/C++ 1. Inn og ut i C/C++

Inn og ut i C/C++ 1. Inn og ut i C/C++ Tore Berg Hansen 3.9.2004 Opphavsrett: Forfatter og Stiftelsen TISIP Lærestoffet er utviklet for faget LV194D C++ for javaprogrammerere 1. Resymé: Vi skal her se litt nærmere på hvordan vi får data inn

Detaljer

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon Oversikt INF1000 Uke 2 Variable, enkle datatyper og tilordning Litt repetisjon Datamaskinen Programmeringsspråk Kompilering og kjøring av programmer Variabler, deklarasjoner og typer Tilordning Uttrykk

Detaljer

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

INF1000 (Uke 5) Mer om løkker, arrayer og metoder INF1000 (Uke 5) Mer om løkker, arrayer og metoder Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Anja Bråthen Kristoffersen og Are Magnus Bruaset Praktisk informasjon Når disse

Detaljer

TDT4102 Prosedyreog objektorientert programmering Vår 2016

TDT4102 Prosedyreog objektorientert programmering Vår 2016 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyreog objektorientert programmering Vår 2016 Øving 4 Frist: 2016-02-12 Mål for denne øvingen:

Detaljer

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering Institutt for datateknologi og informatikk Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering Faglig kontakt under eksamen: Frode Haug Tlf: 950 55 636 Eksamensdato: 14.august 2018 Eksamenstid

Detaljer

INF1000 : Forelesning 4

INF1000 : Forelesning 4 INF1000 : Forelesning 4 Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk Universitetet

Detaljer

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4 Repetisjon: nesting av løkker Kort repetisjon av doble (nestede) løkker Mer om D-arrayer Introduksjon til D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk

Detaljer

Eksamen. Grunnleggende programmering. EKSAMENSDATO: 6.desember 2016 TID: 16:00 20:00. (kalkulator er ikke tillatt)

Eksamen. Grunnleggende programmering. EKSAMENSDATO: 6.desember 2016 TID: 16:00 20:00. (kalkulator er ikke tillatt) Eksamen EMNENAVN: EMNENUMMER: Grunnleggende programmering IMT1031 (F) EKSAMENSDATO: 6.desember 2016 TID: 16:00 20:00 EMNEANSVARLIG: Frode Haug ANTALL SIDER UTLEVERT: TILLATTE HJELPEMIDLER: 7 (inkludert

Detaljer

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen INF1000 EKSTRATILBUD Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen PLAN FOR DAGEN gjennomgå stoff fra uke 1-5(6), men med en litt annen tilnærming kun gjennomgått stoff, men vekt på konsepter og

Detaljer

Programmeringsspråket C

Programmeringsspråket C Programmeringsspråket C Programmeringsspråket C Implementasjon av Unix ved AT&Ts laboratorium i Palo Alto 1960 75. Navnet kommer fra BCPL B C. Opphavsmannnen heter Dennis Ritchie. ANSI-standard i 1988;

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - Kandidatnr: AITeL Eksamensdato: 4.mai 2011 Varighet: 0900-1300 Emnekode: Emnenavn: Klasser: LV195D Objektorientert programmering i C++ Nettstudenter

Detaljer

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N FAGNAVN: Grunnleggende programmering FAGNUMMER: IMT 1031 EKSAMENSDATO: 19.desember 2005 KLASSE(R): 05HBIND*, 05HBINFA, 05HBISA,

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - Kandidatnr: AITeL Eksamensdato: 5.mai 2010 Varighet: 0900-1300 Emnekode: Emnenavn: Klasser: LV195D Objektorientert programmering i C++ Nettstudenter

Detaljer

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2008

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2008 Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2008 Leveringsfrist Oppgaven må løses individuelt og leveres senest fredag 22. februar 2008 kl 16.00 via Joly. Viktig: les slutten av oppgaven for

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Prøveeksamen i : INF1000 Grunnkurs i objektorientert programmering Eksamensdag : Onsdag 21. November 2012 Tid for prøveeksamen : 12-16 Oppgavesettet

Detaljer

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2009

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2009 Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2009 Leveringsfrist Oppgaven må løses individuelt og leveres senest fredag 20. februar kl 16.00 via Joly. Viktig: les slutten av oppgaven for detaljerte

Detaljer

K O N T I N U A S J O N S E K S A M E N

K O N T I N U A S J O N S E K S A M E N Høgskolen i Gjøvik K O N T I N U A S J O N S E K S A M E N FAGNAVN: FAGNUMMER: Grunnleggende programmering og datastrukturer L 169 A EKSAMENSDATO: 8. januar 1998 KLASSE: 96HINDA / 96HINDE TID: 09.00-14.00

Detaljer

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING Eksamensoppgave i kurset: Programmering i C++. Fagnr: LV 121 A Eksamensdato: 10 februar, 2003. Faglærer: Cecilie Rolstad Antall oppgaver: 5 Antall sider,

Detaljer

Programmeringsspråket C

Programmeringsspråket C Programmeringsspråket C Programmeringsspråket C Laget til implementasjon av Unix ved AT&Ts Bell labs i Palo Alto 1969 73. Navnet kommer fra BCPL B C. Opphavsmannnen heter Dennis Ritchie. ANSI-standard

Detaljer

2 Om statiske variable/konstanter og statiske metoder.

2 Om statiske variable/konstanter og statiske metoder. Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo 1 Innledning Dette notatet beskriver noe av det som foregår i primærlageret når et Javaprogram utføres.

Detaljer

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 Leveringsfrist Oppgaven må leveres senest fredag 30. september kl 16.00. Viktig: les slutten av oppgaven for detaljerte leveringskrav. Formål Formålet

Detaljer

Introduksjon til objektorientert programmering

Introduksjon til objektorientert programmering Introduksjon til objektorientert programmering Samt litt mer om strenger og variable INF1000, uke6 Ragnhild Kobro Runde Grunnkurs i objektorientert programmering Strategi: Splitt og hersk Metoder kan brukes

Detaljer

E K S A M E N 96HINDA / 96HINDE (1 AA / AE)

E K S A M E N 96HINDA / 96HINDE (1 AA / AE) Høgskolen i Gjøvik E K S A M E N FAGNAVN: FAGNUMMER: Grunnleggende programmering og datastrukturer L169A EKSAMENSDATO: 5. juni 1997 KLASSE: 96HINDA / 96HINDE (1 AA / AE) TID: 09.00-14.00 FAGLÆRER: Frode

Detaljer

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 h2006

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 h2006 Oblig2 - obligatorisk oppgave nr 2 (av 4) i INF1000 h2006 Leveringsfrist Oppgaven må leveres senest fredag 30 september kl 1600 Viktig: les slutten av oppgaven for detaljerte leveringskrav Formål Formålet

Detaljer

Feilmeldinger, brukerinput og kontrollflyt

Feilmeldinger, brukerinput og kontrollflyt Feilmeldinger, brukerinput og kontrollflyt Skjønne hvordan et program presist utføres og forberede seg på håndtering av feil INF1000, uke2 Ragnhild Kobro Runde Programmeringskrøll Programmet vil ikke kjøre

Detaljer

Kontinuasjonseksamen

Kontinuasjonseksamen Høgskolen i Gjøvik Avdeling for teknologi Kontinuasjonseksamen FAGNAVN: FAGKODE: Objekt-orientert programmering L 183 A EKSAMENSDATO: 8. januar 2003 KLASSE(R): 01HIND* / 01HINE* / 01HDMU* TID: 09.00-13.00

Detaljer

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Eksamensoppgave i IMT1082 Objekt-orientert programmering Institutt for datateknologi og informatikk Eksamensoppgave i IMT1082 Objekt-orientert programmering Faglig kontakt under eksamen: Frode Haug Tlf: 950 55 636 Eksamensdato: 22.mai 2017 Eksamenstid (fra-til):

Detaljer

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre Python: Løkker TDT4110 IT Grunnkurs Professor Guttorm Sindre Denne uka Vi trenger å Støttes av Hente data fra bruker Vise data til bruker Lagre data i minnet for bruk videre i programmet Fra tastatur:

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Kandidatnr: Eksamensdato: 30.november 2005 Varighet: 0900-1300 Fagnummer: Fagnavn: Klasse(r): LV195D Objektorientert programmering i C++ Nettstudenter

Detaljer

Kontinuasjonseksamen

Kontinuasjonseksamen Kontinuasjonseksamen EMNENAVN: EMNENUMMER: Objekt-orientert programmering IMT1082 EKSAMENSDATO: 12. august 2016 TID: 09:00 13:00 EMNEANSVARLIG: Frode Haug ANTALL SIDER UTLEVERT: TILLATTE HJELPEMIDLER:

Detaljer

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN Høgskolen i Gjøvik KONTINUASJONSEKSAMEN FAGNAVN: FAGNUMMER: Grunnleggende programmering og datastrukturer LO169A EKSAMENSDATO: 4. september 1996 KLASSE: 1 AA/AE TID: 09.00-14.00 FAGLÆRER: Frode Haug ANTALL

Detaljer

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011)

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011) Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011) Løsningsforslag til oppgave 7, 8, og 9 mangler Klasser og objekter (kap. 8.1-8.14 i "Rett på Java" 3. utg.) NB! Legg merke til at disse

Detaljer

E K S A M E N. Grunnleggende datakunnskap og programmering 02HIND*, 02HINE*, 02HDMU*, 02HING*, 02HGEOMAA, 02HSIV5

E K S A M E N. Grunnleggende datakunnskap og programmering 02HIND*, 02HINE*, 02HDMU*, 02HING*, 02HGEOMAA, 02HSIV5 Høgskolen i Gjøvik Avdeling for teknologi E K S A M E N FAGNAVN: FAGKODE: Grunnleggende datakunnskap og programmering L 182 A EKSAMENSDATO: 19. desember 2002 KLASSE(R): 02HIND*, 02HINE*, 02HDMU*, 02HING*,

Detaljer

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Kandidatnr: Eksamensdato: 12. desember 2002 Varighet: Fagnummer: Fagnavn: Klasse(r): 3 timer LO116D Programmering i Visual Basic FU

Detaljer

Anbefalt litteratur: Pensum-bøker: Forelesere: Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Anbefalt litteratur: Pensum-bøker: Forelesere: Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon Forelesere: Velkommen til INF-1060 Introduksjon til operativsystemer og datakommunikasjon Pål Halvorsen (paalh@ifi.uio.no) Nettverk og Distribuerte systemer (ND) (ved Simula) Kjell Åge Bringsrud (kjellb@ifi.uio.no)

Detaljer

13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER

13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER .9.22 LITT OM OPPLEGGET INF EKSTRATILBUD Stoff fra uke - 2. September 22 Siri Moe Jensen Målgruppe: De som mangler forståelse for konseptene gjennomgått så langt. Trening får du ved å jobbe med oppgaver,

Detaljer

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012. Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012. Objektorientert modellering

Detaljer

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2 Programmeringsspråket C Del 2 Kjell Åge Bringsrud E-mail: kjellb@ifi.uio.no 30.08.2005 inf1060 H05 1 Et eksempel Dette er lite eksempel som ber om et tall, leser det og så teller fra det ned til 0. 30.08.2005

Detaljer

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 Oblig2 - obligatorisk oppgave nr 2 (av 4) i INF1000 Leveringsfrist Oppgaven må leveres senest fredag 29 september kl 1600 Viktig: les slutten av oppgaven for detaljerte leveringskrav Formål Formålet med

Detaljer

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Formål Formålet med denne oppgaven er å gi trening i hele pensum og i å lage et større program. Løsningen du lager skal være

Detaljer

Eksamen. Objekt-orientert programmering KLASSE(R): 02HIND* 02HDMU* 02HINE* 02HING* 01HINGA 02HSIV5 02HGEOMAA

Eksamen. Objekt-orientert programmering KLASSE(R): 02HIND* 02HDMU* 02HINE* 02HING* 01HINGA 02HSIV5 02HGEOMAA Høgskolen i Gjøvik Avdeling for teknologi Eksamen FAGNAVN: FAGNUMMER: Objekt-orientert programmering L 183 A EKSAMENSDATO: 27. mai 2003 KLASSE(R): 02HIND* 02HDMU* 02HINE* 02HING* 01HINGA 02HSIV5 02HGEOMAA

Detaljer

Enkle generiske klasser i Java

Enkle generiske klasser i Java Enkle generiske klasser i Java Oslo, 7/1-13 Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Del 1: Enkle pekere Før vi tar fatt på det som er nytt i dette notatet, skal vi repetere litt

Detaljer

1. Å lage programmer i C++

1. Å lage programmer i C++ Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Å lage programmer i C++ Tore Berg Hansen og Else Lervik Rividert siste gang 24. august 2006 1. Å lage programmer i C++ Resymé: Dette notatet

Detaljer

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet TGA Et større programeksempel Hvordan løse et reelt problem med en objektorientert fremgangsmåte En større problemstilling I uke 4 skrev vi et program for å sjekke om et gen (en tekstfil) inneholdt ordet "TGA"

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Eksamen i : Eksamensdag : Torsdag 2. desember 2004 Tid for eksamen : 09.00 12.00 Oppgavesettet er på : Vedlegg : Tillatte hjelpemidler

Detaljer

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK INF1000: Forelesning 6 Klasser og objekter del 1 OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK Motivasjon Anta at vi ønsker å lage et studentregister hvor vi for hver student lagrer, bruker og telefonnummer Med

Detaljer

løsningsforslag-uke5.txt

løsningsforslag-uke5.txt INF 1000 LØSNINGSFORSLAG TIL UKEOPPGAVER FOR UKE 5 1) Setningen er kompakt skrivemåte for int[] a; a = new int[50]; hvor den første setningen deklarerer arrayen a, og den andre setningen oppretter et array-objekt

Detaljer

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015 Beskrivelse av programmeringsspråket Compila15 INF5110 - Kompilatorteknikk Våren 2015 Her beskrives syntaksen og den statiske semantikken (hva som skal sjekkes av kompilatoren) til språket Compila15. Den

Detaljer

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays Oversikt C programmering 1 C programmering Introduksjon Kildekode Kompilering Hello world Hello world med argumenter 2 Funksjoner 3 Datatyper 4 Pekere og arrays 5 Kontrollstrukturer Lars Vidar Magnusson

Detaljer

Kontinuasjonseksamen

Kontinuasjonseksamen Høgskolen i Gjøvik Avdeling for teknologi Kontinuasjonseksamen FAGNAVN: FAGNUMMER: Objekt-orientert programmering L 183 A EKSAMENSDATO: 5. januar 2004 KLASSE(R): 02HIND* 02HDMU* 02HINE* 02HING* 01HINGA

Detaljer

Kontinuasjonseksamen

Kontinuasjonseksamen Høgskolen i Gjøvik Kontinuasjonseksamen FAGNAVN: FAGNUMMER: Grunnleggende datakunnskap, programmering og datastrukturer L 176 A EKSAMENSDATO: 5. januar 1999 KLASSE: 97HINDA / 97HINDB / 97HDMUA TID: 09.00-14.00

Detaljer

Forelesning inf Java 5

Forelesning inf Java 5 Ole Chr. Lingjærde 1 Forelesning inf1000 - Java 5 Tema: Mer om metoder 2D-arrayer String Ole Christian Lingjærde, 26. september 2013 Ole Chr. Lingjærde Institutt for informatikk, 26. september 2013 1 Strukturen

Detaljer

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren Prosedyrer Hensikten med en prosedyre Hensikten med en prosedyre er, logisk sett, å representere en jobb eller en funksjonalitet i et eller flere programmer. Bruk av entall er viktig: vi har generelt en

Detaljer

Forelesning inf Java 5

Forelesning inf Java 5 Forelesning inf1000 - Java 5 Tema: Mer om metoder 2D-arrayer String Ole Christian Lingjærde, 26. september 2013 Ole Chr. Lingjærde Institutt for informatikk, 26. september 2013 1 Strukturen til et Java-program

Detaljer

Kontinuasjonseksamen

Kontinuasjonseksamen Kontinuasjonseksamen EMNENAVN: EMNENUMMER: Grunnleggende programmering IMT1031 (F) EKSAMENSDATO: 8.august 2016 TID: 09:00 13:00 EMNEANSVARLIG: Frode Haug ANTALL SIDER UTLEVERT: TILLATTE HJELPEMIDLER: 7

Detaljer

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon Velkommen til INF-1060 Introduksjon til operativsystemer og datakommunikasjon 21.08.2007 INF1060 1 Forelesere: Pål Halvorsen (paalh@ifi.uio.no) Nettverk og Distribuerte systemer (ND) (ved Simula) Kjell

Detaljer

INF1000: Forelesning 6. Klasser og objekter del 1

INF1000: Forelesning 6. Klasser og objekter del 1 INF1000: Forelesning 6 Klasser og objekter del 1 OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK 2 Motivasjon Anta at vi ønsker å lage et studentregister hvor vi for hver student lagrer navn, brukernavn og telefonnummer.

Detaljer

INF1000 (Uke 4) Mer om forgreninger, While-løkker

INF1000 (Uke 4) Mer om forgreninger, While-løkker INF1000 (Uke 4) Mer om forgreninger, While-løkker Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B. Kristoffersen I dag Repetisjon easyio Enkle if-setninger

Detaljer

Kontinuasjonseksamen

Kontinuasjonseksamen Høgskolen i Gjøvik Avdeling for teknologi Kontinuasjonseksamen FAGNAVN: FAGNUMMER: Objekt-orientert programmering IMT1082 / ELE2092 EKSAMENSDATO: 5. januar 2007 KLASSE(R): 05HBIND*, 05HBINFA, 05HBISA,

Detaljer

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal. I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Repetisjon easyio Enkle if-setninger Mer om forgrening While-løkker Are Magnus

Detaljer

2 Om statiske variable/konstanter og statiske metoder.

2 Om statiske variable/konstanter og statiske metoder. Gaustadbekkdalen, januar 22 Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Innledning Dette notatet beskriver noe av det som foregår i primærlageret når

Detaljer

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator Litt mer om løkker Arrayer le Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i slo Java Repetisjon: operatorene ++ og -- Instruksjon i = i + i = i - Alternativ Prefiks-operator

Detaljer

Del 2 Tabeller, arrays, strenger

Del 2 Tabeller, arrays, strenger Del 2 Tabeller, arrays, strenger 1 RR 2016 Tabeller Variabel som kan holde mange verdier. Styrer bruken med indeks. Det er ingen indekskontroll i C. int tab[5] = {2, 4, 6, 8, 10}; tab[4] = 12; int tab[100]

Detaljer

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering Institutt for datateknologi og informatikk Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering Faglig kontakt under eksamen: Frode Haug Tlf: 950 55 636 Eksamensdato: 18.august 2017 Eksamenstid

Detaljer

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Øving 10 Frist: 2014-04-11 Mål for denne øvinga:

Detaljer

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Repetisjon easyio Enkle if-setninger Mer om forgrening While-løkker Are Magnus

Detaljer

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren Prosedyrer Hensikten med en prosedyre Hensikten med en prosedyre er, logisk sett, å representere en jobb eller en funksjonalitet i et eller flere programmer. Bruk av entall er viktig: vi har generelt en

Detaljer

E K S A M E N. Grunnleggende programmering 03HBIND*, 03HBINFA, 03HBINE*, 03HBMETEA, 03HBMEMAA, 03HBGEOA

E K S A M E N. Grunnleggende programmering 03HBIND*, 03HBINFA, 03HBINE*, 03HBMETEA, 03HBMEMAA, 03HBGEOA Høgskolen i Gjøvik Avdeling for teknologi E K S A M E N FAGNAVN: Grunnleggende programmering FAGNUMMER: IMT 1031 EKSAMENSDATO: 15. desember 2003 KLASSE(R): 03HBIND*, 03HBINFA, 03HBINE*, 03HBMETEA, 03HBMEMAA,

Detaljer

Eksamen. Objekt-orientert programmering

Eksamen. Objekt-orientert programmering Eksamen EMNENAVN: EMNENUMMER: Objekt-orientert programmering IMT1082 EKSAMENSDATO: 19. mai 2016 TID: 09:00 13:00 EMNEANSVARLIG: Frode Haug ANTALL SIDER UTLEVERT: TILLATTE HJELPEMIDLER: 8 (inkludert denne

Detaljer

Velkommen til INF2100

Velkommen til INF2100 Kursopplegg Velkommen til INF2100 Jeg er Dag Langmyhr (dag@ifi.uio.no). Dagens tema: Hva går kurset ut på? Bakgrunn for kurset Hvordan gjennomføres kurset? Hvordan får man det godkjent? Pause (med registrering

Detaljer

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2 Programmeringsspråket C Del 2 Michael Welzl E-mail: michawe@ifi.uio.no 8/25/10 inf1060 1 Et eksempel Dette er lite eksempel som ber om et tall, leser det og så teller fra det ned til 0. 8/25/10 inf1060

Detaljer

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator? Kursopplegg Velkommen til INF2100 Bakgrunnen Bakgrunnen for INF2100 Jeg er Dag Langmyhr (dag@ifi.uio.no). Dagens tema: Hva går kurset ut på? Bakgrunn for kurset Hvordan gjennomføres kurset? Hvordan får

Detaljer

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2 Et eksempel Programmeringsspråket C Del 2 Dette er lite eksempel som ber om et tall, leser det og så teller fra det ned til 0. Kjell Åge Bringsrud E-mail: kjellb@ifi.uio.no inf1060 1 inf1060 2 Forklaring:

Detaljer