8. Operator overloading

Størrelse: px
Begynne med side:

Download "8. Operator overloading"

Transkript

1 Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag 8.Operator overloading Mildrid Ljosland og Else Lervik Lærestoffet er utviklet for faget LV195D Objektorientert programmering i C++ 8. Operator overloading Resymé: Operator overloading betyr at vi utvider bruksområdet f or de vanlige operatorene. Vi kan eksempelvis bruke sammenligningsoperatorene < > og = = i stedet for en funksjon til å sammenligne objekter. Vi vil se at operatorene programmeres som vanlige funksjoner, det er bare navnet som er spesielt. Noen av operatorene er relativt enkle å programmere, mens andre er meget vanskelige. Spesielt nevnes tilordningsoperatoren som alltid bør programmeres dersom vi har en peker som datamedlem. Innhold 8.1. HVA MENES MED OPERATOR OVERLOADING? EKSEMPEL: KLASSEN BROEK OBJEKT SOM RETURVERDI *THIS SOM RETURVERDI DIVERSE RETURVERDIER IMPLEMENTASJON AV MEDLEMSFUNKSJONENE I KLASSEN BROEK Oppgaver, løsning bakerst i leksjonen Å DEFINERE OPERATORER SOM IKKE-MEDLEMSFUNKSJONER Første argument er ikke et objekt Å definere operatorer for klasser vi ikke har herredømme over Oppgaver, forts OPERATORER VI IKKE KAN OVERLOADE OPERATORER MED SPESIELLE REGLER NÅR BØR VI IKKE OVERLOADE EN OPERATOR? LØSNINGER TIL OPPGAVENE FORAN Referanser til lærebøkene: H. M. Deitel & P. J. Deitel: C++ How to Program, 5.Ed: Kapittel (kap handler om klassen String, det kan du jo!) Else Lervik og Mildrid Ljosland: Programmering i C++: Leksjonen er omtrent identisk med kapittel 15. Leksjonen er i sin helhet en tilpasning av kap 2 i følgende bok: Else Lervik og Mildrid Ljosland: Objektorientert programmering i C++. Gyldendal Akademisk Hva menes med operator overloading? Begrepet overloading er kjent fra funksjoner. Vi kan ha flere funksjoner med samme navn, bare parameterlisten er forskjellig i type/antall.

