Frågor TDP004. ExaminaBon. KursinformaBon. Tid i kursen. Tid i kursen Första chansen Bll frågor.

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

C++ - En introduktion

TDIU01 - Programmering i C++, grundkurs

TDDC76 - Programmering och Datastrukturer

C++ - En introduktion

TDIU01 - Programmering i C++, grundkurs

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

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

TDIU01 - Programmering i C++, grundkurs

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

Funktionens deklaration

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

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

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

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

C++-programmets beståndsdelar

Objektorienterad Programmering (TDDC77)

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

Det finns många flaggor till g++,

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Introduktion C-programmering

Enkla datatyper minne

F4. programmeringsteknik och Matlab

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

Programmering A. Johan Eliasson

Repetition C-programmering

TDIU01 - Programmering i C++, grundkurs

Introduktionslaboration

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

TDIU01 Programmering i C++

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

SMD 134 Objektorienterad programmering

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

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

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?

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

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

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

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

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

Programmeringsteknik med C och Matlab

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Variabler och konstanter

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

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

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

Kapitel 1. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Kapitel 1 grunderna i C++

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

grundläggande C++, funktioner m.m.

1 Funktioner och procedurell abstraktion

Tentamen OOP

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

Programmering i C++ EDAF hp. EDAF30 (Föreläsning 2) HT / 18

Innehåll. EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Viktiga skillnader mot Java

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

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

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

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Metoder (funktioner) Murach s: kap Winstrand Development

En kort text om programmering i C.

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

C konstruerades i början på sjuttiotalet av Dennis Ritchie vid Bell Laboratories.

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

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

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

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

Introduktionslaboration

Programsystemkonstruktion med C++

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

DD1314 Programmeringsteknik

En klass behöver både deklaration och definition. Daniel Aarno Globala funktioner och variabler är OK.

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

TDDE10 TDDE11, 725G90. Gemensam kurswebsida på:

Imperativ programmering. Föreläsning 2

Generiska konstruktioner. Kursbokens kapitel 13

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

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1

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

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

Lathund. Pacific C för MS-DOS

Lathund. C för inbyggda system

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

Övning2. Variabler. Data typer

Tentamen ID1004 Objektorienterad programmering December 15, 2012

