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

TDIU01 - Programmering i C++, grundkurs

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

TDIU01 - Programmering i C++, grundkurs

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

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

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.

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

TDIU01 - Programmering i C++, grundkurs

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

Funktionens deklaration

Introduktion C-programmering

Repetition C-programmering

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

C++ - En introduktion

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

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

TDIU01 - Programmering i C++, grundkurs

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

Programmeringsteknik med C och Matlab

Beräkningsvetenskap föreläsning 2

Data, typ, selektion, iteration

Föreläsning 4. Val, boolska värden, läsbarhet, osv

En villkorssats är den konstruktion som finns i C++ för att göra en selektion av två alternativa sekvenser. Formen för if satsen är

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

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

TDDC77 Objektorienterad Programmering

Programmering A. Johan Eliasson

TDDC76 - Programmering och Datastrukturer

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

Användarhandledning Version 1.2

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

Tentamen i. Programmering i språket C

Variabler och konstanter

Logik och kontrollstrukturer

Parameteröverföring. Exempel. Exempel. Metodkropp

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

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

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

Modul 3 - Modularisering

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

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

Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter.

Instuderingsfrågor till Steg 1

MMA132: Laboration 2 Matriser i MATLAB

Programmering i C, 7,5 hp

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

Övning2. Variabler. Data typer

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

2.1 Variabler. 2.2 Regler för namngivning i C. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Föreläsning 2

1 Funktioner och procedurell abstraktion

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

C++ - En introduktion

C++ Lektion Tecken och teckenfält

2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursens hemsida:

Typkonvertering. Java versus C

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

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

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

TDIU01 - Programmering i C++, grundkurs

SMD 134 Objektorienterad programmering

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret Lektion 1

Enkla datatyper minne

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 27 oktober 2015 Sida 1 / 31

TDDC77 Objektorienterad Programmering

Objektorienterad programmering Föreläsning 4

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

Uttryck och villkor. Föreläsning 2

Objektorienterad Programmering (TDDC77)

Repetera snabbt vad du lärde dig förra veckan. Du är nu redo att kasta dig in i nästa fas, teorin om villkor.

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

F4. programmeringsteknik och Matlab

Föreläsning 2: Avlusning och antilustekniker

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

Programmering C: Tentamen of 5 Prioritet och associativitet hos operatorerna i C De viktigaste operatorerna: Prioritet Kategori Operator

DD1361 Programmeringsparadigm. Carina Edlund

DD1314 Programmeringsteknik

Introduktionslaboration

Uttryck och villkor. Föreläsning 2

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

TDDC76 - Programmering och Datastrukturer

Tentamen i Programmering grundkurs och Programmering C

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Föreläsning 2 sept 05 (Onsdag v 36). DD Chapter 2.

Introduktion till MATLAB

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

Lektion 1 - Steg 1. Introduktion. Hello World

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

C++-programmets beståndsdelar

Byggstenar. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Grundläggande datatyper

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

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

TDIU01 Programmering i C++

Programmeringsteknik I

Föreläsning 3-4 Innehåll

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 Vad vi lärde oss förra gången Frekventa frågor Vad vi går igenom idag 2 C++ del 2 Funktioner Biblioteket Cmath Modulo Heltalsdivision Operator-prioritet & Associativitet Jämförelser Avlusning av jämförelser Avlusning av jämförelser 2 Scope (Räckvidd) Scope While Exempel på while Fält Variabler Globala variabler & Makro Variabelskuggning Övningar Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 2 / 26

Wrap-up Vad vi lärde oss förra gången Vad lärde vi oss förra gången? ˆ Typer och variabler ˆ Grundläggande syntax ˆ Cin, cout ˆ If satser Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 4 / 26

Wrap-up Frekventa frågor Frågor från förra gången Kan man få en exe-fil från Matlabkod? - Ja, www Är en bool (logisk variabel) 1 bit? - Nej, en bool är 1 Byte (8 bitar). Detta beror på att 1 Byte är den minsta addresserbara minnesstorleken. Man kan använda en bitvector www Tips: ˆ Inga semikolon efter if ˆ Spara fil som cpp inte c (cstdlib då hittas inte) ˆ == inte = ˆ Använd source code formatter Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 5 / 26

Wrap-up Vad vi går igenom idag Vad lär vi oss idag? Idag: ˆ Funktioner ˆ Användbara funktioner ˆ Lite om block och scope (räckvidd) ˆ While ˆ Endimensionella fält Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 6 / 26

Funktioner Kort om funktioner En funktion är (ungefär som i matematik) en regel som givet indata ger utdata. Funktioner i C är dock inte begränsade till denna strikta definition. #include <iostream> using namespace std ; // Prototyp : int addition ( int a, int b ) ; // Definition : int addition ( int a, int b ) { return a+b ; } Typen av returvärdet står till vänster om funktionsnamnet. Argumenten (indata) skall i detta fall vara heltal. Nytt: Om man skriver flera funktioner i en och samma fil så gör man bäst i att skriva en prototyp till funktionerna. Anropar man en funktion som inte har en prototyp så vet inte kompilatorn vilken funktion man menar. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 8 / 26

