Einführung ins Programmieren



Ähnliche Dokumente
Der Computer von Neumann

1. Einführung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Systemprogrammierung (37-023)

Einführung in PHP. (mit Aufgaben)

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

Computer-Architektur Ein Überblick

0. Einführung. C und C++ (CPP)

Kapitel 1: Einführung

Grundlagen. Kapitel 1

Übungen zu C++ Kapitel 1

Einführung in Eclipse und Java

Anleitung zum Arbeiten mit Microsoft Visual Studio 2008 im Softwarepraktikum ET/IT

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup

Erster Bug: eine Motte

Programmiersprachen und Programmierkonzepte

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

Anweisungsblöcke (dazu zählen auch Programme) werden in geschweifte Klammern eingeschlossen.

Modellierung und Programmierung 1

Informatik I Debugging

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Staatlich geprüfter EDV-Führerschein

Einführung (0) Erster funktionsfähiger programmgesteuerter Rechenautomat Z3, fertiggestellt 1941 Bild: Nachbau im Deutschen Museum München

Computeria Urdorf. Treff vom 16. Januar Was ist ein Computer?

2D22 Prinzipien der Softwareentwicklung. Prinzipien der Softwareentwicklung S. Strahringer 1

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Informatik Java-Programmierkurs im Rahmen der Berufs- u. Studienorientierung für Schüler. Joliot-Curie-Gymnasium GR 2010 Nico Steinbach

Tutorium Rechnerorganisation

2 Grundlagen der Programmierung

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Formale Sprachen und Grammatiken

Einführung in die Programmierung

Informatik in der Elektrotechnik (BIE) Aufnahme des Übungsbetriebs

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Objektorientiertes Programmieren mit Suse Linux

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

Programmierkurs Java

Die Mikroprogrammebene eines Rechners

Internet Explorer Version 6

Informatik I (D-MAVT)

E-PRIME TUTORIUM Die Programmiersprache BASIC

Propädeutikum. Dipl.-Inf. Frank Güttler

Im Original veränderbare Word-Dateien

5 Speicherverwaltung. bs-5.1 1

Programmieren was ist das genau?

VBA-Programmierung: Zusammenfassung

Fragen zur GridVis MSSQL-Server

Compiler und Codegenerierung. Hw-Sw-Co-Design

Name: ES2 Klausur Thema: ARM Name: Punkte: Note:

Einführung in die C-Programmierung

Applications Applets (eingeschränkte Rechte)

4D Server v12 64-bit Version BETA VERSION

Rillsoft Project - Installation der Software

DLLs (dynamic loaded libraries) mit MingW erstellen

Einführung in Betriebssysteme

Microcontroller Kurs Microcontroller Kurs/Johannes Fuchs 1

Programmieren in Haskell Einführung

Verwendung des Terminalservers der MUG

Installationsanleitung

Willkommen... Agenda für heute, 25. Februar, Studentinnen und Studenten der Studiengänge

Problemorientierte Programmiersprachen Nachteile von Programmen in Maschinensprache sehr aufwendig bei komplexeren Aufgabenstellungen fehleranfällig

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Einführung in die Programmierung (EPR)

Benutzerkonto unter Windows 2000

Klausur in Programmieren

Formular»Fragenkatalog BIM-Server«

Installation LehrerConsole (für Version 6.2)

Fragen. f [ ] = [ ] f (x : y : ys) = x y : f ys f (x : xs) = f (x : x : xs) Wozu evaluiert f [1, 2, 3] (Abkürzung für f (1 : 2 : 3 : [ ]))?

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Vorkurs C++ Programmierung

Proseminar Technische Informatik A survey of virtualization technologies

Version 0.3. Installation von MinGW und Eclipse CDT

Kapitel 1. Programmierkurs. 1.2 Allgemeiner Aufbau des Computers. 1.1 Hallo, Computer...?

Vorlesung C-Kurs 9:15-10:45 Mathe 11:15-12:45 1. Woche Hörsaal 1 2. Woche Hörsaal 7

Programmieren. Wie entsteht ein Programm

Wo finde ich die Software? - Jedem ProLiant Server liegt eine Management CD bei. - Über die Internetseite

Algorithmen mit Python

PROBLEME BEIM INSTALLIEREN REALTEK HD AUDIO TREIBER

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Angewandte Mathematik und Programmierung

TIMI: Technische Informatik für Medieninformatiker

Liesmich zum Kurs: Programmieren in der Bioinformatik mit Perl Konfigurierung der Programmierumgebung

Informatik I Tutorial

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Anleitung zum Download der aktuellsten GreenStar Software für Original GreenStar System (Stand: August 2005)

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

IntelliRestore Seedload und Notfallwiederherstellung

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick

In 12 Schritten zum mobilen PC mit Paragon Drive Copy 11 und Microsoft Windows Virtual PC

Programmieren Formulierung eines Algorithmus in einer Programmiersprache

Grundlagen der Programmierung UE

Routing im Internet Wie findet ein IP Paket den Weg zum Zielrechner?