2 8.Operator overloading side 2 av 16 Vi skal se at vi på tilsvarende måte kan la samme operator brukes med forskjellige typer operander. Ja, dette er jo allerede kjent, ettersom for eksempel operatoren + kan brukes både for heltall og flyttall. Siden heltall og flyttall representeres på to vidt forskjellige måter internt i maskinen, vil det for kompilatoren være to helt forskjellige operasjoner. På samme måte kan vi bruke < til å sammenlikne to heltall, eller vi kan sammenlikne to flyttall, eller vi kan sammenlikne to tegn. Disse eksemplene viser hvordan samme operator kan brukes på forskjellige datatyper. I C++ kan programmereren også definere hva en operator skal bety (i motsetning til mange andre språk), men det forutsetter at den brukes i forbindelse med en klasse. Eksempel: I en funksjon for sortering av tall kan vi ha følgende: void sorter(int antall, int *tabell) {... if (tabell[teller] < tabell[hittilminst]) {... Vi kan lage en helt tilsvarende funksjon for å sortere objekter, dersom vi bare utvider bruksområdet til sammenligningsoperatoren til også å gjelde den aktuelle typen objekter. (Eksempelvis er dette gjort for alle string-objekter.) Vi skal programmere operatoren < for Flate (leksjon 2, side 11). Vi tar utgangspunkt i følgende medlemsfunksjon som sammenligner en flate (this) med en annen flate: int Flate::sammenlign(const Flate &denandre) const { const double toleranse = ; double areal1 = finnareal(); double areal2 = denandre.finnareal(); if (fabs(areal2 - areal1) < toleranse) return 0; else if (areal1 < areal2) return -1; else return 1; Her sammenligner vi to beregnede desimalverdier. Vi passer derfor på ikke å bruke == direkte på verdiene, men sjekker heller om forskjellen mellom verdiene er mindre enn en gitt toleranse. Funksjonen fabs() er deklarert i header-filen cmath. Sammenligningsfunksjonen kan brukes slik: int main(int) { Flate f1("flate1", 3, 3); Flate f2("flate2", 2, 5); int res = f1.sammenlign(f2); if (res == 0) cout << "Flatene er like\n"; else if (res < 0) cout << f1.finnnavn() << " er minst\n"; else cout << f1.finnnavn() << " er størst\n"; return 0; Utskriften blir slik: Flate1 er minst

3 8.Operator overloading side 3 av 16 Vi bruker denne funksjonen når vi skal lage sammenligningsoperatorene. Operatoren < ser for eksempel slik ut: bool Flate::operator<(const Flate &denandre) const { return (sammenlign(denandre) < 0); Det eneste som egentlig er spesielt her er navnet på funksjonen. På grunn av at < er en binær operator kan vi imidlertid ikke ha mer enn ett argument. Returtypen bestemmer vi selv, men det er naturlig å bruke bool som returtype for sammenligningsoperatorene. Vi kan bruke funksjonen som en vanlig medlemsfunksjon: if (f1.operator<(f2)) cout << f1.finnnavn() << " er minst\n"; Men det er jo ikke spesielt spennende. Poenget er at vi kan bruke denne funksjonen som en operator, vi har utvidet bruksområdet for operatoren <: if (f1 < f2) cout << f1.finnnavn() << " er minst\n"; Har vi en tabell med flate-objekter som skal sorteres kan vi nå skrive if (tabell[teller] < tabell[hittilminst])... på samme måte som for tabeller av heltall eller andre standardtyper. Funksjonen er ferdigdefinert til å hete operator<. På samme måte har vi funksjonsnavn tilsvarende de andre operatorene, for eksempel operator+ og operator!= Eksempel: klassen Broek Aller først en oppklaring: En binær operator er en operator som tar to operander, for eksempel multiplikasjon. Vi må alltid ha to operander for å utføre en multiplikasjon. En unær operator tar kun én operand. Pluss og minus er vanligvis binære operatorer, men kan også være unære. Eksempel: -tall, her utføres den unære operasjonen minus, resultatet av operasjonen er verdien til variabelen tall med motsatt fortegn. Brøker kan adderes, subtraheres, multipliseres og divideres. Dessuten kan de sammenliknes, og vi kan sette en brøk lik en annen. Alt dette kan vi definere ved hjelp av binære operatorer. Vi kan også definere noen unære operatorer: Å addere 1 til brøken, og å skifte fortegn på brøken. I programliste 1 nedenfor ser vi på et program som bruker en del av disse operatorene på noen brøker. Vi ser at vi kan bruke operatorene på akkurat samme måte for brøkene, som om det hadde vært int eller double. Vi kan skrive d = a / b; c = -c; b += a; (b > 0) osv. Definisjonen av klassen er vist i programliste 2. Der har vi definert mange operatorer. I tillegg har vi vanlige tilgangsfunksjoner. Vi skal se på noen av disse operatorene, og deler dem i tre grupper etter hvilken type returverdien har. Gruppe 1 returnerer en brøk, gruppe 2 returnerer en referanse til en brøk, og gruppe 3 returnerer andre typer (her bool). Programliste

4 8.Operator overloading side 4 av 16 broek_t.cpp Program som tester noen av funksjonene i klassen brøk. #include <iostream> #include <string> #include "broek.h" using namespace std; void skriv(const string &tekst, const Broek &Broek); int main() { Broek a(10, 20); Broek b(3, 4); Broek c; c.settbroek(5); Broek d = a / b; skriv("a = ", a); skriv("b = ", b); skriv("c = ", c); skriv("d = ", d); b += a; ++c; d *= d; skriv("b = ", b); skriv("c = ", c); skriv("d = ", d); c = a + b - d * a; c = -c; skriv("c = ", c); if (a + b!= c + d) cout << "a + b!= c + d" << endl; else cout << " a + b == c + d" << endl; while ( b > a) b -= a; skriv("b = ", b); return 0; Funksjon for å skrive en brøk. void skriv(const string &tekst, const Broek &broek) { cout << tekst << broek.finnteller() << " / "; cout << broek.finnnevner() << endl; /* Utskrift: a = 1 / 2

5 8.Operator overloading side 5 av 16 b = 3 / 4 c = 5 / 1 d = 2 / 3 b = 5 / 4 c = 6 / 1 d = 4 / 9 c = -55 / 36 a + b!= c + d b = 1 / 4 */ Programliste broek.h Klasse for å behandle brøker. NB: Hvis en brøk får nevner 0 avluttes hele programmet! #include <string> using namespace std; #ifndef BROEK_DEFINERT #define BROEK_DEFINERT class Broek { public: Broek(); Broek(int initteller, int initnevner); void settbroek(int nyteller, int nynevner = 1); int finnteller() const { return teller; int finnnevner() const { return nevner; Broek operator+(const Broek &denandre) const; Broek operator-(const Broek &denandre) const; Broek operator*(const Broek &denandre) const; Broek operator/(const Broek &denandre) const; Broek operator-() const; Broek &operator++(); Preinkrement Broek &operator--(); Predekrement Broek &operator+=(const Broek &denandre); Broek &operator-=(const Broek &denandre); Broek &operator*=(const Broek &denandre); Broek &operator/=(const Broek &denandre); Broek &operator=(const Broek &original); bool operator==(const Broek &denandre) const; bool operator!=(const Broek &denandre) const; bool operator<=(const Broek &denandre) const; bool operator>=(const Broek &denandre) const; bool operator<(const Broek &denandre) const; bool operator>(const Broek &denandre) const; private: void forkort(); int sammenlikn(const Broek &denandre) const;

6 8.Operator overloading side 6 av 16 int teller; int nevner; ; #endif 8.3. Objekt som returverdi + - * og / returnerer en brøk. Vi har to tall (brøker), og skal få som returverdi et tredje tall. De to tallene som er utgangspunktet skal ikke forandres. Funksjonen må derfor lage et nytt objekt, gi det verdier, og returnere det som funksjonsverdi. Operatoren - har både en unær og en binær versjon. For den unære versjonen gjelder det samme som for den binære: Et nytt objekt må lages. Verdien blir operanden med motsatt fortegn på telleren: Broek Broek::operator-() const { Broek hjelp; hjelp.teller = -teller; hjelp.nevner = nevner; operator- Den binære operatoren * lages på omtrent den samme måten. Her bruker vi settbroek( ) i stedet for å sette teller og nevner direkte. Det er gjort fordi settbroek( ) sørger for å sjekke om nevneren blir null, og den forkorter brøken. Broek Broek::operator*(const Broek &denandre) const { Broek hjelp; hjelp.settbroek(teller * denandre.teller, nevner * denandre.nevner); operator* Anta at vi har følgende setninger: Broek broeka; Broek broekb; Broek broekc; broeka.settbroek(1,2); broekc.settbroek(2,3); Vi kan skrive broekb = -broeka; Først brukes operator-( ) til å beregne -broeka. Deretter brukes dette uttrykket (som er et objekt) videre som argument til operator=( ). Det samme gjelder de binære operatorene. Uttrykket broeka + broekb er et objekt. Det kan brukes videre i uttrykket broeka + broekb + broekc Assosiativiteten gjør at uttrykket blir regnet ut som

7 8.Operator overloading side 7 av 16 (broeka + broekb) + broekc Vi bruker et objekt som returverdi når operatoren har som oppgave å lage et nytt objekt av samme type som *this. De mest aktuelle operatorene av denne typen er de binære operatorene + - * / % og de unære operatorene + og *this som returverdi Når vi vil at *this skal forandres, bruker vi normalt en referanse til *this som funksjonsverdi. Operatoren = er et eksempel på dette. Her vil vi at første operand (det som står foran likhetstegnet) skal få samme verdi som andre operand (det som står bak). Vi lager følgende implementasjon: Broek &Broek::operator=(const Broek &denandre) { teller = denandre.teller; nevner = denandre.nevner; return *this; operator= Nå kan vi skrive broeka = broekb; Resultatet blir at broeka får samme verdi som broekb. Vi kan også bruke uttrykket videre i nye beregninger, og skrive broeka = broekb = broekc; Siden tilordningsoperatoren er høyreassosiativ, vil uttrykket bli tolket som broeka = (broekb = broekc); Først får broekb samme verdi som broekc. Så brukes returverdien (som er broekb etter forandringen) til å gi ny verdi til broeka. Hadde vi i stedet laget funksjonen void Broek::operator=(const Broek &denandre) { teller = denandre.teller; nevner = denandre.nevner; operator= kunne vi fortsatt ha skrevet broeka = broekb; men ikke broeka = broekb = broekc; Denne skrivemåten krever en funksjonsverdi som kan anvendes i det siste funksjonskallet. Merk Kompilatoren definerer en standardversjon av operatoren = hvis vi ikke lager en egen utgave av denne operatoren. Standardversjonen sier at et objekt settes lik et annet objekt ved å sette alle datamedlemmene i det ene objektet lik de tilsvarende datamedlemmene i det andre. Dette fungerer ikke tilfredsstillende dersom vi har en peker som datamedlem, jamfør leksjon 4.

8 8.Operator overloading side 8 av 16 Vår implementasjon av = for klassen Broek gjør akkurat dette. Den er derfor unødvendig, og kunne vært utelatt. For eksempler der det er nødvendig å lage egen tilordningsoperator, se Deitel & Deitel, kapittel 11.8, spesielt side 592, og Lervik & Ljosland, kapittel 17.6 (du får bare se bort fra det som står om vector der, det kommer vi tilbake til i en senere leksjon). De mest vanlige operatorene som bør returnere *this, er og alle tilordningsoperatorene ( = += -= osv) Diverse returverdier Noen operatorer gir en annen returverdi enn et objekt eller en referanse til et objekt. Sammenlikningsoperatorene er et godt eksempel på dette. Vi lar dem ha typen bool. Også i klassen Broek har vi en medlemsfunksjon sammenlikn( ). På samme måte som i klassen Flate lar vi den returnere +1, 0 eller -1 hvis den første er henholdsvis større, lik eller mindre enn den andre. Sammenlikningsoperatorene bruker denne. bool Broek::operator==(const Broek &denandre) const { return (sammenlikn(denandre) == 0)? true : false; operator== Nå kan vi lage setninger av typen if (broeka!= broekb)... som finner ut om broeka har samme verdi som broekb Implementasjon av medlemsfunksjonene i klassen Broek I programliste 3 finner du implementasjon av medlemsfunksjonene. Noen funksjoner er implementert litt annerledes enn beskrevet. Det skyldes at vi gjør bruk av andre operatorer når vi implementerer nye. Eksempel: Operatoren * gjør bruk av operatorene *= og = Kompilatoren krever at funksjoner skal være erklært før de brukes, men den krever ikke at de skal være definert (implementert) før de brukes. Erklæringen av alle operatorene skjer i klassedefinisjonen (i "header"-filen), og vi kan derfor bruke enhver operator når vi skal implementere en annen, uavhengig av hvilken rekkefølge de er definert i. Programliste broek.cpp - implementasjonsfil #include "broek.h" #include <iostream> #include <string> #include <sstream> #include <cmath> using namespace std; Broek::Broek() { teller = 0; nevner = 1;

9 8.Operator overloading side 9 av 16 Broek::Broek(int initteller, int initnevner) { settbroek(initteller, initnevner); void Broek::settBroek(int nyteller, int nynevner) { if (nynevner!= 0) { teller = nyteller; nevner = nynevner; forkort(); else { cerr << "Nevneren ble null! Avslutter.\n"; exit(exit_failure); Broek Broek::operator+(const Broek &denandre) const { Broek hjelp = *this; hjelp += denandre; Broek &Broek::operator+=(const Broek &denandre) { settbroek(teller * denandre.nevner + nevner * denandre.teller, nevner * denandre.nevner); return *this; Broek &Broek::operator++() { teller += nevner; return *this; Broek Broek::operator-(const Broek &denandre) const { Broek hjelp = *this; hjelp -= denandre; Broek &Broek::operator-=(const Broek &denandre) { settbroek(teller * denandre.nevner - nevner * denandre.teller, nevner * denandre.nevner); return *this; Broek &Broek::operator--() { teller -= nevner; return *this; Broek Broek::operator-() const { Broek hjelp; hjelp.teller = -teller; hjelp.nevner = nevner;

10 8.Operator overloading side 10 av 16 Broek Broek::operator*(const Broek &denandre) const { Broek hjelp = *this; hjelp *= denandre; Broek &Broek::operator*=(const Broek &denandre) { settbroek(teller * denandre.teller, nevner * denandre.nevner); return *this; Broek Broek::operator/(const Broek &denandre) const { Broek hjelp = *this; hjelp /= denandre; Broek &Broek::operator/=(const Broek &denandre) { settbroek(teller * denandre.nevner, nevner * denandre.teller); return *this; Broek &Broek::operator=(const Broek &original) { teller = original.teller; nevner = original.nevner; return *this; bool Broek::operator==(const Broek &denandre) const { return (sammenlikn(denandre) == 0)? true : false; bool Broek::operator!=(const Broek &denandre) const { return (sammenlikn(denandre)!= 0)? true : false; bool Broek::operator<=(const Broek &denandre) const { return (sammenlikn(denandre) <= 0)? true : false; bool Broek::operator>=(const Broek &denandre) const { return (sammenlikn(denandre) >= 0)? true : false; bool Broek::operator<(const Broek &denandre) const { return (sammenlikn(denandre) < 0)? true : false; bool Broek::operator>(const Broek &denandre) const { return (sammenlikn(denandre) > 0)? true : false;

11 8.Operator overloading side 11 av 16 Sørger for at nevneren alltid er positiv, og brøken mest mulig forkortet. Bruker Euclids algoritme for å finne fellesnevneren. void Broek::forkort() { if (nevner < 0) { teller = -teller; nevner = -nevner; int a = teller; int b = nevner; int c; if (a < 0) a = -a; while (b > 0) { c = a % b; a = b; b = c; teller /= a; nevner /= a; Returnerer +1 hvis *this > denandre, 0 hvis de er like, -1 ellers int Broek::sammenlikn(const Broek &denandre) const { Broek hjelp = *this - denandre; if (hjelp.teller > 0) return 1; else if (hjelp.teller == 0) return 0; else return -1; Oppgaver, løsning bakerst i leksjonen Oppgave 1 Hvorfor bruker vi Broek som returverdi når vi skriver men Broek & når vi skriver return *this;? Oppgave 2 Det er mulig å la returverdien for operator= være av typen const Broek & i stedet for bare Broek &. Anta at vi har gjort det, og skriver følgende: A = B = C; (A = B) = C; ++(A = B); Hva vil skje? Forklar hvorfor Å definere operatorer som ikke-medlemsfunksjoner Hittil har vi bare sett på hvordan vi definerer operatorer som medlemsfunksjoner. Men det er også mulig å lage dem som vanlige funksjoner.

12 8.Operator overloading side 12 av 16 Det fins to grunner til det: Første operand skal ikke være et objekt av den klassen vi skal knytte operatoren til. Vi ønsker å definere en operator knyttet til en klasse som vi ikke har herredømme over Første argument er ikke et objekt Vi ønsker å kunne addere en brøk og et heltall. Ved å utvide bruksområdet til operatoren + på følgende måte: Broek Broek::operator+(int heltall) const { Broek hjelp; hjelp.settbroek(heltall); hjelp += *this; operator+ kan vi skrive broeka + 3 Det blir tolket som broeka.operator+(3); Men vi kan ikke skrive 3 + broeka siden første operand ikke lenger er et objekt av klassen Broek. For å kunne bruke begge uttrykksmåtene, må vi lage en ny utgave av operatoren. Utenfor klassen (men gjerne på samme fil som klassedefinisjonen) plasserer vi følgende erklæring: Broek operator+(int tall, const Broek &denandre); I implementasjonsfilen kan vi skrive følgende: (Merk at vi ikke bruker Broek:: siden det ikke er en medlemsfunksjon.) Broek operator+(int tall, const Broek &denandre) { Broek hjelp; hjelp = denandre + tall; operator+ Nå kan vi skrive 3 + broeka i klientprogrammet. Det blir tolket som operator+(3, broeka) Å definere operatorer for klasser vi ikke har herredømme over Operatoerene << og >> er egentlig bitmanipuleringsoperatorer. Men i forbindelse med filer og strømmer er de definert på en annen måte. Uttrykket cout << tall; betyr egentlig cout.operator<<(tall); Operatoren er erklært på følgende måte: ostream &operator<<(type var); Det er definert mange versjoner med forskjellige datatyper på argumentet. Funksjonsverdien er *this, noe som gjør at funksjonskallene kan kjedes sammen. cout << "A = " << A << endl;

13 8.Operator overloading side 13 av 16 betyr ((cout << "A = ") << A) << endl; Andre operand kan være en variabel av hvilken som helst innebygd type. Hvis vi utvider bruksområdet for operatoren kan den også aksepterer et objekt av en klasse som andre operand. Vi ønsker å definere << slik at vi kan skrive ut brøker ved hjelp av den. << hører til klassen ostream, som vi ikke kan forandre, så vi kan ikke lage en medlemsfunksjon. Men vi kan lage en ikke-medlemsfunksjon. Det gjør vi ved å bytte ut skriv-funksjonen i filen Broek_t.cpp med følgende: ostream &operator<<(ostream &ut, const Broek &broek) { ut << broek.finnteller() << " / " << broek.finnnevner(); return ut; operator<< I stedet for skriv("a = ", a); skriver vi: cout << "A = " << a << endl; Her utføres først cout << "a = ". Dette er den ferdigdefinerte betydningen av << for tekststrenger. Den gir *this, altså cout, som funksjonsverdi. Neste trinn er cout << a. Siden a er en Broek, brukes den funksjonen vi har laget. Funksjonskallet blir operator<<(cout, a) og returverdien blir cout. Til slutt får vi utført cout << endl, der vi igjen bruker en ferdigdefinert betydning av << Oppgaver, forts Oppgave 3 Det er mulig å lage << for brøker som en medlemsfunksjon på følgende måte: class Broek { public:... ostream &operator<<(ostream &ut) const;... ; Broek Lag funksjonen, og vis eksempler på hvordan den kan brukes. Er det mulig å kjede sammen flere cout-uttrykk med den? Hvorfor vil vi normalt ikke ønske å definere den på denne måten? Oppgave 4 Oppramsingstypen Dag er definert slik: enum Dag {mandag, tirsdag, onsdag, torsdag, fredag, loerdag, foendag; Utvid bruksområdet til << slik at verdier av typen Dag kan skrives ut.

14 8.Operator overloading side 14 av Operatorer vi ikke kan overloade Følgende operatorer kan vi ikke definere egne utgaver av:..* ::?: sizeof Alle de andre operatorene (liste over alle operatorene i C++ finner du på side 1228 i boka) kan vi overloade, men bare i forbindelse med klasser. Bruker vi andre typer enn klasser, brukes alltid den ferdigdefinerte betydningen som gjelder for disse typene Operatorer med spesielle regler Postfiksversjonene av operatorene ++ og -- betraktes som binære operatorer når vi erklærer og definerer dem, men som unære når vi bruker (kaller) dem. I prototypen og definisjonen må de ha et argument av typen int, men dette skal ikke brukes til noe. Derfor setter vi heller ikke noe navn på argumentet. Dette argumentet er nødvendig for å skille de to funksjonene fra hverandre. Broek Broek::operator++(int) { Broek hjelp; hjelp = *this; ++(*this); operator++ postfiks Broek broeka; broeka.settbroek(1, 2); Broek broekb = broeka++; Operatoren -> vil bli betraktet som en unær operator hvis vi utvider bruksområdet til den. Operatorene new og delete har spesielle regler for bruk. Dette må vi ta hensyn til hvis vi skal definere dem. Temaet blir ikke behandlet her. Ikke lag egne utgaver av dem før du vet nøyaktig hva du gjør Når bør vi ikke overloade en operator? Vær forsiktig når du utvider bruksområdet for operatorer! Det er fullt mulig å definere + til å bety subtraksjon, men det ville skape kaos for den som måtte bruke det. Vi prøver å holde oss så nær den naturlige betydningen som mulig. Lager vi en ny betydning, må den være slik at den ikke er til å misforstå. Eksempel: Operatorene + og - brukes til å addere/subtrahere verdier, for eksempel brøker, komplekse tall og matriser. + kan dessuten brukes til å "addere" (skjøte sammen) tekststrenger, mens - er mer tvilsom i denne sammenhengen. - kan derimot brukes til å finne differansen mellom to tidspunkt (dato og/eller klokkeslett), mens + ikke bør brukes mellom to tidspunkter, det er for usikkert hva det skulle bety. Derimot vil + gi god mening mellom en dato og et heltall (tolket som et antall dager). Når vi utvider bruksområdet for operatorer, kan vi ikke omdefinere prioritet, assosiativitet og antall operander. Det kan i enkelte tilfeller gjøre at vi bør avstå fra å definere en operator vi egentlig kunne ønsket oss.

15 8.Operator overloading side 15 av 16 Eksempel: I programmeringsspråket Pascal betyr operatoren ^ potensering. Det kan være fristende å definere den slik her også, slik at vi kunne skrevet broeka ^ 8; for å opphøye brøken i åttende potens. Men prioritet og assosiativitet er ikke den samme som vi ville forventet ut fra slik den er definert i matematikken. Matematisk sett er den høyreassosiativ, og har høyere prioritet enn multiplikasjon, mens den i C++ ville blitt venstreassosiativ med lavere prioritet enn multiplikasjon. broeka * broekb ^ 8 ville blitt tolket som (broeka * broekb) ^ 8 ikke som broeka * (broekb ^ 8) For å unngå misforståelser bør vi derfor la være å overloade denne operatoren. Ikke kan vi finne en annen som vil fungere tilfredsstillende heller, for alle høyreassosiative operatorer med høyere prioritet enn multiplikasjon er unære Løsninger til oppgavene foran Oppgave 1 hjelp er en lokal variabel som vil forsvinne når funksjonen er ferdig. Derfor kan vi ikke returnere en referanse til denne variabelen, bare en kopi av den. *this vil derimot ikke forsvinne, så den kan vi returnere en referanse til. Oppgave 2 A = B = C; tolkes som A = (B = C); Verdien av siste uttrykk er const, OK (A = B) = C; får const uttrykk på venstre side, gir kompileringsfeil ++(A = B); kan ikke øke verdien av en const, kompileringsfeil Den mest vanlige bruken av operatoren vil gå bra, mens mer spesiell bruk gir kompileringsfeil. Oppgave 3 ostream &broek::operator<<(ostream &ut) { ut << teller << " / " << nevner; return ut; Funksjonskall Broek A;... A << cout << endl; cout << "Svaret blir " << A; OK kompileringsfeil (hvis den vanlige eksisterer, blir den brukt) Ved sammenkjeding må brøken stå først. Det er lite hensiktsmessig siden vi ofte vil ønske å skrive ut andre ting (f.eks. tekster) foran. En annen grunn til at vi vil ha argumentene i motsatt rekkefølge, er at det er lettest å huske (og forstå) hvis samme operator har argumentene i samme rekkefølge i alle versjonene.

16 8.Operator overloading side 16 av 16 Oppgave 4 #include <string> #include <iostream> using namespace std; enum Dag {mandag, tirsdag, onsdag, torsdag, fredag, loerdag, foendag; const string dagnavn[] = {"mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag", "søndag"; ostream &operator<<(ostream &ut, Dag dag) { ut << dagnavn[dag]; return ut; int main() { skriver ut mandag og onsdag cout << mandag << endl; cout << onsdag << endl; return 0;

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

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

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

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 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

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

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

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

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 2006 Varighet: 0900-300 Fagnummer: Fagnavn: Klasse(r): LV95D Objektorientert programmering i C++ nettstudenter

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

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

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

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

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

TDT4102 - Prosedyre- og objektorientert programmering

TDT4102 - Prosedyre- og objektorientert programmering Konteringseksamen i TDT4102 - Prosedyre- og objektorientert programmering Lørdag 8. august 2009 Kontaktperson under eksamen: Hallvard Trætteberg Eksamensoppgaven er utarbeidet av Trond Aalberg Språkform:

Detaljer

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon Kapittel 9: Sortering og søking Kort versjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

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

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

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

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: 15. mai 2003 Varighet: Fagnummer: Fagnavn: Klasse(r): 3 timer LO116D Programmering i Visual Basic FU Studiepoeng:

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

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

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl. 09.00 13.

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl. 09.00 13. BOKMÅL Side 1 av 5 NTNU Norges teknisk-naturvitenskapelige universitet Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap KONTERINGSEKSAMEN

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

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

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

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

Del 3: Evaluere uttrykk

Del 3: Evaluere uttrykk Del 3: Evaluere uttrykk Hva skal vi gjøre? Hvordan lagre Asp-verdier Hvilke operasjoner må jeg implementere? Er operasjonen lovlig? Utføre operasjonen Strukturen til interpreten vår f.asp 3&4 Interpret

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

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

23.09.2015. Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

23.09.2015. Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert. Grunnkurs i objektorientert programmering Introduksjon til objektorientert programmering INF1000 Høst 2015 Siri Moe Jensen INF1000 - Høst 2015 uke 5 1 Siri Moe Jensen INF1000 - Høst 2015 uke 5 2 Kristen

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

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

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

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

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

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN!

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN! Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse Transaksjonshåndtering LC191D Videregående programmering

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

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

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

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

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

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

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

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

MAT-INF 1100: Obligatorisk oppgave 1

MAT-INF 1100: Obligatorisk oppgave 1 8. september, 2005 MAT-INF 1100: Obligatorisk oppgave 1 Innleveringsfrist: 23/9-2005, kl. 14:30 Informasjon Den skriftlige besvarelsen skal leveres på ekspedisjonskontoret i 7. etg. i Niels Henrik Abels

Detaljer

Eksamensoppgaver 2014

Eksamensoppgaver 2014 Eksamensoppgaver 2014 Først kommer alle de relevante små-oppgavene og deretter den store oppgaven. Oppgave 1 (4 p) a) Hva er verdien til tall etter at følgende kode er utført? tall = (5+3)*2 tall = tall+2

Detaljer

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon Kapittel 9: Sortering og søking Kort versjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

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

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

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier 11. okt. 2011 Siri Moe Jensen Inst. for informatikk, UiO 1 Innhold Eksamen INF1000 Høst 2011: Oppgave 4-7 Tekstmanipulering Metoder med og uten

Detaljer

1 ØVING I WINDOWS FRA CHRISTIAN ANDOLO

1 ØVING I WINDOWS FRA CHRISTIAN ANDOLO 1 ØVING I WINDOWS FRA CHRISTIAN ANDOLO Program fra sekunder Lag et program som leser inn en tid i sekunder (et stort tall). Deretter skal programmet skrive ut hvor mange timer, minutter og sekunder dette

Detaljer

Kapittel 8: Sortering og søking

Kapittel 8: Sortering og søking Kapittel 8: Sortering og søking Forelesningsnotater for: Java som første programmeringsspråk Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk, 2003. ISBN 82-02-23274-0 http://www.ii.uib.no/~khalid/jfps/

Detaljer

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen? OPPGAVESETT 4 PROSEDYRER Oppgavesett 4 i Programmering: prosedyrer. I dette oppgavesettet blir du introdusert til programmering av prosedyrer i Java. Prosedyrer er også kjent som funksjoner eller subrutiner.

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

Norsk informatikkolympiade runde

Norsk informatikkolympiade runde Norsk informatikkolympiade 2017 2018 1. runde Sponset av Uke 46, 2017 Tid: 90 minutter Tillatte hjelpemidler: Kun skrivesaker. Det er ikke tillatt med kalkulator eller trykte eller håndskrevne 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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Kontinuasjonseksamen i : Eksamensdag : INF1000 Grunnkurs i objektorientert programmering Fredag 7. januar Tid for eksamen : 09.00

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

INF1010 våren januar. Objektorientering i Java

INF1010 våren januar. Objektorientering i Java INF1010 våren 2017 25. januar Objektorientering i Java Om enhetstesting (Repetisjon av INF1000 og lær deg Java for INF1001 og INF1100) Stein Gjessing Hva er objektorientert programmering? F.eks: En sort

Detaljer

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04 INF1000 (Uke 15) Eksamen V 04 Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Anja Bråthen Kristoffersen og Are Magnus Bruaset 22-05-2006 2 22-05-2006 3 22-05-2006 4 Oppgave 1a

Detaljer

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04 INF1000 (Uke 15) Eksamen V 04 Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Anja Bråthen Kristoffersen og Are Magnus Bruaset 22-05-2006 2 22-05-2006 3 22-05-2006 4 Oppgave 1a

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: 11. juni 2004 Tid for eksamen: 9.00 12.00 Oppgavesettet er på 8

Detaljer

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten. Oppgave 1: RPJ, kapittel 4, oppg. 2 INF1000 Plenumsgruppe 1, 22.09.02 Hvis en person har inntekt < 10 000, så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første 10 000 og 30% på

Detaljer

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten. Oppgave 1: RPJ, kapittel 4, oppg. 2 INF1000 Plenumsgruppe 1, 22.09.02 Hvis en person har inntekt < 10 000, så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første 10 000 og 30% på

Detaljer

INF1000 Eksamen 2014 (modifisert)

INF1000 Eksamen 2014 (modifisert) INF1000 Eksamen 2014 (modifisert) Oppgave 1 (4 poeng) a) Hva er verdien til tall etter at følgende kode er utført? tall = (5+3)*2 tall = tall+2 b) Anta at følgende programsetninger utføres. Hva skrives

Detaljer

MAT-INF 1100: Obligatorisk oppgave 1

MAT-INF 1100: Obligatorisk oppgave 1 3. september, 2004 MAT-INF 1100: Obligatorisk oppgave 1 Innleveringsfrist: 17/9-2004, kl. 14:30 Informasjon Den skriftlige besvarelsen skal leveres på ekspedisjonskontoret i 7. etg. i Niels Henrik Abels

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO FASIT UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Kontinuasjonseksamen i : Eksamensdag : INF1000 Grunnkurs i objektorientert programmering Fredag 7. januar Tid for eksamen :

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

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

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

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; } Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; Hva skrives ut på skjermen når følgende kode utføres? int [] tallene =

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

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon Kapittel 9: Sortering og søking Kort versjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

Detaljer

Argumenter fra kommandolinjen

Argumenter fra kommandolinjen Argumenter fra kommandolinjen Denne veiledningen er laget for å vise hvordan man kan overføre argumenter fra kommandolinjen til et program. Hvordan transportere data fra en kommandolinje slik at dataene

Detaljer

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator Litt mer om uttrykk: ++ og -- INF : Forelesning Løkker og arrayer Mye og viktig stoff. Du MÅ løse oppgaver selv for å lære!. september 6 Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for

Detaljer

E K S A M E N. Grunnleggende datakunnskap og programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB / 98HINGA

E K S A M E N. Grunnleggende datakunnskap og programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB / 98HINGA Høgskolen i Gjøvik E K S A M E N FAGNAVN: FAGNUMMER: Grunnleggende datakunnskap og programmering L 182 A EKSAMENSDATO: 15. desember 1998 KLASSE: 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB / 98HINGA

Detaljer

Reelle tall på datamaskin

Reelle tall på datamaskin Reelle tall på datamaskin Knut Mørken 5. september 2007 1 Innledning Tirsdag 4/9 var tema for forelesningen hvordan reelle tall representeres på datamaskin og noen konsekvenser av dette, særlig med tanke

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

Kontinuasjonseksamen

Kontinuasjonseksamen Høgskolen i Gjøvik Avdeling for teknologi Kontinuasjonseksamen FAGNAVN: FAGNUMMER: Objekt-orientert programmering IMT1081 / L183A EKSAMENSDATO: 5. januar 2005 KLASSE(R): 03HBIND*, 03HBINFA, 03HBMETEA TID:

Detaljer

Kapittel 8: Sortering og søking INF100

Kapittel 8: Sortering og søking INF100 Forelesningsnotater for: Kapittel 8: Sortering og søking INF100 Java som første programmeringsspråk Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk, 2003. ISBN 82-02-23274-0 http://www.ii.uib.no/~khalid/jfps/

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

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL. 09.00 13.00

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL. 09.00 13.00 Side 1 av 6 NTNU Norges teknisk-naturvitenskapelige universitet BOKMÅL Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap EKSAMEN I FAG

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

TDT4102 - Prosedyre- og objektorientert programmering

TDT4102 - Prosedyre- og objektorientert programmering Eksamensoppgave i TDT4102 - Prosedyre- og objektorientert programmering Lørdag 6. juni 2009 Kontaktperson under eksamen: Trond Aalberg (97631088) Eksamensoppgaven er utarbeidet av Trond Aalberg og kvalitetssikret

Detaljer

Kontinuasjonseksamen

Kontinuasjonseksamen Høgskolen i Gjøvik Avdeling for Teknologi Kontinuasjonseksamen FAGNAVN: FAGNUMMER: Objekt-orientert programmering L 183 A EKSAMENSDATO: 3. januar 2001 KLASSE: 99HINDA / 99HINDB / 99HINEA 99HDMUA / 99HDMUB

Detaljer

INF1000 Behandling av tekster

INF1000 Behandling av tekster INF1000 Behandling av tekster Marit Nybakken marnybak@ifi.uio.no 23. februar 2004 Tekster Vi kommer nesten aldri utenom å bruke tekststrenger i programmene våre, ikke minst fordi det nesten alltid skal

Detaljer

BOKMÅL Side 1 av 12. Fakultet for informasjonsteknologi,

BOKMÅL Side 1 av 12. Fakultet for informasjonsteknologi, BOKMÅL Side 1 av 12 NTNU Norges teknisk-naturvitenskapelige universitet Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap TENTATIVT LØSNINGSFORSLAG

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1010 Objektorientert programmering Dato: 9. juni 2016 Tid for eksamen: 09.00 15.00 (6 timer) Oppgavesettet er på 7 sider. Vedlegg:

Detaljer

Løsnings forslag i java In115, Våren 1996

Løsnings forslag i java In115, Våren 1996 Løsnings forslag i java In115, Våren 1996 Oppgave 1a For å kunne kjøre Warshall-algoritmen, må man ha grafen på nabomatriseform, altså en boolsk matrise B, slik at B[i][j]=true hvis det går en kant fra

Detaljer

Fakultet for informasjonsteknologi, Tentativt løsningsforslag TDT4102 Prosedyre og objektorientert programmering. Fredag 6. juni 2008 Kl. 09.00 13.

Fakultet for informasjonsteknologi, Tentativt løsningsforslag TDT4102 Prosedyre og objektorientert programmering. Fredag 6. juni 2008 Kl. 09.00 13. BOKMÅ L Side 1 av 16 NTNU Norges teknisk-naturvitenskapelige universitet Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap Tentativt løsningsforslag

Detaljer

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk Eksamen EMNENAVN: EMNENUMMER: Objekt-orientert programmering IMT1082 EKSAMENSDATO: 21. mai 2014 KLASSE(R): 13HBIDAT*, 13HBPUA, 13HBDRA, 13HBISA,

Detaljer

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag E K S A M E N. EKSAMENSDATO: 12. desember 1995 TID:

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag E K S A M E N. EKSAMENSDATO: 12. desember 1995 TID: Høgskolen i Gjøvik vdeling for elektro- og allmennfag E K S M E N FGNVN: FGNUMMER: lgoritmiske metoder LO 64 EKSMENSDTO:. desember 995 TID: 09.00-4.00 FGLÆRER: Frode Haug KLSSE: / E NTLL SIDER UTLEVERT:

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 1 LF LØSNINGSFORSLAG Mål for denne øvinga:

Detaljer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer Eksamen i Algoritmer og Datastrukturer IAI 21899 Høgskolen i Østfold Avdeling for informatikk og automatisering Lørdag 15. desember 2001, kl. 09.00-14.00 Hjelpemidler: Alle trykte og skrevne hjelpemidler.

Detaljer

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon Kapittel 9: Sortering og søking Kort versjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

Detaljer

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 Forklaring til programmet AbstraktKontoTest.java med tilhørende

Detaljer

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2017

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2017 Norsk informatikkolympiade 2017 2018 1. runde Sponset av Uke 46, 2017 Tid: 90 minutter Tillatte hjelpemidler: Kun skrivesaker. Det er ikke tillatt med kalkulator eller trykte eller håndskrevne hjelpemidler.

Detaljer