• Nenhum resultado encontrado

Einführung in die Informatik 1 und 2 - Vorlesungsskript

N/A
N/A
Protected

Academic year: 2023

Share "Einführung in die Informatik 1 und 2 - Vorlesungsskript"

Copied!
407
0
0

Texto

Sie können sogar mit dem Üben im Unterricht mit 5-Minuten-Aufgaben beginnen. Sie werden feststellen, dass die als „einfach“ und meist auch „mittel“ eingestuften Aufgaben mit der Vorbereitung im Tutorium mit einiger Mühe bewältigt werden können.

Bits und Bytes

Bits

Bytes

Kodieren von Information

  • Kodierung von Zahlen
  • Kodierung von Texten
  • Kodierung von Bildern
  • Kodierung von Filmen

ISO 10646 Es verwendet etwa 21 Bit, was für alle Zeichen ausreicht, die jemals verwendet wurden und irgendwann in der Zukunft verwendet werden. Idee: Investieren Sie ein Byte für den roten Teil eines Pixels, ein Byte für den blauen Teil und ein Byte für den grünen Teil.

Datenkompression

Sie möchten den Film in höchstmöglicher Qualität auf CD und DVD speichern. Denn sie begleiten uns ständig in unserem Alltag, meist ohne dass wir sie bemerken – die Probleme beginnen meist dann, wenn wir sie bemerken.

Arten von Computern

Was ist ein Computer?

Klassifikation von Computern

Aufbau von Computern

  • Die CPU
  • Der Hauptspeicher
  • Die Festplatte
  • Der Graphikprozessor

Früher benötigte die CPU oft mehrere Zyklen für einen Befehl, heute kann sie mehrere Befehle pro Zyklus verarbeiten. Im Gegensatz zum Hauptspeicher behält er seinen Inhalt auch ohne Strom, kann aber deutlich mehr speichern als der Hauptspeicher (etwa Faktor 100 bis 1000).

Aufbau von Software

  • Schicht 1: BIOS
  • Schicht 2: Betriebssystem
  • Schicht 3: Graphische Oberfläche
  • Schicht 4: Anwendungen

2.000.000 Zur Anwendung wechseln, auf die geklickt wurde. 2.050.000 Die Anwendung schaut sich ihre Warteschlange an. 2.051.000 Die Anwendung beginnt mit der Ausführung von Anweisungen. Schalten Sie nun den Computer wieder aus und entfernen Sie alle Kabel, insbesondere das Netzteil.

Einführung

Was ist ein Betriebssystem?

Welche Betriebssysteme gibt es?

Ressourcen

  • Druckauftragsverwaltung
  • Dateiverwaltung
  • Nutzerverwaltung
  • Prozessverwaltung

Die Folge von (Unter-)Ordnernamen, die zu einer Datei führen, wird als absoluter Pfad bezeichnet. Fehlt diese Berechtigung für ein Verzeichnis, kann es nicht in einem Dateipfad verwendet werden („kann nicht geändert werden“).

Aufbau von Betriebssystemen

Schon wieder Schichten

Untere Schicht: Treiber

Obere Schicht: Shells, Systemaufrufe

Geben Sie die Befehle cat /proc/cpuinfoundcat /proc/meminfo (einen nach dem anderen) ein, um den Inhalt der Dateien /proc/cpuinfound/proc/meminfo anzuzeigen. Sehen Sie sich die Berechtigungen anderer Dateien und Ordner in Ihrem Home-Ordner an.

Einführung zu Shells

Unix-Shell-Befehle

Dateiverwaltung

Der Befehl übernimmt die Namen mehrerer Dateien als Parameter und verkettet deren Inhalte. Der Befehl löscht die als Parameter übergebenen Dateien unwiderruflich. Allerdings werden weder Verzeichnisse noch Dateien in Unterverzeichnissen rekursiv gelöscht.

Rechteverwaltung

