Örebro universitet
Institutionen för teknik
Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se)



Tentamen i

Programmeringsmetodik

för D2, SDU2 m fl

lördag 12 december 2009

Gäller som tentamen för:
DT2010 Datateknik B, Programmeringsmetodik, provkod 0100
DT2006 Datateknik B, Tillämpad datavetenskap B, provkod 0110


Hjälpmedel: Inga hjälpmedel.
Poängkrav: Maximal poäng är 30.
För godkänt betyg (3 respektive G) krävs 15 poäng.
Resultat: Meddelas på kursens hemsida eller via e-post senast lördag 2 januari 2010.
Återlämning av tentor: Efter att resultatet meddelats kan tentorna hämtas på institutionen. Man kan också få sin rättade tenta hemskickad.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070-73 47 013.



LYCKA TILL!

Prioritet och associativitet hos operatorerna i C

Den fullständiga tabellen, med alla operatorer som finns i C:

Prioritet Kategori Operator Associativitet
Högsta Unära postfixoperatorer (), [], ->, ., ++, -- vänster
  Unära prefixoperatorer !, ~, ++, --, +, -, *, &, sizeof, (typ) höger
  Multiplikation mm *, /, % vänster
  Addition mm +, - vänster
  Bitvis skift <<, >> vänster
  Jämförelser <, <=, >=, > vänster
  Likhetsjämförelser ==, != vänster
  Bitvis OCH & vänster
  Bitvis XOR ^ vänster
  Bitvis ELLER | vänster
  Logiskt OCH && vänster
  Logiskt ELLER || vänster
  Villkorsoperatorn ?: höger
  Tilldelning =, +=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |= höger
Lägsta Komma-operatorn , vänster

Scenario

Vi ska bygga ett enkelt stavningskontrollprogram.

När det gör stavningskontrollen ska programmet utgå från två ordlistor: en lista med ord som det känner till, och en lista med vanliga felstavningar. Dessa ordlistor finns lagrade som två filer, som heter ord.txt och felstavningar.txt. Båda filerna har samma format, nämligen ett ord per rad. Filerna behöver inte vara sorterade i bokstavsordning, men kan råka vara det ändå.

Som ett enkelt exempel kan filerna se ut så här:

ord.txt
aldrig
alltid
almanacka
almanackor
att
det
diskussion
diskussioner
en
för
i
sen
upp
är
felstavningar.txt
alldrig
altid
almenacka
byrokrati
diskution
diskutionen
diskutioner
milenium
sannorlikhet

Filen ord.txt innehåller alltså alla (rättstavade) ord som programmet känner till, och filen felstavningar.txt innehåller ett antal felstavade ord.

Programmets uppgift är att läsa text från standardinmatningen, dela upp den i ord, och sen på standardutmatningen rapportera dels alla kända felstavningar, och dels alla ord som den inte hittar i någon av de två filerna med ord.

För enkelhets skull tänker vi oss att inmatningen till programmet görs enbart med små bokstäver och utan några skiljetecken. Vi kan också anta att inget ord, vare sig i filerna eller i inmatningen, är längre än 30 tecken.

Denna inmatning:

det är alldrig för sent att skriva up sin diskussion i sin almenacka

bör ge en utmatning som ser ut som den här:

alldrig -- känd felstavning!
sent -- okänt ord
skriva -- okänt ord
up -- okänt ord
sin -- okänt ord
sin -- okänt ord
almenacka -- känd felstavning!

Programmet ska alltså läsa text från standardinmatningen, och dela upp den i ord. Varje ord ska sen slås upp dels i den vanliga ordlistan, och dels i listan med kända felstavningar.
Om ett ord hittas i den vanliga ordlistan, antas det vara rättstavat, och ger ingen utskrift.
Om ordet hittas i listan med kända felstavningar, ska en varning om det skrivas ut.
Om ordet inte hittas i någon lista, ska en varning om att det är ett okänt ord skrivas ut.

Uppgiften (30 p)

Skriv stavningskontrollprogrammet, aningen i C eller C++.

Om man väljer olämpliga datastrukturer, till exempel osorterade länkade listor, eller (ännu värre) att läsa direkt i filerna vid varje uppslagning, kan det ta lång tid att köra programmet. Välj därför datastrukturer så att programmet går att köra på en normal, modern dator utan att det tar orimligt lång tid, och utan att det kraschar på grund av minnesbrist.

För att ett program ska vara lätt att förstå och arbeta vidare med, bör man dela upp det i mindre delar, så kallad modularisering. Modularisera programmet så det består av flera filer (.c- och .h-filer). Modulariseringen gäller främst de viktigaste datatyperna i programmet, där man bör använda abstrakta datatyper. En abstrakt datatyp är gjord så att implementationsdetaljerna är dolda, och därför går att ändra utan att man behöver ändra i resten av programmet.

Poängbedömning: