Prøve IT2 - Gruppe B

Kapittel 1..6, med fokus på kapittel 4, 5 og 6.

24.01.13

Løsningsskisser


Del 1 - Teori - 09:30 - 10:30

Leveres på papir - Ingen hjelpemidler

1.

Lag kode med for-løkke som skriver ut dette mønsteret i Output-dialogen i Flash:

***********

 *********

  *******

   *****

    ***

     *
Se String-funksjoner side 127:
var stjerner: String = "***********";

var blanke:   String = "";



var i: int = 0;



for(i=0;i<6;i++) {	//For hver linje, 6 linjer

	stjerner=       //Fjern to siste for hver linje

              stjerner.substring(0,11-2*i);	

	blanke += " ";	//Legg til blanke for hver linje

	trace(blanke+stjerner);

}//for

2.

Vi har en variabel:

var navneliste: Array = ["Ferkenberg", "Woxholt", "Hattek", "Luresen", "Snytenstrup", "Hansen", "Jensen", "Olsen"];

Brukeren av et program med denne tabellen har skrevet et navn som programmet har lagt i variabelen navn.
Skriv en instruksjon som finner plasseringen av det skrevne navnet i tabellen navneliste og legger resultatet i variabelen indeks.

Se array-funksjoner side 97:
indeks = navneliste.indexOf(navn);

3.

Vi har en variabel:

var talltabell: Array = [17.0, 17.5, 18.0, 18.5,19.0];

a) Lag en funksjon som returnerer største tall i en slik tall-tabell, på formen

function maksimum(tabell: Array): Number

b) Lag en funksjon som returnerer summen av tallene i en slik tall-tabell, på formen

function sum(tabell: Array): Number
Mulige løsninger, med feilsjekking:
function maksimum(tabell: Array): Number {

   var maks: Number = Number.MIN_VALUE;

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

      if( !isNaN(tabell[i]) ) {	//Sjekker om vi har et tall

         if( tabell[i]>maks) {

            maks = tabell[i];

         }//if ny maks		//Hvis ikke ignoreres cellen

      }//if tall

   }//for

   return maks;

}//maksimum()
b)
function sum(tabell: Array): Number {

   var s: Number = 0.0;

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

      if( !isNaN(tabell[i]) ) {	//Sjekker om vi har et tall

         s += Number(tabell[i]);	//Number() for å takle tall som String 

      }//if			//Hvis ikke tall ignoreres cellen

   }//for

   return s;

}//sum()

 

4.

Lag en funksjon som skal brukes i et krypteringsprogram, som omformer en oppgitt String-variabel til en kryptert
String der bokstavene erstattes med indeksen til bokstavene i denne tabellen:

var bokstaver: Array = ["i","j","k","l","m","n","o","p","q","r","a","b","c","d","e",

                        "f","g","h","s","t","u","v","w","x","y","z","æ","ø","å"];

(Vi ser bort fra store og små bokstaver.)

Funksjonen skal være på formen:

function omformMelding(melding: String): String

(Eksempelvis skal omformMelding("obama") returnere en String: "6,11,10,4,10".)

Se krypteringseksempel side 129:
function omformMelding(melding: String): String {

	var resultat: String = "";

	for(var i:int=0;i<melding.length;i++){

		resultat += bokstaver.indexOf(melding.charAt(i));

		if(i<(melding.length-1)){resultat += ",";}

	}//for alle bokstaver i melding

	return resultat;

}//OmformMelding()

5.

Vi har en variabel som har blitt laget av en bruker som har bestillt en Dippedutt, en Duppeditt,
fem Dingser, tre Ting og to Greier, tilsvarende tabellen under:

var bestillinger: Array =  [ 

				{varenavn: "Dippedutt", pris: 77.99, antall: 1},

				{varenavn: "Duppeditt", pris: 27.99, antall: 1},

				{varenavn: "Dings"    , pris: 24.99, antall: 5},

				{varenavn: "Ting"     , pris: 56.99, antall: 3},

				{varenavn: "Greie"    , pris: 22.99, antall: 2}

			   ];

Lag en funksjon som finner totalprisen på en slik bestilling, på formen

functon beregnTotalPris( b: Array): Number
(Eksempelvis skal beregnTotalPris(bestillinger) returnere tallet: 447.88 )
Se assosiative arrayer side 100:
function beregnTotalPris( b: Array): Number {

	var resultat: Number = 0.0;

	for(var i:int=0;i<b.length;i++){

		resultat += b[i].pris*b[i].antall;

	}//for alle bestillinger

	return resultat;

}//beregnTotalPris()

Del 2 - Praktisk - 10:30 - 11:30

Leveres i It's Learning-mappen "Leveringsoppgave 24.01.2013" - Alle hjelpemidler

Vi skal lage en applikasjon som skal gi oss total poengsum på en skihopper hvis brukeren av programmet
oppgir stilkarakterer og lengde for hopperen, og kritisk punkt og meterverdi for hoppbakken.

I hopprenn gies det 5 stilkarakterer, høyeste og laveste strykes, deretter summeres de tre gjenstående og summen blir stilpoeng.
Antall meter hopperen hopper over kritisk punkt multipliseres med en meterverdi, dette blir lengdepoeng.
Total poengsum blir summen av lengdepoeng og stilpoeng.

