Övnings- och examinationsuppgifter C# - programmering I (FYD421)



Relevanta dokument
Övnings- och examinationsuppgifter C# - programmering I (FYD421)

Statistik över heltal

Laborationsanvisning. Digital väckarklocka. Steg 2, laborationsuppgift 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

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

TUTORIAL: KLASSER & OBJEKT

Laboration 1 Introduktion till Visual Basic 6.0

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Agenda. Objektorienterad programmering Föreläsning 13

PROGRAMMERINGSTEKNIK TIN212

Gissa det hemliga talet

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

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Kursplanering Objektorienterad programmering

Laboration 3, uppgift En klass för en räknare

L04.1 Marodören. Inledning. Mål. Genomförande. Uppgift 1 Hello World. Moment I

Övningsuppgift. Bankkonton. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

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

Övningsuppgift. Repeterbara citat. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

För alla uppgifter på tentan gäller: Man får använda både standard-c++ (som till exempel har pekare som anges med * och objekt som skapas med new) och

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

Frekvenstabell över tärningskast med C#

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Chapter 4: Writing Classes/ Att skriva egna klasser.

Malmö högskola 2008/2009 CTS

Objektorienterad programmering D2

Lab5 för prgmedcl04 Grafik

Tentamen, EDAA10 Programmering i Java

Laboration 1 - Grunderna för OOP i Java

DD1311 Programmeringsteknik för S1 Laborationer läsåret

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

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.

Design av en klass BankAccount som representerar ett bankkonto

7,5 högskolepoäng. Objektorienterad systemutveckling I Provmoment: Ladokkod: 21OS1B Tentamen ges för: Lycka till! /Peter & Petter

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

Malmö högskola 2007/2008 Teknik och samhälle

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Objektorienterad programmering, Java, 5p TDBA63

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

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

Tentamen i Programmeringsteknik I

Java, klasser, objekt (Skansholm: Kapitel 2)

Övning 3. Datateknik A, Java I, 5 poäng

Inledande programmering med C# (1DV402) Tärningarna ska kastas

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

ID1004 Laboration 4, November 2012

Programmering B med Visual C

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Objektorienterad programmering Föreläsning 2

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

trafiksimulering Intro OU5 trafiksimulering

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

Malmö högskola 2007/2008 Teknik och samhälle

PROGRAMMERING A VB 2008 EXPRESS UTVECKLINGSVERKTYGET VISUAL BASIC

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Inledande programmering med C# (1DV402) 85/2=42. OBS! Heltal 1 (13)

TENTAMEN OOP

HI1024 Programmering, grundkurs TEN

Objektorienterad programmering i Java I

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Arv och polymorfism i Java

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

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

a. Vilka av följande påståenden är riktiga? Observera att felaktigt valda påståenden ger poängavdrag. (4p)

Laboration: Grunderna i MATLAB

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Föreläsning 5-6 Innehåll

OOP Tenta

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Kopiering av objekt i Java

Laboration 1. Utgåva 1 Gäller från

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Programmering för språkteknologer II, HT2014. Rum

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

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

WebViewer Manual för administratör Nova Software AB

Receptsamling med fil

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

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Windows Forms Winstrand Development

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Polymorfi. Objektorienterad och komponentbaserad programmering

PROGRAMMERING-JAVA TENTAMINA

Klasshierarkier - repetition

Laboration 1: Figurer i hierarki

Objektorienterad programmering Föreläsning 5

Inledande programmering med C# (1DV402) Introduktion till. eller så här är det tänkt att fungera.

Objektorientering: Lagring, räckvidd och livstid

Transkript:

Övnings- och examinationsuppgifter C# - programmering I (FYD421) Version 2.0 20:e januari 2012 Huvudförfattare: Peter Klason (peter.klason@physics.gu.se) Medförfattare: Per Sillrén, Patrik Johansson, Andreas Heinz, Jonas Einarsson

