Programmier-sprache C Weiter mit PP..

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

PC-Senioren Ludwigsburg
Funktionen.
Forschungszentrum caesar
Variablen und Datentypen
Datentypen Genauigkeiten
Das Halteproblem. Gibt es einen Algorithmus, mit dem man für jedes beliebig vorgegebene Programm R und für jede beliebig vorgegebene Eingabe E entscheiden.
Algorithmus. Ein Kochrezept, zum Beispiel: Kartoffelbrei.
C- Syntax. Bestandteile der Sprache C: Ausdrücke Anweisungen.
SWITCH - Anweisung.
SWITCH - Anweisung.
Datentyp- umwandlung. Literale sind: Bezeichner mit einem festen Wert wie z.B:
REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
ARRAY oder FELD oder VEKTOR
Dynamischer Speicher. Ein Vergleich aus dem täglichen Leben...
Programmier-sprache Java Weiter mit PP..
Dynamischer Speicher und Struktur
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
V AdresseWert public static void main(...){ int[] v; v=new int[2]; } Was veranlasst diese Anweisung im Arbeitsspeicher ? Es wird im Arbeitsspeicher.
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
Der Präprozessor. Bevor der Compiler das Programm in Maschinencode übersetzt (nur dieser kann von der CPU, dem Herz des Computers, bearbeitet werden)
Fehler-Management.
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
ARRAY oder FELD oder VEKTOR
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Imperative Programmierung
Zusammenfassung Vorwoche
Das erste Programm (Folie 16)
Wichtige Fachausdrücke in C
Einführung in die Programmiersprache C 1
Java programmieren mit JavaKara
Willkommen bei Sycarus – dem Mathematikprogramm, das neue Wege geht.
Übungsaufgaben für Microsoft Excel
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmiersprache C 4
Bereit ???? Nimm dir 10 Minuten Zeit. Ich versuche es dir zu erklären.
Konzept einer Programmiersprache!
Vom Bit zum Byte.
Programmierung 1. Einführung Seite 1
Grundlegende Funktionsweise eines Computers
Informatik II Grundlagen der Programmierung Programmieren in C Benutzerinteraktion / Ein- und Ausgabe Hochschule Fulda – FB ET Sommersemester
Datentypen Überblick Datentypen Einfache / fundamentale Datentypen
3. Lineare Befehle 3.1 Die Ausgabefunktion
BMEVIEEA100 Grundlagen der Programmierung
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Daten und Information in der ITG
Variablen und Datentypen
Pool Informatik, Sj 11/12 GZG FN W.Seyboldt 1 Pool Informatik 5 GZG FN Sj. 11/12 Kopieren, Daten, Programme.
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tageszähler).Wenn.
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Namensräume (namespaces). verwendet man umfangreiche eigene und fremde Bibliotheken (Sammlungen von Funktionen) so ist die Wahrscheinlichkeit groß, daß.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
oder: wie Computer die Welt sehen
Konstruktoren.
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Datentyp- umwandlung.
 Präsentation transkript:

Programmier-sprache C Weiter mit PP.

Das einfachste Programm: Weiter mit PP.

#include <stdio.h> #include "stdafx.h" #include <stdio.h> int main(){ return 0; } Rumpf Kopf Rückgabewert: int d.h. eine ganze Zahl Hauptprogramm Teilziel: "Grob-Struktur" eines Programms verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP. Anweisungen, hier nur eine. Diese muss mit Semikolon beendet werden. return 0 gibt die Zahl 0 zurück. Begrenzer (Block)

#include <stdio.h> int main(){ return 0; } Diese mit #include eingefügten Dateien werden aus Platzgründen oft in den Folien dieser Powerpoint-Präsentationen (aber nicht bei realen Programmen !!) weggelassen. #include "stdafx.h" #include <stdio.h> int main(){ return 0; } Ein- und Ausgabefunktionen wie z.B. printf benötigen dies. Dies wird später noch genauer erklärt. Kopiert den Inhalt der Dateien (Textdatein) stdafx.h und stdio.h an diese Stellen in diese Datei! Teilziel: Begriff include verstehen. Weiter mit PP. Was ist der Unterschied zwischen " " und < > ?

Wenn der Name in < > eingeschlossen wird, bedeutet das, daß der Compiler den sogenannten Standard-Include-Pfad benutzen soll, um die Datei zu finden. Dort stehen die sogenannten Standard-Header-Files (Systemdateien), wie z.B. <stdio.h>, die zu der Entwicklungsumgebung von MS VC++ gehören und mit dem Programmpacket ausgeliefert wurden. Weiter mit PP.

