Tentamen: Datordel Programmeringsteknik Datum: 2013-02-22 Tid: 9:00-14:00 Sal: Ansvarig: Resultat: Hjälpmedel: Betygsgränser: Ulf Johansson Anslås inom 3 veckor. Inga Sammanlagt 30 p för G, 45 p för VG. Iakttag följande: Arbeta i ett enda projekt. Observera att den c-kod som lämnas in skall vara körbar, dvs. ni måste kompilera om efter er sista ändring i koden och kontrollera att den slutgiltiga koden inte ger kompileringsfel. Kod som inte fungerar måste därför vara bortkommenterad. Endast det som ligger i respektive projektmapp kommer att bedömas. Lösningarna rättas i befintligt skick. Såväl funktionalitet som struktur bedöms, vilket innebär att: även en lösning som inte är fullständig kan ge poäng poängavdrag kan ges för onödigt komplicerade eller ostrukturerade lösningar. Koden behöver endast kommenteras när det står så i uppgiften. Kommandon från bibliotek (även Roberts) får användas fritt.
1) I denna uppgift skall vi arbeta med strängar och tecken, samt uppdelning i funktioner. Er uppgift är att skriva ett program som låter användaren mata in förnamn, efternamn och arbetsplatsnamn. Programmet behöver endast hantera bokstäver från det engelska alfabetet och ingen felkontroll behöver utföras, dvs. det får bli hur konstigt som helst om andra tecken används. Utifrån inmatningen skall programmet skapa en e- postadress på formatet first.last@acronymwork.se. Det som skall ske med strängen är alltså: i) allting skall omvandlas till små bokstäven ii) acronymwork skall skapas och bestå av initialbokstäverna i arbetsplatsens namn (se körningsexempel nedan)..se skall läggas till sist iii) Programmet skall även skapa och skriva ut ett s.k. Star Warsnamn utifrån följande enkla algoritm: tag de 3 första bokstäverna i förnamnet tillsammans med de 2 första bokstäverna i efternamnet. Observera att stor vikt läggs vid uppdelning i funktioner, där principen är att all input från användaren och all utskrift till skärmen skall ligga i huvudprogrammet, dvs. inte i de funktioner som skapar de olika delarna. Welcome to the e-mail and Star Wars name generator Please input a first name: Cecilia Please input a surname: Sonstrod Please input an organization name: Hogskolan i Boras E-mail address is: cecilia.sonstrod@hib.se Star Wars name is cecso Press any key to continue... Welcome to the e-mail and Star Wars name generator Please input a first name: Ulf Please input a surname: Johansson Please input an organization name: National Security Agency E-mail address is: ulf.johansson@nsa.se Star Wars name is ulfjo Press any key to continue...
2) Denna uppgift behandlar främst vektorer och slumptal. a) Börja med att deklarera en statisk heltalsvektor kallad dicescore som innehåller 10000 element. Deklarera även i main en annan heltalsvektor med 16 element som heter frequencies. (1p) b) Skriv en funktion hitdie som slår en sexsidig tärning dvs. returnerar ett heltal slumpat mellan 1 och 6. (2p) c) Skapa en funktion simulatedice som fyller vektorn dicescores med resultat där varje enskilt resultat fås genom att slå och lägga ihop tre sexsidiga tärningar. (3p) d) Skapa en funktion generatestatistics som går igenom dicescores och lagrar frekvenserna (det antal gånger som varje resultat erhållits) i vektorn frequencies. I vektorn frequencies skall alltså ligga antalet gånger summan av de tre tärningarna blev 3, antalet gånger summan av de tre tärningarna blev 4 etc. ända upp till antalet gånger summan av de tre tärningarna blev 18. (6p) e) Skapa därefter en funktion printstatistics som skriver ut de erhållna frekvenserna enligt nedan: The dice sum 3 was obtained 48 times The dice sum 4 was obtained 118 times The dice sum 18 was obtained 44 times (2p) f) Knyt ihop det hela med ett kort huvudprogram. Ingen menyhantering eller dylikt skall förekomma så fort programmet startar skall statistiken skrivs ut och programmet avslutas. (1p) Körningsexempel: The dice sum 3 was obtained 49 times The dice sum 4 was obtained 126 times The dice sum 5 was obtained 268 times The dice sum 6 was obtained 446 times The dice sum 7 was obtained 667 times The dice sum 8 was obtained 963 times The dice sum 9 was obtained 1112 times The dice sum 10 was obtained 1267 time The dice sum 11 was obtained 1251 time The dice sum 12 was obtained 1243 time The dice sum 13 was obtained 992 times The dice sum 14 was obtained 697 times The dice sum 15 was obtained 448 times The dice sum 16 was obtained 282 times The dice sum 17 was obtained 136 times The dice sum 18 was obtained 53 times Press any key to continue...
3) I denna uppgift skall ni tillverka ett programskelett för ett enkelt hundregister. a) Skriv en typdefinition för en post (struct) som representerar en hund. Posten skall innehålla tilltalsnamn, födelseår, chipnummer (en sträng på 15 tecken) och ras. b) Ge typdefinitionen för en struct innehållande en dynamisk vektor av hundar och två heltal för att hålla reda på vektorns storlek och antal utnyttjade celler. Structen skall vara av pekartyp. c) Skriv nu ett huvudprogram där ni deklarerar en variabel av den nya databastypen, allokerar minne och initialiserar den. Initial storlek skall vara 50 och ges av en konstant INITIAL_SIZE. d) Skriv en funktion getdogfromuser som från användaren tar in alla uppgifter för en hund och returnerar en struct innehållande den nya hunden. e) Skriv en funktion adddogtoregister för att lägga in en ny hund på första lediga index i vektorn och uppdatera relevanta variabler i databasstructen. Om vektorn inte rymmer fler element skall ett felmeddelande ges och programmet avslutas. f) Skriv sedan en funktion printalldogs som löper igenom vektorn och för varje hund skriver ut namn, ras och ålder. Det är ett krav att ert program innehåller en konstant för nuvarande år, som används i uträkningen av ålder. Då ni inte har exakt födelsedatum, så räcker det naturligtvis att göra en enkel subtraktion. g) Knyt slutligen ihop allt ovanstående genom att utöka ert huvudprogram från c)-uppgiften så att användaren matar in uppgifter för tre hundar, vilka läggs in i registret. Programmet skall sedan skriva ut innehållet i registret med ett anrop till printalldogs. (15 p)
Följande körningsexempel visar hur uppgifter för två fastigheter matas in och sedan skrivs hela registret ut: Please input house details. House id: AB1 Street: High Street City: Newcastle Type: Flat Number of rooms: 2 Total living area: 52 How many viewings (1-6): 2 Which month? 02 Input day: 28 Which month? 02 Input day: 30 Please input a day between 1 and 29. Input day: 29 Please input house details. House id: DE Street: Chestnut Street City: Chester Type: House Number of rooms: 4 Total living area: 130 How many viewings (1-6): 1 Which month? 03 Input day: 15 Printing all houses... ID: AB1 Street: High Street City: Newcastle Type: Flat Number of rooms: 2 Living area: 52 Viewings: 2012-02-28 2012-02-29 ID: DE Street: Chestnut Street City: Chester Type: House Number of rooms: 4 Living area: 130 Viewings: 2012-03-15