Kommentarer til heldagsprøve 12.05.2016

H-P Ulven

Oppgave 2a

Mye å holde rede på, så her bør man bygge ut etter hvert:

Først bestilling av et og et sete, deretter flere seter, disabling av opptatte seter, angre på valg osv.

Oppgaven illustrerer at man bør planlegge datastrukturen og alle tabellene før kode!

Koden under resulterer i dette programmet: oppgave2a.swf

/*

    Oppgave 2 a

    GUI:

      seter: s11, s12, ...   (checkbox)

      typeCb                 (Type billett combobox)

      bestillBtn             (Bestill-knapp)

      kvitteringTa	       (Kvittering  TextArea)

*/
/// --- Datastruktur --- ///
/* Tabell med setene i brukergrensesnittet.

   OBS:

      Vises som om den var 2-dimensjonal,men er en-dimensjonal

      for å kunne bruke Array-metoden indexOf!

      Konvertering av index til rader og plasser gjøres med

      funksjonen indeks2rader() og index2plasser lengre ned.

*/

var setetabell: Array =

   [s11,s12,s13,s14,s15,

    s21,s22,s23,s24,s25,

    s31,s32,s33,s34,s35];
/* Funksjoner som returnerer plass og rad fra indeks i

   tabellen over.

   int (i/5) gir heltall etter divisjon uten desimaler

   (i % 5) gir rest etter divisjon. 
   Eksempel:   indeks 13 (som er s34) gir  

               int(13/5)=2 og (13 % 5)= 3

               som egentlig er rad 3 og plass 4!

	     Husk at alt regnes fra 0, ikke 1!

*/

function indeks2rad(i:int):int { return  int(i/5)+1; }
function indeks2plass(i:int):int { return (i%5)+1; }
// Tabell med typenavn og priser

var typenavntabell: Array =  ["V", "B", "S", "M"];

var pristabell: Array = [100, 50, 50, 30];
/* Bestilling-tabell med type billett:

	[ "V","B","", ... ]

   med samme indeksering som setene.

   Deklarerer eller lager med for-løkke:

*/

var bestillingtabell: Array = new Array();

for(var s=0;s<setetabell.length;s++) {

   bestillingtabell.push("");

}//for
/// --- Lyttere og funksjoner --- ///
for(s=0;s<setetabell.length;s++) {

   setetabell[s].addEventListener(MouseEvent.CLICK, seteKlikket);

}//for alle seter
bestillBtn.addEventListener(MouseEvent.CLICK, bestillKlikket);
/* Setter type billett.

   Opptatt settes når ferdig med å velge.

   Rader og plasser kan regnes ut senere.  */

function seteKlikket(evt: MouseEvent):void {

   var sete = evt.target;

   var indeks: int = setetabell.indexOf(sete);
   if(typeCb.selectedIndex<0) {    // Type ikke valgt

      kvitteringTa.text = "Du må velge type billett!";

      sete.selected=false;        // Fjern ugyldig valg

   }else{

      kvitteringTa.text = "";      

      if(sete.selected) {          // har valgt et ledig sete

         bestillingtabell[indeks]= 

            typenavntabell[typeCb.selectedIndex];

      }else{                   // har angret på et valg

         bestillingtabell[indeks]= "";  //Setter tilbake

      }//if valgt sete

   }//if type valgt

}//seteKlikket()
/* Disabler opptatte seter.

   Lager kvittering ut fra bestillingstabell,

   setetabell, pristabell og statustabell.

   (Senere versjoner må også lagre bestillingen

    slik at betalingsdelen av systemet lagrer

    alle kunder og bestillinger i en totaloversikt.)

*/

function bestillKlikket(evt: MouseEvent):void {

   var kvittering: String = "type:\t rad: \t plass: \t pris: \n";

   var totalpris: int = 0;

   var typenavn: String = "";

   var pris: int = 0;
   for(var s=0;s<setetabell.length;s++) {

      typenavn=bestillingtabell[s];

      if( !(typenavn=="") ) { //Hvis ikke blankt

         pris=pristabell[typenavntabell.indexOf(typenavn)];

         kvittering += 

                typenavn+"\t\t"+            // type

                indeks2rad(s) +"\t\t"+      // rad

                indeks2plass(s)+"\t\t"+     // plass

                pris+                       // pris

                "\n";                       // linjeskift

         totalpris += pris;

         setetabell[s].enabled=false;       // opptatt

         bestillingtabell[s]="";            // nullstiller

      }//if sete er valgt

   }//for alle seter

   kvittering += "Totalt:   " + totalpris + "\n"

   kvitteringTa.text = kvittering;

}//bestillKlikket()

Oppgave 2 b

 

var navnetabell: Array =

["Frekneset FK", "Mosebakken FK", "Nedsiden FK", "Sparket FK"];
var kamptabell: Array =

   [

      [{H:-1, B:-1}, {H: 0, B: 1}, {H:-1, B:-1}, {H:-1, B:-1}],

      [{H:-1, B:-1}, {H:-1, B:-1}, {H: 2, B: 3}, {H:-1, B:-1}],

      [{H:-1, B:-1}, {H:-1, B:-1}, {H:-1, B:-1}, {H: 2, B: 0}],

      [{H: 1, B: 0}, {H:-1, B:-1}, {H:-1, B:-1}, {H:-1, B:-1}]

   ];
function lagStatus (): Array {
   // Lager en poengtabell som skal returneres etter oppdatering

   var poengtabell: Array = 

      [

         {lag: "Freksneset",    poeng: 0},

         {lag: "Mosebakken FK", poeng: 0},

         {lag: "Nedsiden FK",   poeng: 0},

         {lag: "Sparket Fk",    poeng: 0}

      ];
/* Kunne også vært laget med:

   var poengtabell: Array = new Array();

   for(var l:int = 0; l < navnetabell.length; l++) {

      var o: Object = new Object();

      o.lag = navnetabell[l];

      o.poeng = 0;

      poengtabell.push(o);

   }//for

*/
   // Traverserer 2-dimensjonal tabell og gir poeng

   // avhengig av hvem som hadde hvilke mål

   for(var hlag = 0; hlag < kamptabell.length; hlag++) {

      for (var blag = 0; blag < kamptabell.length; blag++) {

         var Hmal = kamptabell[hlag][blag].H;

         var Bmal = kamptabell[hlag][blag].B;

         if (Hmal != -1) {            // Hvis kampen er spillt

            if (Hmal > Bmal) {        // Hjemmelag vant...

               poengtabell[hlag].poeng += 3;

            } else if (Bmal > Hmal) { // Bortelag vant...

               poengtabell[blag].poeng += 3;

            } else {                  // Uavgjort ...

               poengtabell[hlag].poeng++;

               poengtabell[blag].poeng++;

            }//if mål

         }//if kampen er spillt

      }//for bortelag

   }//for hjemmelag
   // Sorterer etter fallende poeng

   poengtabell.sortOn("poeng",Array.DESCENDING+Array.NUMERIC);

   return poengtabell;

}// lagStatus()
/// --- Tester om funksjonen virker --- ///
var t: Array = lagStatus();

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

   trace("Lag: " + t[i].lag + " hadde " + t[i].poeng + " poeng.");

}//for

Programmet over gir følgende output:

Lag: Nedsiden FK hadde 6 poeng.
Lag: Mosebakken FK hadde 3 poeng.
Lag: Sparket Fk hadde 3 poeng.
Lag: Freksneset hadde 0 poeng.