Prøve IT2 - Med vekt på tabeller og funksjoner. (Kapittel 5 og 6.)

28.01.2016

Del 1 - Uten hjelpemidler - Leveres på papir før man starter på Del 2.

1.

Deklarer en tabell-variabel (array) med navn tall som inneholder tallene:

17,3,4,11,9,8,15,3

var tall: Array = [17, 3, 4, 11, 9, 8, 15, 3 ];  

2.

Skriv instruksjonen som sorterer tabellen i oppgave 1 i synkende rekkefølge.

 

tall.sort(Array.NUMERIC+Array.DESCENDING);  

3.

Deklarer en to-dimensjonell tabell med navn tall som har dette innholdet:

1 4 9 16
1 8 27 64
var tall: Array = [
                    [1,1],
                    [4,8],
                    [9,27],
                    [16,64]
                  ]
eller:
var tall: Array = [
                    [1, 4,  9, 16 ],  
                    [1, 8, 27, 64 ]
                  ];
(Avhengig av om man tenker kolonner eller rader først.) 

4.

Deklarer en tabell med objekter (vanlig tabell med assosiative array som elementer), med navn personer, som har dette innholdet:

navn: Schwank
yrke: lege
navn: Woxholdt
yrke: sjåfør
navn: Ferkenberg
yrke: rørlegger

 

var personer: Array = [
                         {navn: "Schwank",    yrke: "lege"      },  
                         {navn: "Woxholdt",   yrke: "sjåfør"    },
                         {navn: "Ferkenberg", yrke: "rørlegger" }
                      ];

5.

Vi har tabeller som inneholder siste 7 dagers temperaturer på forskjellige steder, eksempelvis:

var freksneset: Array = [3, 2, -5, -2.5, 1, 2, 2];

a) Lag en funksjon med navn mimimumstemperatur som tar imot en slik tabell som parameter og returnerer den minste temperaturen.

(Altså på formen: function minimumstemperatur(t: Array):Number { ... } )

b) Lag en funksjon med navn kuldedager som tar imot en slik tabell som parameter og returnerer antall dager med negative temperaturer.

 

// a)
function minimumstemperatur(t: Array): Number {
   var min: Number = Number.MAX_VALUE;
   for(var i: int=0; i < t.length; i++){
      if(t[i]<min) {min=t[i];}
   }//for
   return min;
}//minimumstemperatur()
// Test:
trace("Minste temperatur i i Freksneset: "+ minimumstemperatur(freksneset) ); 
// b)
function kuldedager(t: Array): int {
   var antall: int = 0
   for(var i: int = 0; i < t.length; i++) {
      if ( t[i] < 0 ) {
         antall++;
      }//if
   }//for
   return antall;
}//kuldedager()

6.

Lag en funksjon med navn sum_Oyne som simulerer kast av to terninger og returnerer summen av antall øyne på de to terningene.
(Bruk Math.random() funksjonen.)

 

function sum_Oyne(): int {
   return int(Math.random()*6+1) + int(Math.random()*6+1); 
}//sum_Oyne()   

7.

Vi har en variabel med navn bestillinger, som inneholder objekter (assosiative array) med informasjon om bestillinger som viser navnet på kjøper, hva de har kjøpt, prisen på det de har kjøpt og antallet de har kjøpt.

Tabellen kan se omtrent slik ut:

var bestillinger: Array = [
   {kunde: "Freksnes", vare: "Dippedutt", pris: 77.99, antall: 2 },
   {kunde: "Dusterud", vare: "Duppeditt", pris: 27.99, antall: 1 },
   {kunde: "Svorken",  vare: "Duppeditt", pris: 27.99, antall: 3 },
   {kunde: "Svenklien",vare: "Ting",      pris: 56.99, antall: 2 },
        ...
   {kunde: "Freksnes", vare: "Greie",     pris: 22.99,   antall: 1 }
];

Lag en funksjon med navn antall_Solgt som tar imot en slik tabell og et varenavn som parameter, og finner og returnerer antallet som er solgt totalt av denne type vare.

(Hvis vi etter å ha laget funksjonen utfører instruksjonen:

var a: int = antall_Solgt(bestillinger, "Ting");

skal variabelen etterpå inneholde hvor mange "Ting" det er solgt totalt. )

 

function antall_Solgt(t: Array,vare: String):int {
   var antall: int = 0;
   for(var i: int = 0; i < t.length; i++) {
      if(t[i].vare == vare) {
         antall += t[i].antall;
      }//if
   }//for
   return antall;
}//antall_Solgt()
//Test:
trace("Antall ting:        " + antall_Solgt(bestillinger,"Ting"));
trace("Antall Duppeditter: " + antall_Solgt(bestillinger,"Duppeditt")); 

8.

Luresen og Snytenstrup driver bruktbilbutikk og har lagret bilene sine i en tabell som ser omtrent slik ut (bare tre første og siste element i tabellen er vist):

