Schnellkurs in UNIX. Einführung in das Programmieren für Technische Mathematik. UNIX ist textbasiert. Betriebssystem? UNIX. Werbung für CYGWIN

Ähnliche Dokumente
Schnellkurs in UNIX. Betriebssystem? UNIX. Literatur. UNIX ist textbasiert. Login auf einem UNIX-System. Werbung für CYGWIN

Das erste C-Programm. Einführung in das Programmieren für Technische Mathematik. Source-Code. Achtung. Programmiersprachen.

Das erste C-Programm. Einführung in C. Programmieren für Technische Mathematik. Source-Code. Achtung. Programmiersprachen. Source-Code & Executable

Formalia. Einführung in das Programmieren für Technische Mathematik. freiwillige Literatur. EPROG-Homepage. Literatur.

Formalia. Einführung in das Programmieren für Technische Mathematik. freiwillige Literatur. EPROG-Homepage. Literatur. Prof. Dr.

Einführung in das Programmieren für Technische Mathematik

Formalia. Einführung in das Programmieren für Technische Mathematik. EPROG-Homepage. freiwillige Literatur. Literatur. Prof. Dr.

Einführung in das Programmieren für Technische Mathematiker

Das erste C-Programm. Einführung in das Programmieren für Technische Mathematiker. Source-Code. Achtung. Programmiersprachen. Einführung in C, Teil 1

Schnellkurs in UNIX. Einführung in C. Programmieren für Technische Mathematik. UNIX ist textbasiert. Betriebssystem? UNIX. Werbung für CYGWIN

Organisatorisches. Einführung in das Programmieren für Technische Mathematiker. Wichtige Namen. Wichtige URLs. Lehrziel. Didaktisches Konzept?

Organisatorisches. Einführung in das Programmieren für Technische Mathematiker. Wichtige Namen. Wichtige URLs. Lehrziel. Didaktisches Konzept?

Organisatorisches. Einführung in das Programmieren für Technische Mathematiker. Wichtige Namen. Wichtige URLs. Lehrziel. Didaktisches Konzept?

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Informatik für Schüler, Foliensatz 2 Ausdrücke, Variablen, Datentypen, Ein- und Ausgabe

Arbeiten mit der Shell Teil 1

Projekt 3 Variablen und Operatoren

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Schnellkurs in UNIX. Einführung in C. Programmieren für Technische Mathematik. UNIX ist textbasiert. Betriebssystem? UNIX. Werbung für CYGWIN

Grundlagen der Programmierung

Informatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen

Arbeiten mit der Shell Teil 1

Hochschule Für Angewandte Wissenschaften FH München Sommersemester Thomas Kolarz. Folie 1.

Informatik I - Übung 2 Programmieren in Eclipse

Unterlagen. CPP-Uebungen-08/

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Vorsemesterkurs Informatik

2. Programmierung in C

Informatik für Schüler, Foliensatz 1 Einführung bis...

Übungen zur Vorlesung Wissenschaftliches Rechnen I

JAVA-Datentypen und deren Wertebereich

Java I Vorlesung Imperatives Programmieren

Beispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio)

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

ZWEITE ÜBUNG ZUR EINFÜHRUNG IN DIE PROGRAMMIERUNG FÜR COMPUTERLINGUISTEN LEONIE WEIßWEILER

Informatik I - Einstiegskurs

Einstieg in die Informatik mit Java

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

Arbeiten mit der Shell Teil 1

Funktionen. Funktionen. Funktionen in C. Variablen. Call by Value

2. Programmierung in C

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Grundlagen der Programmierung

Funktionales C++ zum Ersten

2. Programmierung in C

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in die Programmierung mit VBA

Shell. Oder Konsole suchen im Application Finder. Auch Terminal, Bash oder Kommandozeile genannt. Bash nimmt Befehle entgegen und führt diese aus

Systemverwaltung mittels Skripts