Eselsbrücke: Die Klammern < > kann man sich als der obere Teil bzw. untere Teil eines stilisierten S (wie Systemdateien) vorstellen: Weiter mit PP.

Wenn der Name in " " eingeschlossen wird, bedeutet das, dass der Compiler im aktuellen Verzeichnis (dort wo sich das Projekt befindet) suchen soll, um die Datei zu finden. Diese Datei wird "normalerweise" vom Programmierer selbst erstellt. Allerdings wird "stdafx.h" nicht vom Programmierer erstellt, sondern diese Datei wird beim Erstellen eines Programms (Projekt), für das jeweilige Projekt spezifisch vom MS VC++ Compiler erzeugt. Bitte nachprüfen: Suchen Sie diese Dateien auf der Festplatte! Weiter mit PP.

Wichtige Bemerkung: Weiter mit PP.

Das obige Programm entspricht der sogenannten ANSI-Norm Das obige Programm entspricht der sogenannten ANSI-Norm. Dies ist eine Norm, in der festgelegt wird, nach welchen Regeln ein C-Programm aufgebaut sein muss. Weiter mit PP.

Weitere Bemerkungen: Weiter mit PP.

int main(void){ return 0; } Um deutlich zu machen, dass in den Klammern kein sogenannter Parameter stehen soll, kann man dies durch das englische Wort void bewerkstelligen. Der Microsoft Visual C++ 6.0 Compiler arbeitet nicht 100% nach dieser ANSI-Norm. Keine Angst: Die Begriffe "Funktion", "return", usw. werden später noch genauer erklärt. (dies war nur eine kurze Vorabinformation) Teilziel: Begriff include verstehen. Weiter mit PP. Wenn aus Platzgründen nötig, wird in den folgenden Präsentationen die Anweisung return 0 weggelassen.

Ein reines Ausgabe - Programm: int main(){ printf("Guten \n Morgen"); return 0; } Reservierte Worte; sollen nicht vom Programmierer für Variablennamen vergeben werden Zeilenvorschub Anweisungen einrücken Semikolon am Ende einer jeden Anweisung Weiter mit PP. Der auf dem Bildschirm ausgegebene Text ist eine Zeichenkette. Diese steht immer zwischen Anführungszeichen. Auf dem Bildschirm erscheint also: Guten Morgen

In einer Zeichenkette, die durch printf ausgegeben wird, können sich aber nicht nur sichtbare Zeichen befinden, sondern auch sogenannte Escape-Sequenzen, die bestimmte Aktionen bewirken. Escape-Sequenzen sind Zeichenfolgen, die mit einem Schrägstrich beginnen, auf den eine oder mehrere Zeichen folgen. Weiter mit PP.

\n führt Zeilenvorschub durch (new line) \t setzt Horizontaltabulator \v setzt Vertikaltabulator \b geht Mit dem Kursor ein Zeichen zurück (backspace) \r führt Wagenrücklauf durch (carriage return) \f führt Seitenvorschub durch (form feed) \a löst Klingelzeichen aus (Alarm) \' Hochkomma \" Anführungszeichen \\ umgekehrter Schrägstrich (backslash) \ddd ASCII-Zeichen in Oktalnotation (d ist eine Okalziffer) \xdd ASCII-Zeichen in Hexadezimalnotation (d ist eine Hexadezimalziffer) Weiter mit PP.

Was bewirkt das folgende Programm. Bitte ASCII-Tabelle benutzen Was bewirkt das folgende Programm ? Bitte ASCII-Tabelle benutzen ! (näheres zur ASCII-Tabelle später) #include "stdafx.h" #include <stdio.h> int main(){ printf("\x41\x42\x43\a"); return 0; } Weiter mit PP.

Es wird auf dem Bildschirm ABC ausgegeben und ein Alarm (Ton) auf dem Lautsprecher erzeugt. Weiter mit PP.

Nochmals eine Bemerkung zu include Weiter mit PP.

#include "stdafx.h" #include <stdio.h> int main(){ Die Funktion printf verlangt, daß sie vorher deklariert wird. In dieser Deklaration befinden sich Informationen wie z.B. der Name und die Anzahl der Parameter dieser Funktion. Diese Deklaration befindet sich in der Datei stdio.h, die mit #include <stdio.h> eingefügt wird. Bitte den Inhalt dieser Datei anschauen bzw.dort nach printf suchen. #include "stdafx.h" #include <stdio.h> int main(){ printf("Guten \n Morgen"); return 0; } Weiter mit PP.

