IT 2 - Kapittel 4, 5 og 6 - Kontrollstrukturer, tabeller og funksjoner

02.02.2017

Løsningsskisser


Del I - Uten hjelpemidler - Leveres på papir før man starter på Del II

1.

Deklarer en tabell-variabel (Array) som inneholder tallene -3, 5,7,14,-12,3,4,17

var tall: Array = [-3,5,7,14,-12,3,4,17 ];

2.

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

tall.sort(Array.NUMERIC);    //Array.ASCENDING er default

3.

Deklarer en to-dimensjonal tabell med dette innholdet:

1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
var tall: Array = [
                     [ 1, 2, 3, 4],
                     [ 2, 4, 6, 8],
                     [ 3, 6, 9,12],
                     [ 4, 8,12,16]
                  ];

4.

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

navn: Ferkenberg
poeng: 9
navn: Woxholdt
poeng: 5
navn: Schwank
poeng: 11
var deltagertabell: Array =
                 [
                    {navn: "Ferkenberg", poeng:  9},
                    {navn: "Woxholdt"  , poeng:  5},
                    {navn: "Schwank"   , poeng: 11}
                 ];

5.

Skriv instruksjonen som sorterer tabellen i oppgave 4 med fallende poengsum.

deltagertabell.sortOn("poeng",
                      Array.NUMERIC+Array.DESCENDING);  //Økende er default

6.

Luresen og Snytenstrup selger bruktbiler og har for tiden et lager med fire biler:

Blå Volvo med pris 110 tusen kroner, rød Fiat med pris 160 tusen kroner, hvit Audi med pris 170 tusen kroner og en rustrød Lada med pris 55 tusen kroner.

a) Deklarer en tabell på hensiktsmessig form som inneholder disse bilene slik at både merkenavn, farve og pris er med i tabellen.

b) Skriv instruksjon som legger inn en ny bil; en grå Ford med prisen 90 tusen kroner.

c) Skriv en funksjon med navn finnVerdi som finner samlet verdi av bilene ut fra tabellen og returnerer denne verdien.

d) Skriv en funksjon med navn harFarve som returnerer verdien true hvis tabellen inneholder en eller flere biler med en farve gitt som parameter til funksjonen.

/// --- Oppgave 6 --- ///
var bruktbiler: Array = 
               [
                 {merke: "Volvo", farve: "Blå",     pris: 110 }, 
                 {merke: "Fiat",  farve: "Rød",     pris: 160 },
                 {merke: "Audi",  farve: "Hvit",    pris: 170 },
                 {merke: "Lada",  farve: "Rustrød", pris: 55 }
              ];
// Oppgave 6 b)
var bil: Object = {merke: "Ford",  farve: "Grå",  pris: 90 };
bruktbiler.push(bil);
// Oppgave 6 c)
function finnVerdi():int {
   var v: int = 0;
      for each(o in bruktbiler) {
         v += o.pris;            //eller o["pris]
      }//for
   return v;
}//finnVerdi()
// Test av finnVerdi() :
trace( "Bilene er tilsammen verdt: " + finnVerdi() );
// Oppgave 6 d)
function harFarve(farve: String):Boolean {
   var funnet: Boolean = false;
   for each(o in bruktbiler) {    // while gjør at
      if( o.farve == farve) {     // at man kan avslutte
         funnet = true;          //  hvis funnet.
      }//if
   }//for
   return funnet;
}//harFarve()
// Test av harFarve() :
trace("Har vi en gul bil: " + harFarve("Gul") ); 
trace("Har vi en grå bil: " + harFarve("Grå") );

Del II - Praktisk - Leveres i ItsLearning-mappen "Prøve 02.02.17" - Alle hjelpemidler

Oppgave 1

Læreboken har i funksjonskapitlet et eksempel på sidene 129-132, der man skriver inn en melding i et tekstfelt og får den kryptert og skrevet ut i et annet tekstfelt.
Her skal vi kryptere på en annen måte:

