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

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

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

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

Introduktion C-programmering

TDIU01 - Programmering i C++, grundkurs

Repetition C-programmering

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.

Objektorienterad Programmering (TDDC77)

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

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

Föreläsning 1: Intro till kursen och programmering

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

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

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

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

Objektorienterad Programmering (TDDC77)

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

Variabler och konstanter

Grundkurs i programmering - intro

Platser för att skriva och testa kod online. Workshop om programmering i matematikkurser, version 0.7 senast sparat

Föreläsning 2. Operativsystem och programmering

Klassdeklaration. Metoddeklaration. Parameteröverföring

Föreläsning 1: Intro till kursen och programmering

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

Program & programmering

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

SMD 134 Objektorienterad programmering

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

1 Språket C Valet av språket C++ för kompendiet. 1.2 Språket. 1.3 Att programmera. 1.4 Hello World Börja programmera

TDIU01 - Programmering i C++, grundkurs

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

Introduktion till programmering. Programspråk och paradigmer

Objektorienterad Programmering (TDDC77)

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

F4. programmeringsteknik och Matlab

Planering Programmering grundkurs HI1024 HT TIDAA

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

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

1 Funktioner och procedurell abstraktion

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

TDIU01 (725G67) - Programmering i C++, grundkurs

Parameteröverföring. Exempel. Exempel. Metodkropp

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

Kursupplägg. Examination. Föreläsning 1: Intro till kursen och. Kursmaterial. programmering. Kursboken: Programmera med a multimedia approach

Grundläggande datalogi - Övning 1

Programmeringsteknik med C och Matlab

Enkla datatyper minne

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

OOP Objekt-orienterad programmering

Programmering för språkteknologer I, VT2012. Rum

Inledande programmering med C# (1DV402) Introduktion till C#

Det finns många flaggor till g++,

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

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

NetBeans 7. Avsikt. Projektfönster

Studentportalen UNIX-konton (systemansvariga P4118) Lärare: Tom Smedsaas,

TDIU01 - Programmering i C++, grundkurs

Planering Programmering grundkurs HI1024 HT data

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf

Objektorienterad programmering i Java

Instuderingsfrågor till Steg 1

NetBeans 5.5. Avsikt. Projektfönster

Programmering A med Visual C

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Föreläsning 1: Momstabellen i C++

C++ - En introduktion

EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Administration. EDAf30: Programmering i C++, 7.5 hp Obligatoriska moment

Introduktion till Matlab Föreläsning 1. Ingenjörsvetenskap

Innehålls förteckning

Att komma igång. Föreläsning 1

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

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 8 december 2015 Sida 1 / 22

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

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

Introduktion till algoritmer - L0 - Grunder i C++ Matematikgymnasiet, Läsåret L0 - Grunder i C++

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

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

Exempel på ett litet Ada-program

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

TDIU01 (725G67) - Programmering i C++, grundkurs

Föreläsning 3: Booleans, if, switch

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

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

Matematisk Modellering

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

Classes och Interfaces, Objects och References, Initialization

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Innehållsförteckning. 9 Större projekt Övningsuppgifter...32

Matematisk Modellering

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Föreläsning 1-2 innehåll

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

Kompilera och exekvera Javakod

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 Administration inledning Översikt 2 Språket C++ Motivering Bakom kulisserna 3 Första exemplet Utskrift Första exemplet 2 Variabler Typer Uttryck If-satser Övningar Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 2 / 30

Admin inledning Schema ˆ Glöm inte att skriva på närvarolistan (ligger ett papper att skriva på längst fram). ˆ Upplägg: 1 h föreläsning + 2 h laboration. Börjar och avslutar laborationspasset med en code along på utvalda övningar. Tillfälle Datum Övningar 1 5/10 1 2 12/10 2 3 2/11 3 4 9/11 4 5 14/11 5 6 16/11 Processing/Projekt 1 7 21/11 Processing/Projekt 2 8 23/11 Buffert Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 4 / 30

Admin Översikt Vad kommer vi lära oss i kursen? Kommunikation Loopar Pi FL 1 Introduktion Bibliotek Typer cin/cout If-satser FL 2 Scope Funktioner While-loop Fält m odu l o pow FL 3 Slumptal Filutskrift Funktioner FL 4 Fält (2D) For-loop OpenCV Processing FL 5 Projekt 1 DXF Processing FL 6 Projekt 2 Processing FL 7?? FL 8 Projekt 1 Projekt 2 Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 5 / 30