Funktioner Funktioner från biblioteket cmath Enligt definitionen av cmath pow www : double pow ( double base, double exponent ) ; float pow ( float base, float exponent ) ; double pow ( double base, int exponent ) ; Funktionen pow(a,b) (a b ) (power) är överladdad (overloaded) dvs. den klarar flera olika typer som argument. För sqrt(a) ( a) (square root) står det enligt biblioteket inte uttryckligen att den tar heltal, men det går. double sqrt ( double x ) ; float sqrt ( float x ) ; Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 9 / 26

Funktioner Funktioner från biblioteket cmath forts. För att se fler bibliotek i standard C se www. Exempel på funktioner i cmath: ˆ abs (heltals absolutbelopp) ˆ fabs (flyttals absolutbelopp) ˆ floor (avrunda nedåt) ˆ ceil (avrunda uppåt) ˆ cos, sin, tan,... Man kan skriva också egna bibliotek, säg att man har gjort ett bibliotek som importerar och exporterar CAD formatet DXF, kalla biblioteket DXFXform. Prototyperna lägger man då i en sk headerfil (DXFXform.h) och importerar med #include DXFXform.h. Man måste ha både headerfilen som innehåller prototyper (DXFXform.h) och själva koden i DXFXform.cpp. Ovanstående include antar att dessa filer är i samma mapp som den anropande koden. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 10 / 26

Funktioner Modulo operatorn Modulo Rest vid heltalsdivision % (mod i MATLAB). 1. 7 5 5 2 0. 1 2 0 1 1 2 2 2 0 Modulo är ett väldigt användbart verktyg för att t.ex. reducera antalet if-satser, indexera i fält, diskretisera punkter i planet, skilja mellan udda och jämna tal... Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 11 / 26

Funktioner Heltalsdivision Följande exempel visar på skillnaden mellan Matlab och C/C++ som även kan lura erfarna programmerare: cout << 1 / 2 ; Utskriften blir 0, varför? Använder man division kommer kompilatorn att anropa kod beroende på vilka argument som matats in till funktionen. Om båda argumenten är heltal (int) kommer svaret bli ett heltal (avrundat nedåt). Detta kallar man för heltalsdivision eller avrundad division. Vill man tvinga fram ett flyttal kan man använda casting eller låta ett av argumenten vara ett flyttal: cout << 1 / 2. 0 ; Utskriften blir i detta fall 0.5 som i Matlab. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 12 / 26

Operator-prioritet & Associativitet Operatorprioritet Internt måste uttryck räknas ut på ett ordnat sätt, därför har man konstruerat ett system för alla operatorer (+,,, /,...). Associativitet bestämmer från vilket håll ett uttryck skall ordnas innan uträkning. Ex: a+b+c skall räknas som (a+b)+c eftersom + är vänster-till-höger associativt. Prioritet bestämmer i vilken ordning ett uttryck skall beräknas. Ex: a + b c skall räknas ut som a + (b c) och inte (a + b) c. Se referensbladet för en komplett lista över operatorer som ni kommer ha användning för i projektet (samt workshop). Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 13 / 26

Operator-prioritet & Associativitet Jämförelser Jämförelser är centralt inom programmering, man använder jämförelser för att styra sitt program där man vill att data skall uppfylla vissa villkor, syntaxen är nästan identisk med MATLAB. Notera skillnaden mellan tilldelning och jämförelse = respektive ==. Jämförelser C Logiskt MATLAB < Mindre än < > Större än > == Likhet ==!= Olikhet = <= Mindre än/lika <= >= Större än/lika >= && och & eller && eller eller OBS: och & används i Matlab som short cut operatorer i if satser. I C/C++ används dessa som bitvis logik vilket är nåt helt annat som vi inte kommer att använda. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 14 / 26

Operator-prioritet & Associativitet Jämförelse Saker att se upp med Vi har hunnit med att gå igenom rätt så många syntaktiska fel, dessa buggar är svåra att göra sig av med som nybörjare i språket. Följande exempel faller inom den kategorin och är en kombination av syntaktiskt fel och logiskt fel. int i= 5; if ( i=0) cout << zero ; else if ( i<0) cout << less than zero ; else cout << greater than zero ; Vad blir utskriften och varför? Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 15 / 26

Operator-prioritet & Associativitet Jämförelse Saker att se upp med Jämförelser är speciellt svåra att avlusa eftersom de lätt kan bli stora uttryck och man gör ofta jämförelser med indata som ändras för varje körning. Därför är det viktigt att veta exakt vad som händer i C++ när jämförelser sker. Följande är en bugg som gjordes av en elev i denna kursen som jag tycker är värt att ta upp. Är man inte medveten om felet så kan det vara mycket svårt att avlusa. ln[2]:= If[2<1<3, "True"; "False"] Out[2]:= False Exempel på dubbel jämförelse i Mathematica. if(2<1<3) cout << True ; // om 1 else cout << False ; // om 0 Skriver man ut detta ger C++ True när det uppenbarligen skall tolkas som falskt, som Mathematica gör. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 16 / 26

