Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Relevanta dokument
Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

HI1024 Programmering, grundkurs TEN

HI1024 Programmering, grundkurs TEN

Planering Programmering grundkurs HI1024 HT TIDAA

HI1024 Programmering, grundkurs TEN

HI1024 Programmering, grundkurs TEN

Planering Programmering grundkurs HI1024 HT data

Planering Programmering grundkurs HI1024 HT 2014

HI1024 Programmering, grundkurs TEN

KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012

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

HI1024 Programmering, grundkurs TEN

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

BMI = (vikt i kg) / (längd i m) 2. Lösningsförslag

Programmering B med Visual C

Föreläsning 10. Pekare (Pointers)

Att använda pekare i. C-kod

Värmedistribution i plåt

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

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

TUTORIAL: SAMLING & KONSOLL

Tentamen i. Programmering i språket C

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

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Tentamen TEN1 HI

#include <stdio.h> #include <string.h>

Föreläsning 6 pekare och pekare tillsammans med arrayer

Kompilera och exekvera Javakod

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN1 - Teoretisk tentamen Tid: Torsdagen den 20 oktober 2011,

Övningsuppgifter till föreläsning 2 Variabler och uttryck

TUTORIAL: KLASSER & OBJEKT

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Föreläsning 13. In- och utmatning

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

Tentamen i Programmering grundkurs och Programmering C

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

Tentamen TEN1 HI

Programmering. Scratch - grundövningar

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

Kort introduktion till POV-Ray, del 1

PC-teknik, 5 p LABORATION FILHANTERING

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

LABORATION 4 OBJEKTORIENTERAD PROGRAMMERING I C++ I

JAVA Mer om klasser och objektorientering

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

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

RV03 Ändring av betygsskala

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

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

TDIU01 - Programmering i C++, grundkurs

Introduktion till programmering SMD180. Föreläsning 3: Funktioner

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Objektorienterad programmering D2

Uppgift 1 (vadå sortering?)

PROGRAMMERING I NXC. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

Introduktion till programmering med hjälp av Lego Mindstorm

Deklarera en struct som kan användas för att representera en rät linje

Programmering, grundkurs, 8.0 hp HI1024, extra tentamen, TEN1, för TIDAA1. Fredagen den 11 mars 2011,

Övningar Dag 2 En första klass

Tentamen i. för D1 m fl, även distanskursen. lördag 28 maj 2011

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

Inlämningsuppgifter, EDAF30, 2015

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Språket Python - Del 2 Grundkurs i programmering med Python

Micro:bit. Börja skapa egna program

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

Programmeringsteknik II

Minnestilldelning (allokering) och frigörande (avallokering) av minne

Instruktion för laboration 1

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION

Medieteknologi Webbprogrammering och databaser MEB725, 5p (7,5 ECTS) Klientprogrammering JavaScript Program på flera sidor

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

Funktioner och programstruktur. Föreläsning 5

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

EXTRA UPPGIFTER I C++ PROGRAMMERING-A

Föreläsning 2. Operativsystem och programmering

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

Lab1 Introduktion. 1 Syfte. 2 Innehåll Win32API Skapa trådar Kritiska sektioner Mailslothantering. 3 Förberedelse & Tips

Kursmaterial för laborationer i

Föreläsning 3. Programmering, C och programmeringsmiljö

Programdesign. Dokumentera. Dokumentera

Introduktionsmöte Innehåll

Det finns många flaggor till g++,

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

Programmering av NXT Lego- robot Labbrapport för programmering av en Lego- robot

Systemkonstruktion SERIEKOMMUNIKATION

Uppgift 1a (Aktiekurser utan poster)

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

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

Laboration 1 Introduktion till Visual Basic 6.0

Labrapport: Programmering i NXC Programmera LEGO Maindstorm med NXC

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20

Instruktion för laboration 1

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...

