Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Relevanta dokument
Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

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

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

LAB 4. ORDINÄRA DIFFERENTIALEKVATIONER. 1 Inledning. 2 Eulers metod och Runge-Kuttas metod

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

Föreläsning 5-6 Innehåll

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

Varför behövs det? I Allegro finns t.ex. stöd för:

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Objektorienterad Programmering (TDDC77)

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 1 & 2 INTRODUKTION

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Föreläsning 2, vecka 8: Repetition

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Föreläsning 13 Innehåll

Tentamen TEN1 HI

Funktionens deklaration

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Laboration 1: Figurer i hierarki

TDDC77 Objektorienterad Programmering

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Objektorienterad Programmering (TDDC77)

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

Introduktion till arv

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Arrayer (fält)

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.

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

Innehåll. Pekare Exempel

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

Vad är programmering Jonas Lindemann

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 6: Metoder och fält (arrays)

Programmeringsteknik med C och Matlab

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

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

Föreläsning 8: Exempel och problemlösning

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

DAT043 - Föreläsning 7

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

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

Matematisk analys för ingenjörer Matlabövning 2 Numerisk ekvationslösning och integration

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen FYTA11 Javaprogrammering

Statistik över heltal

TDIU01 - Programmering i C++, grundkurs

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Inledning. Kapitel Bakgrund. 1.2 Syfte

OBS! All teori i detta och följande dokument kompletteras med genomgångar på lektionerna. Så det är viktigt att närvara och göra egna anteckningar.

Vetenskapsdagen 2016 SciLab för laborativa inslag i matematik eller fysik

TDDD78 Viktiga begrepp, del 2

Föreläsning 10. Pekare (Pointers)

Tentamen i Objektorienterad programmering

Enkla datatyper minne

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

*Pekarvärden *Pekarvariabler & *

F4. programmeringsteknik och Matlab

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

Parameteröverföring. Exempel. Exempel. Metodkropp

Motivation. Programmeringsuppgift: En första ansats: Lagra info om anställda Håll reda på varje anställds närmaste chef. som också är en anställd!

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Programmeringsteknik med C och Matlab

Numeriska metoder, grundkurs II. Dagens program. Gyllenesnittminimering, exempel Gyllenesnittetminimering. Övningsgrupp 1

Träff 1 Skissa & Extrudera

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

Innehåll. Pekare Exempel

Föreläsning 3-4 Innehåll

Programmering B med Visual C

Objektorienterad Programmering (TDDC77)

Arrayer. results

Chapter 3: Using Classes and Objects

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Tentamen i Grundläggande Programvaruutveckling, TDA548

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Typkonvertering. Java versus C

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

TDDD78 Introduktion till OOP i Java

Classes och Interfaces, Objects och References, Initialization

Tentamen del 2 SF1511, , kl , Numeriska metoder och grundläggande programmering

Laboration 4. Numerisk behandling av integraler och begynnelsevärdesproblem

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript?

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

HI1024 Programmering, grundkurs TEN

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

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Transkript:

Grunderna i C++ ARK 385: Virtuella Verktyg i en Materiell värld AT Arkitektur & Teknik Chalmers Tekniska Högskola 2009 - Kursen skapades (3 förel.) 2010-6 förel. + 2 projekt 2011-8 förel. Helt omarbetade övningar & Arkitektur Teknik - Chalmers T A Tekniska Högskola i j Skapad av Matz Johansson BergströmLIMY matz.johansson@chalmers.se

Innehållsförteckning I 1 Wrap-up Repetition Frekventa frågor Vad vi går igenom idag 2 C++ del 5 Avslutande ord DXF i detalj LINE CIRCLE 3DFACE Processing Exempel Fjädersimulering Övningar Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 2 / 21

Wrap-up Repetition Vad lärde vi oss förra gången? ˆ Nästlade for slingor ˆ 2 dimensionella fält ˆ Game of Life ˆ DXF ˆ OpenGL ˆ L-System Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 4 / 21

Wrap-up Frekventa frågor Frågor från förra gången Kan man lägga in en radvektor inuti ett tvådimensionellt fält i C++, som i Matlab? - Kommer jag ta upp i nästa slide. Hur gör man för att exportera DXF? -Det kommer vi öva på idag. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 5 / 21

Wrap-up Frekventa frågor Avlusning (fält i fält) Följande visar en viktig skillnad mellan Matlab och C++: >> x=[2 3 2 ] ; A=[x ; 4 5 6 ; 7 8 9 ] A = 2 3 2 4 5 6 7 8 9 Radvektor inuti en matris i Matlab. int x [ SIZE ] = {2, 3, 2 } ; int A [ SIZE ] [ SIZE ] = { x, {4, 5, 6}, {7, 8, 9} } ; Följande går inte att skriva i C++. Vi får följande meddelande av kompilatorn: error: braces around scalar initializer for type int. Faktum är att x och A är adresser till positioner i minnet. Om vi skriver ut vad A har för värde så får vi ett hexadecimalt tal som säger vart det första elementet är i minnet. Vi är tvugna att gå igenom varje element i x och kopiera värdet till vår matris. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 6 / 21

