HI1024 Programmering, grundkurs TEN2 2015-10-30 KTH STH Haninge 8.15-13.00 Tillåtna hjälpmedel: En A4 handskriven på ena sidan med egna anteckningar Kursboken C PROGRAMMING A Modern Approach K. N. King helt utan anteckningar Tomma papper och penna. Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha tålamod! Logga inte ut förrän ni är klara med hela tentan. Svaren på uppgifterna ska vara program bestående av en fil som kallas uppg1.c, uppg2.c, uppg3.c och uppg4.c. Dessa ska sparas direkt under H:. Även om ni inte löser hela uppgiften så kan ni få delpoäng men ni måste se till att koden kompilerar och kan köras. Både output och koden bedöms och det är viktigt att denna är välskriven och uppfyller uppgiftens instruktioner. Välj bra variabelnamn och struktur men lägg inte så stor vikt vid kommentarer. Kom ihåg ert tentamenskonto. Resultaten kommer att presenteras kopplade till dessa. Lycka till Betygsgränser (Max 18p): 8p (varav minst 3 på uppgift 2) Fx 9p E 11p D 12p C 14p B 16p A Examinator: Nicklas Brandefelt C99 Vill du kunna använda C99 i Code::Blocks måste du göra följande: Settings Compiler Other options Lägg till: -std=c99 i fönstret och tryck OK
1. Växlingskurs (4p) Du ska här skriva ett program som omvandlar mellan kronor och euro. Användaren ska få välja hur mycket som ska växlas och ifrån vilken valuta och sedan ska användaren få reda på hur mycket det blir i den andra valutan. Resultatet ska avrundas till två decimaler. Därefter får användaren möjlighet att göra en ny växling eller avsluta. Försök att få körningen att se ut enligt nedan. Input från användaren är i fetstil. Hur mycket vill du vaxla?100 Vilken valuta vill du vaxla fran? (1-kr, 2-euro)1 Det blir 11.10 euro Vill du vaxla mer? (1-ja, 2-nej)1 Hur mycket vill du vaxla?10 Vilken valuta vill du vaxla fran? (1-kr, 2-euro)2 Det blir 90.10 kr Vill du vaxla mer? (1-ja, 2-nej)2 Avslutar Använd växlingskursen 1 euro = 9.01 kr
2. Bankkonton (6p) I den här uppgiften ska vi påbörja ett program som hanterar en databas med bankkonton. Vi ska representera ett bankkonto med en struct. Ett bankkonto ska innehålla en ägare, ett kontonummer och ett saldo (pengar på kontot). Programmet ska lagra dessa i en array. Vi ska nu skriva tre funktioner som hjälper oss att göra saker med vår databas. Funktionerna ska anropas från huvudprogrammet som ges längst ner i denna uppgift. Löser du alla uppgifter ska ditt program fungera utan att du ändrar huvudprogrammet alls. Klarar du inte delar av uppgiften kan du behöva kommentera bort vissa rader och kanske hårdkoda vissa saker. I main har jag utgått ifrån att du använt typedef för att kalla din struct för Account. Om du inte gör det behöver du ändra något i main. a) Definiera en struct för ett konto med ägare, kontonummer och saldo överst i ditt program. Använd #define för ordlängden på ägare. Använd gärna typedef för att ge structen namnet Account. Använd #define för att definiera MAXACCOUNTS till 1000. Skriv in main nedan. (1p) b) Skriv en funktion add( ) som tar en array, en pekare till en int, ett namn, ett kontonummer och lägger till ett nytt konto till arrayen med saldo 0 kr. Heltalsvariabeln som pekaren pekar på ska ökas med ett. Se main nedan för anrop. (2p) c) Skriv en funktion print( ) som tar en array av Account och en int som är antalet account s i arrayen och skriver ut alla konton till kommandotolken. Försök efterlikna utskriften nedan. (1p) d) Skriv en funktion increase1000( ) som tar ett Account (obs ej array) och ökar saldot på detta konto med 1000. Se anrop i main nedan. (1p) e) Skriv en funktion totalamount( ) som returnerar summan av alla kontons saldon. (1p) int main() { Account reg[maxaccounts]; int nrofaccounts=0; add(reg,&nrofaccounts,"nicklas",123456); add(reg,&nrofaccounts,"armin",234567); increase1000(®[0]); increase1000(®[0]); increase1000(®[1]); print(reg,nrofaccounts); printf("banken har totalt: %d kr.",totalamount(reg,nrofaccounts)); return 0; } En körning: Konto Namn Saldo 123456 Nicklas 2000 234567 Armin 1000 Banken har totalt: 3000 kr.
3. Kryptering (4p) För full poäng använd funktioner och arrayer på ett bra sätt. Använd inga globala variabler. a) I denna uppgift ska du skriva en funktion som krypterar en sträng bestående av A-Z genom att flytta varje bokstav tre steg framåt så att A blir D, B blir E, och så vidare ända till X blir A, Y blir B, och Z blir C. Tecken som inte är A-Z skall lämnas orörda. b) Skriv nu en funktion som dekrypterar en krypterad sträng. Dvs som återskapar den ursprungliga strängen från den krypterade strängen. Båda funktionerna bör fungera tillsammans med main nedan: int main(){ char s[] = "HAR DU EN BRA MENING 1-JA 2-NEJ ABC XYZ"; crypt(s); decrypt(s); return 0; } En körning: HAR DU EN BRA MENING 1-JA 2-NEJ ABC XYZ KDU GX HQ EUD PHQLQJ 1-MD 2-QHM DEF ABC HAR DU EN BRA MENING 1-JA 2-NEJ ABC XYZ
4. Instickssortering (4p) När man ska sortera en array med heltal finns det flera möjliga algoritmer. I den här uppgiften skall du skriva en funktion som sorterar en array bestående av heltal med hjälp av instickssortering. Observera att sortera en array med någon annan algoritm ger noll poäng. Du skall också anropa funktionen med följande array {2, 7, 3, 9, 1, 5, 8} och skriva ut den sorterade arrayen i main. Funktionen skall dock klara att sortera arrayer av heltal av godtycklig längd. Förutom arrayen tar funktionen en in-parameter till som är arrayens längd. För full poäng skall funktionen inte behöva använda någon extra array utan klara sig med den array som skall sorteras och några variabler. Använd funktioner och arrayer på ett bra sätt och använd inga globala variabler. Instickssortering bygger på idén att om man har en sorterad lista och lägger till ett nytt tal genom att stoppa in det på rätt ställe så har man fortfarande en sorterad lista. Algoritm: Börja med att se det första talet i arrayen som en sorterad lista med bara ett tal. Lägg till tal nummer två till listan genom att stoppa in det på rätt ställe i den sorterade listan. Du har nu en sorterad lista som består av de två första talen i arrayen. Lägg nu till tal nummer tre i arrayen till din lista genom att stoppa in det på rätt ställe. Osv.