Ein Ein /Ausgabe - Programm: int main (){ int z;   printf("Bitte ganze Zahl eingeben \n"); scanf("%d", &z); z = z * z; printf("Das Quadrat ist: %d", z); return 0; } Deklarationsteil = Zutaten Datentyp Variable Variablenname Anweisungsteil = Zubereitung Einzelne Anweisungen Teilziel: "Fein-Struktur" eines Programms verstehen: Deklaration (Variable, Datentyp), Anweisungen, usw. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP. Semikolon am Ende einer Anweisung Eingabe

Elemente des Rumpfs: Weiter mit PP.

Datentyp: int int ist Abkürzung für integer (bedeutet ganze Zahl) Variable int main (){ int z; int a; int b,c,d; ... } Datentyp: int int ist Abkürzung für integer (bedeutet ganze Zahl) Der Datentyp gibt an, welche Werte (z.B. ganze Zahlen) eine Variable annehmen kann. mehrere Variablen können auch durch Kommata getrennt werden. Aber am Ende muss ein Semikolon kommen. Teilziel: Variable genauer verstehen. Weiter mit PP. Der Variablenname soll selbstsprechend bzw. selbsterklärend sein. Also sollte man z.B. eine Variable, die die Breite eines Rechtecks speichert auch breite nennen und NICHT wie hier (aus Platzgründen) nur mit einem Buchstaben benennen !

z wird mit dem Wert 123 initialisiert. int main (){ int z=123; int a; int b,c,d; ... } Teilziel: Variable genauer verstehen. Weiter mit PP. Eine Variable kann deklariert und gleichzeitig auch initialisiert (vorbelegt) werden

Variable sind Daten mit folgenden Eigenschaften: Eine Variable kann während des Programmlaufs unterschiedliche Werte annehmen. Eine Variable muss vor ihrer Verwendung im Deklarationsteil vereinbart werden. Weiter mit PP. Eine Variable hat einen Namen und einen Datentyp.

Unter einer Variablen kann man sich einen Behälter vorstellen Unter einer Variablen kann man sich einen Behälter vorstellen. In diesem Behälter wird ein Wert gespeichert (z.B. eine bestimmte Menge Flüssigkeit). Diese Menge bleibt solange konstant in diesem Behälter, solange sie nicht verändert wird. Diese Eigenschaft nennt man speichern. Es "verdunstet" deshalb auch nichts. Weiter mit PP.

Bitte folgende Regel einhalten: Anfangsbuchstabe eines Variablennamens immer klein schreiben. Dies ist dem Compiler zwar egal, doch an diese Regel halten sich alle Programmierer. Teilziel: Platzhalter in den Ein- und Ausgabefunktionen verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP.

Dies ist dem Compiler nicht egal. (zähler ergibt eine Fehlermeldung). Bitte folgende Regel einhalten: In einem Variablennamen darf kein Umlaut vorkommen! Also: Statt des Variablennamens zähler lieber zaehler verwenden. Dies ist dem Compiler nicht egal. (zähler ergibt eine Fehlermeldung). Teilziel: Platzhalter in den Ein- und Ausgabefunktionen verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP.

Die Anweisungen des letzten Ein/Ausgabeprogramms hier nochmals kurz erklärt: Teilziel: Platzhalter in den Ein- und Ausgabefunktionen verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP.

Zuweisungsoperation (Näheres in der übernächsten Folie) printf("Bitte ganze Zahl eingeben \n"); Platzhalter mit Formatanweisung: gibt an, in welcher Form (ganze Zahl, Fließkommazahl oder Zeichen) der eingegebene Wert abgespeichert wird, bzw. ausgegeben wird. scanf("%d", &z); Zuweisungsoperation (Näheres in der übernächsten Folie) Bevor der Text zwischen den Anführungszeichen ausgegeben wird, wird der Platzhalter %d durch den Wert der Variablen z ersetzt. z = z * z; Teilziel: Platzhalter in den Ein- und Ausgabefunktionen verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP. printf("Das Quadrat ist: %d", z);

Frage: Was gibt die folgende Anweisung auf dem Bildschirm aus ? Das Quadrat ist: z Der Compiler erkennt das z nicht als eine Variable, sondern als einen “normalen“ Buchstaben ! Teilziel: Platzhalter in den Ein- und Ausgabefunktionen verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP. printf("Das Quadrat ist: z");