Bedingte Anweisungen

Grundlagen der Programmierung

Vorkurs Informatik WiSe 16/17

GI Vektoren

Linux-Camp: Remote-Zugriff

Vorkurs Informatik WiSe 17/18

Grundbegriffe. Einführung in das Programmieren für Technische Mathematiker. Dirk Praetorius. Folien zu meinen Vorlesungen.

Übersicht PERL. !!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!!

Grundlagen der Programmierung

Mathematische Computer-Software

WS2018/ Oktober 2018

2 Eine einfache Programmiersprache

Das CIP der Mathematik

Einstieg in die Informatik mit Java

Institut für Computational Science Prof. Dr. H. Hinterberger. Praxismodul 1. Einführung in die Programmierung Erste Programme

Programmierkurs C++ Variablen und Datentypen

FACHHOCHSCHULE MANNHEIM

Operatoren in C/C++ und Java:

Pointer. Variablen. Pointer. Ein elementares Beispiel. Pointer in C

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

Übungen zur Vorlesung Wissenschaftliches Rechnen I

Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 1B

Arbeiten mit der Shell Teil 1

Programmieren in C/C++ und MATLAB

Grundlagen der Informatik

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Algorithmen und ihre Programmierung

Die Programmiersprache C

Hello World! Eine Einführung in das Programmieren Das erste Programm

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

6. Grundlagen der Programmierung

Angewandte Mathematik und Programmierung

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

Die Shell. [prompt]> <command> <flags> <args>

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Grundlagen der Informatik. Mathias Buhr

Arbeiten in der Unix-Kommandozeile

Programmiersprachen Einführung in C

ÜBUNG Regeln für die Hausaufgaben. Was gibt es im UNIX-Pool zu beachten? Der erste Besuch im UNIX-Pool

Vorlesung Unix-Praktikum

Shell-Scripting Linux-Kurs der Unix-AG

2 Eine einfache Programmiersprache

Transkript:

Einführung in das Programmieren für Technische Mathematik Einführung in C, Teil 1 Schnellkurs in UNIX DI Samuel Ferraz-Leite Prof. Dr. Dirk Praetorius Prof. Dr. Christoph Überhuber Betriebssystem Login am UNIX-System Wichtigste Programme für EPROG Wichtigste UNIX-Dateibefehle Fr. 10:15-11:45, Freihaus HS 1 Institut für Analysis und Scientific Computing 1 Betriebssystem? Der Rahmen, in dem Programme auf Rechner ausgeführt werden können z.b. Windows XP, UNIX Abstraktion der Hardware auf geeignete Software-Schnittstellen Software läuft auf verschiedenen Rechnern Verwaltung der angeschlossenen Hardware UNIX 1969-74 Entwicklung der ersten UNIX-Version bei Bell Laboratories durch Ritchie und Thompson UNIX wird in eigens entwickelter Sprache C geschrieben UNIX-Code ist frei (kostenloses Betriebssystem!) PC-Variante nennt sich Linux Heute Standard auf Großrechnern Mehrbenutzerbetrieb Multitasking Mehrprozessoren-Unterstützung Literatur M. Harlander: Einf. in UNIX (pdf auf Homepage) UNIX ist textbasiert Shell = Befehlsfenster mit Textprompt z.b. bash, sh, ksh manchmal auch Begriff X-Term (= Shell) Anders als Windows werden die Programme in UNIX i.d.r. durch Eingabe eines Befehls in einer Shell gestartet Man muss die wichtigsten Befehle kennen! Maus-Bedienung ist i.d.r. nicht möglich! Befehl xterm & öffnet weiteres Shell-Fenster Werbung für CYGWIN cygwin = freier UNIX-Emulator für Windows Download unter http://www.cygwin.com Unter cygwin stehen zur Verfügung ssh = Remote Login auf UNIX-System scp = Kopieren von Software von/auf anderes UNIX-System gcc = C-Compiler für Übungen emacs = guter Texteditor Wichtiges zum Start: cygwin startet im Textmodus Eingabe von startx eröffnet Möglichkeit, weitere Fenster zu öffnen (sog. graphisches Arbeiten) 3