Projektverwaltung Problem Lösung: Modulare Programmierung

The ToolChain.com. Grafisches Debugging mit der QtCreator Entwicklungsumgebung

Die Programmiersprache C

Einführung in die technische Informatik

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Installation und Inbetriebnahme von Microsoft Visual C Express

Transkript:

Einführung ins Programmieren Prof. Dr. Markus Gross Informatik I für D-MAVT (FS 2015) Aufbau eines Computers Systemumgebung Vorgang des Programmierens Editor, Debugger, Linker Programmiersprachen - Geschichte

Der Computer von Neumann Peripherals Ein- und Ausgabegeräte Bildschirm Tastatur Maus Drucker Lautsprecher Mikrophon Scanner... CPU Prozessor Register Cache Arithmetisch- Logische Einheit Ausführung von Befehlen Main Memory Netzwerkverbindungen Hauptspeicher Programmcode Programmdaten Stack, Heap Storage Devices Speicher Lokales Netzwerk (LAN) Modem... Diskettenlaufwerk CD Festplatte Magnetband... 2

Von Neumann sche Maschine // von Neumann Zyklus pc = 0; do { instruction=memory[pc++]; decode(intruction); fetch (operands); execute; store(results); } while (intruction!=halt); Erster General Purpose Computer ENIAC 20 Register 18000 Röhren Integration von Daten- und Programmspeicher Adressierbarer Speicher 3

Programmierbeispiel mit Text A L U M A R MEMORY Registersatz (file) zum schnellen Zugriff auf Daten Häufig gebrauchte Daten werden in Registern gehalten Versteht nur Maschinen- Code REGISTER FILE M D R Instruktionen mit 2 oder 3 Operanden: Instr <dest>, <source> PC IR ALU PC Arithmetic Logic Unit Program Counter MAR Memory Address Register MDR Memory Data Register z.b: add %r2, %r3 (x86) Instr <source1>, <source2>, <dest> z.b: sub %r2, %r3, %r2 (SPARC) IR Instruction Register 4

Systemumgebung - Software Anwendungen (Applications) Windowssysteme Betriebssysteme Web Browser, Text-Editoren, Compilers XFree, XWindows, MS Windows... UNIX, Linux, MS Windows 2000/XP Hardware 5

Programmieren Erzeugen einer Folge von Anweisungen (Instruktionen), die von der CPU eines Computers ausgeführt werden können Programm muss im Maschinencode vorliegen Es wird ebenfalls im Memory der Maschine gespeichert Es wird Instruktion für Instruktion aus dem Speicher genommen und von der CPU interpretiert CPU Register halten Programmadresse (PC) und Daten Wir können auf verschiedenen Abstraktionsebenen programmieren 6

Programmieren Wir können auf verschiedenen Ebenen programmieren Maschinen-Level mit 0 und 1 Assembler-Level mov %r1, %r2 Hochsprachen-Level while (TRUE) fork(); Programme werden heute hauptsächlich in höheren Programmiersprachen geschrieben Wir unterscheiden Prozedurale: C, FORTRAN, COBOL, PASCAL, MODULA,... Objektorientierte: C++, Java, Eiffel, SMALLTALK,... Funktionsorientierte: LISP, Logische: PROLOG,... 7

Programmieren Editor Compiler Quellcode schreiben Compilieren Text- datei Objekt- datei Nein Fehler Ja Debuggen Debugger Linker Linken Execu- table Execu- table Nein Fehler Ja Testen Ja Fehler Nein Okay! 8

Programmierbeispiel mit Text /* Testprogramm: */ Berechnung der Fläche eines Dreiecks #include <iostream.h> int main() { } int hoehe = 3; int grundseite = 5; double flaeche = hoehe * grundseite * 0.5; cout<< Fläche: <<flaeche<< \n ; return 0; Programmtext (source code) besitzt einen formalen Aufbau, die Syntaxstruktur Syntax ist von Sprache zu Sprache verschieden Beispiel: If (<Bedingung>) <Anweisung_1>; else <Anweisung_2>; 9

Programmierbeispiel mit Text Compilezeitfehler sind Fehler, die der Compiler finden kann, wie z.b. Typumwandlungen: char c Compilezeitfehler string s string s; //Eine Zeichenkette char c; //Ein Zeichen c = s; //Compiler reklamiert int A[6] Laufzeitfehler 10 Laufzeitfehler sind Fehler die erst erscheinen, wenn das Programm läuft (z.b. Division durch Null oder Array Überlauf) Laufzeitfehler sind nicht immer einfach zu finden! Testen kann keine Fehlerfreiheit beweisen

Programmierfehler Compilezeitfehler Syntaxfehler werden vom Compiler gemeldet Linkerfehler auf fehlende Objektdateien oder Bibliotheken zurückzuführen Laufzeitfehler: semantische/logische Fehler werden nur durch Testen und Analysieren des lauffähigen Programms entdeckt Laufzeitfehler sind teuer : Wenig Unterstützung seitens des Rechners Kosten für Benutzer des fehlerhaften Programms Qualität und Umfang der Tests sind entscheidend! 11