printf("Bitte ganze Zahl eingeben \n"); scanf("%d", &z); z = z * z; printf("Das Quadrat ist: %d", z); Platzhalter mit Formatanweisung: gibt an, in welcher Form (ganze Zahl, Fließkommazahl oder Zeichen) der eingegebene Wert abgespeichert wird, bzw. ausgegeben wird. Formatieren heißt eine Form geben, so wie eine Backform einem Teig eine Form gibt. Teilziel: Platzhalter in den Ein- und Ausgabefunktionen verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP. Merke: %d %c %f ganze Zahl Zeichen Fließkommazahl d wie dezimal c wie char f wie Fließkomma

Zuweisungsoperation: Der Variablen links des Gleichheitszeichens = wird der Wert rechts des Gleichheitszeichens zugewiesen. LEIDER benutzt der Entwickler der Programmiersprache C statt des Zeichens := das Gleichheitszeichen, obwohl es sich ... Teilziel: Zuweisungsoperation verstehen. Weiter mit PP.

um eine Zuweisung und nicht um eine Gleichheit handelt um eine Zuweisung und nicht um eine Gleichheit handelt. Dem Entwickler der Programmiersprache C ist dies offensichtlich egal. Die Syntax gibt er vor und das Gleichheitszeichen hat bei ihm die Semantik von := Teilziel: Zuweisungsoperation verstehen. Weiter mit PP.

y z y=10; 10 ? z=y; 10 z=y+2; 10 12 y=z; 12 z=z+1; 12 13 Beispiele: Dynamische Entwicklung der Inhalte der Variablen y und z: Beispiele: y z y=10; 10 ? z=y; 10 z=y+2; 10 12 Teilziel: Dynamische Entwicklung der Werte einer Variablen verstehen: Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP. y=z; 12 z=z+1; 12 13

Die Ausführung der Anweisungen des letzten Ein/Ausgabeprogramms detailliert erklärt: Teilziel: Platzhalter in den Ein- und Ausgabefunktionen verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP.

Was bewirken die einzelnen Anweisungen des gerade vorgestellten Programms ? printf("Bitte ganze Zahl eingeben \n"); scanf("%d", &z); z = z * z; Teilziel: Dynamische Entwicklung der Werte einer Variablen verstehen: Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP. printf("Das Quadrat ist: %d", z);

Was bewirkt also: printf("Bitte ganze Zahl eingeben \n"); Es wird auf dem Bildschirm der Text "Bitte ganze Zahl eingeben" ausgegeben und dann ein Zeilenumbruch gemacht. Teilziel: Dynamische Entwicklung der Werte einer Variablen verstehen: Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP.

Was bewirkt also: scanf("%d", &z); Das Programm hält an und der Benutzer muss über Tastatur eine ganze Zahl eingeben und mit dem Drücken der Return-Taste diese Eingabe beenden (erst dann macht das Programm weiter). Die eingegebene Zahl wird in der Variablen z gespeichert. Wir nehmen hier an, dass der Benutzer die Zahl 5 eingegeben hat. Teilziel: Dynamische Entwicklung der Werte einer Variablen verstehen: Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP.

Was bewirkt also: z = z * z; Der Wert der Variablen z (hier also 5) wird mit sich selbst multipliziert (ergibt hier also 25) und wiederum in der Variablen z abgespeichert. Der Wert der Variablen z ist hier also vor der Ausführung der Anweisung 5 und nach der Ausführung 25. Teilziel: Dynamische Entwicklung der Werte einer Variablen verstehen: Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP.

Was bewirkt also: printf("Das Quadrat ist: %d", z); Es wird zuerst in dem Text "Das Quadrat ist: %d" der Platzhalter %d durch den Wert der Variablen z (hier also 25) ersetzt. Dann wird dieser ersetzte Text "Das Quadrat ist: 25" auf dem Bildschirm ausgegeben. Teilziel: Dynamische Entwicklung der Werte einer Variablen verstehen: Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP.

Aufgabe: Ein Schreiner will von einer rechteckigen Holzplatte den Flächeninhalt und den Umfang (für die Umleimer) bestimmen. Schreiben Sie dazu ein Programm. Weiter mit PP.

// Variable besser untereinander deklarieren int u,f; int main (){ int l; // Länge int b; // Breite // Variable besser untereinander deklarieren   int u,f; printf("Bitte Länge eingeben \n"); scanf("%d", &l); printf("Bitte Breite eingeben \n"); scanf("%d", &b); u = 2 * (l + b); f = l * b; printf("Fläche = %d Umfang = %d",f, u) ; return 0; } alles in der gleichen Zeile rechts von // wird als Kommentar aufgefasst und vom Compiler nicht berücksichtigt. %d wird durch den Wert von u ersetzt %d wird durch den Wert von f ersetzt Weiter mit PP.