Vi begrenser oss til store bokstaver, punktum og blank ("space").
Krypteringen skjer ved at bokstavene i en tabell, bokstaver, byttes ut med bokstavene med samme indeks i en annen tabell, nokkel.

Dette kan se slik ut:

var bokstaver: Array = ["A","B","C", ...,"Å","."," "];
var nokkel: Array    = ["F",".","Z", ...," ","R","G"];

I dette tilfellet blir da A byttet ut med F, B med punktum, C med Z osv.

Gjør om programmet i læreboken slik at du krypterer og dekrypterer ved hjelp av tabellene over.

/*
it2 - 02.02.2017 - Del II
Oppgave 1
Kan kopiere det meste fra boken side 129-132.
Trenger bare lage en ny funksjon som erstatter:
   omformMelding()      (Se løsning lenger ned.)
Og redigere litt i:
   krypter() og dekrytper() side 130:
   function krypter(evt:MouseEvent) {
      var melding: String = txtMeldingInn.text;
      txtMeldingUt.text = omformMelding(melding,bokstaver,nokkel);
   }//krypter()
   function krypter(evt:MouseEvent) {
      var melding: String = txtMeldingInn.text;
      txtMeldingUt.text = omformMelding(melding,nokkel,bokstaver);
   }//krypter()
*/
var bokstaver: 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","Æ","Ø","Å","."," "];
var nokkel: Array =
           ["L","M","O","N","P","Q","G","H","I","J","K",
            "A","B","D","C","E","F","R","T","S","V","U",
            "X","Y","W","Z"," ","Ø",".","Æ","Å"];
// Kryptering eller dekryptering kan begge gjøres
// med denne funksjonen ved å bytte rekkefølge
// på tabellene i parameterene fra og til
function omformMelding(melding:String,fra,til:Array):String {
   var omformet: String = "";
   var bokstav: String = "";
   var indeks: int = 0;
   for(var i: int=0; i < melding.length; i++) { // for hver bokstav
      bokstav = melding.substr(i,1); // hent bokstav
      indeks = fra.indexOf(bokstav)  // finn indeks i fra-tabell
      if( indeks >= 0) {
         bokstav = til[indeks];     // erstatt med bokstav i 
      }//if                         // til-tabell
      omformet += bokstav;
   }//for
   return omformet;
}//omformMelding()
// test av omformMelding:
var mld: String = "DETTE ER EN TEST AV SUPERKRYPTERINGEN";
var mld2: String = omformMelding(mld,bokstaver,nokkel);
trace("Kryptert: " + mld2 );
var mld3: String = omformMelding(mld2,nokkel,bokstaver);
trace("Dekryptert: " + mld3 );

Oppgave 2

Lag et program med for-løkke som skriver ut dette mønsteret i Ouput-dialogen i Flash:

1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
... 

slik at vi tilsammen får 20 linjer. (Tips: Linje med linjenummer n starter med tallet (n^2-n+2)/2.)

/*
it2_020217 - Del II - oppgave 2
*/
for(var n: int = 1; n <= 20; n++) {
   var starttall: int = (n*n-n+2)/2;	
   var linje: String = "";
   for(var antall:int = 1; antall <= n; antall++) {
      linje += String(starttall+(antall-1))+" ";
   }//for hvert tall
   trace(linje);
}//for hver linje
// Vil gi output:
1 
2 3 
4 5 6 
7 8 9 10 
11 12 13 14 15 
...
191 192 193 194 195 ... 210 
// Robin Jelle hadde en mer elegant rutine
// der det ikke er nødvendig å bruke tipset
// som ble oppgitt:
var curr:int = 1;
for (var i:int = 0; i <= 20; i++) {
   var line:String = "";
   for (var n:int = 0; n < i; n++) {
      line += curr + " ";
      curr++;
   }
   trace(line);
}