I. INTRODUKTION Välkommen till FYD421 C#-programmering I. Kursen ingår i programmet Datorstödd Fysikalisk Mätteknik (DFM), men kan även läsas separat, och har som syfte att lära dig grunderna i programmeringsspråket C#. I påbyggnadskursen FYD431 C#-programmering II är syftet att använda C# för att utveckla avancerade styr-, regler- och mätprogram. Kursen går som halvfartskurs på kvällstid. Detta kompendium kompletterar föreläsningarna och innehåller förutom examinationsuppgifterna. Ditt kursbetyg kommer baseras på (se examination nedan), ett antal övningsuppgifter vilkas syfte är att hjälpa dig att komma igång. II. Översiktligt innehåll C#-programmering I fokuserar på grunderna i C# och.net ramverket. Du lär dig göra både konsol- och Windowsbaserade applikationer. Mer detaljerat innehåll fås på hemsidan och via föreläsningarna. Labb av kursen inkl. examinationen är uppdelad i tre delar: 1) Allmän kunskap och grunder i C# 2) Objekt-orienterad programmering i C# 3) Avancerad C# och Windows-applikationer Varje del motsvaras av ett kapitel. Varje del innehåller både övnings- och examinationsuppgifter. III. Examination Följande gäller: Kursen examineras helt med examinationsuppgifterna (alltså ingen tentamen). All redovisning sker under schemalagd laborationstid (alltså ej via inlämning). Alla uppgifter har ett poängvärde och du får dessa poäng efter godkänd redovisning. Du måste ha minst 3 poäng per kapitel 1 och 2, och 1 poäng i kapitel 3 för att få minst betyget Godkänd. Ditt slutbetyg på kursen bestäms utifrån följande kriterier: Betyget Godkänd: är normalbetyget. Koden skall vara välskriven och kommenterad och givetvis lösa uppgiften på ett sätt som utnyttjar C# och.net på ett bra sätt. Dina program ska hantera fel på ett korrekt sätt; somexempel: om användaren ska mata in heltal ska programmet kontrollera att bara heltal matas in, hantera alla eventuella undantag, och om något blir fel ska ett felmeddelande genereras. Du måste minst kommit upp i 9 redovisade poäng senast vid sista laborationstillfället. Betyget Väl Godkänd: här krävs lite mer utöver kraven för godkänd; - att dina laborationsuppgifter uppvisar en allmänt god programmeringsteknisk kvalitet - att du följer anmodad kodstandard - att du kommenterar koden väl - att lösningarna meningsfullt utnyttjar C# och.net ramverkets finesser - att de färdiga programmen är användarvänliga. Du måste minst kommit upp i 16 redovisade poäng senast vid sista laborationstillfället. 2

Examinationens utförande: För att det ska bli lättare att redovisa skall du göra följande: Gör en Solution för varje kapitel och kalla den KapitelX där X är kapitelnumret. Lägg varje solution i en egen mapp (enklast genom att låta Create directory for solution vara förkryssat.) För varje uppgift i kapitlet: Gör ett projekt med namnet UppgiftY där Y är uppgiftsnumret. I slutändan kommer du alltså ha tre solutions (en per kapitel) med ett antal projekt i varje. IV. Övrig information Under kursen kommer programmet Microsoft Visual Studio 2010 Professional (VS2010) att användas till att skapa konsol- och Windowsapplikationer. Vi kommer också att använda Measurement Studio (MS). Dessa programvaror finns installerade i ET- och EP-labben (där laborationerna utförs). Utöver detta så har du tillgång till VS2010 inom ramen för MSDNAA om du saknar MSDNAA så kontakta kursansvarig för mer information. Aktuell kurslitteratur hittar du via föreläsningarna och hemsidan. Det finns även mycket bra material om C# att tillgå på internet. Följande länkar kan komma till användning under kursens gång: - http://www.java2s.com/tutorial/csharp/catalogcsharp.htm - http://www.csharp-station.com/tutorial.aspx - http://msdn.microsoft.com/en-us/library/67ef8sbd.aspx Om du stöter på frågor under kursens gång så utnyttja gärna de tillfällen som finns, d.v.s. i anslutning till föreläsningar och handledningstillfällen. Viss hjälp går att få via e-post, men det är mycket bättre att du frågar vid de schemalagda tillfällena. Kom ihåg, det finns inga dumma frågor bara dumma svar :-) 3

Kapitel 1: Allmän kunskap och grunder i C# Mål: Du ska kunna skriva ett enkla C#-program som läser in data från tangentbordet eller från filer, utför beräkningar och presenterar resultatet. Du ska även behärska fält. Övningsuppgifter Ö1 Skriv ett program som beräknar den återstående restiden om man vet medelhastigheten i km/h och återstående körsträcka i mil. Du kan anta att medelhastigheten hålls hela den återstående körsträckan. Resultatet ska presenteras som i figuren. Ö2 Skriv ett program som skapar ett mönster av 16 rader och 32 kolumner enligt figuren nedan. Du får bara använda följande satser en gång vardera för utskrift: Console.Write( ); Console.Write( * ); Console.WriteLine(); Ö3 Skriv ett program som uppmanar användaren att mata in hur många heltal som ska sparas. Lägg in heltalen i ett fält och skriv sedan ut fältets innehåll baklänges. Skapa en metod som sköter inläsningen av heltalen. Testkör programmet och se att det stämmer överens med figuren. 4

