C++ - En introduktion

Relevanta dokument
TDDC76 - Programmering och Datastrukturer

C++ - En introduktion

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

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs

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

TDIU01 - Programmering i C++, grundkurs

TDDC76 - Programmering och Datastrukturer

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

TDDC76 - Programmering och Datastrukturer

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

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

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

Introduktionslaboration

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 i C++ EDAF hp. EDAF30 (Föreläsning 2) HT / 18

Klassdeklaration. Metoddeklaration. Parameteröverföring

Programmering i C++ EDA623 Strömmar och filer. EDA623 (Föreläsning 9) HT / 19

Introduktionslaboration

TDIU01 Programmering i C++

C++ Lektion Tecken och teckenfält

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

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

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

Funktionens deklaration

TDIU01 - Datortenta (DAT2)

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

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

F4. programmeringsteknik och Matlab

Övning2. Variabler. Data typer

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

Programmering i C, 7,5 hp

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

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

SMD 134 Objektorienterad programmering

Introduktion C-programmering

Programmeringsteknik med C och Matlab

Objektorienterad Programmering (TDDC77)

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

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

Variabler och konstanter

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

Översikt över Visual Basic

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

Avrundning och manipulatorer

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

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

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Repetition C-programmering

Enkla datatyper minne

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

Exempel på ett litet Ada-program

Skizz till en enkel databas

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

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

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Parameteröverföring. Exempel. Exempel. Metodkropp

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

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

C++ Objektorientering - Klasser. Eric Elfving

Föreläsning 2 Programmeringsteknik och C DD1316

Tecken. char. char ch = A ; sizeof(char) = 1 byte (ej 16-bitars tecken som i Java) char namn[]= "Nils"; // längd = 5 bytes

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Användarhandledning Version 1.2

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Innehåll. 1 Deklarationer, scope och livstid. 2 Användardefinierade typer. 4 In- och utmatning. 5 Operatoröverlagring. 6 namnrymder (namespace)

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

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

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

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

Innehåll. 1 Deklarationer, scope och livstid. 2 Användardefinierade typer. 4 Operatoröverlagring. 5 In- och utmatning. 6 namnrymder (namespace)

TDIU01 - Datortenta (DAT2)

TDP002 - Imperativ programmering

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Programmering A. Johan Eliasson

Villkor och tester. Utförande satser bygger upp metoderna, man brukar finindela detta i: sekvenser. Ett program består i princip av: selektioner (val)

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

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

DD1314 Programmeringsteknik

Planering Programmering grundkurs HI1024 HT 2014

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

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 2 GRUNDLÄGGANDE SEMANTIK 4

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

C++ Slumptalsfunktioner + switch-satsen

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

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

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

1 Funktioner och procedurell abstraktion

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

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

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

Typkonvertering. Java versus C

Transkript:

C++ - En introduktion De imperativa grunderna för dig som kan programmera Eric Elfving Institutionen för datavetenskap

1 / 72 Översikt 1 Grunderna 2 Uttryck och satser 3 Funktioner 4 Poster

1 Grunderna Ett första program Variabler och datatyper I/O - Inläsning och utskrift 2 Uttryck och satser 3 Funktioner 4 Poster

3 / 72 Ett första C++-program 1 #include <iostream> 2 using namespace std; 3 4 int main() 5 6 cout << "Ett litet C++-program" << endl; 7 return 0; 8

4 / 72 Ett första C++-program #include <iostream> using namespace std; hello.cc int main() cout << "Ett litet C++-program" << endl; return 0; lit15-1 <203> g++ hello.cc lit15-1 <204>./a.out Ett litet C++-program lit15-1 <205>

5 / 72 Variabler Har alltid tre egenskaper Namn Datatyp Värde Måste deklareras innan de används Kan ses som en " låda" i datorns internminne int val; int y 4; val:? int

6 / 72 Datatyper Bestämmer vad vi kan göra med variabeln och vad (vilka värden) som kan lagras i den Vi använder ofta följande datatyper : int Lagrar ett heltal double Lagrar flyttal, en representation av de reella talen char Lagrar ett tecken bool Sanningsvärden, true eller false string Lagrar text, en samling av tecken (char)