Frage: Was ist der Nachteil des Programms ? Antwort: Es können nur ganzzahlige Werte eingegeben werden. Weiter mit PP.

Wir machen deshalb einen kleinen Ausflug: Weiter mit PP.

Was ist ein Bit ? Weiter mit PP.

1 Bit ist die kleinste Maßeinheit für eine Datenmenge Weiter mit PP.

1 Byte = 8 Bit Weiter mit PP.

Wie viele Zustände kann man mit 1 Byte darstellen ? Weiter mit PP.

Wie viele Zustände kann man mit 1 Byte darstellen ? Zu schwierig ? Also beginnen wir mit einem Bit Weiter mit PP.

Wie viele Zustände kann man mit 1 Bit darstellen ? und 1 Weiter mit PP. also, Anzahl der Zustände: 2 * 1 = 2

Wie viele Zustände kann man mit 2 Bit darstellen ? Also insgesamt 0 0 0 1 1 0 1 1 1 und Weiter mit PP. 1 1 also, Anzahl der Zustände: 2 * 2 = 4

Wie viele Zustände kann man mit 3 Bit darstellen ? 4 Möglichkeiten Also insgesamt 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 ... 1 1 und Weiter mit PP. 1 ... 1 1 4 Möglichkeiten also, Anzahl der Zustände: 2 * 4 = 2 * 2 * 2 = 8

Wie viele Zustände kann man mit 8 Bit darstellen ? 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 = 28 = 256 Weiter mit PP.

Wie viele Zustände kann man mit 2 Byte darstellen ? 2 Byte = 16 Bit also: Weiter mit PP. 216 = 65536

Wie viele Zustände kann man mit 4 Byte darstellen ? 4 Byte = 32 Bit also: Weiter mit PP. 232 = 4294967296

Wie kann man dies schnell näherungsweise ausrechnen ? Weiter mit PP.

210 = 1024  1000 = 103 , also: 210  103 220 = 210 · 2 = (210)2  (103)2 = 106 also: 220  106 230 = 210 · 3 = (210)3  (103)3 = 109 also: 230  109 Weiter mit PP. 240 = 210 · 4 = (210)4  (103)4 = 1012 also: 240  1012

Weitere Maßeinheiten für (große) Datenmengen: Weiter mit PP.

103 Byte = 1 Kilobyte = 1 KB 106 Byte = 1 Megabyte = 1 MB 109 Byte = 1 Gigabyte = 1 GB 1012 Byte = 1 Terabyte = 1 TB 1015 Byte = 1 Petabyte = 1 PB 1018 Byte = 1 Exabyte = 1 EB 1021 Byte = 1 Zettabyte = 1 ZB 1024 Byte = 1 Yottabyte = 1 YB Weiter mit PP.

Wie kann man schnell näherungsweise ausrechnen, wie viele Zustände man mit 2 Byte bzw. 4 Byte darstellen kann, d.h. wie gross ist 216 und 232 ? Weiter mit PP.

216 = 26+10 = 26 · 210= 64 · 210  64 · 103 also: 216  64103 Weiter mit PP. 232 = 22+30 = 22 · 230= 4 · 230  4 · 109 also: 232  4 109

Zurück zum Datentyp: Weiter mit PP.

int main (){ int z; ... } Weiter mit PP. Datentyp

Der Datentyp einer Variablen legt fest, welche Werte eine Variable annehmen darf und in welchem Wertebereich sich diese Werte befinden dürfen. Dieser Wertebereich hängt von der Anzahl der Bytes ab, in denen die Variable gespeichert wird. Weiter mit PP.

Ganze Zahlen Können dargestellt werden durch: Teilziel: Die folgenden Datentypen verstehen. Weiter mit PP.

Datentyp int Länge: 2 oder 4 Byte Wertebereich: -32768...32767 oder -2147483648...2147483647 Lehrer: Länge ist abhängig vom Compiler Frage: Wieviel Zahlen kann man mit 2 Byte darstellen ? Antwort: 2^16=65536. Davon wird die Hälfte für positive Zahlen (einschließlich 0), der Rest für negative Zahlen verwendet. Wie groß ist dann die kleinste negative Zahl und die größte positive Zahl ? ... Das gleiche beantworten für 4 Byte große Länge Päsentiert die Lösung. Weiter mit PP. 65536 bzw. 4294967296 Zahlen auf positiven und negativen Bereich aufgeteilt Formatierung: %d