Ö4. Skriv ett program som ber användaren mata in ett tresiffrigt tal. Programmet ska sedan beräkna summan av de tre siffrorna. Om t.ex. 483 matas in ska programmet visa att summan blir 15. Examinationsuppgifter Uppgift 1.1 (1p) Skriv ett program som skapar ett fält med 10 000 slumptal mellan 0 och 9. Programmet ska sedan visa hur många tvåor och nior det finns i fältet. Uppgift 1.2 Växelpengar (1p) När du handlar i en affär och betalar kontant får du kanske växel tillbaka. I regel får affärsbiträdet hjälp av kassaapparaten med att beräkna summan man ska få tillbaka, men inte alltid vilka sedlar och mynt som ska lämnas tillbaka. Skriv ett program som beräknar den växel biträdet ska ge tillbaka i samband med ett köp. Programmet ska, förutom att presentera beloppet kunden får tillbaka avrundat till närmsta 50-öring, även bestämma vilka, och antalet, sedlar och mynt. Kunden ska få så få sedlar och mynt som möjligt tillbaka. Programmet ska kunna ge växel tillbaka med sedlar av valörerna 1000, 500, 100, 50 och 20 samt mynten 10, 5, 1 och 50-öring. Du kan anta att det alltid finns tillräckligt antal av de sedlar och mynt som krävs. Skriv endast ut de valörer som ska lämnas tillbaka. Eventuella fel i samband med inmatningen ska tas om hand. Använd try/catch och fånga lämpligt undantag (exception). Glöm inte att testa programmet. Om t.ex. en kund handlar för 371,38 kr avrundas beloppet till 371,50 kr. Om kunden betalar med en 1000 kr sedel ska kunden få 628,50 kr tillbaka, fördelat enligt figuren. Uppgift 1.3 Effektiv vindavkylning (1p) Du upplever säkert en lägre temperatur, än vad termometern visar, då det blåser. Men vilken temperatur är det du upplever? SMHI använder Oszevskis och Bluesteins formel (fr.o.m. vinter 2003/2004) för att beräkna den effektiva temperaturen, som ser ut på följande sätt: T eff = + 0.16 0.16 13.126667 + 0.6215* T 13.924748* v 0.4875195* T * v 5

där ν är vindhastigheten och T är temperaturen. Mer information finns att tillgå på: http://www.smhi.se/sgn0102/n0205/faktablad_vindavkylning.pdf Skriv ett program som visar en tabell med den beräknade effektiva temperaturen för olika temperaturer och vindhastigheter enligt figuren. Den effektiva temperaturen ska presenteras som ett heltal. Om den effektiva temperaturen mindre eller lika med -28ºC ska temperaturen skrivas ut med blå text på grå bakgrund. Använd egenskaperna Console.BackgroundColor och Console.ForegroundColor samt metoden Console.ResetColor() för att påverka vilka färger som ska användas. Den blå linjen anger den temperatur vid vilken det är risk för köldskador. Uppgift 1.4 Hitta topparna (2p) Gör ett program som läser in en textfil med mätdata. Filen innehåller intensitet som funktion av våglängd. Programmet ska lokalisera antalet toppar, topparnas position och intensitet. Utöver detta ska man som användare kunna sätta ett villkor för hur stor intensitet en topp måste ha för att få klassificeras som en topp. Till exempel kan användaren välja att en topps maxvärde måste vara över 1 för att få vara en topp. Filen med mätdata fås av labassistenterna. Uppgift 1.5 Bowlingspel (2p) I bowling ska man med ett klot försöka få ner 10 käglor. Man har två slag på sig. Om man lyckas få ner alla 10 i första slaget kallas det för strike och om alla käglor fallit ner efter två slag kallas det för spärr. Poängsättningen beräknas på ett litet speciellt sätt: En serie innehåller 10 rutor I varje ruta får man göra högst två slag Slår man en strike får man 10 poäng plus lika många poäng som antalet käglor man kommer att slå ner i nästkommande två slag Slår man en spärr för man 10 poäng plus lika många poäng som antalet käglor man slår ner i nästa slag Finns det käglor kvar efter sina två slag får man lika många poäng som antalet käglor man slagit ner i de två slagen Om man får strike i sista rutan, dvs. ruta 10, får man två extra slag och lika många poäng i sista rutan som antalet nedslagna käglor i de tre sista slagen. Om man får spärr i sista rutan får man ett extra slag och lika många poäng i sista rutan som antalet nedslagna käglor i de tre sista slagen. Skriv ett C#-program som frågar efter antalet käglor som slås ned i varje slag och beräknar totala antalet poäng i en serie. 6