7 / 72 Ett kort C++-program #include <iostream> using namespace std; // Ett kort program för att visa C++ int main() int x,y5; const int z 6; y = 4; x = x*y; // En beräkning return 0; /* Kommentarer kan vara flera rader! */

8 / 72 Inläsning och utskrift - IO Formaterad inmatning Formaterad inläsning - ignorerar inledande "vita tecken"(mellanslag, tabbar, nyradstecken osv) och tolkar nästa ord beroende på datatypen på variabeln där datat ska lagras. int x; cout << "Mata in ett heltal: "; cin >> x;

9 / 72 Inläsning och utskrift - IO Formaterad inmatning Inläsning är buffrad!

10 / 72 Inläsning och utskrift - IO Formaterad utskrift Skaparna av språket väljer hur data formateras vid utskrift. Här kommer några saker man kan använda sig av för att ändra utseendet. '\n' Gå till nästa rad i utskriften '\r' Börja om på samma rad i utskriften flush Skriv ut allt i utmatningsbufferten endl flush följt av \n

12 / 72 Inläsning och utskrift - IO Formaterad utskrift #include <iostream> #include <iomanip> using namespace std; int main() int i 10; double d 3.141592; cout << setw(6) << setfill('.') << i << endl; cout << setw(6) << fixed << setprecision(2) << d << endl; cout << setw(10) << left << "hej\n"; cout << setfill(' '); cout << setw(10) << right << "hej" << endl;...10..3.14 hej... hej

13 / 72 Inläsning och utskrift - IO Oformaterad inläsning Formaterad inläsning är bra men ibland vill man få veta exakt vad som matades in, då passar oformaterad inläsning bra. Antag att vi har dessa deklarationer: string str; char c; cin.get(c); getline(cin, str); getline(cin, str, ':'); cin.ignore(28, ':'); cin.peek(); Läs nästa tecken Läs nästa rad Läs en rad eller tills nästa kolon. Ignorera alla tecken tills tecknet ':' eller max 28 tecken. Tittar på nästa tecken.

1 Grunderna Ett första program Variabler och datatyper I/O - Inläsning och utskrift 2 Uttryck och satser 3 Funktioner 4 Poster

15 / 72 Uttryck Uttryck beräknar värden i språket.

16 / 72 Litteraler Litteraler är värden som skrivs direkt i källkoden. Litteraler konverteras till inbyggda typer med regler givna i språket. Exempel: Litteral Typ Värde 1 int 1 0x1b int 27 1.2 double 1.2 1.2e2 double 120.0 'c' char 'c' "c" const char[2] "c" "kalle"s string "kalle"

17 / 72 Operatorer Aritmetiska operatorer C++ har de vanligaste matematiska operatorerna inbyggt: +,-,*,/ utför normalt sett det man väntar sig... Beräkningsordning precis som i matematiken, kan ändras med parenteser. Det finns ett undantag från första punkten, heltalsdivision!

18 / 72 Operatorer Sammansatt tilldelning Man kan modifiera en variabel med sammansatt tilldelning x += 3 ökar x med tre. Kan såklart även skrivas x = x + 3 Fungerar för alla aritmetiska operatorer (och några fler)

19 / 72 Operatorer Stegning En vanlig operation är att öka eller minska en variabel med värdet 1 Därför finns det operatorer för just detta: ++ och -- Finns i prefix- (++x) och postfix-versioner (x++) Båda ökar värdet med 1, varför finns det två?

22 / 72 Operatorer Jämförelseoperatorer Man vill ofta jämföra värden, då använder man jämförelseoperatorer Operator Betydelse == Likhet!= Olikhet < Mindre än > Större än >= Större eller lika <= Mindre eller lika Alla ger logiska värden som svar (bool, true eller false)

23 / 72 Operatorer Logiska operatorer Med hjälp av logiska operatorer kan man slå ihop logiska uttryck Operator Betydelse && Logiskt OCH Logiskt ELLER! Logiskt ICKE Beräkningsordning:! > && > (> tolkas här som beräknas innan )

