ark-modellen

Upload: hallvard

Post on 30-May-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 Ark-modellen

    1/83

    1

    Tolkning og kjring av

    Java-kode De fleste har en intuitiv forstelse av mer eller mindre enkle Java-

    programmer (variabeldeklarasjoner, uttrykk, metodekall osv.)

    Imidlertid trengs en mer detaljert modell for at nyanser og komplisertetilfeller skal kunne forsts.

    Eksempel: for (int i = 0; i < 10; i++) {

    if (...) {break;

    }}

    hvilken verdi har i-variablen etter for-setningen?

    Eksempel: public int foo(int n) {

    if (n

  • 8/14/2019 Ark-modellen

    2/83

    2

    Ark-modellen for kjring

    Tenk p programmet som enoppskrift med et tilhrende ark for notere verdier.

    Til arket hrer en pil som peker pneste linje/setning i programmet.

    Hver gang en kommer til envariabeldeklarasjon, utvides arketmed en navngitt verdi til.

    Ved tilordning, erstattes den

    gamle verdien med den nye. Eksempel:

    int a = 1;

    int b = a + 1;

    a = b + 1;

  • 8/14/2019 Ark-modellen

    3/83

    3

    Ark-modellen for kjring

    Tenk p programmet som enoppskrift med et tilhrende ark for notere verdier.

    Til arket hrer en pil som peker pneste linje/setning i programmet.

    Hver gang en kommer til envariabeldeklarasjon, utvides arketmed en navngitt verdi til.

    Ved tilordning, erstattes den

    gamle verdien med den nye. Eksempel:

    int a = 1

    int a = 1;

    int b = a + 1;

    a = b + 1;

  • 8/14/2019 Ark-modellen

    4/83

    4

    Ark-modellen for kjring

    Tenk p programmet som enoppskrift med et tilhrende ark for notere verdier.

    Til arket hrer en pil som peker pneste linje/setning i programmet.

    Hver gang en kommer til envariabeldeklarasjon, utvides arketmed en navngitt verdi til.

    Ved tilordning, erstattes den

    gamle verdien med den nye. Eksempel:

    int a = 1

    int b = 2

    int a = 1;

    int b = a + 1;

    a = b + 1;

  • 8/14/2019 Ark-modellen

    5/83

    5

    Ark-modellen for kjring

    Tenk p programmet som enoppskrift med et tilhrende ark for notere verdier.

    Til arket hrer en pil som peker pneste linje/setning i programmet.

    Hver gang en kommer til envariabeldeklarasjon, utvides arketmed en navngitt verdi til.

    Ved tilordning, erstattes den

    gamle verdien med den nye. Eksempel:

    int a = 3

    int b = 2

    int a = 1;

    int b = a + 1;

    a = b + 1;

  • 8/14/2019 Ark-modellen

    6/83

    6

    Ark-modellen forts.

    Hver type Java-snutt kan forklares ved vise hvordanarket brukes eller endres av at snutten kjres.

    Deklarasjon: ; F.eks. int a;

    ny variabel legges til arket ogsettes til standardverdien for typen

    Deklarasjon: = ; F.eks. int a = 1;

    ny variabel legges til arket

    Tilordning: = ; F.eks. a = 1; verdien til variablen erstattes

    Tilleggsregel:Sammensatte deklarasjoner gjres i sekvens: int a, b; utfres som

    int a; int b;

    int a;

    int a = 1;

    a = 1;

  • 8/14/2019 Ark-modellen

    7/83

    7

    Ark-modellen forts.

    Hver type Java-snutt kan forklares ved vise hvordanarket brukes eller endres av at snutten kjres.

    Deklarasjon: ; F.eks. int a;

    ny variabel legges til arket ogsettes til standardverdien for typen

    Deklarasjon: = ; F.eks. int a = 1;

    ny variabel legges til arket

    Tilordning: = ; F.eks. a = 1; verdien til variablen erstattes

    Tilleggsregel:Sammensatte deklarasjoner gjres i sekvens: int a, b; utfres som

    int a; int b;

    int a = 0int a;

    int a = 1;

    a = 1;

  • 8/14/2019 Ark-modellen

    8/83

    8

    Ark-modellen forts.

    Hver type Java-snutt kan forklares ved vise hvordanarket brukes eller endres av at snutten kjres.

    Deklarasjon: ; F.eks. int a;

    ny variabel legges til arket ogsettes til standardverdien for typen

    Deklarasjon: = ; F.eks. int a = 1;

    ny variabel legges til arket

    Tilordning: = ; F.eks. a = 1; verdien til variablen erstattes

    Tilleggsregel:Sammensatte deklarasjoner gjres i sekvens: int a, b; utfres som

    int a; int b;

    int a = 0int a;

    int a = 1int a = 1;

    a = 1;

  • 8/14/2019 Ark-modellen

    9/83

    9

    Ark-modellen forts.

    Hver type Java-snutt kan forklares ved vise hvordanarket brukes eller endres av at snutten kjres.

    Deklarasjon: ; F.eks. int a;

    ny variabel legges til arket ogsettes til standardverdien for typen

    Deklarasjon: = ; F.eks. int a = 1;

    ny variabel legges til arket

    Tilordning: = ; F.eks. a = 1; verdien til variablen erstattes

    Tilleggsregel:Sammensatte deklarasjoner gjres i sekvens: int a, b; utfres som

    int a; int b;

    int a = 0int a;

    int a = 1int a = 1;

    int a = ?a = 1;

  • 8/14/2019 Ark-modellen

    10/83

    10

    Ark-modellen forts.

    Hver type Java-snutt kan forklares ved vise hvordanarket brukes eller endres av at snutten kjres.

    Deklarasjon: ; F.eks. int a;

    ny variabel legges til arket ogsettes til standardverdien for typen

    Deklarasjon: = ; F.eks. int a = 1;

    ny variabel legges til arket

    Tilordning: = ; F.eks. a = 1; verdien til variablen erstattes

    Tilleggsregel:Sammensatte deklarasjoner gjres i sekvens: int a, b; utfres som

    int a; int b;

    int a = 0int a;

    int a = 1int a = 1;

    int a = 1a = 1;

  • 8/14/2019 Ark-modellen

    11/83

    11

    Ark kan ligge i lag og

    kommer og gr Med {...} vil et nytt, temporrt ark kan legges opp et

    eksisterende. Eksempel:

    Slike {...}-blokker er et signal om at variablene har kortvarig

    relevans, f.eks. inneholder midlertidige mellomverdier. Nye (temporre) variabler kan

    introduseres i alle slike {...}-blokker,ogs i if-else-grenser og i while og for-lkker.

    Nr en blokk er utfrt, fjernes arket og tilhrende variabler.

    int a = 1;

    {

    int b = a + 1;

    a = b + 1;

    }

  • 8/14/2019 Ark-modellen

    12/83

    12

    Ark kan ligge i lag og

    kommer og gr Med {...} vil et nytt, temporrt ark kan legges opp et

    eksisterende.

    Eksempel:

    Nye (temporre) variabler kan

    introduseres i alle slike {...}-blokker,ogs i if-else-grenser og i while og for-lkker.

    Nr variabler utfres som uttrykk eller tilordnes en ny verdi, letesvariablen opp p arkene som er aktive, fra verst til underst.

    Nr en blokk er utfrt, fjernes arket og tilhrende variabler.

    int a = 1;

    {int b = a + 1;

    a = b + 1;

    }

  • 8/14/2019 Ark-modellen

    13/83

    13

    Ark kan ligge i lag og

    kommer og gr Med {...} vil et nytt, temporrt ark kan legges opp et

    eksisterende.

    Eksempel:

    Nye (temporre) variabler kan

    introduseres i alle slike {...}-blokker,ogs i if-else-grenser og i while og for-lkker.

    Nr variabler utfres som uttrykk eller tilordnes en ny verdi, letesvariablen opp p arkene som er aktive, fra verst til underst.

    Nr en blokk er utfrt, fjernes arket og tilhrende variabler.

    int a = 1int a = 1;

    {int b = a + 1;

    a = b + 1;

    }

  • 8/14/2019 Ark-modellen

    14/83

    14

    Ark kan ligge i lag og

    kommer og gr Med {...} vil et nytt, temporrt ark kan legges opp et

    eksisterende.

    Eksempel:

    Nye (temporre) variabler kan

    introduseres i alle slike {...}-blokker,ogs i if-else-grenser og i while og for-lkker.

    Nr variabler utfres som uttrykk eller tilordnes en ny verdi, letesvariablen opp p arkene som er aktive, fra verst til underst.

    Nr en blokk er utfrt, fjernes arket og tilhrende variabler.

    int a = 1int a = 1;

    {int b = a + 1;

    a = b + 1;

    }

  • 8/14/2019 Ark-modellen

    15/83

    15

    Ark kan ligge i lag og

    kommer og gr Med {...} vil et nytt, temporrt ark kan legges opp et

    eksisterende.

    Eksempel:

    Nye (temporre) variabler kan

    introduseres i alle slike {...}-blokker,ogs i if-else-grenser og i while og for-lkker.

    Nr variabler utfres som uttrykk eller tilordnes en ny verdi, letesvariablen opp p arkene som er aktive, fra verst til underst.

    Nr en blokk er utfrt, fjernes arket og tilhrende variabler.

    int a = 1int a = 1;

    {int b = a + 1;

    a = b + 1;

    }

    int b = 2

  • 8/14/2019 Ark-modellen

    16/83

    16

    Ark kan ligge i lag og

    kommer og gr Med {...} vil et nytt, temporrt ark kan legges opp et

    eksisterende.

    Eksempel:

    Nye (temporre) variabler kan

    introduseres i alle slike {...}-blokker,ogs i if-else-grenser og i while og for-lkker.

    Nr variabler utfres som uttrykk eller tilordnes en ny verdi, letesvariablen opp p arkene som er aktive, fra verst til underst.

    Nr en blokk er utfrt, fjernes arket og tilhrende variabler.

    int a = 1int a = 1;

    {int b = a + 1;

    a = b + 1;

    }

    int b = 2

  • 8/14/2019 Ark-modellen

    17/83

    17

    Ark kan ligge i lag og

    kommer og gr Med {...} vil et nytt, temporrt ark kan legges opp et

    eksisterende.

    Eksempel:

    Nye (temporre) variabler kan

    introduseres i alle slike {...}-blokker,ogs i if-else-grenser og i while og for-lkker.

    Nr variabler utfres som uttrykk eller tilordnes en ny verdi, letesvariablen opp p arkene som er aktive, fra verst til underst.

    Nr en blokk er utfrt, fjernes arket og tilhrende variabler.

    int a = 3int a = 1;

    {int b = a + 1;

    a = b + 1;

    }

    int b = 2

  • 8/14/2019 Ark-modellen

    18/83

    18

    Ark kan ligge i lag og

    kommer og gr Med {...} vil et nytt, temporrt ark kan legges opp et

    eksisterende.

    Eksempel:

    Nye (temporre) variabler kan

    introduseres i alle slike {...}-blokker,ogs i if-else-grenser og i while og for-lkker.

    Nr variabler utfres som uttrykk eller tilordnes en ny verdi, letesvariablen opp p arkene som er aktive, fra verst til underst.

    Nr en blokk er utfrt, fjernes arket og tilhrende variabler.

    int a = 3int a = 1;

    {int b = a + 1;

    a = b + 1;

    }

  • 8/14/2019 Ark-modellen

    19/83

    19

    while

    while-setningen endrer ikke arket, men spesifiserer

    regler for hvordan pilen flytter seg testen og kroppen utfres vekselvis, til testen gir false som verdi

    Eksempel:

    int a = 1;

    while (a < 4) {

    a += 2;

    }

  • 8/14/2019 Ark-modellen

    20/83

    20

    while

    while-setningen endrer ikke arket, men spesifiserer

    regler for hvordan pilen flytter seg testen og kroppen utfres vekselvis, til testen gir false som verdi

    Eksempel:int a = 1

    int a = 1;

    while (a < 4) {

    a += 2;

    }

  • 8/14/2019 Ark-modellen

    21/83

    21

    while

    while-setningen endrer ikke arket, men spesifiserer

    regler for hvordan pilen flytter seg testen og kroppen utfres vekselvis, til testen gir false som verdi

    Eksempel:int a = 1

    int a = 1;

    while (a < 4) {

    a += 2;

    }

  • 8/14/2019 Ark-modellen

    22/83

    22

    while

    while-setningen endrer ikke arket, men spesifiserer

    regler for hvordan pilen flytter seg testen og kroppen utfres vekselvis, til testen gir false som verdi

    Eksempel:int a = 3

    int a = 1;

    while (a < 4) {

    a += 2;

    }

  • 8/14/2019 Ark-modellen

    23/83

    23

    while

    while-setningen endrer ikke arket, men spesifiserer

    regler for hvordan pilen flytter seg testen og kroppen utfres vekselvis, til testen gir false som verdi

    Eksempel:int a = 3

    int a = 1;

    while (a < 4) {

    a += 2;

    }

  • 8/14/2019 Ark-modellen

    24/83

    24

    while

    while-setningen endrer ikke arket, men spesifiserer

    regler for hvordan pilen flytter seg testen og kroppen utfres vekselvis, til testen gir false som verdi

    Eksempel:int a = 5

    int a = 1;

    while (a < 4) {

    a += 2;

    }

  • 8/14/2019 Ark-modellen

    25/83

  • 8/14/2019 Ark-modellen

    26/83

    26

    while

    while-setningen endrer ikke arket, men spesifiserer

    regler for hvordan pilen flytter seg testen og kroppen utfres vekselvis, til testen gir false som verdi

    Eksempel:int a = 5

    int a = 1;

    while (a < 4) {

    a += 2;

    }

  • 8/14/2019 Ark-modellen

    27/83

    27

    for

    for-setningen har subtile forskjeller fra while, fordiden introduserer en implisitt {...}-blokk for init-,test- og steg-delen

    Eksempel:

    test- og steg-delen kan ikke referere til temporre

    variabler i den indre {...}-blokken

    int sum = 0;for (int a = 1;

    a < 4;

    a += 2)

    {

    int b = a*2;sum += b;

    }

  • 8/14/2019 Ark-modellen

    28/83

    28

    for

    for-setningen har subtile forskjeller fra while, fordiden introduserer en implisitt {...}-blokk for init-,test- og steg-delen

    Eksempel:

    test- og steg-delen kan ikke referere til temporre

    variabler i den indre {...}-blokken

    int sum = 0

    int sum = 0;for (int a = 1;

    a < 4;

    a += 2)

    {

    int b = a*2;sum += b;

    }

  • 8/14/2019 Ark-modellen

    29/83

    29

    for

    for-setningen har subtile forskjeller fra while, fordiden introduserer en implisitt {...}-blokk for init-,test- og steg-delen

    Eksempel:

    test- og steg-delen kan ikke referere til temporre

    variabler i den indre {...}-blokken

    int sum = 0

    int sum = 0;for (int a = 1;

    a < 4;

    a += 2)

    {

    int b = a*2;sum += b;

    }

    int a = 1

  • 8/14/2019 Ark-modellen

    30/83

    30

    for

    for-setningen har subtile forskjeller fra while, fordiden introduserer en implisitt {...}-blokk for init-,test- og steg-delen

    Eksempel:

    test- og steg-delen kan ikke referere til temporre

    variabler i den indre {...}-blokken

    int sum = 0

    int sum = 0;for (int a = 1;

    a < 4;

    a += 2)

    {

    int b = a*2;sum += b;

    }

    int a = 1

  • 8/14/2019 Ark-modellen

    31/83

    31

    for

    for-setningen har subtile forskjeller fra while, fordiden introduserer en implisitt {...}-blokk for init-,test- og steg-delen

    Eksempel:

    test- og steg-delen kan ikke referere til temporre

    variabler i den indre {...}-blokken

    int sum = 0

    int sum = 0;for (int a = 1;

    a < 4;

    a += 2)

    {

    int b = a*2;sum += b;

    }

    int a = 1

    int b = 2

  • 8/14/2019 Ark-modellen

    32/83

    32

    for

    for-setningen har subtile forskjeller fra while, fordiden introduserer en implisitt {...}-blokk for init-,test- og steg-delen

    Eksempel:

    test- og steg-delen kan ikke referere til temporre

    variabler i den indre {...}-blokken

    int sum = 2

    int sum = 0;for (int a = 1;

    a < 4;

    a += 2)

    {

    int b = a*2;sum += b;

    }

    int a = 1

    int b = 2

  • 8/14/2019 Ark-modellen

    33/83

    33

    for

    for-setningen har subtile forskjeller fra while, fordiden introduserer en implisitt {...}-blokk for init-,test- og steg-delen

    Eksempel:

    test- og steg-delen kan ikke referere til temporre

    variabler i den indre {...}-blokken

    int sum = 2

    int sum = 0;for (int a = 1;

    a < 4;

    a += 2)

    {

    int b = a*2;sum += b;

    }

    int a = 3

  • 8/14/2019 Ark-modellen

    34/83

    34

    for

    for-setningen har subtile forskjeller fra while, fordiden introduserer en implisitt {...}-blokk for init-,test- og steg-delen

    Eksempel:

    test- og steg-delen kan ikke referere til temporre

    variabler i den indre {...}-blokken

    int sum = 2

    int sum = 0;for (int a = 1;

    a < 4;

    a += 2)

    {

    int b = a*2;sum += b;

    }

    int a = 3

  • 8/14/2019 Ark-modellen

    35/83

    35

    for

    for-setningen har subtile forskjeller fra while, fordiden introduserer en implisitt {...}-blokk for init-,test- og steg-delen

    Eksempel:

    test- og steg-delen kan ikke referere til temporre

    variabler i den indre {...}-blokken

    int sum = 2

    int sum = 0;for (int a = 1;

    a < 4;

    a += 2)

    {

    int b = a*2;sum += b;

    }

    int a = 3

    int b = 6

  • 8/14/2019 Ark-modellen

    36/83

  • 8/14/2019 Ark-modellen

    37/83

    37

    for

    for-setningen har subtile forskjeller fra while, fordiden introduserer en implisitt {...}-blokk for init-,test- og steg-delen

    Eksempel:

    test- og steg-delen kan ikke referere til temporre

    variabler i den indre {...}-blokken

    int sum = 8

    int sum = 0;for (int a = 1;

    a < 4;

    a += 2)

    {

    int b = a*2;sum += b;

    }

    int a = 5

  • 8/14/2019 Ark-modellen

    38/83

  • 8/14/2019 Ark-modellen

    39/83

    39

    for

    for-setningen har subtile forskjeller fra while, fordiden introduserer en implisitt {...}-blokk for init-,test- og steg-delen

    Eksempel:

    test- og steg-delen kan ikke referere til temporre

    variabler i den indre {...}-blokken

    int sum = 8

    int sum = 0;for (int a = 1;

    a < 4;

    a += 2)

    {

    int b = a*2;sum += b;

    }

  • 8/14/2019 Ark-modellen

    40/83

    40

    Egendefinerte funksjoner

    Nr funksjoner kalles, legges et nytt ark p, som skygger for deandre. Argumentene brukes til initialisere parametrene somvariabler p det nye arket:

    Variablene i den kallende funksjonen,er ikke tilgjengelig i den kalte funksjonen. De kan kunkommunisere gjennom parametrene/argumentene

    int x(int n1, int n2)

    { return n1 + n2;}

    int y(int n1, int n2)

    { return n1 n2;}

    int z(int a, int b, int c){

    int n1 = x(a, b);

    int n2 = y(n1, c);

    return n2;}

    z(1, 2, 3)

  • 8/14/2019 Ark-modellen

    41/83

    41

    Egendefinerte funksjoner

    Nr funksjoner kalles, legges et nytt ark p, som skygger for deandre. Argumentene brukes til initialisere parametrene somvariabler p det nye arket:

    Variablene i den kallende funksjonen,er ikke tilgjengelig i den kalte funksjonen. De kan kunkommunisere gjennom parametrene/argumentene

    int a = 1

    int b = 2

    int c = 3

    int x(int n1, int n2)

    { return n1 + n2;}

    int y(int n1, int n2)

    { return n1 n2;}

    int z(int a, int b, int c){

    int n1 = x(a, b);

    int n2 = y(n1, c);

    return n2;}

    z(1, 2, 3)

  • 8/14/2019 Ark-modellen

    42/83

    42

    Egendefinerte funksjoner

    Nr funksjoner kalles, legges et nytt ark p, som skygger for deandre. Argumentene brukes til initialisere parametrene somvariabler p det nye arket:

    Variablene i den kallende funksjonen,er ikke tilgjengelig i den kalte funksjonen. De kan kunkommunisere gjennom parametrene/argumentene

    int a = 1

    int b = 2

    int c = 3

    int n1 =

    int x(int n1, int n2)

    { return n1 + n2;}

    int y(int n1, int n2)

    { return n1 n2;}

    int z(int a, int b, int c){

    int n1 = x(a, b);

    int n2 = y(n1, c);

    return n2;}

    z(1, 2, 3)

  • 8/14/2019 Ark-modellen

    43/83

    43

    Egendefinerte funksjoner

    Nr funksjoner kalles, legges et nytt ark p, som skygger for deandre. Argumentene brukes til initialisere parametrene somvariabler p det nye arket:

    Variablene i den kallende funksjonen,er ikke tilgjengelig i den kalte funksjonen. De kan kunkommunisere gjennom parametrene/argumentene

    int a = 1

    int b = 2

    int c = 3

    int n1 =

    int x(int n1, int n2)

    { return n1 + n2;}

    int y(int n1, int n2)

    { return n1 n2;}

    int z(int a, int b, int c){

    int n1 = x(a, b);

    int n2 = y(n1, c);

    return n2;}

    z(1, 2, 3)

    int n1 = 1

    int n2 = 2

  • 8/14/2019 Ark-modellen

    44/83

    44

    Egendefinerte funksjoner

    Nr funksjoner kalles, legges et nytt ark p, som skygger for deandre. Argumentene brukes til initialisere parametrene somvariabler p det nye arket:

    Variablene i den kallende funksjonen,er ikke tilgjengelig i den kalte funksjonen. De kan kunkommunisere gjennom parametrene/argumentene

    int a = 1

    int b = 2

    int c = 3

    int n1 =

    int x(int n1, int n2)

    { return n1 + n2;}

    int y(int n1, int n2)

    { return n1 n2;}

    int z(int a, int b, int c){

    int n1 = x(a, b);

    int n2 = y(n1, c);

    return n2;}

    z(1, 2, 3)

    int n1 = 1

    int n2 = 2

  • 8/14/2019 Ark-modellen

    45/83

    45

    Egendefinerte funksjoner

    Nr funksjoner kalles, legges et nytt ark p, som skygger for deandre. Argumentene brukes til initialisere parametrene somvariabler p det nye arket:

    Variablene i den kallende funksjonen,er ikke tilgjengelig i den kalte funksjonen. De kan kunkommunisere gjennom parametrene/argumentene

    int a = 1

    int b = 2

    int c = 3

    int n1 = 3

    int x(int n1, int n2)

    { return n1 + n2;}

    int y(int n1, int n2)

    { return n1 n2;}

    int z(int a, int b, int c){

    int n1 = x(a, b);

    int n2 = y(n1, c);

    return n2;}

    z(1, 2, 3)

  • 8/14/2019 Ark-modellen

    46/83

    46

    Egendefinerte funksjoner

    Nr funksjoner kalles, legges et nytt ark p, som skygger for deandre. Argumentene brukes til initialisere parametrene somvariabler p det nye arket:

    Variablene i den kallende funksjonen,er ikke tilgjengelig i den kalte funksjonen. De kan kunkommunisere gjennom parametrene/argumentene

    int a = 1

    int b = 2

    int c = 3

    int n1 = 3

    int n2 =

    int x(int n1, int n2)

    { return n1 + n2;}

    int y(int n1, int n2)

    { return n1 n2;}

    int z(int a, int b, int c){

    int n1 = x(a, b);

    int n2 = y(n1, c);

    return n2;}

    z(1, 2, 3)

  • 8/14/2019 Ark-modellen

    47/83

    47

    Egendefinerte funksjoner

    Nr funksjoner kalles, legges et nytt ark p, som skygger for deandre. Argumentene brukes til initialisere parametrene somvariabler p det nye arket:

    Variablene i den kallende funksjonen,er ikke tilgjengelig i den kalte funksjonen. De kan kunkommunisere gjennom parametrene/argumentene

    int a = 1

    int b = 2

    int c = 3

    int n1 = 3

    int n2 =

    int x(int n1, int n2)

    { return n1 + n2;}

    int y(int n1, int n2)

    { return n1 n2;}

    int z(int a, int b, int c){

    int n1 = x(a, b);

    int n2 = y(n1, c);

    return n2;}

    z(1, 2, 3)

    int n1 = 3

    int n2 = 3

  • 8/14/2019 Ark-modellen

    48/83

    48

    Egendefinerte funksjoner

    Nr funksjoner kalles, legges et nytt ark p, som skygger for deandre. Argumentene brukes til initialisere parametrene somvariabler p det nye arket:

    Variablene i den kallende funksjonen,er ikke tilgjengelig i den kalte funksjonen. De kan kunkommunisere gjennom parametrene/argumentene

    int a = 1

    int b = 2

    int c = 3

    int n1 = 3

    int n2 =

    int x(int n1, int n2)

    { return n1 + n2;}

    int y(int n1, int n2)

    { return n1 n2;}

    int z(int a, int b, int c){

    int n1 = x(a, b);

    int n2 = y(n1, c);

    return n2;}

    z(1, 2, 3)

    int n1 = 3

    int n2 = 3

  • 8/14/2019 Ark-modellen

    49/83

    49

    Egendefinerte funksjoner

    Nr funksjoner kalles, legges et nytt ark p, som skygger for deandre. Argumentene brukes til initialisere parametrene somvariabler p det nye arket:

    Variablene i den kallende funksjonen,er ikke tilgjengelig i den kalte funksjonen. De kan kunkommunisere gjennom parametrene/argumentene

    int a = 1

    int b = 2

    int c = 3

    int n1 = 3

    int n2 = 0

    int x(int n1, int n2)

    { return n1 + n2;}

    int y(int n1, int n2)

    { return n1 n2;}

    int z(int a, int b, int c){

    int n1 = x(a, b);

    int n2 = y(n1, c);

    return n2;}

    z(1, 2, 3)

  • 8/14/2019 Ark-modellen

    50/83

    50

    Egendefinerte funksjoner

    Nr funksjoner kalles, legges et nytt ark p, som skygger for deandre. Argumentene brukes til initialisere parametrene somvariabler p det nye arket:

    Variablene i den kallende funksjonen,er ikke tilgjengelig i den kalte funksjonen. De kan kunkommunisere gjennom parametrene/argumentene

    int a = 1

    int b = 2

    int c = 3

    int n1 = 3

    int n2 = 0

    int x(int n1, int n2)

    { return n1 + n2;}

    int y(int n1, int n2)

    { return n1 n2;}

    int z(int a, int b, int c){

    int n1 = x(a, b);

    int n2 = y(n1, c);

    return n2;}

    z(1, 2, 3)

  • 8/14/2019 Ark-modellen

    51/83

    51

    Egendefinerte funksjoner

    Nr funksjoner kalles, legges et nytt ark p, som skygger for deandre. Argumentene brukes til initialisere parametrene somvariabler p det nye arket:

    Variablene i den kallende funksjonen,er ikke tilgjengelig i den kalte funksjonen. De kan kunkommunisere gjennom parametrene/argumentene

    int x(int n1, int n2)

    { return n1 + n2;}

    int y(int n1, int n2)

    { return n1 n2;}

    int z(int a, int b, int c){

    int n1 = x(a, b);

    int n2 = y(n1, c);

    return n2;}

    z(1, 2, 3) => 0

  • 8/14/2019 Ark-modellen

    52/83

    52

    Rekursive funksjoner

    Samme mekanisme brukes nr funksjoner kaller seg selv. Selv omslike funksjoner er vanskelige skrive rett, er prinsippet det samme.

    Oppgave: Prv kalle flgende funksjon med 3 som argument:

    int fak(int n){

    if (n

  • 8/14/2019 Ark-modellen

    53/83

    53

    Rekursive funksjoner

    Samme mekanisme brukes nr funksjoner kaller seg selv. Selv omslike funksjoner er vanskelige skrive rett, er prinsippet det samme.

    Oppgave: Prv kalle flgende funksjon med 3 som argument:

    int fak(int n){

    if (n

  • 8/14/2019 Ark-modellen

    54/83

    54

    Rekursive funksjoner

    Samme mekanisme brukes nr funksjoner kaller seg selv. Selv omslike funksjoner er vanskelige skrive rett, er prinsippet det samme.

    Oppgave: Prv kalle flgende funksjon med 3 som argument:

    int fak(int n){

    if (n

  • 8/14/2019 Ark-modellen

    55/83

  • 8/14/2019 Ark-modellen

    56/83

    56

    Rekursive funksjoner

    Samme mekanisme brukes nr funksjoner kaller seg selv. Selv omslike funksjoner er vanskelige skrive rett, er prinsippet det samme.

    Oppgave: Prv kalle flgende funksjon med 3 som argument:

    int fak(int n){

    if (n

  • 8/14/2019 Ark-modellen

    57/83

    57

    Rekursive funksjoner

    Samme mekanisme brukes nr funksjoner kaller seg selv. Selv omslike funksjoner er vanskelige skrive rett, er prinsippet det samme.

    Oppgave: Prv kalle flgende funksjon med 3 som argument:

    int fak(int n){

    if (n

  • 8/14/2019 Ark-modellen

    58/83

    58

    Rekursive funksjoner

    Samme mekanisme brukes nr funksjoner kaller seg selv. Selv omslike funksjoner er vanskelige skrive rett, er prinsippet det samme.

    Oppgave: Prv kalle flgende funksjon med 3 som argument:

    int fak(int n){

    if (n

  • 8/14/2019 Ark-modellen

    59/83

    59

    Rekursive funksjoner

    Samme mekanisme brukes nr funksjoner kaller seg selv. Selv omslike funksjoner er vanskelige skrive rett, er prinsippet det samme.

    Oppgave: Prv kalle flgende funksjon med 3 som argument:

    int fak(int n){

    if (n

  • 8/14/2019 Ark-modellen

    60/83

    60

    Rekursive funksjoner

    Samme mekanisme brukes nr funksjoner kaller seg selv. Selv omslike funksjoner er vanskelige skrive rett, er prinsippet det samme.

    Oppgave: Prv kalle flgende funksjon med 3 som argument:

    int fak(int n){

    if (n

  • 8/14/2019 Ark-modellen

    61/83

    61

    Rekursive funksjoner

    Samme mekanisme brukes nr funksjoner kaller seg selv. Selv omslike funksjoner er vanskelige skrive rett, er prinsippet det samme.

    Oppgave: Prv kalle flgende funksjon med 3 som argument:

    int fak(int n){

    if (n

  • 8/14/2019 Ark-modellen

    62/83

    62

    Rekursive funksjoner

    Samme mekanisme brukes nr funksjoner kaller seg selv. Selv omslike funksjoner er vanskelige skrive rett, er prinsippet det samme.

    Oppgave: Prv kalle flgende funksjon med 3 som argument:

    int fak(int n){

    if (n

  • 8/14/2019 Ark-modellen

    63/83

    63

    Rekursive funksjoner

    Samme mekanisme brukes nr funksjoner kaller seg selv. Selv omslike funksjoner er vanskelige skrive rett, er prinsippet det samme.

    Oppgave: Prv kalle flgende funksjon med 3 som argument:

    int fak(int n){

    if (n

  • 8/14/2019 Ark-modellen

    64/83

    64

    Rekursive funksjoner

    Samme mekanisme brukes nr funksjoner kaller seg selv. Selv omslike funksjoner er vanskelige skrive rett, er prinsippet det samme.

    Oppgave: Prv kalle flgende funksjon med 3 som argument:

    int fak(int n){

    if (n

  • 8/14/2019 Ark-modellen

    65/83

    65

    Rekursive funksjoner

    Samme mekanisme brukes nr funksjoner kaller seg selv. Selv omslike funksjoner er vanskelige skrive rett, er prinsippet det samme.

    Oppgave: Prv kalle flgende funksjon med 3 som argument:

    int fak(int n){

    if (n

  • 8/14/2019 Ark-modellen

    66/83

    66

    Rekursive funksjoner

    Samme mekanisme brukes nr funksjoner kaller seg selv. Selv omslike funksjoner er vanskelige skrive rett, er prinsippet det samme.

    Oppgave: Prv kalle flgende funksjon med 3 som argument:

    int fak(int n){

    if (n 6

    int fib(int n)

    { return (n

  • 8/14/2019 Ark-modellen

    67/83

    67

    Rekursive funksjoner

    fak-funksjonen (ogs kalt fakultet og angitt med !) er en skaltenkelt-rekursiv funksjon, siden den kaller seg selv n gang, inntilargumentet blir 1.

    Dersom en ekspanderer uttrykket, ser en hvilke regneoperasjon somblir utfrt (hver parentes tilsvarer et funksjonskall).

    fib-funksjonen er dobbelt-rekursiv, i og med at den kaller seg selv toganger, inntil argumentet er 1 eller 0. Ekspandert gir det:

    Slike nstede kall er fiklete simulere riktig, men prinsippet er igrunnen enkelt og viktig kjenne (og kunne bruke p eksamen).

    Heldigvis gjr Java-maskineriet dette for oss, og noks fort ogs!

    fak(3) = 3 * (fak(2) = 2 * (fak(1) = 1)) == 3 * (2 * 1) = 6

    fib(3) = ((fib(2) = (fib(1) = 1) + (fib(0) = 0)) +

    (fib(1) = 1)

    = (1 + 1) + 1 = 3

  • 8/14/2019 Ark-modellen

    68/83

    68

    Globale variabler Globale variabler lever like lenge som hele

    programmet de dukker opp nr programmet starter

    de lever s lenge programmet er aktivt

    de forsvinner frst nr programmet avslutter

    Globale variabler ligger p et kjempeark underalle andre ark, ogs de knyttet til funksjonskall

    kan endres av alle kode, ogs av koden inni egendefinertefunksjoner

    gjr det mulig for funksjoner formidle resultater til andre deler avprogrammet, ut over return-verdien

    Globale variabler br brukes med forsiktighet,fordi det gjr det vanskeligere isolereprogramdeler fra hverandre

  • 8/14/2019 Ark-modellen

    69/83

    69

    Eksempel: public static int sum = 0, kvadratSum = 0;

    public static void summer(String[] tabell) {

    for (int i = 0; i < tabell.length; i++) {

    int n = Integer.valueOf(tabell[i]);

    sum += n;kvadratSum += n * n;

    }

    }

    public static void main(String[] args) {

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    };

    Hva skrives ut dersom programmet kalles med 1, 2 og 3

    som kommandolinjeargumenter?

    Globale variablerint sum = 0

    int kvadratSum = 0

  • 8/14/2019 Ark-modellen

    70/83

    70

    Eksempel: public static int sum = 0, kvadratSum = 0;

    public static void summer(String[] tabell) {

    for (int i = 0; i < tabell.length; i++) {

    int n = Integer.valueOf(tabell[i]);

    sum += n;kvadratSum += n * n;

    }

    }

    public static void main(String[] args) {

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    };

    Hva skrives ut dersom programmet kalles med 1, 2 og 3

    som kommandolinjeargumenter?

    Globale variablerint sum = 0

    int kvadratSum = 0

    String[] args =

    {1, 2, 3}

  • 8/14/2019 Ark-modellen

    71/83

    71

    Eksempel: public static int sum = 0, kvadratSum = 0;

    public static void summer(String[] tabell) {

    for (int i = 0; i < tabell.length; i++) {

    int n = Integer.valueOf(tabell[i]);

    sum += n;kvadratSum += n * n;

    }

    }

    public static void main(String[] args) {

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    };

    Hva skrives ut dersom programmet kalles med 1, 2 og 3

    som kommandolinjeargumenter?

    Globale variablerint sum = 0

    int kvadratSum = 0

    String[] args =

    {1, 2, 3}

  • 8/14/2019 Ark-modellen

    72/83

    72

    Eksempel: public static int sum = 0, kvadratSum = 0;

    public static void summer(String[] tab) {

    for (int i = 0; i < tab.length; i++) {

    int n = Integer.valueOf(tab[i]);

    sum += n;kvadratSum += n * n;

    }

    }

    public static void main(String[] args) {

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    };

    Hva skrives ut dersom programmet kalles med 1, 2 og 3

    som kommandolinjeargumenter?

    Globale variablerint sum = 0

    int kvadratSum = 0

    String[] args =

    {1, 2, 3}

    String[] tab =

    {1, 2, 3}

  • 8/14/2019 Ark-modellen

    73/83

    73

    Eksempel: public static int sum = 0, kvadratSum = 0;

    public static void summer(String[] tab) {

    for (int i = 0; i < tab.length; i++) {

    int n = Integer.valueOf(tab[i]);

    sum += n;kvadratSum += n * n;

    }

    }

    public static void main(String[] args) {

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    };

    Hva skrives ut dersom programmet kalles med 1, 2 og 3

    som kommandolinjeargumenter?

    Globale variablerint sum = 0

    int kvadratSum = 0

    String[] args =

    {1, 2, 3}

    String[] tab =

    {1, 2, 3}

    int i = 0

  • 8/14/2019 Ark-modellen

    74/83

    74

    Eksempel: public static int sum = 0, kvadratSum = 0;

    public static void summer(String[] tab) {

    for (int i = 0; i < tab.length; i++) {

    int n = Integer.valueOf(tab[i]);

    sum += n;kvadratSum += n * n;

    }

    }

    public static void main(String[] args) {

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    };

    Hva skrives ut dersom programmet kalles med 1, 2 og 3

    som kommandolinjeargumenter?

    Globale variablerint sum = 0

    int kvadratSum = 0

    String[] args =

    {1, 2, 3}

    String[] tab =

    {1, 2, 3}

    int i = 0

    int n = 1

  • 8/14/2019 Ark-modellen

    75/83

    75

    Eksempel: public static int sum = 0, kvadratSum = 0;

    public static void summer(String[] tab) {

    for (int i = 0; i < tab.length; i++) {

    int n = Integer.valueOf(tab[i]);

    sum += n;kvadratSum += n * n;

    }

    }

    public static void main(String[] args) {

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    };

    Hva skrives ut dersom programmet kalles med 1, 2 og 3

    som kommandolinjeargumenter?

    Globale variablerint sum = 1

    int kvadratSum = 0

    String[] args =

    {1, 2, 3}

    String[] tab =

    {1, 2, 3}

    int i = 0

    int n = 1

  • 8/14/2019 Ark-modellen

    76/83

    76

    Eksempel: public static int sum = 0, kvadratSum = 0;

    public static void summer(String[] tab) {

    for (int i = 0; i < tab.length; i++) {

    int n = Integer.valueOf(tab[i]);

    sum += n;kvadratSum += n * n;

    }

    }

    public static void main(String[] args) {

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    };

    Hva skrives ut dersom programmet kalles med 1, 2 og 3

    som kommandolinjeargumenter?

    Globale variablerint sum = 1

    int kvadratSum = 0

    String[] args =

    {1, 2, 3}

    String[] tab =

    {1, 2, 3}

    int i = 0

    int n = 1

  • 8/14/2019 Ark-modellen

    77/83

    77

    Eksempel: public static int sum = 0, kvadratSum = 0;

    public static void summer(String[] tab) {

    for (int i = 0; i < tab.length; i++) {

    int n = Integer.valueOf(tab[i]);

    sum += n;kvadratSum += n * n;

    }

    }

    public static void main(String[] args) {

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    };

    Hva skrives ut dersom programmet kalles med 1, 2 og 3

    som kommandolinjeargumenter?

    Globale variablerint sum = 1

    int kvadratSum = 1

    String[] args =

    {1, 2, 3}

    String[] tab =

    {1, 2, 3}

    int i = 0

    int n = 1

  • 8/14/2019 Ark-modellen

    78/83

    78

    Eksempel: public static int sum = 0, kvadratSum = 0;

    public static void summer(String[] tab) {

    for (int i = 0; i < tab.length; i++) {

    int n = Integer.valueOf(tab[i]);

    sum += n;kvadratSum += n * n;

    }

    }

    public static void main(String[] args) {

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    };

    Hva skrives ut dersom programmet kalles med 1, 2 og 3

    som kommandolinjeargumenter?

    Globale variablerint sum = 1

    int kvadratSum = 1

    String[] args =

    {1, 2, 3}

    String[] tab =

    {1, 2, 3}

    int i = 1

    int n = 2

  • 8/14/2019 Ark-modellen

    79/83

    79

    Eksempel: public static int sum = 0, kvadratSum = 0;

    public static void summer(String[] tab) {

    for (int i = 0; i < tab.length; i++) {

    int n = Integer.valueOf(tab[i]);

    sum += n;kvadratSum += n * n;

    }

    }

    public static void main(String[] args) {

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    };

    Hva skrives ut dersom programmet kalles med 1, 2 og 3

    som kommandolinjeargumenter?

    Globale variablerint sum = 3

    int kvadratSum = 5

    String[] args =

    {1, 2, 3}

    String[] tab =

    {1, 2, 3}

    int i = 1

    int n = 2

  • 8/14/2019 Ark-modellen

    80/83

    80

    Eksempel: public static int sum = 0, kvadratSum = 0;

    public static void summer(String[] tab) {

    for (int i = 0; i < tab.length; i++) {

    int n = Integer.valueOf(tab[i]);

    sum += n;kvadratSum += n * n;

    }

    }

    public static void main(String[] args) {

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    };

    Hva skrives ut dersom programmet kalles med 1, 2 og 3

    som kommandolinjeargumenter?

    Globale variablerint sum = 3

    int kvadratSum = 5

    String[] args =

    {1, 2, 3}

    String[] tab =

    {1, 2, 3}

    int i = 2

    int n = 3

  • 8/14/2019 Ark-modellen

    81/83

    81

    Eksempel: public static int sum = 0, kvadratSum = 0;

    public static void summer(String[] tab) {

    for (int i = 0; i < tab.length; i++) {

    int n = Integer.valueOf(tab[i]);

    sum += n;kvadratSum += n * n;

    }

    }

    public static void main(String[] args) {

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    };

    Hva skrives ut dersom programmet kalles med 1, 2 og 3

    som kommandolinjeargumenter?

    Globale variablerint sum = 6

    int kvadratSum = 14

    String[] args =

    {1, 2, 3}

    String[] tab =

    {1, 2, 3}

    int i = 2

    int n = 3

  • 8/14/2019 Ark-modellen

    82/83

    82

    Eksempel: public static int sum = 0, kvadratSum = 0;

    public static void summer(String[] tab) {

    for (int i = 0; i < tab.length; i++) {

    int n = Integer.valueOf(tab[i]);

    sum += n;kvadratSum += n * n;

    }

    }

    public static void main(String[] args) {

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    };

    Hva skrives ut dersom programmet kalles med 1, 2 og 3

    som kommandolinjeargumenter?

    Globale variablerint sum = 6

    int kvadratSum = 14

    String[] args =

    {1, 2, 3}

    String[] tab =

    {1, 2, 3}

    int i = 2

  • 8/14/2019 Ark-modellen

    83/83

    Eksempel: public static int sum = 0, kvadratSum = 0;

    public static void summer(String[] tab) {

    for (int i = 0; i < tab.length; i++) {

    int n = Integer.valueOf(tab[i]);

    sum += n;kvadratSum += n * n;

    }

    }

    public static void main(String[] args) {

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    summer(args);

    System.out.println(Sum: + sum);

    System.out.println(Kvadratsum: + kvadratSum);

    };

    Hva skrives ut dersom programmet kalles med 1, 2 og 3

    Globale variablerint sum = 6

    int kvadratSum = 14

    String[] args =

    {1, 2, 3}