Wrap-up Vad vi går igenom idag Vad lär vi oss idag? Vi kommer gå igenom lite användbara verktyg till projekten och workshoppen. ˆ DXF formatet, exempel ˆ Introduktion till Processing ˆ Fjädersimulering (projekt 2) Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 7 / 21

Avslutande ord... Följande visar en variant på while: do { cout <<" Type the value of n between 1 and 150\ n" ; cin >> n ; } while ( n < 1 n > 150) ; Initiering av flera variabler samtidigt: int i, j, k ; i = j = k ; Exponentialfunktionen finns också: exp(x) alltså e x. Öka en variabel: i+=1 (Chris använder denna ibland) i=i+1 i++ (vanlig). Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 9 / 21

DXF i detalj DXF formatet Vi skall i följande sidor lära oss att skriva till fil i det s.k. DXF formatet. En DXF fil är väsentligen en textfil som slutar på DXF och som följer en viss intern syntax. Dokumentationen kan vara bökig att läsa, den är väldigt generell, se www därför skall vi gå igenom detaljerna i hur man skapar linjer, cirklar (egentligen öppna cylindrar) och Faces. Man måste Vara noga med att skriva exakt som i dokumentationen och testa import med Rhino eller CAD. Att använda open på DXF filen går inte. Varje rad skall ha antingen en teckensträng, ett heltal eller flyttal, dvs. varje rad skall sluta med nyrad. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 10 / 21

DXF i detalj DXF LINE // B ö r j a n av f i l e n : Output << " 0" << endl << " SECTION " << endl << " 2" << endl... << " ENTITIES " << endl ; // E t t l i n j e s e g m e n t : Output << " 0" << endl << " LINE " << endl << " 8" << endl <<... "0" << endl ; Output << "10" << endl << x1 << endl ; Output << "20" << endl << y1 << endl ; Output << "11" << endl << x2 << endl ; Output << "21" << endl << y2 << endl ; // A v s l u t av f i l e n : Output << " 0" << endl << " ENDSEC " << endl << " 0" << " EOF "... << endl ; Exempel på hur man skriver till strömmen Output med DXF syntax för ett linjesegment. Där x1, y1, x2, y2 är flyttal som är definierade innan. Första och sista raden ovan skall alltid stå i en DXF fil en gång. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 11 / 21

DXF i detalj DXF LINE Första raden efter den obligatoriska SECTION raden står att läsa: Output << " 0" << endl << " LINE " << endl << " 8" << endl <<... "0" << endl ; Enligt dokumentationen tolkas det som står efter 8 som namn för lagret som linjen skall vara i. Med hjälp av lager kan man i Rhino välja Edit Select object by layers... på så sätt kan man ändra material eller på annat sätt styra sina objekt på ett smidigt sätt. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 12 / 21

DXF i detalj DXF CIRCLE Dessa rader skapar öppna cylindrar i ett lager Level 1 med specifikationerna nedan. Output << " 0" << endl << " CIRCLE " << endl << " 8" << "... Level1 " << endl ; Output << " 39" << endl << height << endl ; // h ö j d Output << "10" << endl << x << endl ; Output << "20" << endl << y << endl ; Output << "30" << endl << z << endl ; Output << "40" << endl << radius << endl ; // O r i e n t a t i o n Output << " 210 " << endl << orientation [ 0 ] << endl ; Output << " 220 " << endl << orientation [ 1 ] << endl ; Output << " 230 " << endl << orientation [ 2 ] << endl ; // x // y // z I detta exemplet har jag definierat height, radius, x, y och z flyttal. Orientation är ett fält av flyttal. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 13 / 21

DXF i detalj DXF 3DFACE Vill man rita funktionsytor eller andra 3d figurer så kan man använda sig av 3DFACES. Vill man rita kuber måste man skriva varje yta, denna koden skriver man bara en gång och återanvänder. Exempel på syntax i en nästlad for slinga med variabler i, j och 2d fälten x, y, z: Output << " 0" << endl << " 3 DFACE " << endl << " 8" << endl... << "0" << endl ; Output << "10" << endl << i << endl ; Output << "20" << endl << j << endl ; Output << "30" << endl << z [ i ] [ j ] << endl ; Output << " 11" << endl << i+1 << endl ; Output << "21" << endl << j << endl ; Output << " 31" << endl << z [ i +1][ j ] << endl ; Output << " 12" << endl << i+1 << endl ; Output << " 22" << endl << j+1 << endl ; Output << " 32" << endl << z [ i +1][ j+1] << endl ; Output << "13" << endl << i << endl ; Output << " 23" << endl << j+1 << endl ; Output << " 33" << endl << z [ i ] [ j+1] << endl ; Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 14 / 21