Uppgift 1.6 Bowlingspel fortsättning (2p) Utöka ditt program så att du får ett bowlingspel. Programmet ska kunna ha 1-3 spelare och mha slumptal ska programmet slumpa fram hur många käglor spelarna slår ner i resp. ruta. Via en lämpligt vald tangent kastar man sitt klot. Som utskrift ska visas hur många käglor som välts ner och totala poäng varje spelare har lyckats skrapa ihop. Uppgift 1.7 Frekvenstabell och kommaseparerade värden (2p) Du ska i denna uppgift skriva ett program som öppnar en textfil med kommaseparerade värden. Programmet ska sedan läsa in filen rad för rad och analysera värdena i textfilen. Slutligen ska programmet skapa en frekvenstabell över respektive värde. Du ska med andra ord räkna hur många gånger varje värde finns i textfilen. Ett Dictionary kommer väl till pass för denna uppgift, med det kan du koppla ett värde till antalet gånger det förekommer. Textfilen, som fås av labassistenterna, innehåller resultatet från en av basårets tentor i Fysik del A. 7

Kapitel 2: Objekt- orienterad programmering i C# Mål: Du ska förstå och kunna hantera klasser, egenskaper, metoder, parametrar, returvärden och arv. Du ska dessutom förstå och kunna använda statiska metoder och egenskaper. Det är också viktigt att du förstår skillnaden mellan variabler av värdetyp och referenstyp och vad skillnaderna får för följder. Övningsuppgifter Ö1 Skapa en klass Book för att hålla reda på bok-objekt. Varje bok-objekt ska ha en titel, författare, förlag och ISBN. Du kan för enkelhets skull låta ISBN vara av typen string istället för någon numerisk typ. Detta gör att ISBN kan ha en 0:a som första siffra eller inkludera någon bokstav. Klassen ska också ha en metod, DisplayBook(), som skriver ut informationen till konsolfönstret. Testkör programmet genom att skapa minst tre stycken bok-objekt. Examinationsuppgifter Uppgift 2.1 PointD (1p) Skapa ett klassbibliotek (New Project -> Class Library) och kalla det för MinaKlasser Döp om Class1.cs till PointD.cs En punkt i ett tvådimensionellt koordinatsystem kan anges på formen (X,Y). Skriv en klass PointD som beskriver punkter på denna form. Observera att X och Y ska vara av typen double och att de ska implementeras som automatiska egenskaper (Auto- Implemented Properties). Gör två konstruktorer: en som inte har några parametrar och sätter X och Y till noll, och en som tar två parametrar av typen double och sätter X och Y till värdet av dessa parametrar Gör två operatorer + och som adderar respektive subtraherar två PointD objekt Skriv en statisk metod Distance som tar två PointD objekt som argument och returnerar avståndet mellan punkterna. Avståndet beräknas med Pytagoras sats. Uppgift 2.2 XYData (1p) Lägg i MinaKlasser till en klass XYData som har en automatisk egenskap data av typen BindingList<PointD> Gör en default-konstruktor som initierar data till en tom lista Gör en metod SetData som tar två fält av typen double och sätter data till att stämma överens med dessa. Om de två fälten är olika långa ska ett undantag av typen ArgumentException kastas. Gör ytterligare en konstruktor som tar två fält av typen double och anropar setdata med dessa Skriv en instansmetod FindPeaks som hittar maxima i datan och returnerar ett fält av typen double som innehåller x-koordinaterna för topparna. Skriv en instansmetod som returnerar en ny instans av XYData som innehåller Fouriertransformen av data Uppgift 2.3 Statisk Variabel (1p) Skriv en klass som innehåller en statisk variabel som håller reda på hur många objekt av klassen som existerar för tillfället. Det ska dessutom finnas en statisk funktion som returnerar detta antal. Varje objekt i klassen ska även ha en instansvariabel som automatiskt tilldelas ett unikt id-nummer 8