Login auf einem UNIX-System Remote Login von UNIX aus Immer nötig: Eingabe von Username & Passwort Accounts auf lva.student.tuwien.ac.at Username: e + Matrikelnummer Passwort: wie bei TUWIS 3 Varianten für Login lokales Login am Terminal triviales Login remote Login über Internet von UNIX aus wichtigste Variante für Übungen remote Login über Internet von Windows aus Bitte beachten: UNIX ist case sensitive, d.h. Groß- und Kleinschreibung werden unterschieden Keine deutschen Sonderzeichen verwenden, da Systeme i.d.r. englische Zeichencodierung Ausgangspunkt: bereits Shell geöffnet auf einem UNIX-System Eingabe der folgenden Befehle in der Shell ssh -X username@rechnername oder ssh -X rechnername -l username Option -X erlaubt graphisches Arbeiten, d.h. kann remote Programme starten, die im lokalen Fenster arbeiten Nach korrekter Passworteingabe erscheint im selben Shell-Fenster die Eingabeaufforderung des Remote-Rechners Alle ab jetzt eingegebenen Befehle werden also auf Remote-Rechner ausgeführt! Logout vom Remote-Rechner durch Eingabe von logout oder exit 4 5 Die wichtigsten Programme für EPROG Remote Login von Windows aus Nur mit Zusatzsoftware möglich, z.b. http://gd.tuwien.ac.at/utils/shells/ssh /SSHSecureShellClient-3..9.exe Im allgemeinen kein graphisches Arbeiten möglich, d.h. alle Arbeiten nur im Textfenster! Ggf. also mehrfach auf lva.student.tuwien.ac.at einloggen, um mehrere Text-Fenster zu haben. Eingabe der folgende Befehle in einer Shell emacs = Texteditor Wenn graphisches Arbeiten möglich, startet emacs im eigenen Fenster Aufruf mit emacs & erlaubt weiteres Arbeiten in Shell (Symbol & = Multitasking-Aufruf in UNIX) gcc = Standard-C-Compiler, der für Übung verwendet werden muss matlab startet Matlab-Interpreter inkl. graphischer Oberfläche + Editor (wie im Skript) matlab -nojvm startet Matlab in Shell 6 7