Datentyp unsigned int Länge: 2 oder 4 Byte Wertebereich: 0...4294967295 Lehrer: Länge ist abhängig vom Compiler unsigned bedeutet, dass der Zahlenbereich positiv (einschließlich 0) ist. Frage: Wieviel Zahlen kann man mit 2 Byte darstellen ? Antwort: 2^16=65536. Was ist dann die größte positive Zahl ? 65535 Das gleiche beantworten für 4 Byte große Länge ... Päsentiert die Lösung. Weiter mit PP. 65536 bzw. 4294967296 Zahlen auf positiven Bereich aufgeteilt Formatierung: %d

Es gibt noch andere ganzzahlige Datentypen, wie z.B. long long braucht mehr (oder gleich viel) Speicher als int. Näheres ist dazu der Hilfe der Entwicklungsumgebung zu entnehmen. Weiter mit PP.

(oder auch Gleitkommazahlen genannt) Fließkommazahlen (oder auch Gleitkommazahlen genannt) Weiter mit PP.

Wichtig: Da es unendlich viele Fließkommazahlen gibt, können nur endlich viele in einer bestimmten Menge Bytes abgespeichert werden. Das geht nur, indem z.B. die Nachkommastellen ab einer bestimmten Stelle abgeschnitten werden. Weiter mit PP.

Für Fließkommazahlen gibt es folgende Datentypen: Weiter mit PP.

Datentyp float Länge: 4 Byte Wertebereich: ca. -3.4*1038 bis Genauigkeit: mindestens 6 Dezimalst. Weiter mit PP. Formatierung: %f

Datentyp double Länge: 8 Byte Wertebereich: ca. -1.7*10308 bis Genauigkeit: mindestens 15 Dezimalst. Weiter mit PP. Formatierung: %f

Näheres dazu in der Hilfe der jeweiligen Entwicklungsumgebung Datentyp double Für die Formatierung gibt es bei Microsoft MS VC++ beim Datentyp double eine Besonderheit: bei scanf: %lf bei printf: %f bzw. bei neuen Versionen: %lf Näheres dazu in der Hilfe der jeweiligen Entwicklungsumgebung Weiter mit PP.

C wurde von einem Amerikaner entwickelt C wurde von einem Amerikaner entwickelt. Im amerikanischen Sprachraum schreibt man in Kommazahlen statt des Kommas einen Punkt. Deshalb gilt für die Syntax... Weiter mit PP.

Beispiele für Gleitkommazahlen: ... double x; x = 3.1415; x = -4.67; x = 7.5e-23; x = E-45; 3,1415 -4,67 7,5·10-23 Weiter mit PP. 10-45

Funktioniert genauso für float: ... float x; x = 3.1415; x = -4.67; x = -3.14e23; x = -E17; 3,1415 -4,67 -3,14·1023 Weiter mit PP. -1017

Zeichen Ein Computer kann nur Zahlen speichern, keine Zeichen. Damit ein Zeichen gespeichert werden kann, wird ihm eine Zahl (ASCII-Wert) zugeordnet. Weiter mit PP.

Diese Zuordnung ist im ASCII - Zeichensatz festgelegt. American Standard Code for Information Interchange Lehrer: Teilt ASCII-Tabelle aus. Weiter mit PP.

z.B: A <--> 65 Bem: 7. Bit ist ein Vorzeichenbit Datentyp char Länge: 1 Byte Wertebereich: Alle ASCII-Zeichen z.B: A <--> 65 Bem: 7. Bit ist ein Vorzeichenbit Weiter mit PP. Formatierung: %c

Datentyp unsigned char Länge: 1 Byte Wertebereich: Alle ASCII-Zeichen z.B: A <--> 65 Bem: 7. Bit ist kein Vorzeichenbit Weiter mit PP. Formatierung: %c

In Variablen der Datentypen char und unsigned char wird der ASCII-Wert des Zeichens gespeichert. Beim Datentyp char wird das 7. Bit als Vorzeichenbit benutzt, beim Datentyp unsigned char dagegen nicht.

Bei Variablen des Datentypen char werden deshalb Zeichen mit dem ASCII-Wert grösser oder gleich 128 als negative Zahlen abgespeichert. Bei unsigned char werden alle Zeichen als positive Zahlen abgespeichert.