när objektet skapas. Detta id-nummer ska inte kunna ändras efter att det har initieras. Markera därför instansvariablen som readonly. Uppgift 2.4 Fordon (2p) Skapa en klass Fordon som beskriver generella egenskaper hos fordon, t.ex. färg och vikt Gör också ett gränssnitt IStyrbar med två metoder SvängVänster och SvängHöger. Skapa två härledda klasser, Båt och Bil, med minst 1 specifik egenskap var. Klasserna ska förstås implementera gränssnittet IStyrbar. Låt klassen Bil ha en delegate av typen delegate void BytOlja(Fordon sender). Skapa en klass Person som har en Bil och som lyssnar på händelser av typen BytOlja. Deklarera en virtuell funktion Passagerare som beskriver hur många passagerare varje fordon kan upplåta. Gör ett testprogram som anropar Passagerare för minst två olika typer av objekt. Förklara begreppen dynamisk typ och dynamisk bindning. Uppgift 2.5 Sorteringsklass (3p) (a) Du ska skapa en klass, Student, som hanterar ett godtyckligt antal studenter. Intressant information att lagra är åtminstone namn och ålder. Klassen ska vara sorteringsbar och detta åstadkommer du genom att implementera gränssnittet IComparable<T>, där T står för klassens namn. Du måste lägga till metoden CompareTo i klassen Student. Klassen Student ska ha privata fält för den information som lagras och till fälten ska det finnas publika egenskaper. Vidare ska klassen ha en konstruktor för att initiera ett objekt. För att testa klassen väljer du samlingsklassen List<T>. Du ska göra ett program som skriver ut en lista på personer i den ordning de lags till. Därefter ska programmet skriva ut en lista där personerna är sorterade på namn. Har två personer samma namn ska de sorteras efter ålder. (2p) (b) Utöka klassen Student i uppgift (a) så att det går att sortera på studenternas ålder likväl som på deras namn. Ett tips är att implentera gränssnittet IComparer<T>, läs i on-line -hjälpen för hur gränssnittet IComparer<T> kan användas för att sortera en klass. (1p) Uppgift 2.6 Gissa hemliga talet (2p) I denna uppgift ska du göra ett program där användaren har sju försök på sig att gissa ett heltal mellan 0 och 100. Följande krav måste uppfyllas: Användaren har sju (7) försök på sig att gissa rätt tal. Det ska inte gå att göra fler gissningar. En klass ska skapas för detta ändamål. Klassen ska ha lämpliga fält, egenskaper, metoder och konstruktorer. Antalet gissningar användaren har på sig ska lagras i en publik namngiven konstant. Det hemliga numret, som slumpats fram, ska inte kunna kommas åt. Klassen ska ha ett fält som håller reda på hur många gissningar som gjorts. Klassen ansvarar för att skriva ut om användaren gissat rätt tal, gissat för lågt, gissat för högt och om användaren förbrukat alla gissningar. Utskriften ska se ut som på skärmdumpen. En gissning görs genom att en metod i klassen anropas. Metoden ska skriva ut ett lämpligt meddelande beroende på resultatet av gissningen och metoden returnera true annars false. När användaren gissat rätt eller antalet gissningar är slut ska användaren få välja om han vill avsluta eller fortsätta en gång till. Om användaren matar in N ska programmet avslutas. 9

Uppgift 2.7 Statistik (2p) Du ska göra ett program som analyserar två serier om minst tio heltal vardera, gärna flera. Programmet ska presentera det största och det minsta värdet för respektive serie. Seriernas medelvärden ska också beräknas och presenteras. Slutligen ska programmet även avgöra vilken serie som har störst medelvärde. Skapa en klass Statistik som håller reda på de två serierna. Klassen ska inte lagra alla inmatade heltal utan den ska bara lagra den information som krävs för att presentera största och minsta värdet samt medelvärdet. Skapa klassen enligt klassdiagrammet. Som du ser har klassen en egen variant av metoden ToString() (som ni alla vet deklareras av basklassen Object). Metoden ToString() skriver ut seriens summa, medelvärde och största resp. minsta värdet. Metoden LasHeltal i klassen Program används för att läsa in och kontrollera de heltal som ska ingå i respektive serie. Använd int.tryparse i metoden LasHeltal för att kontrollera att det är heltal som matas in. Varje inläst heltal läggs till det Statistik-objekt som statistik refererar till med hjälp av metoden Add. Metoden LasHeltal anropas m.a.o. ifrån metoden Main. 10

