ark-modellen
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}