UNIX-Dateisystem Aufbau wie in Windows: Verzeichnisse + echte Dateien Verzeichnisse sind im Baum geordnet in Windows mittels Explorer visualisierbar in UNIX muss sich Benutzer i.d.r. textbasiert zurechtfinden Nach Login ist man stets im eigenen Home-Verzeichnis pwd (print working directory) gibt aus, in welchem Verzeichnis man (= Shell) aktuell ist cd (change directory) ohne Angabe wechselt ins eigene Home-Verz.. = Abkürzung für aktuelles Verzeichnis.. = Abkürzung für eine ebene höher ~ = Abkürzung für eigenes Home-Verz. Beispiel: Es gäbe Verz. /home/dirk/eprog/vo Nach Login bin ich in /home/dirk/ cd eprog wechselt nach /home/dirk/eprog cd vo wechselt dann nach /home/dirk/eprog/vo cd.. wechselt dann nach /home/dirk/eprog cd.., cd, cd ~ wechselt dann nach /home/dirk nur im eigenen Home-Verzeichnis + Unterverzeichnissen hat man Schreib- und Leserechte! Die wichtigsten Befehle ls = List (Verzeichnis-Inhalt ausgeben) mkdir = Make Directory rmdir = Remove Directory cp = Copy (Files) cp -r = Copy (Directories) mv = Move (Files & Directories) rm = Remove (Files) rm -rf = Remove (ohne Rücksicht, inkl. Verz.) Vorsicht, es gibt keinen Papierkorb in UNIX! d.h. gelöscht ist gelöscht! Dateinamen Namen für Dateien & Verz. (max. 53 Zeichen) Buchstaben, aber keine dt. Sonderzeichen Ziffern Underscore ( ), Punkt (.), Minuszeichen (-) UNIX unterscheidet Groß-/Kleinschreibung Viele Dateibefehle erlauben sog. Wildcards * vertritt beliebige Anzahl beliebiger Zeichen? vertritt genau ein beliebiges Zeichen BSP. ls *.ps zeigt Dateien mit Endung.ps 8 9 Kopieren von Dateien zwischen UNIX-Rechnern Kopieren von Dateien/Verzeichnissen cp quelle ziel quelle = Name der Ausgangsdatei ziel = Name der Zieldatei Existiert ziel nicht, so wird Datei angelegt Existente ziel wird überschrieben Ist ziel ein Verzeichnisname, so wird Datei quelle in dieses Verzeichnis kopiert quelle darf Wildcards enthalten Option -r zum Kopieren von Verzeichnissen nötig z.b. cp -r quelle ziel Abkürzungen bei Verzeichnissen.,.., ~ erlaubt Beispiel cp /tmp/*. kopiert alle Dateien (aber keine Unter-Verz.) aus Verzeichnis /tmp ins aktuelle Verzeichnis Mittel scp (secure copy) analog zu cp scp quelle user@rechner:ziel kopiert Datei quelle von lokal nach rechner, wo Benutzer user Account haben muss Vor Kopieren wird Passwort abgefragt Falls ziel fehlt, wird ins Home-Verz. kopiert Falls : fehlt, gilt scp = cp Wildcards sind erlaubt Kopieren von Verzeichnissen mit Option -r scp user@rechner:quelle ziel kopiert datei quelle von rechner nach lokal Kopieren von Windows nach UNIX und umgekehrt Nur mit Zusatzsoftware möglich, z.b. http://gd.tuwien.ac.at/utils/shells/ssh /SSHSecureShellClient-3..9.exe installiert SFTP-Programm, das wie Windows-Explorer aussieht und bedient wird 10 11

Source-Code in Programmiersprache geschriebenes Programm Das erste C-Programm wird bei Ausführung bzw. Compilieren schrittweise abgearbeitet im einfachsten Fall: sequentiell Programmzeile für Programmzeile von oben nach unten Programmiersprachen Source-Code & Executable Compiler & Interpreter Syntaxfehler & Laufzeitfehler Wie erstellt man ein C-Programm? main printf (Ausgabe von Text) #include <stdio.h> Grobe Unterscheidung in Interpreter- und Compiler-basierte Sprachen Interpreter führt Source-Code zeilenweise bei der Übersetzung aus d.h. Übersetzen & Ausführen ist gleichzeitig z.b. Matlab, Java, PHP Compiler übersetzt Source-Code in ein ausführbares Programm (Executable) Executable ist eigenständiges Programm d.h. (1) Übersetzen, dann () Ausführen z.b. C, C++, Fortran Alternative Unterscheidung (siehe Schmaranz) imperative Sprachen, z.b. Matlab, C, Fortran objektorientierte Sprachen, z.b. C++, Java funktionale Sprachen, z.b. Lisp 1 13 Wie erstellt man ein C-Programm? Achtung C ist Compiler-basierte Programmiersprache Compilierter Code ist systemabhängig, d.h. Code läuft idr. nur auf dem System, auf dem er compiliert wurde Source-Code ist systemunabhängig, d.h. er sollte auch auf anderen Systemen compiliert werden können. C-Compiler unterscheiden sich leicht Bitte vor Übung alle Programme auf der lva.student.tuwien.ac.at mit dem Compiler gcc compilieren und testen nicht-lauffähiger Code = schlechter Eindruck und ggf. schlechtere Note... Starte Editor Emacs aus einer Shell mit emacs & Die wichtigsten Tastenkombinationen: C-x C-f = Datei öffnen C-x C-s = Datei speichern C-x C-c = Emacs beenden Öffne eine (ggf. neue) Datei name.c Endung.c ist Kennung eines C-Programms Die ersten beiden Punkte kann man auch simultan erledigen mittels emacs name.c & Schreibe den sog. Source-Code (= C-Programm) Abspeichern mittels C-x C-s nicht vergessen Compilieren z.b. mit gcc name.c Falls Code fehlerfrei, erhält man Executable a.out unter Windows: a.exe Diese wird durch a.out bzw../a.out gestartet Compilieren mit gcc name.c -o output erzeugt Executable output statt a.out 14 15

Syntaxfehler Das erste C-Programm 5 printf("hello World!\n"); 6 } Zeilennummern gehören nicht zum Code (sind lediglich Referenzen auf Folien) Jedes C-Programm besitzt die Zeilen 3, 4, 6. Die Ausführung eines C-Programms startet immer bei main() egal, wo main() im Code steht Klammern {...} schließen in C sog. Blöcke ein Hauptprogramm main() bildet immer einen Block Logische Programmzeilen enden mit Semikolon, vgl. 5 printf gibt Text aus (in Anführungszeichen), \n macht einen Zeilenumbruch Anführungszeichen müssen in derselben Zeile sein Zeile 1: Einbinden der Standardbibliothek für Input-Output (später mehr!) Syntax = Wortschatz (Befehle) & Grammatik einer Sprache (Was man wie verbinden kann...) Syntaxfehler = Falsche Befehle oder Verwendung merkt Compiler und gibt Fehlermeldung 1 main() { 3 printf("hello World!\n"); 4 } Fehlt Einbindung der stdio.h Compilieren liefert Fehlermeldung: wrongworld1.c:3: warning: incompatible implicit declaration of built-in function printf 5 printf("hello World!\n") 6 } Fehlt Semikolon am Zeilenende 5 Compilieren liefert Fehlermeldung: wrongworld.c:6: error: syntax error before } token Laufzeitfehler Fehler, der erst bei Programm-Ausführung auftritt 16 17 Variablen Was sind Variable? Deklaration & Initialisierung Datentypen int und double Zuweisungsoperator = arithmetische Operatoren + - * / % Type Casting int, double printf (Ausgabe von Variablen) scanf (Werte über Tastatur einlesen) Variable Variable = symbolischer Name für Speicherbereich Variable in Math. und Informatik verschieden: Mathematik: Sei x R fixiert x Informatik: x=5 weist x den Wert 5 zu, Zuweisung kann jederzeit geändert werden z.b. x=7 Datentypen Bevor man Variable benutzen darf, muss man idr. erklären, welchen Typ Variable haben soll Elementare Datentypen: Gleitkommazahlen (ersetzt Q, R), z.b. double Integer, Ganzzahlen (ersetzt N, Z), z.b. int Zeichen (Buchstaben), idr. char int x; deklariert Variable x vom Typ int 18 19

Deklaration Deklaration = das Anlegen einer Variable d.h. Zuweisung von Speicherbereich auf einen symbolischen Namen & Angabe des Datentyps Zeile int x; deklariert Variable x vom Typ int Zeile double var; deklariert var vom Typ double Initialisierung Durch Deklaration einer Variablen wird lediglich Speicherbereich zugewiesen Falls noch kein konkreter Wert zugewiesen: Wert einer Variable ist zufällig Deshalb direkt nach Deklaration der neuen Variable Wert zuweisen, sog. Initialisierung int x; (Deklaratation) x = 0; (Initialisierung) Deklaration & Initialisierung auch gleichzeitig möglich: int x = 0; Ein erstes Beispiel zu int 5 int x = 0; 6 7 printf("input: x="); 8 scanf("%d",&x); 9 printf("output: x=%d\n",x); 10 } Einbinden der Input-Output-Funktionen (Zeile 1) printf gibt Text (oder Wert einer Var.) aus scanf liest Tastatureingabe ein in eine Variable Prozentzeichen % in Zeile 8/9 leitet Platzhalter ein Datentyp Platzhalter printf Platzhalter scanf int %d %d double %f %lf Beachte & bei scanf in Zeile 8 scanf("%d",&x) aber: printf("%d",x) Wenn man & vergisst Laufzeitfehler Compiler merkt Fehler nicht (kein Syntaxfehler!) Sorgfältig arbeiten! 0 1 Zuweisungsoperator Dasselbe Beispiel zu double 5 double x = 0; 6 7 printf("input: x="); 8 scanf("%lf",&x); 9 printf("output: x=%f\n",x); 10 } Beachte Platzhalter in Zeile 8/9 scanf("%lf",&x) aber: printf("%f",x) Verwendet man %f in 8 Falsches Einlesen! vermutlich Laufzeitfehler! sorgfältig arbeiten! 5 int x = 1; 6 int y = ; 7 8 int tmp = 0; 9 10 printf("a) x=%d, y=%d, tmp=%d\n",x,y,tmp); 11 1 tmp = x; 13 x = y; 14 y = tmp; 15 16 printf("b) x=%d, y=%d, tmp=%d\n",x,y,tmp); 17 } Das einfache Gleich = ist Zuweisungsoperator Zuweisung immer rechts nach links! Zeile x = 1; weist den Wert auf der rechten Seite der Variablen x zu Zeile x = y; weist den Wert der Variablen y der Variablen x zu insb. haben x und y danach denselben Wert d.h. Vertauschen der Werte nur mit Hilfsvariable a) x=1, y=, tmp=0 b) x=, y=1, tmp=1 3

Arithmetische Operatoren Type Casting Bedeutung eines Operators kann vom Datentyp abhängen! Operatoren auf Ganzzahlen: a=b, -a (Vorzeichen) a+b, a-b, a*b, a/b (Division ohne Rest), a%b (Divisionsrest) Operatoren auf Gleitkommazahlen: a=b, -a (Vorzeichen) a+b, a-b, a*b, a/b ( normale Division) Achtung: /3 ist Ganzzahl-Division, also Null! Notation für Gleitkommazahlen: Vorzeichen -, falls negativ Vorkommastellen Dezimalpunkt Nachkommastellen e oder E mit ganzzahligem Exponenten (10er Potenz!), z.b. e = E = 10 = 00 Wegfallen darf entweder Vor- oder Nachkommastelle (sonst sinnlos!) Wegfallen darf entweder Dezimalpunkt oder e bzw. E mit Exponent (sonst Integer!) Also:./3. ist Gleitkommadivision 0.6 Operatoren können auch Variablen verschiedener Datentypen verbinden Vor der Ausführung werden beide Variablen auf denselben Datentyp gebracht (Type Casting) 5 int x = 1; 6 double y =.5; 7 8 int sum_int = x+y; 9 double sum_dbl = x+y; 10 11 printf("sum_int = %d\n",sum_int); 1 printf("sum_dbl = %f\n",sum_dbl); 13 } Welchen Datentyp hat x+y in Zeile 8, 9? Den mächtigeren Datentyp, also double! Type Casting von Wert x auf double Zeile 8: Type Casting, da double auf int Zuweisung durch Abschneiden, nicht durch Rundung! sum int = 3 sum dbl = 3.500000 4 5 Implizites Type Casting 5 double dbl1 = / 3; 6 double dbl = / 3.; 7 double dbl3 = 1E; 8 int int1 = ; 9 int int = 3; 10 11 printf("a) %f\n",dbl1); 1 printf("b) %f\n",dbl); 13 14 printf("c) %f\n",dbl3 * int1 / int); 15 printf("d) %f\n",dbl3 * (int1 / int) ); 16 } a) 0.000000 b) 0.666667 c) 66.666667 d) 0.000000 Warum Ergebnis 0 in a) und d)?, 3 sind int /3 ist Ganzzahl-Division Werden Variablen verschiedenen Typs durch arith. Operator verbunden, Type Casting auf gemeinsamen (mächtigeren) Datentyp vgl. Zeile 6, 14, 15 ist int, 3. ist double /3. ergibt double Explizites Type Casting 5 int a = ; 6 int b = 3; 7 double dbl1 = a / b; 8 double dbl = (double) (a / b); 9 double dbl3 = (double) a / b; 10 double dbl4 = a / (double) b; 11 1 printf("a) %f\n",dbl1); 13 printf("b) %f\n",dbl); 14 printf("c) %f\n",dbl3); 15 printf("d) %f\n",dbl4); 16 } Kann dem Compiler mitteilen, in welcher Form eine Variable interpretiert werden muss Dazu Ziel-Typ in Klammern voranstellen! a) 0.000000 b) 0.000000 c) 0.666667 d) 0.666667 In Zeile 8, 9, 10: Explizites Type Casting (jeweils von int zu double) In Zeile 9, 10: Implizites Type Casting 6 7

Fehlerquelle beim Type Casting 5 int a = ; 6 int b = 3; 7 double dbl = (double) a / b; 8 9 int i = dbl; 10 11 printf("a) %f\n",dbl); 1 printf("b) %f\n",dbl*b); 13 printf("c) %d\n",i); 14 printf("d) %d\n",i*b); 15 } a) 0.666667 b).000000 c) 0 d) 0 Implizites Type Casting sollte man vermeiden! d.h. Explizites Type Casting verwenden! Einfache Verzweigung Logische Operatoren ==!= > >= < <= Logische Iunktoren! && Wahrheit und Falschheit bei Aussagen Verzweigung if if - else Bei Rechnungen Zwischenergebnisse in richtigen Typen speichern! 8 9 Logische Verkettung Logische Operatoren Es seien a,b zwei Variablen (auch versch. Typs!) Vergleich (z.b. a < b) liefert Wert 1, falls wahr bzw. 0, falls falsch Übersicht über Vergleichsoperatoren: == Gleichheit (ACHTUNG mit Zuweisung!)!= Ungleichheit > echt größer >= größer oder gleich < echt kleiner <= kleiner oder gleich Stets bei Vergleichen Klammer setzen! fast immer unnötig, aber manchmal eben nicht! Weitere logische Iunktoren:! nicht && und oder 5 int result = 0; 6 7 int a = 3; 8 int b = ; 9 int c = 1; 10 11 result = (a > b > c); 1 printf("a) result=%d\n",result); 13 14 result = (a > b) && (b > c); 15 printf("b) result=%d\n",result); 16 } a) result=0 b) result=1 Warum ist Aussage in 11 falsch, aber in 14 wahr? Auswertung von links nach rechts: a > b ist wahr, also mit 1 bewertet 1 > c ist falsch, also mit 0 bewertet Insgesamt wird a > b > c mit falsch bewertet! Aussage in 11 ist also nicht korrekt formuliert! 30 31

if-else einfache Verzweigung: Wenn - Dann - Sonst if (condition) statementa else statementb Gleichheit vs. Zuweisung nach if steht Bedingung stets in runden Klammern nach Bedingung steht nie Semikolon Bedingung ist falsch, falls sie 0 ist bzw. mit 0 bewertet wird, sonst ist die Bedingung wahr Bedingung wahr statementa wird ausgeführt Bedingung falsch statementb wird ausgeführt Statement ist entweder eine Zeile oder mehrere Zeilen in geschwungenen Klammern {... }, sog. Block Nur Erinnerung: if (a==b) vs. if (a=b) beides ist syntaktisch korrekt! if (a==b) ist Abfrage auf Gleichheit ist vermutlich so gewollt... ABER: if (a=b) weist a den Wert von b zu Abfrage, ob a 0 ist schlechter Programmierstil! else-zweig ist optional d.h. else statementb darf entfallen 3 33 Beispiel zu if-else 5 int var1 = -5; 6 double var = 1e-3; 7 int var3 = 5; 8 9 if (var1 >= 0) 10 printf("var1 >= 0\n"); 11 else 1 printf("var1 < 0\n"); 13 14 if (var) 15 printf("var!= 0, i.e., cond. is true\n"); 16 else 17 printf("var == 0, i.e., cond. is false\n"); 18 19 if ( (var1 < var) && (var < var3) ) 0 printf("var lies between the others\n"); 1 } var1 < 0 var!= 0, i.e., cond. is true var lies between the others Gerade oder Ungerade? 5 int x = 0; 6 7 printf("input x="); 8 scanf("%d",&x); 9 10 if (x > 0) 11 { 1 if (x%) 13 printf("x=%d is odd\n",x); 14 else 15 printf("x=%d is even\n",x); 16 } 17 else 18 printf("error: Input has to be positive!\n"); 19 } Programm überprüft, ob eingegebene Zahl x gerade Zahl ist oder nicht Man kann Verzweigungen schachteln: Einrückungen machen Code übersichtlicher Abhängigkeiten werden verdeutlicht 34 35

Lifetime & Scope Blöcke Lifetime einer Variable = Zeitraum, in dem Speicherplatz zugewiesen ist = Zeitraum, in dem Variable existiert Scope einer Variable = Zeitraum, in dem Variable sichtbar ist = Zeitraum, in dem Variable gelesen/verändert werden kann Blöcke {...} Deklaration von Variablen Lifetime & Scope Lokale & globale Variablen Scope Lifetime Globale & Lokale Variablen globale Variablen = Variablen, die globale Lifetime haben (bis Programm terminiert) eventuell lokaler Scope werden am Anfang außerhalb von main deklariert lokale Variablen = Variablen, die nur lokale Lifetime haben 36 37 Blöcke Blöcke stehen innerhalb von {... } Jeder Block startet mit Deklaration zusätzlich benötigter Variablen Variablen können/dürfen nur am Anfang eines Blocks deklariert werden Die innerhalb des Blocks deklarierten Variablen werden nach Blockende vergessen (= gelöscht) D.h. Lifetime endet lokale Variablen Schachtelung {... {... }... } beliebige Schachtelung ist möglich Variablen aus äußerem Block können im inneren Block gelesen und verändert werden, umgekehrt nicht. Änderungen bleiben wirksam. D.h. Lifetime & Scope nur nach Innen vererbt Wird im äußeren und im inneren Block Variable var definiert, so wird das äußere var überdeckt und ist erst wieder ansprechbar (mit gleichem Wert wie vorher), wenn der innere Block beendet wird. D.h. äußeres var ist nicht im inneren Scope Das ist schlechter Programmierstil! Bsp. zu lokalen & globalen Var. 3 int var0 = 5; 4 5 main() 6 { 7 int var1 = 7; 8 int var = 9; 9 10 printf("a) %d, %d, %d\n", var0, var1, var); 11 { 1 int var1 = 17; 13 14 printf("b) %d, %d, %d\n", var0, var1, var); 15 var0 = 15; 16 var = 19; 17 printf("c) %d, %d, %d\n", var0, var1, var); 18 { 19 int var0 = 5; 0 printf("d) %d, %d, %d\n", var0, var1, var); 1 } } 3 printf("e) %d, %d, %d\n", var0, var1, var); 4 } a) 5, 7, 9 b) 5, 17, 9 c) 15, 17, 19 d) 5, 17, 19 e) 15, 7, 19 38 39