Språket C++ Motivering Motivering ˆ Populärt i industrin (Photoshop, Havok Physics engine, Propellerhead: Reason, SETI@Home delvis) ˆ Snabbt (att köra), vill vi att saker blir snabbare se FORTRAN www ˆ Väldigt kraftfullt ˆ Vi kommer lära oss C och lite C++, inget med objektorientering. ˆ Finns många färdiga bibliotek: Visualisering OpenGL www, Armadillo (Linjär algebra) www, Newmat (Matrix algebra) www. ˆ STL (Standard Template Library) innehåller många funktioner www exempel: www ˆ Många andra språk liknar C (Java, Processing,...) ˆ : Physbam skrivet i C++ www Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 7 / 30

Språket C++ Bakom kulisserna Datorn En dator (CPU) kommunicerar med maskinvara via maskinkod (ettor och nollor). Sedan 50-talet har programspråk som FORTRAN och COBOL utvecklats för att lättare kunna kommunicera mellan användare och dator. Matlab (70-tal) utvecklades från Fortran och är specialiserat på matrisberäkningar och vetenskaplig visualisering. C++ utvecklades 1979 från C av Bjarne Stroustrup. www. program main implicit none integer k double precision h k = 2 h = 1E 16 write ( *, ' (" Hello, world ", I2, ", h= ", ES16.10) ' ), k, h end program main på ett enkelt program skrivet i Fortran 90 Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 8 / 30

Språket C++ Bakom kulisserna Lågnivå maskinkod ASM C++ C MATLAB Högnivå MATLAB är liksom Fortran ett högnivåspråk. Det som känneteckar ett högnivåspråk är att koden ligger på en hög abstraktionsnivå. vis finns det redan en funktion för att ta ut det största talet i en vektor utan att skriva koden själv. Man säger att användarvänlighet går före detaljstyrning av maskinvara. Lågnivåspråk å andra sidan låter användaren styra maskinvaran mer direkt och blir följaktligen också mer komplicerad att skriva. C, C++ stöder både funktioner mer hög abstraktion och att man skriver direkt i maskinkod (ASM/assembler) www. k = 2 ; h = 1E 16; disp ( [ ' Hello, world ', num2str ( k ), '. h= ', num2str ( h ) ] ) i Matlab Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 9 / 30

Språket C++ Bakom kulisserna Utvecklarmiljöer För att lättare kunna skriva och organisera kod använder man ofta en utvecklarmiljö i form av ett program (IDE, Integrated development environment). ˆ Visual Studio 2010 www ˆ Eclipse www ˆ NetBeans www ˆ DevC++ www ˆ Code Blocks www ˆ Finns andra alternativ, se TheFreeCountry www Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 10 / 30

Språket C++ Bakom kulisserna Code:Blocks ˆ Snabbt att lära sig ˆ Gratis! ˆ Plattformsoberoende (MacOs X, Ubuntu, Windows,...) ˆ Textformatering Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 11 / 30

Språket C++ Bakom kulisserna Kompilering Användare Public Domain. Wikimedia Commons. (Ada Lovelace) Källkod: "if(i%2==0)..."(.cpp) Kompilator (g++) Analys av källkod (syntax) Syntax/semantik (parsning) Optimering (-O1,-O2,...) Översättning till maskinspråk Maskinkod: "111001001000011110101..."(.exe) CPU Public Domain. Eric Gaba. Wikimedia Commons. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 12 / 30

Spra ket C++ Bakom kulisserna Datorarkitektur Baksidan av ett moderkort da r CPUn sitter. CPUn har ma nga bussar (metalltra darna pa kortet) eftersom den ma ste kommunicera med resten av moderkortet och kyls med fla kt och kylfla ns (se utdelat exemplar). Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 13 / 30

Första exemplet Hello, world # include <c s t d l i b > //EXIT SUCCESS # include <i o s t r e a m > using namespace std ; int main ( ) // k ö r s en gång { cout << " Hello, world!\n" ; // s k r i v e r t i l l k o n s o l return EXIT_SUCCESS ; } Första exemplet Hello World. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 15 / 30