Operator-prioritet & Associativitet Jämförelse Saker att se upp med Ett bra tips för att undvika buggar i jämförelser är att använda så få parenteser som möjligt, det blir enklare att läsa av men ställer högre krav på programmeraren. Nedan visar hur C/C++ tolkar uttrycket som vi såg tidigare och hur man skall skriva. 2<1<3 2<1 && 1<3 (2<1)<3 (2<1) && (1<3) 0 <3 0 && 1 1 0 Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 17 / 26

Scope (Räckvidd) Scope Om vi har en variabel som vi deklarerat inom ett block (måsvingar {}) lever variabeln endast inom dessa, man kallar blocket för variabelns räckvidd (eng. scope), detta gäller också för funktioner samt for-loopar. Ett Block är ett område mellan måsvingar {}. En variabel som är initierad utanför ett block lever även inuti detta block. Om man initierar samma variabelnamn inuti blocket (variabelskuggning) kommer denna variabel att återfå det gamla värdet när programmet är utanför blocket. När vi talar om funktioner och for-loopar är det viktigt att komma ihåg vart variabeln lever och vilket värde den initierats till. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 18 / 26

Scope (Räckvidd) Ett första exempel på scope Kodsnutt i main (utan övrig kod): int i ; cout << skriv in ett heltal : ; cin >> i ; if ( i>0) { int i = 1;// ny variabel lever bara i detta... blocket cout << ifsats, i= << i << endl ; // samma som... nyradstecken } cout << efter ifsats, i= << i << endl ; Ger utskriften efter inläsning av 10 ifsats, i= 1 efter ifsats, i=10 Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 19 / 26

While While int a=10; while ( a>3 ) { a=a-1; } cout << a; True False Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 20 / 26

While Exempel på iterationer med while n k k=1 int k = 1 ; int sum = 0 ; while ( k<=n ) { sum = sum + k ; k++; } Summation med while. Fakultet: Approximation av π: π 4 = n! = k=0 n k k=1 ( 1) k 2k + 1 Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 21 / 26

Fält Fält Ett fält är en lista av variabler som man kan nå via indexering. Ett index är ett heltal k [0, n 1] där n är antalet element i fältet. a = [ 1, 2, 3, 4, 5 ] ; a ( 1 ) %s k r i v ut f ö r s t a e l e m e n t e t Kod i Matlab med indexering. int a [ 5 ] = { 1, 2, 3, 4, 5 } ; // f ä l t med 5 e l e m e n t cout << a [ 1 ] ; // s k r i v e r ut andra e l e m e n t e t ( 2 ) Samma typ av indexering i C. OBS: Var försiktig med indexering av fält, om man indexerar utanför indexgränserna (antal element) krashar programmet. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 22 / 26

Variabler Globala variabler Globala variabler är användbara när man vill ha variabler som skall vara nåbara överallt i filen. Detta är också speciellt smidigt om man vill ändra matematiska konstanter, dimensioner på matriser,... # include <c s t d l i b > using namespace std ; // s n y g g a r e l ä g g a g l o b a l a v a r i a b l e r e f t e r namespace # define RES 50 //Makro, e t t s t a t i s k t v ä r d e int size = 7 0 0 ; // g l o b a l v a r i a b e l, nåbar ö v e r a l l t Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 23 / 26

Globala variabler & Makro Makro Ett makro är ett konstant värde som kan ofta använder för att definiera storlek på statiska fält (ungefär som vektorer i Matlab). Makro är fixa och ändras inte efter kompilering. På detta sättet kan kompilatorn veta hur många element ett fält består av och kan då allokera rätt mängd minne. i # define N ELTS 100 int main ( ) { int a [ N_ELTS ] ; cout << a [ N_ELTS ] ; // g e r f e l, s i s t a e l e m e n t e t ä r... N ELTS 1 } Makro definierar storlek på fält. i Detta gäller endast globala fält, lokala fält har sedan C90-standarden klarat detta. Jag föreslår att ni använder makron ändå (jag gör detta). Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 24 / 26

Globala variabler & Makro Variabelskuggning Överkurs int why = 1 0 ; int main ( ) { {// b l o c k int why = 0 ; // overshadows t h e g l o b a l v a r i a b l e while ( why <5) { why++; cout << " inside while : " << why << endl ; } cout << " inside of block : " << why << endl ; }// b l o c k } cout << " outside of block : " << why << endl ; Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 25 / 26

Övningar Övningar ˆ Ni behöver inte logga in för att hämta ner från kurshemsidan www ˆ ˆ Öppna Instruktioner till Övning 2.pdf (under Övningar/2/) Öppna Referensblad XI.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 26 / 26