Tentamen: Datordel Programmeringsteknik

Relevanta dokument
Tentamen: Datordel Programmeringsteknik

Tentamen: Datordel Programmeringsteknik

Tentamen: Datordel Programmeringsteknik

Grundläggande programmering med C# 7,5 högskolepoäng

Tentamen TEN1 HI

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

HI1024 Programmering, grundkurs TEN

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

HI1024 Programmering, grundkurs TEN

HI1024 Programmering, grundkurs TEN

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

HI1024 Programmering, grundkurs TEN

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

Tentamen, EDAA10 Programmering i Java

Repetition av OOP- och Javabegrepp

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

Repetition av OOP- och Javabegrepp

Tentamen EDAF30 Programmering i C++

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Uppgifter till praktiska tentan, del A. (7 / 27)

tentaplugg.nu av studenter för studenter

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

HI1024 Programmering, grundkurs TEN

Tentamen i Grundläggande Programvaruutveckling, TDA548

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

DD2387 Programsystemkonstruktion med C++ Tentamen 2

Tentamen i EDA011 Programmeringsteknik för F, E, I, π och N

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TDIU01 - Programmering i C++, grundkurs

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Tentamen i Grundläggande programmering STS, åk 1 fredag

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

Tentamen Datastrukturer D DAT 035/INN960

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

TDIU Regler

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Pekare och arrayer. Indexering och avreferering

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas.

Tentamen EDAF30 Programmering i C++

tentaplugg.nu av studenter för studenter

TDDD78 Objektorientering: Lagring och livstid

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen i Grundläggande Programvaruutveckling, TDA548

TENTAMEN. Programmering Grundkurs (HI1900) Skrivtid 13:15-18:15. Tisdagen 26 april Tentamen består av 8 sidor

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen *:58/ID100V Programmering i C Exempel 3

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

Data- och programstrukturer

kl Tentaupplägg

TUTORIAL: SAMLING & KONSOLL

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Tentamen i Programmering C, Fri, Kväll,

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Tentamen TEN1 HI

729G74 - IT och programmering, grundkurs. Dugga.

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

Programmeringsteknik med C och Matlab

SP:PROG3 HT12 Tenta

Programmering C: Tentamen of 5 Prioritet och associativitet hos operatorerna i C De viktigaste operatorerna: Prioritet Kategori Operator

Beräkningsvetenskap föreläsning 2

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Övning från förra gången: readword

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Planering Programmering grundkurs HI1024 HT TIDAA

Tillämpad programmering

Tentamen i Grundläggande programmering STS, åk 1 fredag

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

Tentamen i. Programmering i språket C

TDIU Regler

Tommy Färnqvist, IDA, Linköpings universitet

HI1024 Programmering, grundkurs TEN

Planering Programmering grundkurs HI1024 HT data

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

DAT043 Objektorienterad Programmering

Tentamen i Programmeringsteknik I,, KandMa/Fy,

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Föreläsning 3-4 Innehåll

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Att använda pekare i. C-kod

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010

Programmering, grundkurs, 8.0 hp HI1024, TEN1. Fredagen den 2 mars 2012

Transkript:

Tentamen: Datordel Programmeringsteknik Datum: 2012-01-13 Tid: 12:00-16: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 och namnge källkodsfilerna så det framgår till vilken uppgift de hör. Exempel: u1_ulf.c 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 utgår vi från Roberts kalenderprogram, som ligger på ert tentamenskonto (under namnet upp1.c). Ni skall till detta program lägga till lite funktioner. Förutom att funktionerna skall vara korrekta avseende såväl prototyp som logik, läggs särskild vikt på hur ni utnyttjar de befintliga funktionerna i uppg1.c undvik alltså att koda sådant som redan finns! Använd också de fördefinierade veckodagarna som finns i det befintliga kalenderprogrammet. a) Börja med att lägga till en funktion som för ett visst givet år och en viss given veckodag, räknar ut hur många månader som börjar denna veckodag. T.ex. för 2011 och söndag, så skall funktionen returnera 1 eftersom endast en månad under år 2011 har en söndag som första dag. b) Skapa en funktion som tar in en veckodag och returnerar veckodagens namn på engelska. Funktionen skall ha felkontroll, så att felaktiga veckodagsvärden (utanför 0-6) returnerar Illegal weekday. c) Lägg nu till nödvändig kod i huvudprogrammet för att skriva ut hur många månader som börjar på varje veckodag under det år som kalendern skrivs ut för, se körningsexempel nedan. d) Den sista funktionaliteten som skall läggas till är att användaren skall ange sin födelsedag (månad och dag) och att det efter kalendern skrivs ut vilken veckodag detta datum infaller på under året. Felkontroll skall ske på inmatat datum, både avseende månadens och dagens nummer. Fundera noga igenom hur ni skall realisera detta och skapa funktioner enligt principen en funktion en uppgift. Körningsexempel: This program displays a calendar and some facts for a full year. The year must not be before 1900. Which year? 2011 Which month is your birthday? 7 Which date in July is your birthday? 26 kalendern skrivs ut som vanligt December 2011 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 In year 2011, 1 month(s) starts with a Sunday In year 2011, 1 month(s) starts with a Monday In year 2011, 3 month(s) starts with a Tuesday In year 2011, 1 month(s) starts with a Wednesday In year 2011, 2 month(s) starts with a Thursday In year 2011, 2 month(s) starts with a Friday In year 2011, 2 month(s) starts with a Saturday In 2011, your birthday is on a Tuesday Press any key to continue... (15 p)