Transkript:

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Dataingenjörsprogrammet, elektroingenjörsprogrammet och medicinsk teknik KTH Skolan för Teknik och Hälsa Redovisning: Se Kurs-PM om hur redovisningen ska gå till. Läs och följ dessa instruktioner noga! Den här laborationen är den viktigaste examinationen i denna kurs. Klarar man av att utföra denna självständigt har man de kunskaper som behövs för de fortsatta studierna (kom ihåg att inte hjälpa varandra med koden). Den är krävande och kommer att ta er mycket tid och möda men när ni är klara är ni programmerare, om än ej fullärda. Till er hjälp har ni sist i detta dokument en ledning. Det är nämligen vår erfarenhet att det just nu för de flesta är lite för tidigt att helt själv strukturera upp arbetet runt en sådan här större uppgift. Att använda den är frivilligt. Det är inte tillräckligt att få ihop ett program som utför uppgifterna utan det måsta vara bra programmerat. Detta betyder först och främst att det bra uppdelat med hjälp av funktioner och att det använder arrayer och structar där så är lämpligt. Inga globala variabler får förekomma. Vidare ska ni välja bra variabel- och funktionsnamn. Kommentarer i koden bör det finnas en del men ni behöver inte överjobba denna del. Kommentera ganska lite och fokusera istället på att koden i sig blir lättläst. Uppgiften Årets uppgift är att skapa ett matematiskt program för hantering av sfärer. Varje sfär ska representeras av en struct och innehålla radie och position (x,y,z) som decimaltal samt sfärens färg. Positionen är positionen för sfärens mittpunkt. När programmet startar får användaren ange ett filnamn (på en text-fil med sfärer) och därefter via en meny möjlighet att utföra följande handlingar så länge användaren vill: Lägga till sfärer Skriva ut sfärer Sortera sfärer Söka efter sfärer Ändra radien för sfärer Avlägsna sfärer Avstånd från origo Avsluta Uppstart och avslut När programmet startar får användaren ange en fil. Finns filen skall programmet läsa in sfärer från filen och spara i en array av structar (glöm inte att kontrollera att de får plats). Om filen saknas skall programmet börja med en tom array. När programmet avslutas ska det skriva över/skapa en textfil (ej binärfil) med det tidigare angivna namnet och där spara ner sfärera i arrayen så att de kan läsas in nästa gång programmet körs. Observera att all filhantering sker vid programstart och vid avslut. Däremellan hanterar programmet endast sfärerna i den interna arrayen.

Lägga till sfärer Här har man möjlighet att lägga till nya sfärer till de som redan finns i arrayen. Det är viktigt att programmet kontrollerar att det hela tiden finns plats i arrayen. Användaren får välja mellan att mata in sfärer själv eller att slumpa fram ett visst antal sfärer. De slumpade sfärerna ska ha 0<radie<10 och 0 x,y,z 100 samt slumpvis erhålla färgerna röd, grön, gul, blå, vit, svart. För inmatade sfärer gäller endast att radien>0. Väljer användaren att slumpa fram 1000 sfärer men det endast finns plats för 810 till skall programmet slumpa fram 810 stycken och fylla arrayen med dessa. Skriva ut sfärer När användaren väljer detta alternativ skrivs alla sfärer ut i den ordning de är lagrade i programmets array. Därefter kommer huvudmenyn upp igen. Alla värden skrivs ut med 2 decimaler. En utskrift då tre sfärer är lagrade kan se ut enligt (er utskrift bör ha prydliga kolumner!): radie (x, y, z, farg) 1.00 (0.00, 0.00, 0.00, gul) 73.23 (10.00, 12.23, -13.00, vit) 0.01 (1.00, 2.00, 3.00, svart) Sortera sfärer Här får man välja på att sortera sfärer efter radie, x-koordinat eller volym (ej färg). Beroende val sorteras sfärerna i den array de lagras i och programmet återvänder till huvudmenyn. För att se resultatet av sorteringen får man i huvudmenyn välja att skriva ut alla sfärer. Söka efter sfärer Här ska användaren kunna söka efter sfärer. Denne får välja mellan att söka med hjälp av ett intervall för radien eller med hjälp av ett intervall för någon koordinat (ej färg). En körning skulle kunna se ut enligt: Vill du soka pa (1)radie, (2) x, (3) y, eller (4) z? 2 Ange min och max: 2.0 3.5 Sfarer med 2.00 <= x <= 3.50: radie (x,y,z, farg) 4.00 (2.00,0.00,0.00, bla) 73.23 (3.30, 12.23, -13,00, vit)

Ändra radien för sfärer Här får man först den ange den nya radien. Sedan får man göra en sökning enligt förra punkten och de hittade sfärerna får den nya radien. En körning kan se ut enligt: Vilken ar den nya radien? 3.223 Vill du soka pa (1)radie, (2) x, (3) y, eller (4) z? 2 Ange min och max: 2.0 3.5 Sfarer med 2.00 <= x <= 3.50: radie (x,y,z,farg) 4.00 (2.00,0.00,0.00,bla) 73.23 (3.30, 12.23, -13,00, vit) Efter detta skall alltså de två sfärerna ovan ha fått radien 3.223. Försök att återanvända kod från alternativet ovan med hjälp av funktioner och inte kopiering efter bästa förmåga. Avlägsna sfärer Här får man ännu en gång söka på samma sätt som ovan men nu tas de sfärer som hittas bort från arrayen. Det är viktigt att man inte skapar några hål i arrayen utan ser till att alla sfärer som är kvar lagras kompakt på plats 0 till n-1 om man har n sfärer. Avstånd från origo Om du är godkänd på laboration 1 och du redovisar på något av de två ordinarie redovisningstillfällena behöver du inte göra denna uppgift. När användaren valt detta alternativ får denne ange ett avstånd och sedan listar programmet alla sfärer som har kortare avstånd från sin yta till origo. Observera alltså att det inte är avståndet från mittpunkten av sfären som räknas utan avståndet från origo till den närmaste punkten på sfärens yta. Förbättrad sökfunktion Om du är godkänd på laboration 2 och du redovisar på något av de två ordinarie redovisningstillfällena behöver du inte göra denna uppgift. Skriv om sökfunktionen så att man istället för att söka på ett intervall för radien, x, y, eller z kan söka på ett intervall för en eller flera av variablerna. Man ska då t.ex. kunna välja att söka upp alla sfärer med radie mellan 2 och 5 och y-koordinat mellan -3.5 och 7. Den nya sökfunktionen skall gälla på alla tre meny-alternativ där man söker. Redovisning Vid redovisningstillfället skall du ha en fil med minst 20 sfärer redo att läsa in.