Was würde der Compiler sagen, wenn die zwei Hochkommata fehlen würden? Beispiele für Zeichen ... char x; char y; x = 'c'; y = 'A'; Was würde der Compiler sagen, wenn die zwei Hochkommata fehlen würden? Er würde c als Variable auffassen. Da diese aber nicht deklariert (angemeldet) wurde, gibt er eine Fehlermeldung aus. Weiter mit PP. Deshalb werden in C alle Zeichen zwischen 2 Hochkommata gesetzt.

Datentyp bool Länge: 1 Byte Wertebereich: true, false Formatierung: %c bool gibt es nicht in C, sondern nur in C++ Weiter mit PP. Formatierung: %c

Beispiele für boolsche Werte ... bool b1; bool b2; b1 = true; b2 = false; Weiter mit PP.

Siehe auch in der Hilfe zu MS VC++ unter: data type ranges Aufgabe: Lehrer stellt obige Aufgabe. Lösung: Schüler stellen Lösung vor. Weiter mit PP.

Aufgabe Schreiben Sie ein Programm, das das zum Wert 65 zugehörige Zeichen auf dem Bildschirm ausgibt. Aufgabe: Lehrer stellt obige Aufgabe. Lösung: Schüler stellen Lösung vor. Weiter mit PP.

ergibt Bildschirmausgabe: int main(){ int i; i = 65; printf("%d %c\n", i, i); return 0; } Anschaulich: Der Teig i wird einmal in der Backform %d und das andere Mal in der Backform %c gebacken (formatiert). i wird als ganze Zahl dargestellt Lehrer: Präsentiert eine Lösung. Weiter mit PP. i wird als Zeichen dargestellt Formatieren heißt eine Form geben, so wie eine Backform einem Teig eine Form gibt. ergibt Bildschirmausgabe:

65 A ergibt Bildschirmausgabe: int main(){ int i; i = 65; printf("%d %c\n", i, i); return 0; } Leerzeichen, da sich zwischen %c und %d auch ein Leerzeichen befindet i wird als ganze Zahl dargestellt Lehrer: Präsentiert eine Lösung. Weiter mit PP. i wird als Zeichen dargestellt 65 A ergibt Bildschirmausgabe:

Aufgabe Schreiben Sie ein Programm, das den zum Zeichen B zugehörigen ASCII-Wert auf dem Bildschirm ausgibt. Aufgabe: Lehrer stellt obige Aufgabe. Lösung: Schüler stellen Lösung vor. Weiter mit PP.

B 66 Also ist die Bildschirmausgabe: int main(){ char z; z = 'B'; printf("%c %d\n", z, z); return 0; } Leerzeichen, da sich zwischen %c und %d auch ein Leerzeichen befindet z wird als Zeichen dargestellt z wird als ganze Zahl dargestellt Lehrer: Präsentiert eine Lösung. Weiter mit PP. Also ist die Bildschirmausgabe: B 66

Aufgabe: Schreiben Sie ein C-Programm, das für ein eingegebenes Zeichen den ASCII-Wert auf dem Bildschirm ausgibt. Aufgabe: Lehrer stellt obige Aufgabe. Lösung: Schüler stellen Lösung vor. Weiter mit PP.

printf("%d %c\n",z,z); return 0; int main(){ char z; printf("Bitte Zeichen eingeben\n"); scanf("%c",&z); printf("%d %c\n",z,z); return 0; } Lehrer: Präsentiert eine Lösung. Weiter mit PP.

Problem mit scanf: Teilziel: Problematik von scanf verstehen. Weiter mit PP.

printf("\nDu bist %c\n", g); printf("Stand v/l eingeben\n"); int main (){ char g; char s; printf("Geschl. w/m eingeben"); scanf("%c", &g); printf("\nDu bist %c\n", g); printf("Stand v/l eingeben\n"); scanf("%c", &s); printf("Du bist %c\n", s); } Lehrer: Präsentiert folgendes Programm. Weiter mit PP.

Warum wird der Familienstand nicht auf dem Bildschirm ausgegeben ? Frage: siehe Folienblatt Antwort: Schüler stellen Vermutungen an. Weiter mit PP.

Der Tastaturpuffer Eine Eingabefunktion wie scanf prüft zuerst ab, ob sich (vielleicht noch von eineren früheren Eingabe) noch Zeichen im sogenannten Tastaturpuffer befinden (dort werden über Tastatur eingegebene Zeichen zuerst gespeichert). Wenn dies der Fall ist, hält scanf nicht an, sondern liest Zeichen aus. Frage: siehe Folienblatt Antwort: Schüler stellen Vermutungen an. Weiter mit PP.