11

Kapitel 3: Avancerad C# och grafiska komponenter Mål: Du introduceras till en del av alla de grafiska hjälpmedel och finesser som finns att tillgå i C# och VS 2010. Du lär dig att göra Windowsapplikationer. Övningsuppgift Ö1. Gör en Windowsapplikation som beräknar momsen för en viss vara. När användaren trycker på knappen beräkna ska momsen beräknas och visas m.h.a en label längs ner i fönstret. Varans pris exkl. moms ska matas in i en TextBox och momssatsen ska matas in via en NumericUpDown. Svaret ska innehålla pris exkl. moms, momsen och pris inkl. moms. Examinationssuppgifter Uppgift 3.1 Enkel Miniräknare (1p) Gör en Windowsapplikation som fungerar med funktionerna i figuren. Uppgift 3.2 Avancerad miniräknare (1-4 p) Utöka miniräknaren med fler funktioner. Kreativitet uppmuntras! Ju fler funktioner desto fler poäng får du på uppgiften. Minst 4 nya olika typer av funktionerkrävs för att få 1 poäng. Uppgift 3.3 Lissajoufigurer (1p) I denna uppgift ska ni skapa de klassiska Lissajoufigurerna. Dessa figurer uppstår när man har två sinusvågor med olika frekvens. De två sinusvågorna plottas i en XY-plot, där ena sinusvågen anger X-värdena och den andra Y-värdena. Låt amplituden på sinusvågorna vara 1 V. Med hjälp av 12

kontroller ska man kunna reglera de två sinusvågornas resp. frekvens. Resultatet ska visas i en ScatterGraph. Programmet ska även ha en CheckBox, om den är markerad ska en Legend visas. Uppgift 3.4 User controls, Model-View-Controller och Bindings (2p) I den här uppgiften ska du göra ett program enligt arkitekturmönstret model-view-controller (MVC). Idén med MVC är att separera databehandling (model) från dess grafiska representation (view). Kommunikationen mellan modellen och vyn sköts av controllern. Vilka ickefunktionella krav påverkas av MVC arkitekturen? Konstruera ett program som ser ut som figuren nedan. Programmet ska bestå av två klasser, en controller-klass och en view-klass. - Låt controllern representeras av Form-klassen som skapas när du skapar ett nytt projekt. Controller-klassen ska ha en instansvariabel av typen XYData och ska i konstruktorn koppla denna till view-objektet. Controllern ska även implementera händelsehanterare för knapparna Plot sinewave, Find peaks och FFT (Fourier-transform) på lämpligt sätt. - View-klassen ska vara en User control (använd menyalternativet Project:Add User Control ) med en ScatterGraph och en DataGridView. Använd GUI-editorn för att binda DataGridView-objektet till ett objekt av typen XYData (se Property-fönstrets DataSource-fält). För att kopplingen ska fungera måste View-klassen ska ha en instansmetod setdatasource som kopplar ett specifikt XYData-objekt till DataGridViewobjektet. För att grafen ska uppdateras när listan ändras implementerar du händelsen ListChanged för BindingSource-objektet. 13

Uppgift 3.5 Trafikljus (2p) Ditt företag har fått i uppdrag att tillverka ett kontrollsystem för trafikljusen i en mycket trafikerad 4-vägskorsning. Varje trafikljus består av grönt, gult och rött ljus. Ljusperioden för de olika färgerna ska vara: Rött ljus: 4s Gult ljus: 2 s Grönt ljus: 4 s Ljusen ska lysa på följande sätt: 14

