Grundlagen der Informatik 2. Typen Speicher, Speicherbedarf Ein-/Ausgabe Grundlagen der Informatik (Alex Rempel) 1
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
Eingangsdaten, Resultat, Zwischenergebnisse? Beispiel Wurzelberechnung: Eingangsdaten: Genauigkeit, Eingangszahl Zwischenergebnisse: Zahlen Resultat: Zahl Typen? Grundlagen der Informatik (Alex Rempel) 3
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
Eingangsdaten, Resultat, Zwischenergebnisse? Beispiel Wurzelberechnung: Eingangsdaten: Genauigkeit, Eingangszahl Zwischenergebnisse: Zahlen Resultat: Zahl Welche variabel? Welche konstant? Grundlagen der Informatik (Alex Rempel) 5
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
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
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
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
Typen: Wahrheitswerte (bool) Logischer Wert 'true' oder 'false' Echter Wert 'true =!0' und 'false=0' 3, 9A, -44 sind also alles 'true' Werte Typen: leerer Typ (void) 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
Grundlagen der Informatik (Alex Rempel) 11
Grundlagen der Informatik (Alex Rempel) 12
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
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
Namensgebung Regeln 2. Typen 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
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
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
Speicher, Speicherbedarf Speicher komplett Grundlagen der Informatik (Alex Rempel) 18
Speicher, Speicherbedarf Speicher komplett Speicher Prozess Grundlagen der Informatik (Alex Rempel) 19
Speicher, Speicherbedarf Wert Adresse 0 1 2 3... 00 FF 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
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
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
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
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
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
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
Ein-/Ausgabe Formatierungen Durch Manipulatoren direkt im Stream dec, oct, hex flush endl alles danach: dezimal, oktal oder hexadezimal Puffer leeren bzw. jetzt ausgeben Ausgabe von '\n' (Zeilenumbruch) und flush Aufruf setw(int n) einmalig für folgende Ausgabe: minimale Ausgabebreite setprecision(int n) Ausgabegenauigkeit setfill(char c) Fülle bis angegebener Größe mit c Grundlagen der Informatik (Alex Rempel) 27
Formatierungen Beispiele: 2. Typen Ein-/Ausgabe '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