Visualiseringsprogram Programmering C - eksamensopgave Rami Kaddoura og Martin Schmidt Klasse: 3.4 Vejleder: Karl Bjarnason Roskilde Tekniske Gymnasium Udleveringsdato: 02-03-2012 Afleveringsdato: 11-05-12
Indhold 1. Indledning... 3 2. Problemformulering... 3 3. Valg af værktøjer... 3 4. Krav... 3 5. Løsningsmodeller... 3 5.1 Løsningsmodel 1... 3 5.2 Løsningsmodel 2... 4 5.3 Løsningsmodel 3... 4 6. Flowdiagram... 5 7. Implementering... 6 7.1 Implementering i Visual Basic... 6 8. Konklusion... 9 2
1. Indledning I forbindelse med eksamensprojekterne i de to fag IT og programmering, som vi har valgt at slå sammen til én eksamensopgave, skulle vi designe og udvikle et program i et eller flere programmeringssprog til en defineret målgruppe. Vi har valgt at udvikle et matematik læringsprogram til folkeskoleelever og studerende. Vi har valgt at arbejde med to programmeringsværktøjer (VB og vpython), som vi synes havde en god kombination. 2. Problemformulering Hvordan kan man få elever, der har svært ved at se 3D figurer for sig, til at visualisere og forstå en 3D figur, så han/hun er i stand til at forstå den, hvis den tegnes i et 2D-plan? Og vil dette føre til en større forståelse af matematikken? 3. Valg af værktøjer Vi har valgt at anvende programmerne Microsoft Visual Basic og Visual Python. Disse programmer har en god kombination, da programmet kan kodes ind i Visual Basic og programmet Visual Python vil kunne visualisere 3D figurer. De er desuden begge to freeware programmer. 4. Krav Programmet skal kunne visualisere rumlige figur i 3D. Det skal være muligt at indtaste specifikationer til den rumlige figur, f.eks. højden i en cylinder mv. Det skal være let at anvende der skal ikke være for mange funktioner der kan besværliggøre anvendeligheden. Programmet skal styrke forståelse af rumlige figurer ved at gøre modtageren i stand til at se figuren for sig. 5. Løsningsmodeller I dette afsnit vil vi komme hurtigt ind på vores tre løsningsmodeller og vores endelig valg af løsningsmodel. 5.1 Løsningsmodel 1 På den første skitse har vi valgt at opdele programmet i to vinduer, et til knapper og tekstfelter og et til visualisering af figurer. Fordelene ved dette design er at tingene ikke virker komprimerede i et lille vindue, og der er god plads til at vende og dreje og zoome ind og ud på figuren. Ulempen er at det kan virke en smule forvirrende med to forskellige vinduer. 3
5.2 Løsningsmodel 2 På skitse nr. 2 har vi samlet det hele i et vindue. Tekstfelter og knapper er samlet øverst på siden og visualiseringen foregår nederst på siden. Fordelen er, at det kan være nemmere at overskue ét vindue i stedet for to. Ulempen er, at det hele kommer til at virke komprimeret. En anden ting som vi heller ikke kan lide ved dette er design er, at knapperne og tekstfelterne er samlet øverst i billedet. Vi synes det giver bedre harmoni og overskuelighed at samle det ude i siden. 5.3 Løsningsmodel 3 På skitse tre har vi samlet alle knapper og tekstfelter til venstre i billedet, og visualiseringen foregår til højre. Fordelen er, at billedet virker meget mere harmonisk og overskueligt, når det er opbygget på denne måde. Ulempen er som før, at det hele kommer til at virke komprimeret i ét vindue. 5.4 Det endelige valg af løsningsmodel Vi kom derfor frem til denne skitse, hvor vi har anvendt vores kendskab til gestaltloven. Her har vi samlet knapperne ude til venstre og stillet dem lodret op i forhold til hinanden, og derudover har vi valgt at opdele programmet i to vinduer for at det ikke skal virke for komprimeret. 4
6. Flowdiagram Flowdiagrammet til højre er en visualisering af hvordan programmet fungere. Diagrammet viser trin for trin, hvad ens input gør og hvilken output der kommer ud af det. 5
7. Implementering I dette afsnit kommer vi ind på hvordan vi har implementeret vores program i Visual Basic og i Vpython. 7.1 Implementering i Visual Basic I Visual Basic fik vi lavet et program, som kan beregne volumenet på en cylinder og en box, alt afhængigt af hvilken trigonometrisk figur man vælger. I programmet indtaster man blot sine oplysninger såsom længde, højde eller bredde og dernæst kan man få beregnet volumenet ud. Programmet kan også visualisere den bestemte figur, men dette bliver vist i programmet vpython, dvs. at man koder det ind i Visual Basic, men samtidig også bruger Python-sprog. Det vi havde udtænkt i starten, var at få lavet et program som gav personen der nu anvendte programmet mulighed for at vælge imellem forskellige former for figur, som han/hun vil beregne volumenet på og få illustreret figuren. Som vist i tidligere afsnit, så ser programmets brugerflade i Visual Basic således ud: Knapperne (Buttons) kan findes i værktøjskassen i selve programmet, og dem kan man bare sætte lige hvor man vil. Det samme gælder for tekstboksene (Textbox). Efter at have placeret knapperne og tekstboksene på bestemte pladser, begyndte vi at implementere koder ind i programmet. Vi startede først med at fortælle programmet, hvad der skal ske når man klikker på knappen (Vis) i Cylinderen. På figuren forneden er kildekoderne vist. De koder der står i mellem private sub og end sub er koder til én bestem funktion. 6
Først definere vi hvilken berøring med cursoren der skal til, for at aktivere denne handling. Her definere vi at man skal klikke på knappen (button1_click). Det næste der så sker, er at der bliver gemt en fil med navnet radius.py i debug mappen under Visual Basic dokumentet. Denne fil SKAL åbnes med Vpython og figuren vises. Kommandoen Objwritter.WriteLine fortæller Visual Basic programmet, at vi nu skriver i vpython -sprog. From visual import* (API), fortæller vpython hvor den skal finde figuren henne. Det næste vi så gør, er at vi angiver nogle koordinater, således at figuren placeres et centralt sted i VPython vinduet. Vi indsætter også tekstboksfelterne for højden og radius ind mellem koderne, således at de også får en indflydelse på figurens udseende. Dette er vist forneden. Til sidst har vi koden proc.start() proc.waitforexit() ; denne kode fortæller programmet at den skal visualisere figuren i Vpython automatisk, blot ved at klikke på vis-knappen, og at programmet skal blot vente på at man selv lukker ned for det. Koderne i programmet er ikke så omfattende og det meste er blot gentagelser og et par små justeringer. Efter at kunne visualiserer figuren i 3D i vpython gik vi ind og lave et par små justeringer, såsom at man skal kunne indtaste decimaltal i tekstboksfelterne (længde, højde, bredde og radius). Forskellen på vpython og Visual Basic når det drejer sig om decimaltal, så bruger man (.) punktum i vpython og (,) komma i Visual Basic. Derfor skal vi have defineret (.) punktum til at være (,) komma, når vi skriver i Visual Basic. Vi har udvalgt et godt sted i vores koder, som vi kan give et eksempel på hvordan og hvornår vi skal bruge komma eller punktum. Eksemplet foroven viser koden for knappen Beregn volumen. Linje nummer 2 fortæller programmet at den skal definere radius som Double, svarende til et decimaltal, og når vi indtaster et decimaltal i radius-feltet, vil programmet straks omskrive punktum til komma. Dette sker vha. koden (TextBox1.Text.Replace(.,, )). Linje nummer 4 fortæller programmet hvordan den beregner volumenet ud, og at dette bliver skrevet ind som en string (en tekst). 7
Her kan man så se at vi har anvendt formlen for beregning af volumen for en cylinder, altså radius 2 *højde*π. Nu mangler vi blot at definere komma som punktum, når vi skal have visualiseret figuren i vpython. Dette sker på samme måde som i tidligere eksempel. Screenshottet foroven viser at når man indtaster noget i Textbox3, som er længden på boxen, så bliver komma omskrevet til punktum. Dette ses på linje 5. Så på den måde, bliver punktum skrevet om til komma og omvendt, netop for at begge programmer skal forstå hinanden og for at undgå problematik. En ekstra detalje som vi har tilføjet til vores program, er at vi har gjort alle tekstfelter og knapper usynlige, bortset fra knappen Cylinder og Box. Dette er gjort netop for at gøre programmet mere overskueligt for brugeren. På figuren forneden til venstre ses hvordan programmet starter med at se ud, og så snart man klikker på knappen Box dukker de tilhørende tekstfelter og knapper frem, som vist på figuren forneden til højre. Måden vi gør dette på, er ved at vi inde under de tilhørende tekstfelter og knapper til boxknappen, ændre synligheden til falsk, således at tekstfelterne og knapperne ikke vises. Måden de så bliver vist på, er at vi under tilføjer koderne, som vist forneden inde under boxknappen. 8
Disse koder fortæller programmet, at så snart der bliver klikket på knappen Box, så skal programmet gøre de tilhørende tekstfelter og knapper synlige. Dermed er vores implementering for programmet fuldendt. Når vi så indtaster tilfældige oplysninger ind under Cylinder funktionen, og vi vælger at vise figuren, så ser programmet således ud: 8. Konklusion Vi fik designet og udviklet et visualiseringsprogram, der kan visualisere geometriske rummelige figurer. Produktet henvendte sig til folkeskoleelever og gymnasieelever. 9