25 / 72 Satser Ett C++-program består av satser som körs i en sekvens Ett programs satser körs alltid i den ordning de står i källkoden Satser består av uttryck Satser avslutas oftast med ett semikolon

26 / 72 Satser Uttryckssatsen Uttryckssatsen är den enklaste formen av sats. Uttryck följt av ett semikolon. x++; cout << x; 4;

27 / 72 Satser Deklarationer En variabel deklareras innan den kan användas. Ett namn får endast användas en gång i ett program. Vi får ett kompileringsfel om vi omdeklarerar en variabel. int x 3; int x 4; // Ger ett fel! x = 5; // korrekt double x 4.3; // Fel!

28 / 72 Satser Satsblock Man kan när man vill skapa ett nytt block för att gruppera satser som hör bra ihop. Görs med klammerparenteser (... ) int x 3, y 5; int x 4; // EJ fel, x skapas lokalt! int z; cout << x << ' ' << y; // skriver ut "4 5" z = 6; // Fel, z finns inte här!

29 / 72 Satser Villkor if ( uttryck ) sats else sats if-satsen: om sant, gör följande uttryck ska vara eller gå att konvertera till ett sanningsvärde (bool) else: annars, gör detta else kan utelämnas

30 / 72 Satser Villkor if ( uttryck ) sats1; sats2;... Ibland räcker inte en sats i villkoret, då kan man använda block! Detta är det vanliga skrivsättet, använd alltid block för att slippa problem.

31 / 72 Satser Villkor if ( uttryck1 ) sats1 else if ( uttryck2 ) sats2 else sats3 Ibland vill man kontrollera flera villkor Byt ut else-grenens sats mot en ny if-sats! Väldigt vanlig operation - många språk har egna namn såsom elsif och elif Kan byggas på med valfritt antal else if

32 / 72 Satser Villkor uttryck1 T sats1 if ( uttryck1 ) sats1 else if ( uttryck2 ) sats2 else sats3 F uttryck2 F T sats2 sats3

37 / 72 Satser Upprepning Ofta vill man upprepa kod C++ har tre upprepningssatser; while do... while for

39 / 72 Satser Upprepning - while while ( uttryck ) satser uttryck T satser F

41 / 72 Satser Upprepning - do-while do satser while ( uttryck ); satser uttryck T F

43 / 72 Satser Upprepning - for init for ( init; cond; end ) satser end cond F T satser

44 / 72 Skriv ut talen 1..5 int i 1; while ( i <= 5 ) cout << i << endl; ++i; int i 1; do cout << i << endl; ++i; while ( i <= 5 ); for ( int i 1; i <= 5; ++i ) cout << i << endl;

45 / 72 Upprepning Vilken ska jag välja 1. Vet jag hur många gånger det ska upprepas for for(;;) för oändligt många gånger. 2. Ska jag utföra det minst en gång do-while 3. Annars Det som känns bäst... (ofta while)

46 / 72 Räkna antal vita tecken #include <iostream> #include <cctype> using namespace std; int main() char c; int space ; while ( cin.get(c) ) if ( isspace(c) ) ++space; cout << "Du matade in " << space << " vita tecken."

47 / 72 Räkna antal vita tecken med for #include <iostream> #include <cctype> using namespace std; int main() int space ; for (char c; cin.get(c); ) if ( isspace(c) ) ++space; cout << "Du matade in " << space << " vita tecken."

1 Grunderna Ett första program Variabler och datatyper I/O - Inläsning och utskrift 2 Uttryck och satser 3 Funktioner 4 Poster

50 / 72 Funktioner Ett kort exempel #include <iostream> using namespace std; void hello(); // deklaration int main() hello(); // Anrop cout << "------" << endl; hello(); void hello() // definition cout << "Hejsan" << endl; Hejsan ------ Hejsan

51 / 72 Parametrar Med hjälp av parametrar kan man skicka data till sin funktion void hello(string name) // deklaration + definition cout << "Hello " << name << '!' << endl; int main() hello("anna"); Hello Anna!