Der Compiler andere Programmteile Bibliotheken dynamische Bibliotheken *.cpp *.s *.o Quellprogramm Compiler Ziel-Assemblerprogramm Assembler verschiebbarer Maschinencode Linker ausführbarer Maschinencode Lader / Binder Speicherbereich mit dem ausführbaren Programm Quellprogramm in Hochsprache muss in Maschinencode übersetzt werden Hierzu dienen Interpreter oder Compiler Interpreter übersetzen während der Programmausführung (z.b. UNIX shell-scripts) Compiler übersetzen das Programm vorab (MS Visual C++) 12

Der Compiler Compiler übersetzt den Quellcode (source code) zunächst in Assembler-Code Im Speicher noch verschiebbarer Maschinencode Hat eine symbolische Repräsentation Assembler übersetzt Assembler-Code in Maschinen-Code Linker bindet noch notwendige Module mit an Können vorab übersetzte Bibliotheken sein Liegen bereits im Maschinen-Code vor Loader lädt den Maschinen-Code zur Ausführung in den Hauptspeicher Kann zur Laufzeit weitere Module anbinden (dynamic link, dll s) 13

Beispiel - Assembler Assembler-Programm (z.b. Sparc): // q.c int max(i,j) int i,j; { if (i<j) return j; else return i; } C-Codefragment zur Berechnung des Maximums zweier Zahlen $ g++ S q.c Übung1 14

Beispiel - Assembler Symbolischer Assembler-Code mit CPU-Instruktionen.file "q.c".global max.type max,#function max: mov %o0,%g2 mov %o1,%o0 cmp %g2,%o0 bge,a.ll2 mov %g2,%o0.ll2: retl nop.ident "GCC: (GNU) 2.7.2" 15

Beispiel - Assembler $ g++ o q q.s main.c $ gdb q (gdb) disas max 0x106b8 <max>: 0x84100008 mov %o0, %g2 0x106bc <max+4>: 0x90100009 mov %o1, %o0 0x106c0 <max+8>: 0x80a08008 cmp %g2, %o0 0x106c4 <max+12>: 0x36800002 bge,a 0x106cc 0x106c8 <max+16>: 0x90100002 mov %g2, %o0 0x106cc <max+20>: 0x81c3e008 retl 0x106d0 <max+24>: 0x01000000 nop Wir erhalten einen Ausdruck des Programmspeichers mit Maschinencode und disassemblierten Instruktionen 16 Übung1

Der Compiler nochmals im Detail position := initial + rate * 60; lexikalische Analyse id 1 := id 2 + id 3 * 60 syntaktische Analyse semantische Analyse := id 1 + id 2 * id 3 inttoreal 60 Zwischencode-Erzeugung temp1 := inttoreal(60) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3 Lexikalische Analyse: Namen von Zeichen werden ersetzt, Eindeutigkeit geprüft Syntaktische Analyse: Sprachsyntax wird geprüft Semantische Analyse: Positionen von Zeichen bestimmen den Sinn des Ausdruckes (rechts-links) Zwischencode: Oft wird ein maschinenunabhängiger Zwischencode erzeugt 17

Der Compiler nochmals im Detail Code-Optimierung temp1 := id3 * 60.0 id1 := id2 + temp1 Code-Generierung MOVF MULF MOVF ADDF MOVF Assemblierung 3c5f3ead fe004ca3 3c5e2278 9e002c5f 3c5a9d2f id3, R2 #60.0, R2 id2, R1 R2, R1 R1, id1 Code-Optimierungen: Unnötiges Speichern Eliminieren, Umsortieren von Instruktionen, Register-Allokation Code-Generierung: Es wird Assembler-Code erzeugt (s-flag bei gcc) Assemblierung: Maschinen-Code Erzeugung 18

Lebenszyklus eines Programmes Voraussetzungen Programmdesign Programmieren Spezifizieren Testen Debugging Revidieren Pflege Produkt 19

Warum C, C++? C ist historisch eng mit der Entwicklung von UNIX verknüpft Ersetzt Assembler auf Systemprogrammierebene (I/O, Betriebssystem, HW-Treiber, Micorcontroller) Mehrzahl kommerzieller Anwendungspakete sowie Systemsoftware ist in C oder C++ geschrieben Als plattformunabhängige Sprache etabliert C++ ist mittlerweile die praktisch bedeutendste Programmiersprache C++ erlaubt sowohl prozedurale, als auch objektorientierte Programmierung C++ ist sehr mächtig Obermenge von C 20

Historische Entwicklung BCPL (Richards 1967, typenlos) B (Thompson 1970, typenlos) C (Ritchie 1971, typisiert) ANSI C (1983-1987, Standardisierung) C++ (Stroustrup 1986, Klassen und OO) 1990-1998 Final Standard ISO/ANSI C++ entwickelt sich noch immer 21

Der Prozessor 22