Befindet sich dagegen kein Zeichen mehr im Tastaturpuffer, hält scanf zuerst an und gibt dem Anwender die Möglichkeit, Zeichen einzugeben und die Eingabe mit ENTER zu beenden. Dann holt scanf diese Zeichen aus dem Tastaturpuffer. Frage: siehe Folienblatt Antwort: Schüler stellen Vermutungen an. Weiter mit PP.

Zurück zur Beantwortung der vorigen Frage: siehe Folienblatt Antwort: Schüler stellen Vermutungen an. Weiter mit PP.

Tastaturpuffer nach der 1. Eingabe des Anwenders w ENTER Lehrer: Präsentiert die Lösung. Weiter mit PP. Welches Zeichen holt die 1. scanf Anweisung aus dem Tastaturpuffer und weist es der Variablen g zu ?

Wie sieht der Inhalt des Tastaturpuffers jetzt aus ? ENTER Lehrer: Präsentiert die Lösung. Weiter mit PP. Welches Zeichen holt die 2. scanf Anweisung aus dem Tastaturpuffer und weist es der Variablen s zu ?

Frage: Was würde das Programm für das Geschlecht und den Stand ausgeben, wenn der Anwender bei der ersten Eingabeaufforderung (beim 1. scanf im Programm) nicht ein Zeichen, sondern die Zeichenkette weiblich eingegeben hätte ? Frage: siehe Folienblatt Antwort: Schüler stellen Vermutungen an. Weiter mit PP.

Antwort: Du bist w Du bist e Frage: siehe Folienblatt Antwort: Schüler stellen Vermutungen an. Weiter mit PP.

Tastaturpuffer nach der Eingabe löschen mit: Lösung: Tastaturpuffer nach der Eingabe löschen mit: fflush(stdin) Lehrer: Präsentiert die Funktion fflush. Weiter mit PP. Aufgabe: Lösen Sie die Aufgabe unter Verwendung von fflush. Schüler: Stellen Lösung vor.

int main (){ char g; printf("Geschl. w/m eingeben"); scanf("%c", &g); fflush(stdin); ... } Lehrer: Präsentiert eine Lösung. Weiter mit PP.

Bemerkung: Aus Platzgründen ist es möglich, dass fflush(stdin); in dieser und den folgenden Präsentationen weggelassen wird ! Lehrer: Präsentiert eine Lösung. Weiter mit PP.

Das EVA Prinzip Teilziel: Das EVA-Prinzip verstehen. Weiter mit PP.

printf("Bitte ganze Zahl eingeben \n"); scanf("%d", &z); int main (){ int z; printf("Bitte ganze Zahl eingeben \n"); scanf("%d", &z); fflush(stdin); z = z * z; printf("Das Quadrat ist: %d", z); } Eingabe Verarbeitung Weiter mit PP. Ausgabe

Ersatzwiderstand von 2 parallel geschalteten Widerständen berechnen. Aufgabe: Ersatzwiderstand von 2 parallel geschalteten Widerständen berechnen. Weiter mit PP.

printf("1. Widerstand eingeben\n"); scanf("%lf", &R1); fflush(stdin); int main(){ double R1; double R2; double ersatz; printf("1. Widerstand eingeben\n"); scanf("%lf", &R1); fflush(stdin); printf("2. Widerstand eingeben\n"); scanf("%lf", &R2); ersatz = 1/(1/R1 + 1/R2); printf("Ersatzwiderstand=%f\n",ersatz); return 0; } Weiter mit PP.

Weitere Lösung Weiter mit PP.

printf("1. Widerstand eingeben\n"); scanf("%lf", &R1); fflush(stdin); Alles ist gleich (bis auf eine Anweisung) wie in der letzten Lösung. Was fehlt aber noch ? int main(){ double R1; double R2; double ersatz; printf("1. Widerstand eingeben\n"); scanf("%lf", &R1); fflush(stdin); printf("2. Widerstand eingeben\n"); scanf("%lf", &R2); ersatz = 1/R1 + 1/R2; printf("Ersatzwiderstand=%f\n",ersatz); } Weiter mit PP. ersatz = 1 / ersatz;

Frage: Wäre folgende Anweisung auch korrekt ? 1/ersatz = 1/R1 + 1/R2 Nein ! Links des Gleichheitszeichens darf nur genau eine Variable stehen ! Weiter mit PP.

Aufgaben aus dem Übungsblatt lösen. Weiter mit: Aufgaben aus dem Übungsblatt lösen. Weiter mit PP.