2) I den här uppgiften skall vi arbeta med vektorer och ni skall stegvis bygga upp ett program som hanterar mängder. En mängd är som bekant en samling objekt där det inte kan finnas några dubbletter, och där elementen saknar inbördes ordning. För enkelhets skull antar vi här att de mängder vi jobbar med bara kan innehålla heltalen 0-4. En mängd skall representeras som en vektor, där en etta i fack i innebär att elementet i ingår i mängden, och en nolla innebär att elementet i inte ingå. Vektorn [1,1,0,0,1] motsvarar därför mängden {0 1 4}, medan den tomma mängden förstås är vektorn [0, 0, 0, 0, 0]. Storleken på alla vektorer styrs av den globala konstanten SIZE, vilken skall användas istället för siffror i koden. Notera alltså att ni inte till någon funktion behöver skicka med storleken som ett eget argument, det hanteras istället med den globala konstanten. Det här är kanske inte det snyggaste sättet att göra det, men vi har här valt den principen för att förenkla det något. Vi skall nu bygga ett antal funktioner för att hantera mängderna. Tänk på att det kan vara fördelaktigt att utnyttja existerande funktioner då ni implementerar nya. Observera att funktionsprototyperna samt ett huvudprogram som testar det färdiga programmet är givna längre ner. Ni kan lämpligen skriva in dessa efter hand som ni utvecklar och testar ert program. Sist finns även ett körningsexempel som visar output från exempelprogrammet. a) I första steget skall ni skapa funktionen newset vilken skapar och returnerar en tom mängd. Detta innebär att funktionen skall dynamiskt allokera en vektor av rätt storlek (bestämt av konstanten SIZE) och fylla denna med nollor. Slutligen skall denna vektor returneras. b) Nästa uppgift innebär att skriva funktionen addtoset som lägger till ett element i en existerande mängd. c) Nu skall ni skriva en funktion printset som skriver ut en viss mängd. Utskriftsformatet är att mängdens element skall skrivas mellan klamrar; exempelvis {0 2 4}. d) I nästa steg skall ni implementera funktionerna setunion och setintersection, vilka båda skapar en ny mängd som består av unionen respektive snittet av de båda mängderna som skickats till funktionerna. I s1 union s2 ingår som bekant alla element som ingår i någon (minst en av) mängderna s1 och s2. I s1 snitt s2 ingår de element som ingår i både s1 och s2. Titta gärna på körningsexemplet om ni är osäkra på hur det skall fungera. e) Slutligen skall ni koda två Booleska funktioner. Funktonen subset avgör om den första mängden är en delmängd av den andra, dvs. om alla element i första mängden också finns i andra. equalset avgör om de båda mängderna är lika, dvs. innehåller exakt samma element. Prototyper och huvudprogram finns i bilaga 1.

3) I denna uppgift skall vi tillverka delar av ett enkelt registerprogram för att hålla reda på studenter och deras studieresultat. a) Skriv en typdefinition med namnet studt för en post (struct) som representerar en student. Posten skall innehålla studentid (id), namn (name), antal poäng som studenten registrerats på (regpoints) och antal avklarade poäng (passpoints). Observera att poängantalen måste vara flyttal. b) Ge typdefinitionen för en struct (studdbt) innehållande en dynamisk vektor av studenter och två heltal för att hålla reda på vektorns storlek (currsize) och antal utnyttjade celler (currstud). 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 10 och ges av en konstant INITIAL_SIZE. d) Skriv en funktion getstudentfromuser som från användaren tar in alla uppgifter för en student och returnerar en struct innehållande den nya studenten. Ingen inputkontroll behöver ske här. e) Skriv en funktion addstudenttodb för att lägga in en ny student på första lediga index i vektorn och uppdatera relevanta variabler i databasstructen. Om vektorn för studenter inte rymmer fler element skall ett felmeddelande ges och programmet avslutas. f) Skriv en funktion updatestudentresults som tar in en struct studt och två tal som representerar nytt antal registrerade poäng och nytt antal avklarade poäng. Funktionen skall uppdatera antal registrerade poäng och antal avklarade poäng för studenten. Ni måste alltså skicka structen så att det går att påverka värden i den! Observera också att ni inte får lösa det hela genom att skicka hela registret. g) Skriv slutligen en boolesk funktion csnstud som avgör om en student har klarat tillräcklig mycket poäng för att få fortsatta studiemedel. Reglerna som skall implementeras är följande: 1. Om man är registrerad på 60 hp eller mindre, så skall man ha klarat minst 62,5% av sina poäng. 2. Om man är registrerad på mer än 60 hp, så skall man ha klarat minst 75% av sina poäng. (15 p)

Bilaga 1: Kod till uppgift 2 /* * File: uppg2.c * --------------- */ #define SIZE 5 int* newset(void); void printset(int *set); void addtoset(int element, int *set); int* setunion(int *s1, int *s2); int* setintersection(int *s1, int *s2); bool subset(int *s1,int *s2); bool equalset(int *s1,int *s2); main(){ int *s1, *s2, *s3; s1=newset(); s2=newset(); s3=newset(); addtoset(0,s1); addtoset(2,s1); addtoset(4,s1); addtoset(0,s2); addtoset(1,s2); addtoset(2,s2); addtoset(2,s3); addtoset(1,s3); printset(s1); printset(s2); printset(setunion(s1,s2)); printset(setintersection(s1,s2)); } if(subset(s3,s2)) printf("subset\n"); else printf("no Subset\n"); if(equalset(s3,s2)) printf("equal\n"); else printf("not Equal\n");