Lag applikasjonen med brukergrensesnitt og det hele.

(Eksempelvis skal stilkarakterene 15.5, 16, 16, 15, 14, lengden 97, meterverdi 1.2 og kritisk punkt 60
gi poengsummen 90.9.)

Forslag til løsning:

 

import flash.events.MouseEvent;



/*

	Utregning av poengsum i hopp-konkurranse

	Komponenter i GUI:

	   Input:

		txtKritiskPunkt

		txtMeterVerdi

		txtLengde

		txtDommer1,txtDommer2, ..., txtDommer5

	   Output:

	        txtTotalPoengSum

*/



/// --- Konstanter og variabler --- ///



const KRITISK_PUNKT: Number =  92.0;	//Default verdi

const METER_VERDI:   Number =   1.7;	//Default verdi



var meterverdi:      Number =  METER_VERDI;

var kritiskpunkt:    Number =  KRITISK_PUNKT;

var lengde:          Number =  0.0;

var stilkarakterer:  Array =   [0.0,0.0,0.0,0.0,0.0];



/// --- Oppsett av GUI --- ///



txtMeterVerdi.text   = String(METER_VERDI);

txtKritiskPunkt.text = String(KRITISK_PUNKT);



btnBeregnPoengSum.addEventListener(MouseEvent.CLICK,beregnPoengSum);



/// --- Tabell - Funksjoner --- ///



// Klippet og limt fra www.ulven.biz/it2/kompendium/kap5/funksjoner.html:

function sum(tabell: Array): Number {

   var s: Number = 0.0;

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

      if( !isNaN(tabell[i]) ) {	//Sjekker om vi har et tall

         s += Number(tabell[i]);	//Number() for å takle tall som String 

      }//if

   }//for

   return s;

}//sum()



function maksimum(tabell: Array): Number {

   var maks: Number = Number.MIN_VALUE;

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

      if( !isNaN(tabell[i]) ) {

         if( tabell[i]>maks) {

            maks = tabell[i];

         }//if ny maks

      }//if tall

   }//for

   return maks;

}//maksimum()



function minimum(tabell: Array): Number {

   var min: Number = Number.MAX_VALUE;

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

      if( !isNaN(tabell[i]) ) {

         if( tabell[i]<min) {

            min = tabell[i];

         }//if ny min

      }//if tall

   }//for

   return min;

}//minimum()



/// --- Hovedfunksjonene i programmet --- ///



/* Utregning av poengsum: */

function totalPoengSum(kp: Number, mv: Number, 

                       l: Number, sk: Array): Number {

	var r: Number = (l-kp)*mv;		//Lengdepoeng

	r += sum(sk)-minimum(sk)-maksimum(sk);  //+Stilpoeng

	return r;

}//totalPoengSum()



/* Lytterfunksjon for btnBeregnPoengSum: */

function beregnPoengSum(evt: MouseEvent):void {

	var tall: Number = 0.0;

	// Henter input fra GUI:  

	meterverdi=Number(txtMeterVerdi.text);

	kritiskpunkt=Number(txtKritiskPunkt.text);

	lengde = Number(txtLengde.text);

	stilkarakterer[0]=Number(txtDommer1.text);

	stilkarakterer[1]=Number(txtDommer2.text);

	stilkarakterer[2]=Number(txtDommer3.text);

	stilkarakterer[3]=Number(txtDommer4.text);

	stilkarakterer[4]=Number(txtDommer5.text);

	

	/* Bør egentlig sjekke brukerinput og konvertering

            til tall, eksempelvis slik:

	   (Tekstfeltet txtMeterVerdi har satt egenskapen

             restrict lik ",.0-9")

	   tall = Number(txtMeterVerdi.text.replace(",","."));	

	   if( isNaN(tall) ) {

                meterverdi=0.0;

            }else{

                meterverdi=tall;

            }

		...

	*/

		

	// Regner ut poengsum:

	var resultat: Number = totalPoengSum(kritiskpunkt,meterverdi,

                                              lengde,stilkarakterer);



	// Viser poengsum i GUI:

	txtTotalPoengSum.text = String( resultat );

}//beregnPoengSum()

Kommentar til oppgave 3 i del 1 og oppgaven i del 2:

Når det gjelder å finne maksimum, minimum og sum i tall-tabeller, så er det en nødvendig kunnskap å kunne lage slike funksjoner.

Det går an å "jukse" litt med maksimum og minimum, omtrent slik:

tabell.sort(Array.NUMERIC);

min = tabell[0];

maks = tabell[tabell.length-1];

men på eksamen risikerer du å måtte finne maksimum, minimum og summer også på sammensatte tabeller,
hvor sort() ikke virker, for eksempel en assosiativ tabell inne i en vanlig tabell, og da du forstå og kunne lage slike
funksjoner. Summering må du kunne lage uansett, da det ikke finnes noen sum() - metode for Array.

(Math.sum(tall1, tall2, ...) virker på enkelttall, men blir håpløs å bruke på større tabeller, da det ville bli slik:
Math.sum( tabell[0], tabell[1], tabell[2], ...)