18 Februari 2013 Where friends have access to your privates!

Slides:



Advertisements
Verwante presentaties
PROS2 Les 13 Programmeren en Software Engineering 2.
Advertisements


KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Universiteit Leiden Inleiding programmeren in C++ Life Science & Technology 16 februari
Instructie Programmeren Task 1 5JJ70. Task 1.1: Hello World •Klik naast de laatste accolade in de grijze kantlijn om een breakpoint neer te zetten, anders.
Algoritmen en Datastructuren (ALDAT)
Arduino project.
Gestructureerd programmeren in C
Inleiding programmeren in C++ Life Science & Technology 19 januari Universiteit Leiden.
GESPRG Les 14 Gestructureerd programmeren in C. 174 Details! The devil is in the details.
‘Inleiding programmeren in Java’ SWI cursus: ‘Inleiding programmeren in Java’ 4e college Woe 19 januari 2000 drs. F. de Vries.
Instructie Programmeren Task 1 5JJ70. Task 1.1: Hello World Klik naast de laatste accolade in de grijze kantlijn om een breakpoint neer te zetten, anders.
Instructie Programmeren Debuggen 5JJ70. Debuggen: Wat is het probleem Je programma compileert, maar werkt niet zoals verwacht, wat nu? Vraag je af: wat.
Hoofdstuk 6: Controle structuren
1 SOCS Hoofdstuk 1 Programmeertaal C. 2 Kenmerken van C Hogere programmeertaal  Grote verzameling types, strenge type controle  Zelf nieuwe types definiëren.
Hoofdstuk 2 Hallo, C# !.
Instructie Programmeren Task 5
Frank Stalpers en Ad Baars
Numerieke Natuurkunde
Flow controle Keuzes maken. Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
GESPRG Les 7 Gestructureerd programmeren in C. 92 Verwisselen Schrijf een functie waarmee twee int variabelen verwisseld kunnen worden. void wissel(int.
SWI cursus: ‘Inleiding programmeren in Java’
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
Inleiding programmeren in C++ Life Science & Technology 9 februari Universiteit Leiden.
CONTROLESTRUCTUREN (DEEL 1)
Consoletoepassing Variabelen Klassen
Algoritmiek Object-georiënteerd Programmeren
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
P. 1 Vakgroep Informatietechnologie Scanf voorbeeld #include int main(void) { int i=-1,j=-1,k=-1,l=-1; int b; b=scanf("%d %d %d %d",&i,&j,&k,&l); printf("res=%d.
P. 1 Vakgroep Informatietechnologie Structuur Deel II C++ Classes Namespaces Type casting Reference types Constructors en Destructors Memory Management.
P. 1 Deel I: Programmeertaal C 4. Functies en Macro’s Prof.Dr.Ir. Filip De Turck.
KINN 2010 OOP O Object O Georiënteerd P Programmeren.
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Tircms02-p les 4 Preprocessor In- en uitvoer Diversen.
Variabelen Part deux.. Variabelen week 3 0. Herhaling 1. De NullPointerException (p101) 2. Primitieven 3. Scope en levensduur van variabelen 4. Meerdere.
Tircms03-p les 2 Hfdst 3,4 Meer operatoren Functies.
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
Tircms02-p les 2 Meer operatoren Arrays en pointers Types en conversie.
tircms02-p les 1 Operating Systems practicum
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Les 1: Zaterdag 10 mei 2014 Wim Peeters
JAVA: een platformonafhankelijke taal
Tircms03-p les 1 C++ voor C-kenners Voor Technische Informatica.
Java C++ nVeilig nMachine- onafhankelijk nVeel libraries, ook voor Internet-I/O Snel Native executables Libraries optimaal voor specifiek OS.
De laatste essentiele dingen.  Classes ◦ Syntax ◦ Constructors & Destructors  Header & Source Files ◦ Waar gebruiken we dit voor  Compiler Theorie.
Graphics, input & more!.  Graphics  Input  Sound  … game loop?
Studiehouding Ergens verstand van krijgen kost tijd… Uren die je alleen in je boeken doorbrengt maken het verschil. Er is niets mis met onafhankelijkheid.
 C++ heeft een inheritance mechanisme  Manier om functionaliteit te ‘erfen’ van een parrent class ◦ Polymorphisme ◦ Zoals we het ook in C# kennen.
Hoorcollege 1: efficiëntie en complexiteitsontwikkeling.
Hoorcollege 1: efficiëntie en complexiteitsontwikkeling.
Codetuts Academy Les 6 Module 2a Php Fundamentals 1.
Loops en errors Array's Random try catch for loop while loop do while loop.
GUI & classes Een Gui in een class steken en het object gebruiken.
Informatie beoordelen If else Switch En Wiskunde.
Javascript. Vandaag Samenvatting vorige les PSD's Random Array's Herhalingen – For-loop – While-loop.
Robby de Robot. Javascript Tot nu toe gebruikt: – document.write(" Hello World "); – alert("tekst") – Toon een waarschuwingsvenster – prompt("tekst",
Aanroep van een methode voert opdrachten uit in de body daarvan
Pointers, arrays & dynamische geheugen
Gameprogrammeren: Objecten en geheugen
Hoofdstuk 9.2 Strings.
De programmeertaal C++
Gameprogrammeren: Methoden
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Tinpro015b-les5 Invoer en Uitvoer.
Voorbeeld: Simulatie van bewegende deeltjes
Libraries, Platform Games
Aanroep van een methode voert opdrachten uit in de body daarvan
Software Development fundamentals
Transcript van de presentatie:

18 Februari 2013 Where friends have access to your privates!

 Tigran Gasparian ◦ 3 e jaars GameTech student ◦ C++ voor hobby, eerste programmeertaal ◦ Assistent bij een heleboel vakken  Gydo Nieraeth ◦ 4 e jaars student, 3 e jaars GameTech ◦ C++ ervaring: Software Project + Werkervaring

 Hou de site in de gaten!  Voor vragen/opmerkingen mail naar: ◦ ◦ ◦ Begin je onderwerp met [CPP]

 Industrie standaard ◦ Bijna alle grote games hebben een basis in C++  Performance ◦ Low level features ◦ Strakke memory management  Multi-Paradigm ◦ Gebruiker is vrij in het kiezen van programmeer stijl ◦ Zelfs functioneel!

 C with Classes ◦ 1979: Bjarne Stroustrup (Bell Labs), uitbreiding op C  High Level ◦ Geschikt voor grote projecten, maar lage performance  Low Level ◦ Goede performance, maar ongeschikt voor grote projecten  Intermediate Level ◦ Features van low level en high level ◦ C++

 Open Standaard ◦ 1998: C++98: eerste officiele standaard ◦ 2003: C++03: verbeterde versie ◦ 2007: C++TR1: extensies in de standard library ◦ 2011: C++11: nieuwste standaard  Compliance ◦ Verschillende mate van ondersteuning ◦ Niet elke feature is beschikbaar in elke compiler ◦ Sommige compilers voegen extra features toe

 Compilers ◦ Veel verschillende opties ◦ Commercieel vs Open Source ◦ GCC, Borland, Microsoft.....  Standaard specificeert syntax maar... ◦ Compiler specifieke interpretatie ◦ Compatability / portability problemen

 Vanaf volgende week: Practica!  Wij gaan uit van Microsoft Visual C++12 ◦ Gebruik Visual Studio 2012  Gratis verkrijgbaar via Dreamspark voor studenten ◦ Installeer het thuis op je laptop, dan kunnen we volgende week meteen van start  Benodigde libraries worden op de site bekend gemaakt

C++ Basics

#include using namespace std; int main(int argc, char* argv[]) { cout<<"Hello World!"; return 0; }

#include using namespace std; int main(int argc, char* argv[]) { cout<<"Hello World!"; return 0; } using System; class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); }

#include using namespace std; int main(int argc, char* argv[]) { cout<<"Hello World!"; return 0; } using System; class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } #include int main(int argc, char* argv[]) { std::cout<<"Hello World!"; return 0; } class Program { static void Main(string[] args) { System.Console.WriteLine("Hello World!"); }

 main is het beginpunt van elk programma ◦ argc: een int die aangeeft hoeveel argument er zijn ◦ argv: een array met argc argumenten  Geen string, maar een char* (straks meer) ◦ main eindigt met error code (normaal 0)  Gebruik maken van andere libraries met “#include” statements ◦ Preprocessor directives (straks meer)  Gebruik maken van andere namespaces met “using namespace” statement

 Wat gebeurt er: ◦ We vragen de iostream library op ◦ We geven aan dat we gebruik gaan maken van de namespace “std” (standard) ◦ We gebruiken een speciale stream operator om “Hello World” naar de standaard output (“cout”) te schrijven ◦ We geven met return 0 aan dat het programma normaal termineert

 Vergelijk het met C# ◦ In project setup geven we aan welke libraries we gebruiken ipv #include ◦ Using om namespace aan te geven (hetzelfde) ◦ Functie main zit niet in een klasse. ◦ Cout ipv Console

 Vergeleken met C# ◦ Het idee is veelal hetzelfde, we spreken gewoon een ander ‘dialect’ ◦ Op sommige punten leveren we in:  Geen automatische Garbage collection  Minder high level functions ◦ Maar op andere punten halen we weer iets binnen  Meer controlle over geheugen  Minder overhead  Er zijn heeeeeel veel libraries beschikbaar (waardoor we alles wat we mis lopen zo weer terug kunnen krijgen)

 Fundamental types: ◦ Gedefinieerd in standaard, maar platform afhankelijk  bool: true of false  char: gebruikelijk één byte  short: minstens 16 bit  int: minstens 16 bit, gebruikelijk 32 bit  long: minstens 32 bit (is dus vaak hetzelfde als int)  long long: minstens 64 bit  float: single precision floating point, gebruikelijk 32 bit  double: double precision floating point, gebruikelijk 64 bit

 Fundamental types ◦ Minimum is vastgesteld, maar het platform bepaald de uiteindelijke grootte ◦ Meeste compilers hebben libraries met types met een gegarandeerde grootte, zoals int32_t ◦ Modifiers zijn beschikbaar voor veel types:  signed/unsigned  short/long/long long ◦ Veel synoniemen:  short = short int, signed long = long int, etc sizeof(int);

 Dingen die we al weten (maar toch nog 1 slide aan wijden) ◦ Variabelen ◦ Casting ◦ Operators ◦ Boolean logic ◦ Control structures  If-else  while/do-while  For  Jumps  Switch

#include using namespace std; int main(int argc, char* argv[]) { int number; cout<<number<<endl; number = 10; cout<<number<<endl; return 0; } Eerste run: Tweede run: Derde run: Debug mode:

 Variablen: ◦ Toewijzen en klaar ◦ Variabele heeft een waarde ◦ We slaan waardes op in variabelen int main(int argc, char* argv[]) { int number = 50; char token = 'a'; bool boolean = true; bool boolean2 = 30; return 0; }

 Casting ◦ Impliciet of expliciet. ◦ Meer manieren van casten, later meer over. int a = 5.5; // double to int int b = 5.5f; // float to int float f = (float)5.5; // double to float char c = (char)100; // int to char

 Operators ◦ Wiskundig:  +, -, /, *, % ◦ Compound  +=, -=, /=,....  A += B -> A = A + B ◦ Optellen/aftrekken  ++, --  Postincrement: A++ geeft waarde terug voor optellen  Preincrement: ++A geeft waarde terug na optellen

 Boolean logic: ◦ && en || en ! ◦ ==, !=, >, =, <= ◦ Net zoals in C#

 If-Else ◦ if (condition) { code; } [else { andereCode; }] ◦ Als de boolean conditie ‘condition’ naar true evalueert wordt ‘code’ uitgevoerd [anders wordt andereCode uitgevoerd]  Net zoals in C#

 While/do-while ◦ while (condition) { code; } ◦ Blijft ‘code’ herhalen, zolang condition true blijft ◦ do { code; } while (condition) ◦ Voert code 1x uit en blijft het daarna uitvoeren zolang condition true blijft do { cout<<"loop"; } while(true);

 for loop ◦ for ( [initialization]; condition; [statement] ) { code; } ◦ Eerst wordt ‘initialization’ één keer uitgevoerd. ◦ Zolang condition true is, wordt ‘code’ uitgevoerd. ◦ Elke keer nadat ‘code’ is uitgevoerd, wordt ‘statement’ uitgevoerd for(int i = 0; i < 10; i++) { cout<<i<<endl; }

 Jumps ◦ In loops:  continue: ga direct naar de volgende iteratie  break: verlaat de loop ◦ goto:  Het is mogelijk om met labels te definieren en met goto direct naar een label te springen  Levert makkelijk spaghetti code op, dus liever vermijden

for(int i = 0; i < 10; i++) { if(i == 5) continue; cout<<i<<endl; if(i == 8) break; } Output:

int main(int argc, char* argv[]) { hell: cout<<"Ugly code!"<<endl; goto hell; return 0; } Output: Ugly code!...

for(int x = 0; x < width; x++) { for(int y = 0; y < height; y++) { if(IsPlayer(x, y)) { player_x = x; player_y = y; goto end; } end: cout<<"Player position: "<<player_x<<", "<<player_y<<endl;

 Switch ◦ Gedrag is gematched aan constantes, als je een waarde in een switch gooit, springt de code naar het correcte gedrag char c = 'a'; switch(c) { case 'a': // code break; case 'b': // code break; default: // code break; }

 Net zoals in C# // This is a single-line comment /* This is a multi-line comment (of a single line) */

 Geen standaard string data type  Char arrays  Arrays houden zelf geen lengte bij! char myArray[100]; int myArray[200]; for(int i=0;i<200;i++) { myArray[i] = 0; }

 Einde van een string wordt aangeduid met een 0-byte char myString[100] = "hello world!"; cout<<myString<<endl; char myString[] = "hello world!"; cout<<myString<<endl; char myArray[6] = "Hello"; char myArray[6] = {‘H', 'e', 'l', 'l', 'o', '\0'};

 String klasse  Later meer over arrays (en pointers) #include using namespace std; int main(int argc, char* argv[]) { string str = "Hello world!"; cout<<str<<endl; return 0; }

 Iostream  cout voor output  cin voor input #include using namespace std; int main(int argc, char* argv[]) { cout<<"Hello World!"; return 0; }

#include using namespace std; int main(int argc, char* argv[]) { int n; cin>>n; for(int i=0;i<n;i++) cout<<"hello"<<endl; return 0; } 3 hello

#include using namespace std; int main(int argc, char* argv[]) { float n; cin>>n; for(int i=0;i<n;i++) cout<<i<<": hello"<<endl; system("pause"); return 0; } 3.5 0: hello 1: hello 2: hello 3: hello

#include using namespace std; int main(int argc, char* argv[]) { char buffer[100]; cin>>buffer; cout<<buffer<<endl; return 0; } Hello Hello World! Hello

 Gebruik cin.getline() Hello World #include using namespace std; int main(int argc, char* argv[]) { char buffer[100]; cin.getline(buffer, 100); cout<<buffer<<endl; return 0; }

 Met strings! #include using namespace std; int main(int argc, char* argv[]) { string buffer; cin>>buffer; cout<<buffer<<endl; return 0; } Hello Hello World! Hello

 Gebruik getline() #include using namespace std; int main(int argc, char* argv[]) { string buffer; getline(cin, buffer); cout<<buffer<<endl; return 0; } Hello World

 Return type  Naam  Argumenten int main(int argc, char* argv[])

int add(int x, int y) { return x + y; } int main(int argc, char* argv[]) { int n = add(1, 2); return 0; }

int main(int argc, char* argv[]) { int n = add(1, 2); return 0; } int add(int x, int y) { return x + y; }

int add(int x, int y); int main(int argc, char* argv[]) { int n = add(1, 2); return 0; } int add(int x, int y) { return x + y; }

// global scope int a = 0; int add(int x, int y) { a++; return x + y; } int main(int argc, char* argv[]) { // local scope int b = add(2, 3); cout<<a<<endl; return 0; }

int main(int argc, char* argv[]) { // local (function) scope int a = 0; if(a == 0) { // local (block) scope int b = 2; } { // also local (block) scope int c = 4; }

 Volgende keer practicum  Installer Visual Studio 12  Houd website in de gaten ◦  Oefen voor jezelf  Next up: Pointers, Arrays & Dynamic Memory!