Första exemplet Bibliotek De första raderna beskriver för kompilatorn vilka bibliotek som skall laddas in och användas i koden man skrivit. Nedan följer de vanligaste biblioteken som finns att inkludera (man behöver inte tanka ner nåt extra). # include " egen header.h" // egen h e a d e r f i l # include <i o s t r e a m > // IO ( i n m a t n i n g / utmatning ) # include <f s t r e a m > // f i l IO # include <cmath> // cos, s i n, pow, s q r t,... # include <c s t d l i b > // s l u m p t a l ( rand ), abs,... För mer information om biblioteket cmath www Biblioteket Cmath är viktigt att inkludera om man vill använda kvadratrotfunktionen (sqrt), absolutbelopp (abs), se referenspapperet för exempel. I nästa föreläsning kommer vi se en utförlig genomgång av funktionerna och vad man skall tänka på. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 16 / 30

Första exemplet Kommentarer Finns flera konventioner på hur man bäst kommenterar kod, se www. // Kommentar på en rad // ////// Detta ä r också en kommentar /* En kommentar som s t r ä c k e r s i g ö v e r f l e r a r a d e r */ Olika typer av kommentarer i C++. Kommentarer är till för programmeraren som dokumentation över vad koden gör, är speciellt användbart om andra skall läsa din kod. Kompilatorn tolkar inte kommentarer. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 17 / 30

Utskrift c-out cout << uttryck << uttryck <<... << uttryck; Uttryck kan vara: ˆ Hello, world\n (\n är ett nyradstecken) konsolfönstret tolkar det som att du tryckt på returknappen varvid markören flyttas till början på nästa rad. ˆ 3.1415926 observera decimalpunkt och inte kommatecken. Vad är fel i nedanstående? cout << " hej " <<; cout >> " hej " ; Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 18 / 30

Utskrift Avlusning/Debugging Definition: de bug /diˈbʌg/ [dee-buhg] verb (used with object), -bugged, -bug ging. Informal. Computers. to detect and remove errors from (a computer program). Vi kommer att utforska hur man hittar och korrigerar fel med DevC++. Ibland är avlusning svårare än att skriva själva programmet. Vi kommer under kursens gång att se vanligt förekommande buggar som man skall se upp med. I början av ett nytt språk skriver man ofta syntaktiska fel, men majoriteten av buggar som finns i program som är i bruk idag är av semantiska/logiska fel. Lista över historiska buggar som orsakat stora skador www. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 19 / 30

Utskrift Avlusning forts. cout << " hej " <<; Skall inte vara << i slutet! cout >> " hej " ; << inte >>. Tänk på << som en separator mellan argument. Ungefär som decimalkomma (,) för en vektorvärd funktion. OBS: Man kan också glömt # include <i o s t r e a m > Sådana enkla fel fångas ofta effektivt av Code:Blocks men logiska fel är mycket svårare att avlusa. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 20 / 30

Utskrift Avlusning i Code::Blocks Om vi öppnar övning 1 (tanka ner från hemsidan) i Code::Blocks och kör med F9 (Build and Run) så dyker ett konsolfönster upp. Skriv följande i main: int a cout << a Vi får följande text i Build messages : error: expected initializer before cout Code:Blocks menar, på sitt lite bökiga sätt, är att man saknar semikolon, = eller liknande. I detta fall saknades ett semikolon efter int a. När vi åtgärdat det felet klagar den på föjande: error: expected ; before return Detta felmeddelandet är lite mer logiskt, vi har glömt ett semikolon innan return! Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 21 / 30

Första exemplet 2 Första exemplet 2 # include <c s t d l i b > // b i b l i o t e k # include <i o s t r e a m > using namespace std ; int main ( ) { int k=2; // k ä r en v a r i a b e l med h e l t a l e t 2 cout << " Hello, world. Version " << k << "!\n" ; //... utmatning } return EXIT_SUCCESS ; Modifierad Hello World. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 22 / 30

Variabler Variabler En variabel (får inte förväxlas med matematiska variabler) är en plats där man kan lagra information. Variabler har namn så man lätt kan läsa och skriva till detta minne i programkoden. Detta minne är ofta en plats i RAM (Random Access Memory). Beroende på vilka variabeltyper man använder kommer olika mängd minne att ha allokerats i RAM när man kör sitt program. RAM kallas även primärminne eller arbetsminne. 512MB RAM innehåller cirka 4 miljarder transistorer (1 transistor per bit). Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 23 / 30

