Inleiding programmeren in C++ Life Science & Technology 19 januari 2004 http://www.liacs.nl/home/kosters/lst/ Universiteit Leiden.

Download Report

Transcript Inleiding programmeren in C++ Life Science & Technology 19 januari 2004 http://www.liacs.nl/home/kosters/lst/ Universiteit Leiden.

Inleiding programmeren in C++
Life Science & Technology
19 januari 2004
http://www.liacs.nl/home/kosters/lst/
Universiteit Leiden
Week 1
•
Inhoud
–
–
–
•
Introductie apparatuur, compiler (Visual C++)
Eerste C++-programma's
if-statement
Doel
–
•
Na afloop kan iedereen zelf een klein eigen C++-programma op
de computer maken en compileren, bijvoorbeeld een programma
dat een paar getallen vraagt en bij elkaar optelt
Materiaal
–
–
Ammeraal Hoofdstukken 1 en 2, tot en met 2.4
Dictaat Hoofdstukken 1, 2 en 3.1; opgaven 1/5 (Hoofdstuk 4)
C++ op een PC
• PC’s in computerzalen LCP 6 & 8 met Windows 98/NT/XP
– Windows 98/NT/XP (of Linux …)
– User-id (= username = accountname)
– Password (= wachtwoord)
• Microsoft Visual C++ 6.0 (zie dictaat Hoofdstuk 2.1)
–
–
–
–
–
C++ programma schrijven
Compile, Build (Link), Execute
Demo …
Projecten
Save geregeld je C++-code, ook op een diskette of via email: de
iets.cpp file
Hardware en software
• Computers
–
–
–
–
Silicon Graphics Inc.
Hewlett Packard
SUN
International Business
Machines compatible Personal
Computer
• Operating systemen
– Microsoft DOS, Windows
95/98/2000/NT/XP
– Unix (Linux, Sun Solaris, IBM
AIX, HP-UX)
– …
• Programmeertalen
–
–
–
–
–
–
C++
C
Pascal
Java
Basic
Prolog, …
• Programma’s
– Compilers (Visual C++,
Turbo/Borland C++, g++)
– Editors
– Email
– Web-browsers
Programma, operating systeem en hardware
Programma
Programma
(.exe)
(.exe)
Operating Systeem
(Windows, Linux, …)
Hardware
(CPU, Randapparatuur)
Van broncode naar uitvoerbaar programma
C++ programma
(.cpp)
Compile
&
Build
Uitvoerbaar programma
(.exe)
Compile, Build (Link), Execute
C++ programma
C++ programma
(.cpp)
(.cpp)
Compile
Object file
Object file
(.obj)
(.obj)
Build (Link)
Uitvoerbaar programma
(.exe)
Object file uit
Standaard library
Eerste programma
#include <iostream>
using namespace std;
const double pie = 3.14159;
int main ( ) {
double straal;
cout << "Geef straal, daarna Enter: ";
cin >> straal;
if ( straal > 0 )
cout << "Oppervlakte: " << pie * straal * straal << endl;
else
cout << "Niet zo negatief..." << endl;
cout << "Einde van dit programma." << endl;
return 0;
} // main
Een C++-programma
• Verzameling functies
– speciale functie main (moet er altijd zijn)
– stuk programmatekst (met een bepaalde naam, parameters en
return-waarde)
– alles buiten een functie geldt voor gehele programma (globaal)
• Functie bevat statements
– min of meer afgeronde handeling
– er zijn veel soorten statements ...
• Statement bevat vaak een expressie
– uitdrukking (operatie) met een bepaald resultaat
– er zijn veel soorten expressies ...
• En verder onder andere:
– commentaar
Commentaar
/* Dit is commentaar in "C-stijl"
*
* … regels lang
*/
int stp = 3;
// Studiepunten voor inleiding
// programmeren
• Let op met het nesten van commentaar … niet doen dus
• Geef veel en duidelijk commentaar, zeker bij elke nieuwe variabele en
elke nieuwe functie
• Er is verschil tussen commentaar
– voor de programmeur ( //... of /*...*/ )
– en voor de gebruiker ( cout << ”...”; )
Structuur goed C++-programma
//
// Commentaar over het programma (wie, wat, wanneer, ...)
//
//
#include ...
using namespace std;
typedefs en constanten en globale variabelen en klassen
functies
int main ( ) {
... kort ...
} // main
Statements
• Een functie bestaat uit statements
• Statement
– min of meer afgeronde handeling
– meestal afgesloten met een punt-komma: ;
• Bijvoorbeeld
–
–
–
–
–
expressie
declaratie van een variabele
conditioneel statement (if)
iteratief statement (while, for)
compound statement (meerdere statements tussen { } )
Expressies
• Expressie
– Bestaat uit operand(en) en operator
• binair: operand1 operator operand2
• unair: operand operator of operator operand
– Een expressie levert een resultaat en kan weer operand zijn in een
andere expressie
– Bijvoorbeeld
• rekenkundige bewerkingen: a + b, (a + b) * (3 / x),
-getal
• toekenning: a = b + 7 (“a wordt b plus 7”)
• relationele operatoren: a > b
• maar ook gewoon: 4
Gereserveerde woorden in C++
break case char const default do double else
float for if int return switch void while
bool false namespace true using
asm auto catch class continue delete enum extern
friend goto inline long new operator private
protected public register short signed sizeof
static struct template this throw try typedef
union unsigned virtual volatile
constr_cast dynamic_cast explicit
mutable reinterpret_cast static_cast
typeid typename wchar_t
Declaratie van een variabele
• Statement dat een variabele introduceert
– met een bepaalde naam
– van een bepaald type
• Variabele moet altijd eerst worden gedeclareerd voordat
deze gebruikt kan worden
• Eventueel meteen initialiseren (verstandig!)
• Toevoeging const: niet meer wijzigbaar na initialisatie
• Scope: globaal of locaal
Declaratie van een variabele (2)
• Belangrijkste typen
Type
Lengte
Voorbeeld
char
1 byte
’A’
bool
1
true (1) of false (0)
int
4
345, -12
float (double)
4 (8)
7978, 3.41, 36e-3
string
variabel
”Dit is tekst”
• Voorbeelden
char letter, nogeen = ’X’; // gewone quotes
int leeftijd, xyz = 47;
const string tekst = ”Dit is tekst”;
float resultaat = xyz / 3.2;
Toekenning
• Operator =
(“wordt”, “krijgt de waarde”)
– niet verwarren met logische operator = = (test op gelijkheid)
• Resultaat van een expressie toekennen aan een variabele
• Let op:
– links een variabele (“l-value”) en rechts een expressie (“r-value”)
– resultaat van de expressie (rechts) moet overeenkomen met het type
van de variabele (links)
– pas op met impliciete typeconversies!
• Voorbeeld
int i, j;
float x;
j = 4;
i = j * j + 5;
x = i / j;
// dus i wordt 21
// pas op: 21/4 is 5
Rekenkundige bewerkingen
• Rekenkundige operatoren
• Gecombineerd met een
toekenning
+
optellen (binair: a+b)
positief (unair: +b)
++
increment
(met 1 ophogen)
getal++
++getal
-
aftrekken (binair: a-b)
negatief (unair: -b)
--
decrement
(met 1 verlagen)
getal---getal
*
vermenigvuldigen
/
delen
modulo (rest bij deling)
Operatie
gecombineerd
met toekenning
a += 6;
a *= b + 9;
%
+=
-=
*=
/=
%=
Is hetzelfde als
a = a + 6;
a = a * (b + 9);
Relationele expressie
• Expressie met boolese (boolean) resultaat
– resultaat is van type bool
– waarde 0 is niet waar (false), al het overige is waar (true)
• Relationele en logische operatoren
==
Gelijk?
!=
Ongelijk?
>
Groter dan
<
Kleiner dan
>=
Groter dan of gelijk aan
<=
Kleiner dan of gelijk aan
&&
Logische en (and)
||
Logische of (or)
!
Logische niet (not)
If-statement
• If : conditioneel statement van de vorm:
– if ( expressie ) statement1 else statement2
– waarin else statement2 optioneel is
– en expressie een relationele expressie (waar / niet waar) is
• Voorbeeld
if ( getal > 0 )
cout << "Positief" << endl;
if ( getal > 0 )
cout << "Positief" << endl;
else
cout << "Niet positief" << endl;
Voorbeelden if-statements
• Logische “en”:
if ( x > 0 && y > 0 )
cout << "Beide getallen positief" << endl;
• Altijd waar:
if ( true ) cout << “Altijd" << endl;
• Alles ongelijk 0 is waar …
if ( 7 )
cout << “Altijd" << endl;
– er zijn verschillende layouts mogelijk, als het maar consequent is,
en uiteraard duidelijk
“Dangling else”
if ( x > 0 )
if ( y > 0 )
cout << "Beide getallen positief" << endl;
else
cout << "????????????" << endl;
• Waar hoort de else bij?
• Afspraak: bij de laatste nog openstaande if
• Maar beter (want duidelijker) is: gebruik een compound
statement, met extra accolades
Compound statement
• Samengesteld statement
• Meerdere statements tussen { en }
if ( x > 0 ) {
if ( y > 0 )
cout << "Beide getallen positief" << endl;
else
cout << "????????????" << endl;
}
// if
if ( x != 0 ) {
a = c / x;
cout << "c / x =" << a << endl;
} // if
Null-statement
• Null-statement
if ( x > 0 && y > 0 )
;
else
cout << “Er is een niet-positief getal" << endl;
– dit is natuurlijk hetzelfde als (en zo doe je het meestal ook):
if ( ! ( x > 0 && y > 0 ) )
cout << “Er is een niet-positief getal" << endl;
– overigens is de boolese expressie ! ( x > 0 && y > 0 )
hetzelfde als: ( x <= 0 || y <= 0 )