Dazu ist der erste Parameter der alte Dateiname und der zweite Parameter der neue Name (der neue . „Speicherort“).

Nützliche Befehle

Parameter sind ein regulärer Ausdruck und Dateinamen, die Ausgabe sind alle Zeilen in den Dateien, in denen der reguläre Ausdruck vorkommt.

Unix-Shell-Programmierung

Um- und Weiterleitung

Shell-Skripte

Schreiben Sie ein double.bash-Shell-Skript, das den Inhalt einer als Parameter übergebenen Textdatei kopiert. Schreiben Sie ein Shell-Skript, das die Zeile einer Person auswählt, die als Parameter aus filenumbers.txt übergeben wurde.

L A TEX

Inhalt – Struktur – Form

  • Drei Sichten auf einen Text
  • Beschreibungssprachen
  • Das Beispiel L A TEX

Gliederung von Dokumenten in L A TEX

  • Dokumentklassen
  • Die Präambel
  • Abschnitte und Paragraphen
  • Umgebungen

Sie sollten Ihre Texte immer in Unicode kodieren und müssen daher hier die Option utf8(Unicode) angeben. Der Umbruch hier hat keine Auswirkung, das Wort „'here“‘ wird wahrscheinlich in derselben Zeile wie „‘break“‘ im endgültigen Dokument stehen.

Typographisches und Graphiken in L A TEX

  • Schriftarten
  • Tabellen
  • Mathematik
  • Graphiken

Vorträge erstellen in L A TEX

Natürlich hat der HTML-Quellcode nicht die gleiche lyrische Qualität wie beispielsweise „Faust“, aber mit etwas Übung ist es möglich, eigene Texte in dieser Sprache zu schreiben. Dies bedeutet nicht, dass Sie immer einfach jeden HTML-Quellcode lesen können, beispielsweise die bunt geschriebene Kolumne Ihrer vertrauenswürdigen Tageszeitung.

HTML

  • Einführung
  • Aufbau von HTML-Seiten
  • Aufbau von Tags
  • Einführung
  • Vergleich mit HTML
  • Wohlgeformte Texte

Geben Sie den Originalquelltext der HTML-Seite ein, die die Liste der Links zur deutschen, englischen und französischen Wikipedia enthält. Schreiben Sie einen Analysis.bash-Shell-Skriptfehler, der die Anzahl der Fehler in der als Parameter übergebenen XML-Datei ausgibt. In der nächsten Vorlesung erfahren Sie, dass das for-Loop-Konzept sowohl in Shell-Skripten als auch in Java existiert, allerdings mit einer etwas anderen Syntax.

Algorithmen

  • Die Geschichte des Begriffs
  • Die Definition des Begriffs
  • Der Aufbau von Algorithmen – Steuerungsanweisungen

Dies geht auf ein berühmtes, sehr altes Werk von Dijkstra mit dem Titel „Considering Harmful“ zurück. Die „Rettung“ des Spaghetti-Codes erfolgte in Form einer sogenannten strukturierten Programmierung, was im Grunde nur bedeutet, dass wir heute keine Sprünge verwenden und stattdessen alles mit Schleifen und Alternativen erledigen. Tatsächlich war Dijkstras Artikel so einflussreich, dass viele Programmiersprachen heute überhaupt keine Sprünge mehr haben.

Spezifikationen

Programmiersprachen

  • Wozu dienen Programmiersprachen?
  • Übersetzer

In einer Programmiersprache kann ein Algorithmus so formuliert werden, dass ein Computer ihn verstehen kann. Und wenn er gerade aufgewärmt ist, die Ventilatoren laufen und sein Herzschlag bei 4 GHz liegt, macht ihm eine Endlosschleife den Garaus. Verglichen mit der Strenge, mit der man Programmieraufträge formulieren muss, ist jede Steuererklärung ein anarchisches Pamphlet.

Arten von Programmiersprachen

