Indholdsfortegnelse Formål... 2 Opgave formulering... 2 Krav til dokumentation af programmer... 3 ASCII tabel... 4 Værktøjer... 5 Versioner af ASCII tabel... 6 v1.9... 6 Problemer og mangler... 6 v2.1... 7 Problemer og mangler... 7 Specielle python koder fra min ASCII kode... 8 v1.9... 8 v2.1... 8 Konklusion... 9 Side 1 af 10
Formål Formålet med denne opgave er at lave en maskinlæsbar form af en standard ASCII tabel uden udvidelsen vha. python, som så oversætter det til en form der er læselig af mennesker. Opgave formulering Lav et program som udskriver tegnene i den oprindelige ASCII-tabel, altså de 128 tegn, på en nydelig måde i en tabel. Du kan selv vælge hvordan du formaterer din tabel. Følgende krav skal dog opfyldes: Programmet skal vise sit output på en skærm med 80 tegn (eller kolonner á et tegn) og 24 linjer. De ikke grafiske tegn (kontrol tegnene og mellemrum) skal representeres af en intelligent forkortelse med max tre store bogstaver. o Option: Hvis du har tid og lyst, så forklar betydningen af disse forkortelser i en tekst nedenfor eller ved siden af tabellen. Denne information skal også være synlig samtidig med selve tabellen. Tegnenes nummer skal anføres i umiddelbar nærhed til tegnet, således at der ikke kan være tvivl om hvilket tegn har hvilket nummer. Programmet skal kunne skrive tabellen til en tekstfil med navnet ascii_tabel_dit_bruger_navn.txt, som ligger i samme mappe/directory som kildekodefilen som gerna må hedde ascii_tabel_dit_bruger_navn_vxx.py, hvor vxx er versionsnumer for kildkoden (v01, v02 osv.). Du kan også bruge en anden metode til navngivning af dine kildekodefiler, - bare du let kan finde flere tidligere versioner af programmet når du er færdig og skal dokumentere udviklingsarbejdet. Programmet skal afprøves i en terminal (DOS prompt) hvor antal kolonner og rækker er sat til 80x24. Dokumenter udviklingen af nogle forskellige prototyper, f.eks. to, inklusive den endelige version, med tekst og skærmbilleder i en journal som du uploader og præsenterer kort på dit StudieWeb i en mappe med navnet ascii_tabel i dit home directory. Følgende skal uploades: 1. Kildekoden, evt. i flere forskellige versioner 2. Tekstfilen med ASCII tabellen 3. Journal på ca. 5 til 10 sider i PDF format (plus andre formater om du vil). I journalen skal du 3.1. beskrive de værktøjer du bar brugt (Python, editor osv.) 3.2. beskrive hvordan du har løst opgaven, gerne vha. blokdiagram og et flowchart. 3.3. vise forskellige versioner af kildekoden, 3.4. beskrive problemer og forklare hvordan du har løst dem. Side 2 af 10
3.5. gør kort rede for nogle af de Python-funktioner som du har brugt, specelt dem som du har brugt til håntering af strenge. Krav til dokumentation af programmer Når vi skal dokumenter udvikling af programmer, så kan vi bruge følgende liste over krav til dokumentationen som inspiration. For nogle programmer vil det være mindre meningsfuldt at bruge alle punkterne i listen, og for andre programmer vil der måske behøves tiltag som ikke nævnes i listen. Brug den som inspiration, vælg selv de punkter som du synes relevante for dit program: 1. User stories, en eller flere, som beskriver brugernes forventninger til programmet. Her er nogle eksempler. 2. Kerneproblemet (evt. flere problemer). Beskrivelse i prosa, på dansk!, af kerneproblemet, altså det eller de problemer som du skal løse for at komme i gang med programmeringen af den første prototype. (Dette krav er inspireret af "Bottom Up" tilgangen til programmering.) 3. Beskrivelse af brugerfladen for programmet (tekst UI, eller GUI). Tegn en eller flere skitser! 4. Use Case diagram, som visualiserer hvem skal bruge programmet og til hvad det skal bruges. Her kan f.eks. ArgoUML eller Dia bruges. Sparxsystems har en beskrivelse af opbygningen i de forskellige UML-diagrammer. 5. Klassediagram, som viser de vigtigste klasser i programmet. Her kan f.eks. ArgoUML eller Dia bruges. 6. Input. En beskrivelse af input (inddata) til programmet. Hvilke data, deres datatype og mening for brugeren. 7. Operationer på inddata, altså en beskrivelse af de operationer som programmet skal udføre på inddata. 8. Output. Beskrivelse af output (uddata) fra programmet. Hvilke data, deres datatype og mening for brugeren. 9. Flowchart (rutediagram) som viser programmets logiske opbygning/struktur. (Flowcharting, flowchart, brug gerne programmet Dia og for Dia til Windows se her. 10. Kildekoden for det færdige program, formateret med en non-proportional font, altså med et skriftsnit hvor alle bogstaver er lige brede. Det bevirker at indrykninger i kildekoden ikke forvanskes. Prøv også at bruge ikke større bogstaver end 12 punkter, evt. kun 10 punkter hvis der er mange lange linier i kildekoden som ellers ville deles på to linier (wrap to the next line). 11. Skærmbilleder som viser/dokumenterer hvordan det færdige program bruges/virker. Husk at i Windows så kan det det valgte, eller aktive vindue, kopieres til klippebordet (clipboard) med tastkombinationen Alt+PrtScr. Det kan være praktisk for at undgå at skulle paste skærmbilledet ind i et billedredigeringsprogram alene for manuelt at klippe vinduet ud fra hele skærmbilledet. Side 3 af 10
12. Et skærmbillede, eller flere, som viser udviklingsmiljøet, kildekoden, Python shell'en og evt. debuggeren i funktion med en kort kommentar/forklaring. 13. Diskussion/beskrivelse af de sætninge (statements) og evt. funktioner i Python som du har brugt i dit program. 14. Diskussion/beskrivelse af de eksterne funktionsbiblioteker (Python moduler) du evt. har brugt i dit program. ASCII tabel For at fortælle om mit python program vil jeg først forklare hvad en ASCII tabel egentlig er. ASCII står for American Standard Code for Information Interchange (amerikansk standardkode til udveksling af information). ASCII definere en transformation mellem grafiske tegn og binære værdier. ASCII finder dermed anvendelse når tekst på grafisk form, der er læselig af mennesker, ønskes repræsenteret på elektronisk maskinlæsbar form. ASCII tabellen består oprindeligt af 128 tegn (0-127) og blev offentliggjort i 1963. Side 4 af 10
ASCII tabellen har dog fået en udvidelse på 128 ekstra tegn, så ASCII blev til 256 tegn (0-255). Værktøjer Jeg startede med at bruge standard programmet PyScripter, som er et udemærkede program til at skrive python kode ned, men jeg gik videre til programmet PyCharm. Dette program er bedre til projekter, da man kan lave flere små python filer i mapper. Disse mapper og filer har man adgang til i venstre side i en slags manager. Derved kan man hurtigt komme til at sine forskellige versioner igennem projektet og derved giver det meget mere rig mulighed for udvikling. Her ses PyCharm programmet. Side 5 af 10
Til information angående python koder har jeg brugt bogen How To Think Like A Computer Scientist og diverse internetkilder. Versioner af ASCII tabel Idet at jeg har lavet en ASCII tabel i python, blev min kode udviklet mere og mere. Jeg har taget to eksempler af mine koder, hvor der er et stort spring i udviklingen. Mine to eksempler har samme udseende på nær nogle forkortelser, som indgår i v2.1. Ud over det er beskrivelsen af forkortelserne også tilføjet i v2.1. v1.9 I min version 1.9 har jeg en meget simpel kode, hvor der er blevet levet op til alle kravene. En optimering for denne kode kunne være at give hvert tegn for 0-31deres oprindelige forkortelse i stedet for NUL. Her ses min kode, som oversættes, så det er læseligt for et menneske. Denne kode består blot af en masse start variabler, som jeg hidkalder i et loop, der kører 16 gange for hver variabel. Hver variabel har jeg sat til at vokse med 1 hver gang, så tallene vokser og derved ændre tal og tegn sig. Problemer og mangler I denne version er manglerne: - Forkortelser for tegn 0-31 plus 127. - Forklaring af forkortelser. Det er som så ikke nogle problemer med denne kode. Side 6 af 10
v2.1 I min version 2.1 har jeg lavet en lidt svær kode i brug, men som ser mere professionel ud og fylder mindre. Det vil sige at den er mere avanceret, da den køre et loop i et loop. Her ses min kode, som oversættes, så det er læseligt for et menneske. Denne kode kører af to loop altså gentagelser. En for hen og en for ned, lidt som en x- og y-akse. Loopet for i er ned og loopet for j er hen. Problemer og mangler Denne version er helt som den skal være. Der er kun en lille visuel irritation, som er at tallene 100-111 står helt op ad skillevæggen, men hvis jeg skubbede dem fra hinanden med et mellemrum ville der ikke være plads til tegn 127, altså DEL. DEL ville jeg hellere have indgik, så det bare være mindre visuelt flot for 100-111 end at et tegn kun var halvt. Denne fejl skylles at tabellen kun måtte være 80 tegn lang. Side 7 af 10
Specielle python koder fra min ASCII kode v1.9 I denne version har jeg brugt chr(124) i stedet for, da jeg i starten ikke kunne finde ud af at indtaste, men samtidigt gør jeg brug af ASCII i det jeg programmere en ASCII tabel, som jeg synes er en sjov tanke. Angående loop, altså gentagelse bruger jeg: for i in range(16):. Den får den efterfulgte kode til at gentage sige 16 gange. Generelt når jeg skriver chr() hidkalder jeg tegn fra ASCII. Når variablerne indsættes i chr() afkodes variablen til sit tal og hidkalder derved det ønskede nummer fra ASCII, som så bliver til et ASCII tegn. print () funktionen er blot en kommando for at udskrive koden ud til kommandoprompt også kendt som cmd. Når en funktion som denne ( " " if a < 10 else "") bliver taget i brug er det for at fortælle at hvis en variabel er nogle specielle tal skal der udskrives hvad, der står imellem de første to gåse øjne. Resten af tallene skal følge gåse øjne sæt nummer to. I det ovennævnte eksempel beskriver koden at der skal laves et mellemrum, hvis tallet er under 10 og hvis tallet er lig med eller over 10 skal der ikke være noget som helst. end= betyder blot at teksten/funktionen ender. v2.1 I denne version træder mange af de samme funktioner fra v1.9, som selvfølgelig har andre variabler, osv. Dog træder nye funktioner også i kraft til v2.1. Funktionen int() betyder blot at man angiver et tal. str() betyder at det er ren tekst. Jeg lavede en udvidet model af else funktionen: (" "+str(deci)) if j < 10 or (j > 95 and j <100) or (j>15 and j<96) or (j>111 and j<128) else (str(deci))) Her bruges kommandoerne and og or, der sammensætter variablerne lidt. or fortæller at hvis noget er dette eller noget andet, hvor and er en måde at lave et interval på fx. Side 8 af 10
Konklusion Det er ikke så lige til at lave en så enkel ting som en ASCII tabel, når man skal gøre det helt fra bunden. Det svære er at stille det op i en tabel med en hvis dimension og samtidig med at det skal fremføres flot. Men rigtig spændende at komme ind bag hjernen og tankegangen i en computer. Vindues størrelsen er afpasset til kravene med et vindue på 80x24: Og som det kan ses herunder, så passer min tabel til kravene: Side 9 af 10
Resten af teksten ses herunder i en helhed: Side 10 af 10