Variabler Mer om variabler Storleken på variablerna beror på typen. Storleken varje typ tar upp beror på maskinvaran. På en modern laptop gäller int: 4 byte, float: 4 byte, double: 8 byte. Nyckelord som if, while... får inte användas som variabelnamn. Ett variabelnamn får heller inte innehålla å, ä eller ö. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 24 / 30

Typer Typer Varje variabel i C tillhör en typ. En variabel är en behållare med data och innehållet får bara tillhöra en viss typ. Man säger att man deklarerar när man skriver: int k;. MATLAB har också typer, dessa är dock gömda och behöver inte explicit deklareras. Det finns några få primitiva typer i C++, boolean, int, float, double, string. Man kan man använda ovanstående typer till att bygga vidare egna strukturer som vektorer (kallas arrayer i C) av flyttal, matriser av heltal, 3D-matriser av flyttal osv. Vi kommer använda oss av int, float och double. int: heltal [ 2147483648, 2147483647]. float: (single precision) ±3.40 10 38, 6 siffrors noggrannhet. Minsta positiva talet är 1.17 10 38. double: (double precision) ±1.79 10 308, 15 siffrors noggrannhet. Minsta positiva talet är 2.2 10 308. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 25 / 30

Typer Casting Ibland vill man tvinga en variabel ha en viss typ. vis om man har ett flyttal och vill göra om till heltal. Detta är samma som floor i Matlab eller k i matematisk notation. float pi = 3. 1 4 1 5 9 2 6 ; int tre = int ( pi ) ; int three = ( int ) pi ; Olika sätt att casta. För att avgöra om ett heltal k är jämnt eller udda kan vi definiera k = 2 k 2. Är likheten sann, så vet vi att k är delbart med 2, ty halvering av talet gav ett heltal som efter multiplicering med 2 gav tillbaka talet. I kod skriver vi: if ( k==2*int ( k /2) ) cout << " even " ; else cout << " odd " ; Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 26 / 30

Uttryck Uttryck på uttryck: ˆ i+1 ˆ i==2 ˆ i>5 ˆ i=1 ˆ i && j>50 En sidoeffekt med alla uttryck är att de returnerar ett värde. : int i ; i=0 // v ä r d e t 0 i+1 // v ä r d e t 1 1!=1 // v ä r d e t 0,!= ä r samma som = i MATLAB // Detta gör a t t v i kan t i l l d e l a värden : int j ; j=i=0; //samma som j =( i =0), j b l i r 0 i=i+1; // ö k a r i s j ä l v med 1 j=1!=1; //samma som j =(1!=1), j b l i r 0 Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 27 / 30

If-satser på if En if-sats är en villkorsstyrd kod, som bara körs då en jämförelse är sann. Detta är samma som i Matlab. Om man har endast en rad efter if behövs inga måsvingar för att definiera början och slutet på if-satsen. Annars måste man ha måsvingar. if ( i>=10) cout << " i larger than or equal to 10" ; if else { ( i>10) cout << " i larger than 10" ; cout << " i is less than " ; cout << " or equal to 10" ; } // f l e r a r a d e r, måste ha m å s v i n g a r if ( i>10) // bara en rad e f t e r i f och e l s e cout << " i larger than 10" ; else if ( i< 10) cout << " i less than -10" ; Olika if-satser Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 28 / 30

Övningar Övningar ˆ Ni behöver inte logga in för att hämta ner från kurshemsidan www ˆ ˆ ˆ Öppna Instruktioner till Övningar 1.pdf (under Övningar) Öppna References X.pdf (under Extra) Öppna Ex 1.pdf (under Övningar) ˆ De detaljer som jag inte gått igenom (jämförelser, kvadratrot,...) står i referenspapperet References X.pdf ˆ Är jag upptagen så kolla på ledtrådarna, annars kan ni skriva upp er på tavlan så tar jag er i tur och ordning Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 29 / 30

Övningar Litteraturlista I Lista över böcker som jag kikat i som referens för denna kursen. Länkarna skall skicka er till den senaste versionen av respektive bok. i Vi använder inte någon kursbok så ni behöver inte köpa nån. Referensbladet och föreläsningarna innehåller allt ni behöver. Bjarne Stroustrup C++ Programming Language. Pearson Education Limited. www Jan Skansholm C++ Direkt. Studentlitteratur AB. www Wikipediasida om Ada Lovelace. www i Uppdaterad Oktober 2011 Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 30 / 30