(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

1 Namnkontroll (NameControl)

TDDC77 Objektorienterad Programmering

Programmeringsteknik I

Planering Programmering grundkurs HI1024 HT 2014

TDIU01 - Programmering i C++, grundkurs

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

C++ Slumptalsfunktioner + switch-satsen

Innehåll. Pekare Exempel

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

Transkript:

Frågor Första chansen Bll frågor. TDP004 Det går bra räcka upp handen när som helst. Objektorienterad programmering Programmera C++ Får man en fråga förväntas man svara så goi man kan. Gissa om inte annat. KursinformaBon Kurshemsida hip://www.ida.liu.se/~tdp004/ Examinator: klas.arvidsson@liu.se Assistenter: daniel.o.persson@liu.se matas.ronn@student.liu.se DAT2: Datortenta Teoridel PrakBsk del ExaminaBon Hur var tentan i TDP002? LAB2: LaboraBoner TestuppgiY (helklass) ger fuskblad på tenta Närvaro och akbvitet på programmeringsstugor Alla laboraboner demonstrerade och godkända Tid i kursen Totalt 8 hp 3hp är 80h så 8 hp är 8/3*80 = 213h 11 Fö, 5 Le, 3 Dj är 38h 213h - 38h = 175h programmering och programmeringsförberedelse Totalt 7 veckor 175h / 7 = 25h (!) programmering per vecka Tid i kursen En termin är 30hp En period är 15 hp och 7 veckor Kursen använder 8 hp av 15 hp Det är 53% av Bden En arbetsvecka är 40h 40h*53% = 21h programmering och programmeringsförberedelse per vecka 21h*7veckor = 147h = 5.5hp??????????????? 1

Kursupplägg Föreläsningar Frågor, syntax, frågor, exempel, frågor LekBoner Frågor, gemensamma lösningar, frågor, diskussioner, frågor Programmeringsstugor Diskussioner, exempel, lösningar LaboraBoner LaboraBoner Arbete i par med någon på samma nivå Labgruppsregistrering i LUPP Schemalagt Bd är för demo och frågor Kom förberedd DemonstraBon i sal för assistent Kom förberedd Kodinlämning på senare laboraboner Deadlines Se schema på kurshemsidan Ger (lite) bonus på tentamen LaboraBoner skall vara klara före dagen deadline anger, och nästa laborabon skall vara förberedd. C++ Mål: Typsäkerhet och prestanda KraYfullt, allt går ai göra Utgår från ai programmeraren vet vad hen gör Krångligt syntax, arv från C LäI ai göra svåra fel Kompilerat språk Kompilering ÖversäIer från programkod Bll binärkod direkt exekverbar på datorns processor Tre steg Preprocessor (kod Bll kod transformering) Kompilering (översäining Bll binärkod) Länkning (ihopsäining av binära programdelar) Varje steg kan ge upphov Bll fel Kommentarer Används för ai förtydliga kod och exempel Bra för eget minne Bra för andra programmerare // kommentar till radslut /* kommentar till slut på kommentar */ #if 0 // preprocessorn tar bort // dessa rader #endif 2

Datatyper: Standard Inbyggda int (long, short, signed, unsigned) char (signed, unsigned), wchar_t bool (true, false) float, double TILL- TYP* (nullptr, NULL, 0) auto // inte så automabsk alls void // ingenbng, tomt, platshållare Datatyper: Egna Härledda i standard std::string, std::pair, std::tuple Egendefinerbara typedef TYP NAMN using NAMN = typ struct NAMN... class NAMN... enum MON, TUE,... NAMN Mer om dessa senare i kursen... Datatyper: Literala Datatyper: bra ai ha sträng // string (const char*) R delim(rå sträng)delim // escape-sekvenser tolkas inte 123 // int 123L // long int 12U // unsigned int 034 // int (oktalt) 0x45 // int (hexadecimalt) r // char (heltal, ascii-kod) 3.14 // double (flyttal) 1.2e4 // double (flyttal) 1.0f // float (flyttal med låg precision) \n // tecknet för nyrad, escape-sekvens \ // tecknet \\ // tecknet \ numeric_limits<typ>::max(), min() #include <limits> stabc_cast<till- TYP>(VARIABEL) TILL- TYP(VARIABEL) sizeof(variabel) decltype(variabel) Rita! Diskutera. Variabler Variabler Måste deklaras före användning Måste ges ei inibal värde Har ei namn Har en typ Har ei värde Namnet avgör var i minnet variabeln finns Typen avgör hur värdet tolkas Typen avgör hur mycket minne som behövs 3

VariabeldeklaraBon // avslutas med semikolon int x; // rita int y0; bool btrue; char c c ; // ascii för c string s hejsan ; double pi3.1415; const float E2.718; LivsBd (scope) Variabler deklareras i ei block // begin block int variable; // ofta först i blocket //... livstid... // end block Variabler upphör existera i slutet av blocket Lagras under livsbden på exekveringsstacken Variabler utanför ei block blir GLOBALA Skapar generellt sei dåig programstruktur Får inte användas i kursen Operatorer = // tilldelning < > <= >= ==!= // jämförelse &&! // logik + - * / % // aritmetik << >> // formaterad I/O * & ->.* // pekarhantering, senare i kursen (^ ~ & << >> // bitmanipulation, ej del av kursen) Lata operatorer // aritmetik tilldelning += -= *= /= %= // post och preinkrement ++ // post och predekrement -- // visa exempel på ekvivalens UIryck // diskutera! b = y; b = c; x = pi; y = 7 / 3 + 2 * (4 1); y = y 5.0; x = 7 % 3; b = pi % 2; x = 8 0 ; b =!(true false) && true; b = (5 < x < 10); x = ++y; y = x++; x = s.length(); Datatypkonvertering Sker oya automabskt Sker då Bll högre typ (promobon) int + char - > int int + double - > double int + unsigned - > unsigned float + double - > double char + double - > double string + int - > ERROR Kan göras manuellt to_string(variabel) stoi, stol, stoul, stoull, stof, stod, stold // bra namn? TILL- TYP(VARIABEL) stabc_cast<till- TYP>(VARIABEL) 4

FortsäIer nästa Fö. Fö 1 / Fö 2 Hej på dig, Bertram Skriv ei program som frågar eyer ei namn och skriver ut Hej på dig, följt av namnet. Visa steg för steg vad som behövs och hur allt går Bll. Kompilering sudo apt-get install g++ - std=c++11 kräver kompilatorversion 4.7.x - std=c++0x finns i kompilatorversioner 4.6.x - std=c++98 kan oya användas annars Generera körbara programfilen a.out : g++ -Wall Wextra pedantic std=c++11 g hello.cc Generera körbara programfilen hello : g++ -Wall Wextra pedantic std=c++11 g hello.cc -o hello Formaterad inmatning TANGENTBORD - > OS - > BUFFER - > PROGRAM int x; cin >> x; // see- in to variable x Rita och förklara. #include <iostream> string str; char c; Oformaterad inmatning getline(cin, str); getline(cin, str, \n ); getline(cin, str, # ); cin.get(c); cin.ignore(); cin.ignore(5, \n ); cin.ignore(99999, # ); Formaterad utmatning PROGRAM - > BUFFER - > OS - > SKÄRM int x = 9; cout << x; // see- out from variable x cerr << x; // standard error Rita och förklara. #include <iostream> 5

#include <iomanip> Manipulatorer endl // nyrad + flush flush // töm utmatningsbuffern // (visa på skärm) setprecision(n) // antal decimaler fixed // flyttalsformatet 123.45 scientific // flyttalsformatet 1.2345e2 setw(n) // antal utskriftspositioner // nästa utskrift använder setfill(c) // ifyllnadstecken // (i fortsättningen) oct, hex, dec // talformat för inmatning // och utmatning ws // hoppa över alla blanka tecken Hjälp!? man- sidor kräver vana och övning Bllgängliga på tenta www.cplusplus.com läihanterad referens finns ej på tenta kursbok mer ingående referens, långsammare får tas med på tenta labassistent Bps, råd och förklaringar får inte tas med på tenta... Fö 2 / Fö 3 Styrsatser I C++ finns fem styrsatser: if- satsen switch- satsen for- loopen do- while- loopen while- loopen Dessa kan nästlas hur man vill. if- satsen if ( VILLKOR ) // Denna del räcker... else if ( VILLKOR ) // men kan byggas på... else if ( VILLKOR ) // så många gånger man vill... else // och eventuellt avslutas med annars. if- satsen: Dumheter Bllåts! int x = 12; if ( x > 5 ) if ( x < 10 ) cout << 5 < x < 10 << endl; else cout << x <= 5 << endl; avgör strukturen! Indenteringen är betydelselös! Vad skrivs ut? 6

switch- satsen // UTTRYCK måste resultera i en uppräkningsbar typ // dvs case-konstanterna är int eller char switch (UTTRYCK) case LITERAL_KONSTANT_1: // utförs om UTTRYCK lika med konstanten break; case LITERAL_KONSTANT_2: // kan ha obegränsat anta case break; default: // om inget annat matchar switch- satsen: Se upp! char input; cin >> input; switch (input) case y : cout << svar ja << endl; case q : exit(1); break; default: cerr << fel input << endl; for- loopen // när du vet antal iterationer // egen loopvariabel for (START; VILLKOR; NÄSTA) do- while loopen // utförs minst en gång // måste göra framsteg do while (VILLKOR); while- loopen // kör kanske inte alls // måste göra framsteg while (VILLKOR) Loop- ekvivalens for (int i = 0; i < 3; ++i) cout << i << endl; // for som while int i = 0; while (i < 3) cout << i << endl; ++i; 7

for ( ; ; ) int i = 10; while ( i --> 0 ) cout << i << endl; bool done = false; while ( done =! true ) done = true; while ( i < 10 ); cout << i++ << endl; Loop- varning Kort sblguide AllBd på egen rad Indentera korrekt Blanksteg runt de flesta operatorer Använd bra namngivning Gruppera sammanhörade kodrader Använd blank rad för ai separera grupper Använd max 80 tecken långa rader FunkBoner // deklarataion RETURTYP NAMN(PARAMETERLISTA); // definition (även deklaration) RETURTYP NAMN(PARAMETERLISTA) return UTTRYCK; FunkBonsexempel void print_hello() cout << hello << endl; int my_add(int a, int b) return a + b; Anropsexempel print_hello(); my_add(23, 2); int sum = my_add(3, 4); sum = my_add(sum, 9.0); Argument kopieras Bll parametrarna Parametrar blir lokal variabler i funkbonen Returvärden kopieras ut från funkbonen Datatyp argument <- > parameter måste matcha Rita! Förklara! Referenser Gör en variabel känd under nyi namn Blir alias Bll befintlig variabel Måste bindas direkt vid deklarabon Användbara som utparameter från funkboner int foo = 4711; int& bar = foo; // bar använder nu samma // minnesutrymme som foo foo = 14; bar = 17; Rita! Förklara! 8

Referensparametrar void swap(int& a, int& b) int save = a; a = b; b = save; Rita! Förklara! Konstanta referensparametrar // argument kopieras - ineffektivt void print(string very_long) cout << very_long << endl; // ingen kopia men original kan ändras void print(string& very_long) cout << very_long << endl; // visar intentionen att funktionen inte ändrar argumentet // intentinen kontrolleras dessutom av kompilator // kompilator får extra möjligheter att optimera koden void print(string const& very_long) cout << very_long << endl; Retur av referens? int& foo(int i) // FEL, i finns (strax) inte mer return i; int& foo(int& i) // OK, i refererar till något som // fortfarande finns return i; Parametrar när används vad Vanlig kopieparameter (pass by value) används Bll inparametrar som är av grundtyperna Konstanta referensparametrar används Bll inparametrar av härledd/egen typ Referensparameter (pass by reference) används Bll utparametrar Defaultparametrar // deklaration (läggs i headerfil, *.h) void print_price(float price, int count = 1, int decimals = 2); // några olika anrop print_price(9.95, 2, 4); // 19.9000 print_price(5.75, 10); // 57.50 print_price(3.50); // 3.50 Defaultparametrar // definition // (i implementationsfil, *.cc) void print_price(float price, int count, int decimals) cout << setprecision(decimals) << fixed << price*count; 9

Överlagrade funkboner Olika funkboner kan ha samma namn om parametrar skiljer! // tre sidor givna int triangle_area(int, int, int); // en sida och två vinklar givna int triangle_area(int, float, float); // två sidor och en vinkel given int triangle_area(int, int, float); // bas och höjd int triangle_area(int, int); Överlagrade funkboner Vilken funkbon kommer ai anropas? triangle_area(3, 6); triangle_area(3, 6, 80.0f); triangle_area(3, 6.0f, 80.0f); triangle_area(3.0f, 6.0, 80); // triangle_area(3, 6.0f, 80); Överlagrade funkboner Fö 3 / Fö 4 Använd försikbgt - inte dumt! // send to printer void print(double d); // display on screen void print(float f); // PRoject INTeger void print(int i); Lambda- funkboner Finns i C++11 Ett sätt att (be)skriva en funktion direkt i koden Kan skickas med som argument till andra funktioner [FÅNGST](PARAMETERLISTA) -> RETURTYP Lambda- exempel // En introduktion till tanken att vi kan spara hur något skall utföras // i en variabel och senare anropa den som en funktion // Mer om detta senare i kursen, när vi lärt oss mer... int (*operation)(int, int); // variabeln operation lagrar en funktion... // vi lämnar detta syntax till senare... int c; cin >> c; switch (c) case + : operation = [](int a, int b) -> int return a + b; ; break; case * : operation = [](int a, int b) -> int return a * b; ; break; int op_result, next; cin >> op_result; while (cin >> next) op_result = operation(op_result, next); cout << op_result << endl; 10

Operatoröverlagring Om du har en struct, klass, std::pair, eller std::tuple är det möjligt ai själv skriva den funkbon som skall anroaps när en vanlig operator används med en variable av typen. RETURTYP operatoros(parameterlista); complex operator+(complex a, complex b); Mer om typer Fördelar och nackdelar med float och int. Antag ai tre decimala (0-9) siffror får användas. Hur skrivs då följande tal? Hur stort fel? 12 999 3.14 340000 987654.321 Behållare: struct och class I enklaste formen behållare för ei antal data som hör ihop förnamn och eyernamn (person) pris och antal (order) imaginärdel och realdel (komplext tal) en struct är automabskt öppen, public en class är automabskt stängd, private en class typdefineras automabskt Behållare: ekvivalens class Order // C++ public: float price; // pris per exemplar int count; // antal exemplar ; typedef struct order_t // C float price; // pris per exemplar int count; // antal exemplar Order; Behållare: åtkomst Order car; car.price = 218990; car.count = 1; Order nail; nail.price = 0.10; nail.count = 1000; Rita! Förklara! Punkt-operatorn, medlem, public, private. Behållare: när används vad? struct kan användas när alla data skall vara åtkomliga av alla, och inga specialla operaboner finns i anslutning Bll data. class används då delar önskas döljas för den programmerare som använder behållaren. DeIa är oyast fallet med objektorienterat tankesäi. Varför dölja datamedlemmar? korrekthet, oberoende, ändringsbarhet 11

Slut? Vi är inte klara ännu! Sista chansen Bll frågor. SLUT! 12