Dokumentasjon eksamenssett vår 2013, oppgave 3

Programbeskrivelse

Programmet som skal lages skal gjøre følgende:

  1. La brukeren få se denne tabellen:Image
  2. La brukeren sette sammen sin egen frokost, ut fra tabellen
  3. Skrive ut hvor mange kcal den valgte frokosten inneholder totalt
  4. Vise fordelingen av antall kcal på hver matvare, i et søylediagram, kakediagram el. lignende
  5. Beregne og vise hvor mye proteiner, fett og karbohydrater frokosten inneholder totalt

2. Løses ved å legge inn de ulike matvarene i en combobox, og sette inn data som tilsvarer indeksnumrene matvarene vil få i Arrays som lages for all dataen tilhørende matvarene. En knapp «Legg til» vil la brukeren legge til valgt matvare i en tekstboks hvor varenavn og antall kcal skrives ut. Dette gjøres ved at navn og kcal legges til i en ny array når brukeren trykker på knappen.

3. Summerer de innlagte verdiene for kcal i ovennevnte array, og skriver ut summen i en ny tekstboks.

4. Løser oppgaven med et søylediagram. For å lage diagrammet brukes variabler for hver matvare, hvor «+ 1» blir lagt til variabelen som tilsvarer valgt matvare, hver gang brukeren legger til denne varen. Høyden til søylene settes lik  tilhørende variabel og antall kcal per matvare.

5. Verdiene for proteiner, fett og karbohydrater settes inn i den samme tabellen som kcal og varenavn settes inn i ved under 2. Funksjonen legger til de nye verdiene i variabler for summen av fett, karbohydrater og proteiner, og skriver ut dette i samme tekstboks som i 3.

 

Grafikkbeskrivelse

Brukeren skal som nevnt få se tabellen fra oppgaveteksten. I tillegg har jeg lagt med en combobox for å gjøre velgingen av matvarene lettere, samt en knapp som er nyttig i tilfelle brukeren trykker på feil matvare ved uhell, slik at noe ikke blir lagt til eller regnet ut før brukeren trykker på «Legg til». Brukeren får se det som er lagt til i en tekstboks, og de utregnede verdiene i en annen, samt tabellen som viser oversikten over kcal fordelt på de forskjellige matvarene.

Image

 

Funksjoner

Jeg har brukt funksjonen array for å lage to flerdimensjonelle tabeller. I den ene la jeg inn all data for hver matvare (navn, kcal, proteiner etc.). I den andre la jeg ikke inn noen verdier, men programmerte leggTilMat-funksjonen slik at samme info som ovenfor, for hver vare, ble lagt inn i tabellen etter hvert som brukeren la til en vare. I denne tabellen ble altså kcal og de andre verdiene for hver matvare lagt inn fortløpende, slik at de kunne summeres sammen til slutt, og gi den samlede summen.

Den egendefinerte funksjonen leggTilMat gjør følgende (i lik rekkefølge):

  1. Sjekker om en matvare er valgt, hvis ikke vil ikke resten av funksjonen kjøres.
  2. Setter variabelen matvare lik indeksen som er satt inn i comboboxen, som korresponderer med matvarens index i tabellene.
  3. Henter ut kcal som korresponderer med den valgte matvaren fra tabellen innholdTab, hvor verdiene ble lagt inn i selve koden.
  4. Legger inn kcal og varenavn til valgt vare inn i tabellen innlagtTab.
  5. Bruker en for-løkke for å skrive ut det som legges til i innlagtTab. Vil komme en ny linje med data som brukeren ser for hver valgte vare med varenavn + kcal.
  6. Sjekker hvilken matvare som er valgt ut fra matvare, og legger til +1 på variabelen som holder tellinga på hvor mange av hver matvare som er valgt.
  7. Setter høyden til søylene lik korresponderende variabler (fra 6.) multiplisert med antall kcal for varen.
  8. Setter antall kcal inn i en tekstboks på søylene, slik at brukeren får se antallet de enkelte søylene representerer.
  9. Legger inn karbverdi, proteinverdi og fettverdi for valgt vare i innlagtTab.
  10. Øker telleren med +1 til neste matvalg.
  11. Kjører for-løkker hvor summen av kcal, karb, proteiner og fett økes med verdiene for den valgte matvaren, ut fra det som er lagt inn i innlagtTab.
  12. Skriver ut de samlede verdiene som ble regnet ut i for-løkkene.
  13. Nullstiller variablene som ble brukt under 11., for å unngå at de utregnede verdiene fra forrige valg ligger igjen, slik at vi får regnet med verdiene for de forrige valgene flere ganger.

Klasser:

I programmet benyttes klassene String og Number. String-klassen er en datatype som representerer tekst og Number-klassen er en datatype som kan bruke desimaltall.

Testing:

Programmet ble testet underveis i programmeringen, og feil ble rettet opp fortløpende.

Arbeidet først med innsetting av valgt varenavn + kcal i en tekstboks. Ønsket at brukeren skulle få se alle varene han/hun hadde valgt, men løsningen jeg først brukte ga kun det siste valget. De forrige ble ikke «husket» av programmet. Da hadde jeg lagt inn alle verdiene, kcal, proteiner osv. som data bak labelen i comboboxen. For å løse dette slik at programmet tok vare på de tidligere verdiene, og kunne skrive ut alle de valgte varene, opprettet jeg to tabeller hvor jeg plottet inn dataen, og stod kun igjen med et korresponderende indeksnr som data i comboboxen.

Oppdaget ved testing av programmet at om brukeren trykket på «Legg til» uten å ha valgt en vare, ville det komme opp undefined undefined i tekstboksen synlig for brukeren, da det ikke var noe data lagt til dette valget. Innførte en if/else-setning som sier at om «Velg en matvare» er valgt, vil ingenting skje. Hvis ikke, kjøres resten av programmet.

Fikk trøbbel med denne da jeg skiftet innholdet i innlagtTab[1] til innlagtTab[4]:

innlagtTab[0][teller] = innholdTab[0][matvare];
innlagtTab[4][teller] = innholdTab[4][matvare];

//Løkken setter «utskrift» lik det som er innlagt i innlagtTab[0] og [4], varenavn og kcal
for(var i:Number=0; i<innlagtTab.length; i=0) {
utskrift = innlagtTab[i][teller] + «\t» + utskrift;

Ettersom det ikke var noe data lagt inn i innlagtTab[1], [2] og [3] på dette tidspunktet, kom «Lettmelk undefined undefined undefined 92» opp i tekstboksen, som var for liten, slik at bare «Lettmelk undefined» vistes. For at kun verdien i [0] og [4] skulle skrives ut satte jeg i=i+4 i stedet for i=0. 

Fikk også trøbbel med denne kodedelen, da jeg hadde like variabler for de fire løkkene, løste problemet med å ha forskjellige variabler for hver løkke:

for(var k:Number=0; k<innlagtTab[0].length; k++) {
sumkcal = sumkcal + innlagtTab[0][k];
}
for(var k:Number=0; k<innlagtTab[1].length; k++) {
sumkarb = sumkarb + innlagtTab[1][k];
}
for(var k:Number=0; k<innlagtTab[2].length; k++) {
sumprot = sumprot + innlagtTab[2][k];
}
for(var k:Number=0; k<innlagtTab[3].length; k++) {
sumfett = sumfett + innlagtTab[3][k];
}

 

Bortsett fra det fungerte programmet fint.

Advertisements