DXF i detalj 3DFace Vi vill alltså bygga upp ytor av rektangulära plattor: j (i, j+1) 4 (i+1, j+1) 3 1 2 (i, j) (i+1, j) i DXFs punktordning för 3dface. Sadelytan z = x 2 y 2 x,y [ 2,2] Vi kan också bygga kuber på samma sätt, detta kommer vi se i projekt 1. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 15 / 21

Processing Processing Processing är ett språk som bygger på Java. Det är väldigt likt C++ med vissa små skillnader, vilka vi kommer gå igenom. int size = 1 0 0 ; float [ ] array = new float [ size ] ; ˆ Inga prototyper är nödvändiga. ˆ Vissa funktioner skall man implementera själv: setup draw ˆ Om man vill styra mus och tangentbord: keypressed mouseclicked Tanka ner Processing och installera, kräver inga administrativa rättigheter www Referensblad: www Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 16 / 21

Processing Exempel på Processing kod: void setup ( ) { println ( " Starting the simulation... " ) ; // u t s k r i f t size ( 7 0 0, 700, P3D ) ; // s t o r l e k på f ö n s t r e t windowsize =700; nostroke ( ) ; // använd i n t e penna när man r i t a r framerate ( 5 0 ) ; // u p p d a t e r i n g s h a s t i g h e t background ( 0 ) ; // s v a r t bakgrund } Anropet till nostroke säger till Processing att inte använda penna när man ritar, dvs. cirklar får inte en rand. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 17 / 21

Processing Processing forts. Tänk på att anropa size först i setup. I dokumentationen för size, se www, säger dem Again, the size() method must be the first line of the code (or first item inside setup). Any code that appears before the size() command may run more than once, which can lead to confusing results. ˆ Vi har heltalsdivision om vi dividerar två heltal. ˆ Typer (int, float, double) ˆ Funktioner, abs (flyttals abs, inte riktigt som C++) modulo % är ˆ main heter setup i Processing En stor skillnad mellan Processing och C++ är att Processing kan (utan extra tillbehör) returnera fält. float [ ] update ( float [ ] x ) { randomseed ( 0 ) ; float [ ] res = { random ( 5 0 ), random ( 5 0 ) } ; return res ; } Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 18 / 21

Fjädersimulering Fjädersimulering med Eulerintegration Numeriskt approximera eftersläpande fjäder (ODE): d 2 y dt = ky d dy 2 }{{}}{{} dt Hooke s lag Dämpning Euler approximerar lösningen till följande differentialekvation: y (t) = f (t, y(t)) Vi vill alltså numeriskt integrera för att hitta y(t). Detta gör Eulers metod genom att approximera funktionen y(t) utmed tangenterna y (t) i små tidssteg dt. Man inser omedelbart att stora dt för en osnäll funktion y ger stora fel. Alltså y(t + dt) y(t) + dt y (t) Fjädern hänger ständigt efter en position ideal. Vi inför även fjäderkonstanten samt dämpning. i i Dessa kan man försiktigt modifiera så den blir dämpad, kritiskt dämpad eller icke dämpad. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 19 / 21

Fjädersimulering Euler forts. Eftersom Eulers metod för integration bara använder en term för approximation kommer det smyga sig in fel. displacement = position ideal ; // a c c e l e r a t i o n e n : aspring = kspring * displace dspring * velocity ; // s t e g a i t i d e n f ö r h a s t i g h e t och ny p o s i t i o n : velocity += aspring * dt ; position += velocity * dt ; Euler är en dålig approximation av integralen, vi använder ändå metoden för den är enkel att implementera och den fungerar bra för våra lekexempel. De två felen (Euler och dt) gör metoden dålig i simuleringar, där använder man högre ordningens polynom (RK4), www Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 20 / 21

Övningar Övningar ˆ Ni behöver inte logga in för att hämta ner från kurshemsidan www ˆ ˆ Öppna Instruktioner till Övning 5.pdf (under Övningar/5/) Öppna Referensblad.pdf (under Extra/) ˆ Om ni undrar något så kolla i referensbladet, där står allt ni behöver veta. ˆ Är jag upptagen så kolla på ledtrådarna, annars kan ni skriva upp er på tavlan så tar jag er i tur och ordning. Ni som är snabba får gärna hjälpa övriga. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 21 / 21