var bruktbiler: Array =
   [ { merke: "Volvo", farve: "Blå",     pris: 110, status: "ok" },
     { merke: "Fiat" , farve: "Rød",     pris: 160, status: "strøken"},
     { merke: "Lada" , farve: "Rustrød", pris: 68,  status: "vrak" },
                 . . .
     { merke: "Audi",  farve: "Hvit",    pris: 170, status: "ok" } ];

a) Skriv kode som endrer prisen på Fiat-bilen til 150.

b) Skriv kode som sorterer denne tabellen etter fallende pris.

c) Lag en funksjon som finner og returnerer samlet verdi av alle bilene når en slik tabell blir brukt som parameter til funksjonen.

d) Lag en funksjon med en slik tabell som parameter, som går gjennom tabellen og endrer prisen til 5 på alle biler som har status "vrak".

 

// a)
bruktbiler[1].pris = 150;
//b)
bruktbiler.sortOn("pris",Array.NUMERIC+Array.DESCENDING); 
//c)
function totalverdi(t: Array): Number {
   var sum: Number = 0.0;
   for(var i:int = 0; i < t.length; i++) {
      sum += t[i].pris;
   }//for
   return sum;
}//totalverdi()
//test:
trace("Total verdi: " + totalverdi(bruktbiler) ); 
// d)
function endre(t: Array): void {
   for (var i: int = 0; i < t.length; i++) {
      if (t[i].status == "vrak") {
         t[i].pris = 5;
      } //if
   } //for
} //totalverdi()

9.

Gitt en todimensjonal avstandstabell som ligger i variabelen avstander:

0 22 41 71 113
22 0 21 51 93
41 21 0 30 72
71 51 30 0 43
113 93 72 43 0

og en endimensjonal tabell:

var sted: Array = ["arendal", "grimstad", "lillesand", "kristiansand","mandal"];

der "arendal" har indeks 0, "grimstad" har indeks 1 osv. i avstandstabellen. (Helt likt eksemplet i kapittel 5 Arrayer i læreboken.)

Lag en funksjon som finner avstanden mellom to av disse stedene når stedsnavnene brukes som inngangs-parametere til funksjonen.

 

function finnAvstand(fra: String, til: String): int {
   var fraindeks: int = sted.indexOf(fra);
   var tilindeks: int = sted.indexOf(til);
   if( (fraindeks>=0) && (tilindeks>=0) ){    //feilsjekking
      return avstander[fraindeks][tilindeks];
   } else {
      return -1;
   }//if
}//finnAvstand()

Del 2 - Praktisk

Leveres i It's Learning-mappen "Prøve 28.01.16 - Praktisk" - Alle hjelpemidler
Må levere del 1 før hjelpemidler taes frem.

Se på krypteringseksemplet side 129 - 132 i læreboken.

Lag din egen tabell med alle store og små bokstaver i alfabetet i tilfeldig rekkefølge.
Tabellen skal brukes til å kryptere en tekstmelding ved å skifte ut alle bokstavene med indeksen bokstaven har i den tabellen du lagde.

Lag en applikasjon som tar imot en tekstmelding fra brukeren i et TextArea (se i Components-menyen i Flash), krypterer meldingen og skriver ut den krypterte meldingen i et annet TextArea når brukeren har trykket på en knapp med navnet "Krypter".

Hvis du rekker det kan du lage en knapp med navnet "Dekrypter" som dekrypterer en kryptert melding som brukeren har oppgitt. Da har du en mulighet til å sjekke om programmet virker ved å dekryptere tilbake til det du startet med.

 

// Tabell med nøkkel:  Må stokkes om! Må også ta med store bokstaver!
var key: Array = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"
                  "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
                  "u", "v", "w", "x", "y", "z", "æ", "ø", "å"];

 

/* Litt forskjellige måter å gjøre dette på, når det gjelder skilletegn og   
   andre tegn som ikke er i nøkkel-tabellen. 
   (Skilletegn viktig når man skal dekryptere...)
*/
function krypter(melding: String): String {
   var tabell: Array = melding.split("");
   var kryptert: String = "";
   for(var i: int = 0; i < tabell.length; i++) {
      if(key.indexOf(tabell[i])>=0) {
         kryptert += key.indexOf(tabell[i])+"_";  // bruker _ som skilletegn
      }else{
         kryptert += tabell[i]+"_";	//Andre tegn forblir uforandret
      }//if
   }//for
   return kryptert;
}//krypter()
// Lytterfunksjoner:
krypterBtn.addEventListener(MouseEvent.CLICK, krypterKlikket);
dekryptertBtn.addEventListener(MouseEvent.CLICK, dekrypterKlikket);
function krypterKlikket(event: MouseEvent): void {
   kryptertTa.text = krypter(ukryptertTa.text);
}//krypterKlikket()
function dekrypterKlikket(event: MouseEvent): void {
   // ikke ferdig
}//dekrypterKlikket()