Berechnungen

  • Variablen
  • Ausdrücke
  • Zuweisungen

Steuerungsanweisungen

  • Komposition
  • Alternativen
  • While-Schleife

Stellen Sie einen Pseudocode-Algorithmus bereit, der den Kontostand nach der in der Variablen „Jahre“ gespeicherten Anzahl von Jahren berechnet. Stellen Sie einen Pseudocode-Algorithmus bereit, der den Kontostand nach der in der Variablen „Jahre“ gespeicherten Anzahl von Jahren berechnet. Geben Sie einen Algorithmus an, der die Anzahl der Tage in diesem Monat berechnet (Rückgabe 28 für Februar).

Überblick über Java

Die Java-Syntax

  • Vom Algorithmus zum Programm
  • Bezeichner
  • Zahlen, Ausdrücke, Zuweisungen
  • Variablendeklaration
  • Formatierung und Kommentare

Eine Zuweisung wie a←b wird verwendet, um einer Variablen einen neuen Wert zu geben, nämlich den Wert eines Ausdrucks b. Damit der Compiler weiß, wie viel Speicher er reservieren muss, müssen Variablen vor ihrer Verwendung deklariert werden.

Java-Übersetzer

  • Übersetzerkonzept bei Java
  • Übersetzung in BlueJ und Eclipse

Ändern Sie nun die Zahlen im Programm, kompilieren Sie das Programm erneut und prüfen Sie, was passiert, wenn Sie das Programm ausführen. Kehren Sie nun zur Projektansicht zurück (wo Sie die Klasse als kleines Rechteck sehen können) und klicken Sie mit der rechten Maustaste auf die Klasse. Erstellen Sie wie in den beiden vorherigen Aufgaben ein neues Projekt oder eine neue Datei.

Steuerungsanweisungen

  • If-Then-Else
  • While-Schleife
  • For-Schleife

Wenn die Bedingung wahr ist, wird der Körper ausgewertet, dann erneut die Bedingung, dann erneut der Körper und so weiter.

Datentypen

  • Der Begriff des Typs
  • Die Nutzen von Typen
  • Arten von Typen
  • Javas Datentypen

Typisierung

  • Typisierung von Variablen
  • Typisierung von Ausdrücken
  • Typfehler

