Jeg tar ikke brukergrensesnittet, konsentrerer meg om datastruktur og programstruktur (kode)
Tar datastruktur først. Antagelig greiest å ha en tabell:
Men,vi trenger ikke bruke objekter i den innerste tabellen, i så fall må man bruke indeks 0 og 1 på promillkjøring og ulovlig hastighet, for eksempel deklarert som:
const PROMILLE_KJORING: int = 0; const ULOVLIG_HASTIGHET: int = 1;og aksesserer med:
... lovbruddtabell[i][PROMILLE_KJORING]istendenfor:
... lovbruddtabell[i]["promillekjoring"]... eller ... lovbruddstabell[i].promillekjoring...
Eller deklartert:
var lovbruddtabell: Array = [ {promillekjoring: 9631, ulovlig_hastighet: 9863}, {promillekjoring: 8593, ulovlig_hastighet: 12217}, //... {promillekjoring: 8534, ulovlig_hastighet: 18010} ];// Overgang fra år til indeks eller omvendt:// Med konstanten: const STARTAR: int = 2002;// Kan vi senere i koden gjøre omregninger med: ... indeks = ar - STARTAR; ... ar = i + STARTAR;
Legg merke til at jeg ikke lagrer årstallene i tabellen!
Det er unødvendig å lagre ting som kan regnes ut!
Sammenhengen mellom indeks i tabellen og årstallene er enkel, bare en differanse på 2002!Legg merke til dette trikset, det kan forenkle kodingen betraktelig i mange oppgaver.
/* Numeric Stepper: ar1_ns for første år ar2_ns for siste år TextField: melding_tf*/// Datastruktur: Som i boksen lenger opp// Kobler opp lytterfunksjon til begge års-velgerne:ar1_ns.addEventListener(Event.CHANGE, arEndret); ar2_ns.addEventListener(Event.CHANGE, arEndret);// Lytterfunksjon:function arEndret(evt: Event): void { var indeks_1: int = ar1_ns.value - STARTAR; var indeks_2: int = ar2_ns.value - STARTAR;var antall_1: int = lovbruddstabell[indeks_1].promillekjoring; var antall_2: int = lovbruddstabell[indeks_2].promillekjoring;var melding: String = "";if( antall_1 < antall_2 ) { melding = "Positiv utvikling"; } else if ( antall_1 == antall_2) { melding = "Nøytral utvikling"; } else { melding = "Negativ utvikling"; }//if melding_tf.text = melding; }//arEndret()
/* Komboboks: type_cb */const STARTAR: int = 2002;const PROMILLEKJORING: int = 0; const ULOVLIG_HASTIGHET: int = 1;var feltnavn: String = "";type_cb.addEventListener(Event.CHANGE, typeEndret);function typeEndret(evt: Event): void { if( type_cb.selectedIndex == PROMILLEKJORING ) { feltnavn = "promillekjoring"; } else { feltnavn = "ulovlig_hastighet"; }//iffor(var i:int = 0; i<lovbruddstabell.length; i++) { var verdi: int = lovbruddstabell[i][feltnavn]; // Hent verdi settSoyle(i, verdi); // Se kode i neste lyseblå ramme, lenger ned... }//for
/* Bør lage søyler som rektangler i Flash, et nivå under. Hvis vi har laget søylene: s2002, s2003, ..., s2007 kan vi lage følgende kode: Se også eksemplet for temperaturvisning i eksamensoppgave høsten 2010. */const MAX_VERDI: int = 20000; //Skaleringvar soyletabell: Array = [ s2002, s2003, ..., s2007 ];function settSoyle(nr: int, verdi: int): void { var soyle: Soyle = soyletabell[nr]; soyle.scaleX =verdi/MAX_VERDI; }//settSoyle()
Brukergrensesnitt der man velger et år (ar_ns: Numeric Stepper), velger type lovbrudd (type_cb: ComboBox) og to tekstfelt:
verdi_tf og ny_verdi_tf og en knapp for å utføre en lytterfunksjon når oppdatering er gjort i brukergrensesnitt.
/* Ikke så mye nytt i forhold til oppgave 2. Hvis det bare skal gå an å redigere fra 2008, kan dette begrenses ved at ar_ns starter på 2008. Jeg forutsetter at man enten deklarererer eller bruker kode til å fylle opp tabellen med for eksempel -1 opp til år 2012 for de årene der det ikke er registrert data. */... // Mye samme kode som i oppgave 2a)// Ikke så mye nytt:verdi_tf.text = String( lovbruddstabell[ ar_ns.value-STARTAR ][feltnavn] );...lovbruddstabell[ar_ns.value-STARTAR ][feltnavn] = int(ny_verdi_tf.text);...
Tar bare med kode som finner det året med færrest lovbrudd.
// Funksjon som finner året med færrest lovbrudd:function finnMinimum(): int { var min: int = int.MAX_VALUE; // Minste hittil var min_indeks: int = 0; // Indeks til året med færrest lovbrudd for(var i:int; i<lovbruddstabell.length; i++) { var verdi: int = lovbruddstabell[i]["promillekjoring"]+lovbruddstabell[i]["ulovlig_hastighet"]; if(verdi < min) { min = verdi; min_indeks = i; }//if }//for return min_indeks; // Returner funnet indeks }//finnMinimum()// senere kode som bruker denne funksjonen:...melding_tf.text = "Året med færrest lovbrudd er: " + String(finnMinimum() + STARTAR);...