Ledning Först observerar vi att redan instruktionen ger oss följande programflöde: 1. Programmet börjar med att läsa in data från fil till en array av structar (om filen finns). Programmet stänger sedan filen. 2. Programmet låter användaren välja från huvudmenyn tills denna väljer avsluta. Alla ändringar görs till arrayen. Ingen filhantering utförs. 3. När användaren väljer avsluta skrivs arrayen ut till fil och programmet avslutar. Nu ska vi dela upp programmet och börja programmera de olika delarna. Här kan man göra många olika val. Nedan följer ett förslag som gör det någorlunda enkelt att testa programmet vartefter. Börjar ni med labben innan ni lärt er någon del kan ni välja en annan ordning men får då lägga lite mera tid på att kunna testa koden. Arbetsordning 1. Skriv en kommandotolk i main-funktionen som kan hantera alla legala val på top-nivån. Denna anropar i sin tur funktioner för de olika alternativen. Börja med att kontrollera att det hela kompilerar och kör utan funktionsanrop. Sedan lägger du till funktionsanrop till funktioner som bara skriver ut en rad med sitt namn. Se också till att man efter ett funktionsanrop får möjlighet att göra ett nytt menyval men att programmet avslutar när man väljer avsluta. Sådär nu har du ett fungerande program som vi kan bygga på bit för bit. 2. Definiera din sfär-struct och deklarera en array av sådana structar i main. Sätt storleken på arrayen till 10 000 med hjälp av #define. Deklarera och initiera i main också en variabel som ska hålla reda på antalet sfärer vi har i vårt program (nedan kallar jag denna nrofspheres). Skicka nu med arrayen och nrofspheres (allternatuvt en pekare till nrofspeheres) till de utförande funktionerna. (Du skickar en pekare till nrofspheres där du behöver kunna ändra variabelns värde.) Se nu till att utförarfunktionerna kan ta emot parametrarna och kompilera sedan och testkör. 3. Ska en initierad testvariabel av sfär struct typ och skapa därefter en rutin som kan skriva ut variablen! När det är klart skapar du en funktion som kan skriva ut hela struct arrayen oavsett om den är tom eller inte! Nu har du bra verktyg för att felsöka resterande programutveckling. Skriv nu funktionen för att lägga till sfärer. Även denna behöver arrayen och en pekare till nrofspheres (håll tungan rätt i mun med pekarna nu och läs på om du behöver). Använd tillfälliga printsatser för att se att den verkar fungera. Du kan nu köra programmet och lägga till konton och sedan välja skriv ut och se att det fungerar. Förfina nu utskrifterna och rätta eventuella buggar. 4. Du har nu ett fungerande program som gör något och en funktion som ger oss möjlighet att se vad som händer. Vi ska här nu välja att börja jobba med filhanteringen. Är du inte riktigt redo för filhantering än kan du hoppa detta just nu. Vi börjar med funktionen för att avsluta. Skriv denna så att den skriver ut all information i alla structar i vår array till en textfil. Låt den skriva antalet structar överst i filen så blir det lättare att läsa in senare. Namnet på filen kan du just nu hårdkoda. Öppna filen i en texteditor och kontrollera att det verkar fungera.

5. Det är nu dags att skriva initiera funktionen som ska anropas en gång i början av main. Det vore här naturligt att läsa in antalet sfärer i filen och sedan sätta arrayens storlek t.ex. till det dubbla. Pga att vi inte ännu gått igenom allokering blir detta krångligt och svårt att göra i funktioner. Av den anledningen är det mitt råd att du behåller en fast storlek på arrayen (i nuläget 10000 sfärer) även om detta känns lite primitivt. Vi kan då få en bra uppdelning av programmet i funktioner (om du bemästrar pekare till arrayer och allokering får du gärna allokera minne beroende på antal sfärer i filen). Denna funktion skall enligt instruktionen fråga efter filnamn och om det finns en sådan fil lagra alla sfärer i filen i vår array. Om filen saknas ska funktionen ta reda på filnamnet som sedan skall användas i avsluta. Ändra nu också funktionen avsluta så att denna skriver till korrekt fil. 6. Nu har vi kommit så långt så att jag tror ni är redo att själva välja i vilken ordning ni jobbar med övriga alternativ. Kom ihåg att kompilera och testköra ofta. Lycka till! Nicklas