Norr Söder Väster Öster Grönt Grönt Rött Rött Gult Gult Rött Rött Rött Rött Grönt Grönt Rött Rött Gult Gult Uppgift 3.6 Trafikljus del II. (1p) Utöka föregående uppgift med att lägga till ett trafikljus för fordon som ska svänga höger. Om sensorn (i detta fall en knapp under ljusen) som indikerar att det finns fordon som ska svänga höger är påslagen, följer trafikljusen som högersväng samma mönster som ovan. Det vill säga om ett fordon vid trafikljuset i norr ska svänga höger är trafikljuset för högersväng grönt, när trafikljuset i norr är grönt. Uppgift 3.7 Webapplikation och Analysis Library (2p) Du ska i denna uppgift skapa en webapplikation, genom att välja File>>New>>Web Site och sedan välja NI ASP.NET Web Site, se figur. När man trycker på knappen Plotta ska en sinus-, fyrkants-, triangel- eller sågtandsvåg plottas i en WaveformGraph. Allt beroende på vad man väljer i ComboBoxen. Grafens titel ska presentera vilken funktion det är som visas. Vidare ska funktionens medelvärde och standardavvikelse beräknas och visas. Medelvärdet ska även visas med en Gaugevisare. Slutligen ska det finnas två valmöjligheter, en för att ändra grafens bakgrundsfärg till blå och en för att lägga till lite vitt brus till den signal som plottas. Switcharna ska ha röd färg om alternativet inte är valt och grön om det är valt. Två tips är att undersöka Measurement Studios Analysis Library och att kolla i Measurement Studios manual, kapitel 5 Getting started with Measurement Studio. Uppgift 3.8 Klocka (3p) Som forskare har man flera arbetsuppgifter, t.ex. forskning och undervisning. För att lättare hålla reda på hur mycket tid man lägger ner på de olika arbetsuppgifterna ska du göra ett program som 15

håller reda på hur mycket tid man under en dag lägger ner på forskning, undervisning och lunch. Programmet ska se ut ungefär som i figuren. Överst i fönstret visas vad klockan är. Sedan väljer man genom att trycka på resp. knapp vilken sysselsättning man roar sig med för tillfället. Om tex knappen Forskning trycks in ska tiden som visas vid forskning öka för varje sekund som går. Du ska med andra ord ha fyra stycken klockor, en för vanliga klockan och tre som håller reda på hur mycket tid du lägger ner på respektive sysselsättning. Du avgör själv om du vill att sekunderna ska visas för klockarna för resp. sysselsättning. När den sammanlagda tiden för Undervisning och Forskning uppgår till 8h ska en diod börja visas med texten Åk HEM!!!. Dioden ska blinka mellan svart och röd med en sekunds mellanrum. När dioden är röd ska texten Åk HEM!!! visas. När man trycker på knappen Spara ska tiden man lagt ner på de tre sysselsättningarna sparas i en textfil med lämpligt namn. Filen ska även innehålla dagens datum. Programmet ska sedan avslutas. Du ska skapa två stycken klasser för att visa tiden. Klasserna ska vara utformade enligt klassdiagrammen nedan. Klassen NumberDisplay simulerar en nummerdisplay med två stycken siffror. Egenskapen Number som är kopplad till fältet _number säkerställer att det är omöjligt att sätta ett värde mindre 16

än 0 och större än största tillåtna värdet, _maxnumber. Om ett ogiltigt värde matas in ska ett ArgumentException kastas. Klassen har två konstruktorer, i den ena sätts Number = 0. Metoden GetDisplayNumber() returnerar aktuellt värde. Är värdet mindre än 10 läggs en nolla till först i strängen, tex om det aktuella värdet är 3 returneras 03. Med metoden Increment() ökas det aktuella värdet med ett. Om det aktuella värdet skulle bli större än det _maxnumber sätts det aktuella värdet till 0. Klassen ClockDisplay använder tre stycken NumberDisplay-objekt för att simulera en digital klockdisplay. Det booleska fältet _visasek sätts till true om man vill att även sekunderna ska visas när man presenterar tiden. Metoden GetTime() ska returnera aktuell tid på formen 12:45:10 i form av en sträng. Metoden SetTime() används för att ställa tiden. Defaultkonstruktorn ska sätta tiden till 00:00:00. Alla konstruktorer ska använda metoden SetTime() för att ställa tiden. Metoden TimeTick() låter klockan gå en sekund. För denna uppgift ska du skapa fyra stycken ClockDisplayobjekt, en som visar vad tiden är och en för varje sysselsättning. Det ClockDisplay-objektet som visar vad tiden är ska när programmet börjar initieras till rätt tid med hjälp av DateTime. Uppgift 3.9 Egen uppgift (1-3p) Gör en egen uppgift - inklusive ett förslag till lösning. Bedöm också svårighetsgraden på uppgiften genom att ge den poäng mellan 1 till 3 p. (Du får inte nödvändigtvis samma poäng vid redovisningen.) LYCKA TILL! 17