Ändern oder erweitern Sie das Programm aus Übung 10.7 so, dass es prüft, ob eine Zahl eine Primzahl ist. Das ist in Java ganz einfach: Zeichenketten beginnen und enden mit doppelten vertikalen Anführungszeichen ("). Wie in fast allen anderen Programmiersprachen ist auch in Java die Verarbeitung von Zeichenketten privilegiert.

Zeichenketten

  • Der Begriff der Zeichenkette
  • Der Datentyp String
  • Die Datenstruktur String

Algorithmen auf Zeichenketten

  • Umdrehen
  • Trimmen
  • Naives Suchen
  • Intelligentes Suchen

Arrays kennen Sie bereits, auch wenn Ihnen noch niemand davon erzählt hat: Was Sie in der Mathematik als Vektor kennengelernt haben, ist aus Informatiksicht ein Array von Zahlen. Was Sie in der Mathematik als Matrix kennengelernt haben, ist aus Sicht der Informatik ein zweidimensionales Array von Zahlen, genauer gesagt ein Array von Arrays von Zahlen. Nehmen wir in der Mathematik an, dass die dritte Komponente eines Vektors x normalerweise mit x3 bezeichnet wird.

Benutzung von Arrays

  • Einführung
  • Array-Typen
  • Erzeugung von Arrays
  • Zugriff auf Arrays
  • Algorithmen auf Arrays

Bei jedem Typtyp ist type[] der Typ eines Arrays von Typwerten. Um die Größe eines Arrays zu ändern, müssen Sie ein neues Array mit der gewünschten Größe erstellen und dann die Elemente aus dem alten Array in das neue Array kopieren.

Speicherung von Arrays

  • Verweistypen
  • Zuweisung und Vergleich von Verweistypen

Ändern Sie den Code der folgenden Methode so, dass die Häufigkeit der Nukleotide berechnet und in Form des beschriebenen Arrays zurückgegeben wird. Als Emder Bürgermeister konnte Althusius auch seine Theorien einer möglichst großen Autonomie aller Zwischenfälle zwischen Individuum und Staat in die Tat umsetzen. Eine klassische Formulierung des Subsidiaritätsprinzips findet sich in der Sozialenzyklika Quadragesimo anno von Papst Pius XI.

Problem: Variablennamen

  • Name-Clashing
  • Verwendungsdauer

Nun, das Subsidiaritätsprinzip bedeutet für die Informatik: Probleme dort lösen, wo sie entstehen und nicht auf einer höheren Ebene.

Lösung: Scoping

  • Der Begriff des Scopes
  • Gültigkeit von Variablen
  • Sichtbarkeit von Variablen
  • Speicherung von Variablen

Eine Variable kann in einem Bereich nur einmal deklariert werden; Allerdings können „Unterbereiche“ Variablen „lokal“ neu deklarieren. Da die Wochentage für die Bestimmung des eigenen Schicksals so wichtig sind, möchte man an verschiedenen Stellen im Programm immer die Wochentage für bestimmte Daten in einem Horoskopgenerator berechnen. Es wäre sehr unangenehm, wenn Sie den Programmtext immer wieder an den verschiedenen Stellen im Programm einfügen müssten: Das würde viel Papierkram verursachen und das Programm sehr lang machen.

Sich wiederholender Code

  • Das Problem
  • Die Lösung

Methoden in Java

  • Die Syntax im Überblick
  • Syntax: Methodenname
  • Syntax: Parameter
  • Syntax: Rückgabetyp
  • Syntax: Aufruf

Da wir nun wissen, dass die Verwendung von Math.cos(0.5) in Java uns den Kosinus von 0,5 liefert, müssen wir uns keine Gedanken mehr darüber machen, wie Java das genau macht. Mit der in der vorherigen Übung entwickelten Methode können möglicherweise mutierte DNA-Fragmente (z. B. PCR-Produkte) mit längeren Sequenzen verglichen werden. Schreiben Sie eine boolesche Methode isMoreCG(String s), die das Vorkommen von „C“ und „G“ in einer in einem Strings gespeicherten DNA-Sequenz und mit dem Vorkommen von „A“ zählt.

Die Problemstellung

Lineare Suche

  • Idee
  • Implementation
  • Laufzeit
  • Anwendung

Binäre Suche

  • Idee
  • Implementation
  • Laufzeit
  • Vorsortierung

Wie im letzten Kapitel getan, kann man damit auskommen, ständig die Daten im Speicher zu durchsuchen. Das Aufräumen lohnt sich nur dann, wenn Sie in den nächsten Tagen ständig auf der Suche nach verschiedenen Dingen sind. Wenn Sie die Daten jedoch immer wieder durchsuchen möchten, empfiehlt sich eine Vorsortierung.

Die Problemstellung

  • Motivation
  • Problemvarianten

Sortieralgorithmen

  • Bubble-Sort
  • Selection-Sort
  • Insertion-Sort

Wir suchen also zunächst das kleinste Element im Array und verschieben es an die erste Position. Im nächsten Teil suchen wir erneut nach dem kleinsten und ändern ihn auf den zweiten Platz und so weiter. In diesem Kapitel finden Sie eine kleine Einführung in die Theorie der Geschwindigkeit von Algorithmen.

Die Laufzeit von Programmen

  • Welches Verfahren ist schneller?
  • Laufzeitbestimmung I

O-Klassen

  • Idee
  • Definition
  • Laufzeitbestimmung II

Einfache und schwierige Probleme

  • Einfache Probleme
  • Schwierige Probleme

Die folgende Java-Methode berechnet anhand einer Liste von mBitstrings mit einer Länge die maximale Hamming-Distanz für Paare von Bitstrings aus der Liste. Überprüfen Sie experimentell die Laufzeit der Methode aus der vorherigen Übung als Funktion der Parameter und m. Die Hauptmethode generiert eine zufällig generierte Liste von Zeichenfolgen für die Länge und Anzahl der gelesenen Zeichenfolgen und berechnet dann die maximale Hamming-Distanz für die Liste.

Rekursion

  • Der Begriff
  • Java-Syntax der Rekursion

Beispiele

  • Fakultät
  • Fibbonacci-Zahlen
  • Die Türme von Hanoi
  • Binäre Suche
  • Tic-Tac-Toe
  • Schach

Schreiben Sie eine rekursive Java-Methode, die anhand einer gegebenen Anzahl von Kieselsteinen bestimmt, ob das Problem lösbar ist oder nicht. Schreiben Sie die folgende Methode rekursiv um, die den Hamming-Abstand zweier Strings berechnet (die Anzahl der Stellen, an denen sie sich unterscheiden). Schreiben Sie die folgende Methode rekursiv um, die testet, ob alle Zahlen in einem Array positiv sind.

Wozu schnelleres Sortieren?

Merge-Sort

  • Idee
  • Implementation
  • Analyse

Quick-Sort

  • Idee
  • Implementation
  • Analyse
  • Idee
  • Implementation
  • Analyse

Leider ist unklar, wie viele Rekursionsebenen es gibt: Es hängt davon ab, wie nahe der Pivot am Mittelwert liegt. Geben Sie für jeden Aufruf das Rotationselement sowie die linke und rechte Grenze der zu sortierenden Teilmenge an. Wenn das mittlere Element als Pivot-Element ausgewählt wird, wie lautet der Inhalt des Arrays, bevor die rekursiven Aufrufe ausgeführt werden?

Modularisierung von Software

  • Probleme im Großen
  • Motivierende Problemstellung
  • Modularisierungsebenen
  • Softwareentwurf

Klassen

  • Der Begriff der Klasse
  • Java-Syntax von Klassen
  • Benutzung von Klassen
  • Zugriffsrechte

Eine Klasse wird mit der Klasse gefolgt von ihrem Namen eingeleitet. Der Name ist wie immer eine Java-Kennung. Aber wie können Sie Methoden verwenden, wenn sie außerhalb des Gültigkeitsbereichs nicht sichtbar sind?

Pakete

  • Der Begriff des Pakets
  • Java-Syntax für Pakete
  • Benutzung von Paketen

Einige Bereiche (Klassen, Pakete) sind benannt und können von außen geöffnet werden. Die Syntax lautet immer Bereichsname.ding_in_Scope.

Klassen von Objekten

  • Was sind Objekte?
  • Begriff der Klasse
  • Syntax von Klassen

Lebenszyklus von Objekten

  • Erzeugung (Geburt)
  • Zugriff
  • Veränderung
  • Vernichtung (Tod)

Objekthierarchien

  • Objekte als Attribute
  • Beispiel: Der Zellkern
  • Beispiel: Knöpfe

Farbe text_color; // Ein weiterer Verweis auf das Objekt // (vielleicht sogar dasselbe // aber besser nicht..). Geben Sie den Code erneut ein, um ein gleichseitiges Dreieck in der Größe Ihrer Wahl zu erstellen. Die Idee ist folgende: Sie können ein Objekt auffordern, „etwas zu tun“, indem Sie ihm eine Nachricht senden.

Einführung zu Nachrichten

Syntax von Nachrichten

  • Verschicken
  • Verarbeiten

Referências

Documentos relacionados

El tercer artículo publicado es de Geraldo Scramin Neto y Jussa- ra Suzi Assis Borges Nasser Ferreira, intitulado “Revisión contractual y función social”. El cuarto artículo,