søndag 21. oktober 2007

oblig 8: Todimensjonalitet

Målet er at du skal trene 2D ved å utvide tabellomformeren:
  • du trenger en egen 2D-tabell som du oppretter globalt med navn X2(0,0)
  • Bruker ser en enkelt godt synlig avkryssingsboks med ledeteksten "2D". Denne er ved oppstart ikke avkrysset.
  • Lag den boolske funksjon is2D( ) som returnerer True hvis 2D-feltet er avkrysset. Denne funksjonen skal kalles ALLE steder hvor du ønsker å vite om vi opererer med 2D -- ingen skal under noen omstendighet sjekke denne knappen selv.
  • Hvis 2D-feltet IKKE er avkrysset er det meningen at brukeren er i 1D-modus, og det er da X( ) som bearbeides. I 2D-modus er det X2( ) som bearbeides.
  • ved endring av størrelse skal (hvis 2D) også antall kolonner oppgis. En "Redim" for 2D kan (etter hva jeg forstår) kun preservere hvis det er den 2de dimensjon som endres (ikke første, les s. 380).
  • lag en sub (prosedyre) visTabell(a(,), l) som kan traversere 2D. Denne skal nå vise verdiene fra begge dimensjoner på samme linje, f.eks. for linje 10 med tabellverdier 23 og 37 blir output slik: "10: 23 37". Prosedyren kaller du visTabell(a(,),l). Her er første parameter annerledes "ByRef a(,) as Integer" enn i den eksisterende prosedyren, men den har samme navn. Når programmet har mer enn en prosedyre/funksjon med samme navn og ulike parametere bruker du en teknikk som kalles overloading (overlastede funksjoner).
  • Når brukeren klikker på knappen for elementEndring, må han oppgi to tall hvis is2D() returnerer true. Hvis is2D() er false oppgir bruker fortsatt bare et tall. Husk å kall visTabell(X2, lstA) når endringen er gjort (hvis 2D)
  • lag overlastede funksjoner for finnSum, finnSnitt, finnHoyeste, finnLaveste som tar 2D-tabeller som argument.Funksjonene har samme navn som variantene for 1D, men med to dimensjoner for tabell-parameteret. Funksjonene kontrollerer alle celler i 2D-tabellen.
  • leting etter verdi skjer linje for linje: kolonne 0, 1, 2 ... i linje 1, ditto i linje 2 ... inntil alle linjer er sjekket (eller verdien eventuelt er funnet). Meldingen til bruker skal angi linje og kolonne der funnet inntraff. Bare "finnesUsortert" skal kunne 2D. Hvis du vil: Tilpass "finnesSortert" og "finnesBinaerLet" slik at de kan 2D.
  • Når brukeren klikker på en av knappene som ikke er tilpasset 2D, skal det gis en melding til brukeren: "kan ikke 2D" dersom 2D er valgt.
  • Hvis du vil: Lag tilpasning av "les fil" og "lagre til fil". Bare de linjene i filen som har tall-verdier leses inn i tabellen. Linjer som ikke har tall utelates.. Fyll i med 0 (null) hvis det ikke er tilstrekkelig antall tall. strFeilmelding skal vise hvilke linjer dette gjelder.
  • Hvis du vil: Lag tilpasning av sjekkStigende, der du sjekker neste celle (i,j+1) mot (i,j). Ved linjens slutt, sjekker du siste i linje i mot starten av linje i+1.
  • Hvis du vil: Lag tilpasning av reversering. En 2D tabell (med Y linjer og X kolonner) revererses rundt tabellens "diagonal", slik at f.eks. a(3,7) og a(7,3) byttes. Til dette lager du en generisk prosedyre bytt2D (a, i, j).

Ingen kommentarer: