Grundlagen der Informatik 2. Typen Konstanten, Variablen Speicher, Speicherbedarf Ein-/Ausgabe Grundlagen der Informatik (Alex Rempel) 1 2. Typen Wiederholung // root calculation #include <iostream> #include <cmath> using namespace std; void main() { const double precision = 1.0e-3; double x,a; // input cout << "\n input a = "; cin >> a; // plausibility check if ( a <= 0 ) cout << "\n a must be > 0!"; else { // calculate root x = a; do // loop begin x = x - (x*x-a)/(2*x); while ( abs(x*x-a) > precision ); // loop end // result cout << "\n root of " << a << " = " << x; } } Grundlagen der Informatik (Alex Rempel) 2 2. Typen Konstanten, Variablen ● Eingangsdaten, Resultat, Zwischenergebnisse? ● ● Beispiel Wurzelberechnung: – Eingangsdaten: Genauigkeit, Eingangszahl – Zwischenergebnisse: Zahlen – Resultat: Zahl Typen? Grundlagen der Informatik (Alex Rempel) 3 2. Typen Konstanten, Variablen ● Eingangsdaten, Resultat, Zwischenergebnisse? ● ● Beispiel Wurzelberechnung: – Eingangsdaten: Genauigkeit, Eingangszahl – Zwischenergebnisse: Zahlen – Resultat: Zahl Typen? – Genauigkeit: reelle Zahl (Gleitkomma) – Eingangszahl: ganze positive Zahl – Zwischenergebnisse: reelle Zahlen (Gleitkomma) – Resultat: reelle Zahl (Gleitkomma) Grundlagen der Informatik (Alex Rempel) 4 2. Typen Konstanten, Variablen ● Eingangsdaten, Resultat, Zwischenergebnisse? ● ● Beispiel Wurzelberechnung: – Eingangsdaten: Genauigkeit, Eingangszahl – Zwischenergebnisse: Zahlen – Resultat: Zahl Welche variabel? Welche konstant? Grundlagen der Informatik (Alex Rempel) 5 2. Typen Konstanten, Variablen ● Eingangsdaten, Resultat, Zwischenergebnisse? ● ● Beispiel Wurzelberechnung: – Eingangsdaten: Genauigkeit, Eingangszahl – Zwischenergebnisse: Zahlen – Resultat: Zahl Welche variabel? Welche konstant? – Genauigkeit: Gleitkomma-Zahl, konstant – Eingangszahl: ganze positive Zahl, variabel – Zwischenergebnisse: Gleitkomma-Zahl(!), variabel – Resultat: Gleitkomma-Zahl, variabel Grundlagen der Informatik (Alex Rempel) 6 2. Typen Konstanten, Variablen ● Typen: Wahrheitswert und Ganzzahlen Typ Bits Min (signed) Max (signed) Min (unsigned) Max (unsigned) bool 8 - - (0) false (255) true char 8 -128 127 0 255 short int 16 -32.768 32.767 0 65535 int 32 -2.147.483.648 2.147.483.647 0 4.294.967.295 long int 32 -2.147.483.648 2.147.483.647 0 4.294.967.295 ● Menschen rechnen in 10ern, Maschinen in Bits ● 1 Bit [0..1] (=> Zweiersystem) ● 2 Bits [0..3], 3 Bits [0..7], 4 Bits [0..15] ● 8 Bits = 1 Byte Grundlagen der Informatik (Alex Rempel) 7 2. Typen Konstanten, Variablen ● ● Numerische Basen ● dezimal 794(10) => 7*10^2 + 9*10^1 + 4*10^0 = 794(10) ● oktal 1432(8) => 1*8^3 + 4*8^2 + 3*8^1 + 2*8^0 = 794(10) ● hexadezimal 31A(16) => 3*16^2 + 1*16^1 + 10*16^0 = 794(10) ● binär 1100011010(2) => 1*2^9 + ... 0*2^0 = 794(10) 2-er Systeme: binär, oktal, hex, aber nicht dezimal ● binär: 1100011010 ● oktal: 1 100 011 010 => 1432 ● hex: 11 0001 1010 => 31A Grundlagen der Informatik (Alex Rempel) 8 2. Typen Konstanten, Variablen ● ● Typen: Gleitkommazahlen Typ Bits Min Max float 32 3.4*10^-38 3.4*10^38 double 64 1.7*10^-308 1.7*10^308 long double 80 1.2*10^-4932 1.2*10^4932 Gleitkommazahl? ● Beispiel Begrenzung: 3 Ziffern hinter dem Komma ● (Mensch: 0.12*0.12 = 0.0144) ● Fixkomma: 0.120*0.120 = 0.014 ● Gleitkomma: 1.2e-1*1.2e-1 = 1.44e-2 Grundlagen der Informatik (Alex Rempel) 9 2. Typen Konstanten, Variablen ● Typen: Wahrheitswerte (bool) ● Logischer Wert 'true' oder 'false' ● Echter Wert 'true = !0' und 'false=0' – ● Typen: leerer Typ (void) ● ● 3, 9A, -44 sind also alles 'true' Werte wenn keine Typangabe möglich Typen: Character (char) ● Steht für eine Zahl (Byte) – Zahl ist gleichzeitig ein Zeichen aus der ASCII Tabelle Grundlagen der Informatik (Alex Rempel) 10 2. Typen Konstanten, Variablen Grundlagen der Informatik (Alex Rempel) 11 2. Typen Konstanten, Variablen Grundlagen der Informatik (Alex Rempel) 12 2. Typen Konstanten, Variablen ● Typen: Zeichenkette (string) ● Voraussetzung: '#include <string>' ● Speichert und modifiziert ganze Zeichenketten – ● "lolcat" "EIT" "qwerty1234" "@.-" etc. Typen: Aufzählung (enum) ● Eigendefinierte ganzzahlige Aufzählungen, z.B: – 'enum grades {one,two,three,four,five,six};' ● ● Deutung: 'one' ist Ganzzahl 0, 'six' ist Ganzzahl 5 Dient u.a. zur besseren Lesbarkeit von Code Grundlagen der Informatik (Alex Rempel) 13 2. Typen Konstanten, Variablen Typ Bits Min (signed) Max (signed) Min (unsigned) Max (unsigned) bool 8 - - (0) false (1..255) true char 8 -128 127 0 255 short int 16 -32.768 32.767 0 65535 int 32 -2.147.483.648 2.147.483.647 0 4.294.967.295 long int 32 -2.147.483.648 2.147.483.647 0 4.294.967.295 Typ Bits Min Max float 32 3.4*10^-38 3.4*10^38 double 64 1.7*10^-308 1.7*10^308 long double 80 1.2*10^-4932 1.2*10^4932 Die Angaben sind implementierungsabhängig (siehe limits.h und float.h) Grundlagen der Informatik (Alex Rempel) 14 2. Typen Konstanten, Variablen ● Namensgebung ● Regeln – muss mit Unterstrich oder Buchstaben anfangen – besteht aus Unterstrichen, Buchstaben und Ziffern ● – ● Groß- und Kleinschreibung ist relevant C++ Schlüsselwörter sind verboten Empfehlung – Unterstrich am Beginn vermeiden – aussagekräftige, beschreibende Namen verwenden ● 'counter' statt 'cnt', 'zinsSatz' statt 'zins' u.s.w. Grundlagen der Informatik (Alex Rempel) 15 2. Typen Konstanten, Variablen ● Deklaration und Zuweisung ● Genauigkeit: Gleitkomma-Zahl, konstant (0.001) – ● ● ● Konstante: modifier 'const' vor dem Typ ● const double precision = 1.0e-3; ● const double precision = 0.001; Eingangszahl: ganze positive Zahl, variabel ● unsigned int input = 0; ● unsigned int input (0); Zwischenergebnisse: Gleitkomma-Zahl(!), variabel ● double x = 0; ● double x = input; Resultat: Gleitkomma-Zahl, variabel ● double result = 0; Grundlagen der Informatik (Alex Rempel) 16 2. Typen Konstanten, Variablen ● Literalen (Literale in 'int x = 4;' ist die '4') ● Numerisch 0 (int) -043(int, oktal) 0xA4 (int, hex) 0.3 (double) -1.8e5 (double) 11.4f (float) ● Zeichen: '0' (char) '\23' (char, oktal) '\n' (char, newline) ● Zeichenketten: "here be dragons!" ● Wahrheitswerte: true false ● u.w. (probiert verschiedene mit einfacher Ausgabe aus) Grundlagen der Informatik (Alex Rempel) 17 2. Typen Speicher, Speicherbedarf Speicher komplett Grundlagen der Informatik (Alex Rempel) 18 2. Typen Speicher, Speicherbedarf Speicher komplett Speicher Prozess Grundlagen der Informatik (Alex Rempel) 19 2. Typen Speicher, Speicherbedarf Adresse Wert 0 1 00 2 FF 3 45 ... A2 Speicher Prozess ● Kleinster Wert ist ein Byte ● Adresse 32b oder 64b ● ● Adressraum begrenzt Anfangswerte sind zufällig ● Deswegen bei Deklaration immer zuweisen! Grundlagen der Informatik (Alex Rempel) 20 2. Typen Speicher, Speicherbedarf ● Deklaration: Variable bekommt automatisch freien Speicher zugewiesen ● Adresse ist in der Variable enthalten ● Zuweisung: Speicher unter der Adresse der Variable wird beschrieben ● Beispiel: Variable 'c', Größe ein Byte ● unsigned char c; Adresse: 2 Inhalt: 0x45 (69 'E') ● c = '0'; Adresse: 2 Inhalt: 0x30 (48 '0') Grundlagen der Informatik (Alex Rempel) 21 2. Typen Speicher, Speicherbedarf ● Deklaration: Variable bekommt automatisch freien Speicher zugewiesen ● Adresse ist in der Variable enthalten ● Zuweisung: Speicher unter der Adresse der Variable wird beschrieben ● Beispiel: Variable 'c', Größe ein Byte ● unsigned char c; Adresse: 2 Inhalt: 0x45 (69 'E') ● c = '0'; Adresse: 2 Inhalt: 0x30 (48 '0') ● c = c + 1; Adresse: 2 Inhalt: 0x31 (49 '1') ● c = c + 250; Adresse: ? Inhalt: ? Grundlagen der Informatik (Alex Rempel) 22 2. Typen Speicher, Speicherbedarf ● Deklaration: Variable bekommt automatisch freien Speicher zugewiesen ● Adresse ist in der Variable enthalten ● Zuweisung: Speicher unter der Adresse der Variable wird beschrieben ● Beispiel: Variable 'c', Größe ein Byte ● unsigned char c; Adresse: 2 Inhalt: 0x45 (69 'E') ● c = '0'; Adresse: 2 Inhalt: 0x30 (48 '0') ● c = c + 1; Adresse: 2 Inhalt: 0x31 (49 '1') ● c = c + 250; Adresse: 2 Inhalt: 0x2B (43 '+') – Überschreitung des Wertebereichs Grundlagen der Informatik (Alex Rempel) 23 2. Typen Speicher, Speicherbedarf ● Deklaration: Variable bekommt automatisch freien Speicher zugewiesen ● Adresse ist in der Variable enthalten ● Zuweisung: Speicher unter der Adresse der Variable wird beschrieben ● Beispiel: Variable 'n', Größe vier Bytes ● unsigned int n; Adresse: 1 Inhalt: 0xA3000348 – Adresse 1: zeigt auf das erste Byte, reserviert aber 3 dazu – 'n' belegt also Adressen 1..4 Grundlagen der Informatik (Alex Rempel) 24 2. Typen Ein-/Ausgabe ● ● C: 'stdio.h' Funktionen ● veraltet, nicht komfortabel, fehleranfällig ● immer noch in vielen Programmen vorhanden C++: 'iostream' stream-basiert ● ● 'cout <<' – Ausgabe (überladener Operator) – d.h. Typumwandlung erfolgt automatisch – 'cout << dSomething << iLolcats << 42 << endl;' 'cin >>' – Eingabe (überladener Operator) – Eingabe muss zum Argumententyp passen ● – sonst Zeichenkette nicht weiter gelesen 'cin >> dSomething >> iLolcats;' (Eingabe: 89.97 42) Grundlagen der Informatik (Alex Rempel) 25 2. Typen Ein-/Ausgabe ● Shift-Ketten ('... << ... << ...') ● ● Unterschiedliche Compiler führen die Kette in unterschiedliche Richtungen aus Beispiel: 'int x = 12;' – 'cout << x << " : " (x=x*3);' ● ● Ausgabe A: '36 : 36' (rechts nach links) Ausgabe B: '12 : 36' (links nach rechts) Grundlagen der Informatik (Alex Rempel) 26 2. Typen Ein-/Ausgabe ● Formatierungen ● Durch Manipulatoren direkt im Stream – dec, oct, hex ● – flush ● – einmalig für folgende Ausgabe: minimale Ausgabebreite setprecision(int n) ● – Ausgabe von '\n' (Zeilenumbruch) und flush Aufruf setw(int n) ● – Puffer leeren bzw. jetzt ausgeben endl ● – alles danach: dezimal, oktal oder hexadezimal Ausgabegenauigkeit setfill(char c) ● Fülle bis angegebener Größe mit c Grundlagen der Informatik (Alex Rempel) 27 2. Typen Ein-/Ausgabe ● Formatierungen ● Beispiele: – 'cout << setw(10) << setfill('0') << 42 << endl;' ● – 'cout << setw(6) << setprecision(4) << 4.24242 << endl;' ● – Oberen zwei Zeilen direkt nacheinander: ● ● Probiert verschiedene Formatierungen selbst aus Grundlagen der Informatik (Alex Rempel) 28