53 / 72 Parametrar Värdeöverföring void hello(string name); int main() string user "Nisse"; hello(user); main user: hello name: string "Nisse" string "Nisse"

54 / 72 Parametrar Referensparametrar void append_word(string & a, string b) a += " " + b; int main() string s1 "Hejsan"; append_word(s1, "svejsan"); cout << s1 << endl; Hejsan svejsan

55 / 72 Parametrar Referensparametrar void append(string & a, string b); int main() string s1"a", s2"b"; append(s1, s2); main s1: s2: append a: b: string "A" string "B" string& string "B"

57 / 72 Parametrar const-referenser void hello(const string & name) cout << "Hello " << name << '!' << endl;

58 / 72 Parametrar Vilken ska jag välja? 1. Vill jag ändra på parametern? referens 2. Är det en inbyggd datatyp (int, double, char, bool)? 1. Vill jag kunna ändra på den lokalt? värdeöverföring 2. Annars const 3. Annars const-referens (blir vanligaste valet)

59 / 72 Parameteröverföring - sammanfattning Figur : Sammanfattning från C++ Core Guidelines

60 / 72 Defaultargument Om man vill kan man ange defaultvärden (skönsvärden) för sina parametrar void print_stars(const int n = 10) for ( int i ; i < n; ++i ) cout << '*'; cout << endl; int main() print_stars(20); print_stars(); ******************** **********

61 / 72 Defaultargument Parametrar med defaultargument måste anges i slutet av parameterlistan void fun(int a, int b=5, int c); g++ -c args.cc args.cc:1:6: error: default argument missing for parameter 3 of 'void fun(int, int, int)'

62 / 72 Defaultargument void fun(int a=1, int b=5, int c=4); Anrop a b c f() 1 5 4 f(2) 2 5 4 f(3,4) 3 4 4 f(3,4,6) 3 4 6

64 / 72 Returvärden int max(const int a, const int b) if ( a > b ) return a; return b; int main() int a,b; cout << "Mata in två tal: "; cin >> a >> b; int m max(a,b) ; cout << "Det största är " << m << endl; Mata in två tal: 2 6 Det största är 6

string concat(string const & s1, string const & s2) return s1+s2; 65 / 72

1 Grunderna Ett första program Variabler och datatyper I/O - Inläsning och utskrift 2 Uttryck och satser 3 Funktioner 4 Poster

67 / 72 Poster - struct struct Book string title; string author; int pages; ; int main() Book b; b.title = "C++ Primer"; b.author = "Lippman"; b.pages = 976; Man kan med hjälp av poster gruppera data som hör bra ihop till en datatyp. En post är ett exempel på en sammansatt datatyp. Posten har namngivna fält som man kommer åt med punktoperatorn.

68 / 72 Poster struct Book string title; string author; int pages; ; int main() Book b; b.title = "C++ Primer"; b.author = "Lippman"; b.pages = 976; b: Book string title:"c++ Primer" string author: "Lippman" int pages: 976

69 / 72 Poster Initiering och tilldelning // Initiering, fälten fylls från vänster... Book primer "C++ Primer", "Lippman", 976; Book b2 "Professional C++"; // författare och antal sidor får ett // "nollvärde" (tom sträng resp. 0) b2 = primer; // Tilldelning, alla delar kopieras

70 / 72 Poster Poster och funktioner Precis som andra datatyper kan man skicka poster till funktioner. Vi har en komplicerad datatyp (const-)referens bör användas.

71 / 72 Poster Poster och funktioner int main() Book my_book; cout << "Mata in information om en bok" << endl; input(my_book); // Låt användaren mata in information cout << "Inmatat data:" << endl; print(my_book); // Skriv ut bokens information

72 / 72 Poster Poster och funktioner void print(const Book & b) cout << "Titel: " << b.title << '\n' << "Författare: " << b.author << '\n' << "Antal sidor: " << b.pages << endl; void input(book & b) cout << "Titel: "; cin >> b.title; // getline? cout << "Författare: "; cin >> b.author; cout << "Antal sidor: "; cin >> b.pages;

Eric Elfving Institutionen för datavetenskap www.liu.se