Digitalisierung

Eine analoge, etwa Sinus - förmige Kurve wird mit einem engmaschigen Raster überzogen.
Leere Quadrate des Rasters werden eine 0. Der Verlauf der Kurve hebt sich so durch eine
sinusförmige Gruppierung von Einsen hervor.

Vorteile der Digitalisierung 0 / 1:


Präzision
Fehlerausschluß
Unabhängigkeit von der Signalart, bzw. Informationsquelle
Digitalrechner können diese Darstellung verarbeiten
Einheitliche Verarbeitung
Datenkomprimierung
Eine Verschlüsselung kann leichter durchgeführt werden, während unautorisierte Decodierung nur mit
sehr großem Aufwand möglich ist
Beliebige Genauigkeit
Übertragbarkeit
Speicherbarkeit von Schrift
Robuste Übertragung
Bsp.: frühe Telegraphen, wie das militärische Winkhäuschen mit Holzarmen, das im 18. Jhd auf dem
Kölner Dom stand, das Morse - Alphabet, Hollerith Karten, Lochkarten, Steuerung mechanischer Klaviere mit Lochkarten. So konnte Klaviermusik des Virtuosen Ferrucio Busoni (1866 - 1924) mit Hilfe der von ihm erstellten Lochkarten auf moderne Steinway Flügel übertragen werden.
Im 18. Jhd entstanden auch erste "Datenbanken" der Heraldiker. Dabei handelte es sich um Karten aus
Karton, in die ringsum Löcher gestanzt waren, die nach einer bestimmten Vorschrift teilweise bis zum Rand durchtrennt wurden, um so etwa das Fehlen der Lilie bei einem Wappen anzuzeigen. Hatte man nun etwa 200 dieser Karten, die Wappen von 200 adeligen Familien symbolisierend, so konnte man durch das Durchstechen der Karten mit langen Nadeln an bestimmten Stellen und Hochheben ein frühes "select * from ..." absetzen, da nur die Karten mit einer bestimmten Eigenschaft unten blieben, beziehungsweise hochgezogen wurden.
Man nimmt an, das binäre Rechnen stamme von Gottfried Wilhelm Leibniz(1646 -1716).
Die Reduktion aller sonst komplexeren Ausdrücke auf eine Ja - Nein Entscheidung kommt zumindest in
Europa unserer Entscheidungslogik sehr entgegen.
Auf dem Keyboard ist eine Taste gedrückt oder nicht gedrückt. Der Begriff "Wort" bezeichnet die Busbreite, das ist genau die Anzahl der Bits, die innerhalb eines
Rechners gleichzeitig weitergereicht werden können. Früher war ein Wort auf einem PC 16 bit groß und auf einem Mainframe(Großrechner) 32 bit. Heute ist es auf einem PC 32 bit groß, während ein Alpha Rechner, auf dem z.B. das Unix - Derivat Open VMS 7.0 als Betriebssystem läuft, bereits 64 bit breite Wörter verarbeitet.

Kleinstkomponenten der Rechnerarchitektur - Schaltgatter

Und - Gatter Oder - Gatter Negations - Gatter/digitaler Inverter 1 Durch Kombinationen der Gatter entstehen verschiedene Funktionen.
Eine Rückkoppelung von Oder - Gattern und Invertern nennt man R/S - Flip/Flop(Reset/Set).
Dieser wird zum Speichern innerhalb der Prozessoren verwendet und zwar besonders im L1 - Cache, da dieser im Gegensatz zum L2 - Cache besonders schnell sein muss.
0 0 ändert sich nicht
0 1 "1" geschaltet
1 0 "0" geschaltet
1 1 verboten, da eine Endlosschleife entsteht
Bei den Schaltgattern handelt sich um technische Realisierungen, der von George Boole(1815 - 1864)
begründeten Booleschen Algebra. Diese wird auch Boolescher Verband oder Aussagenlogik genannt. Sie beschäftigt sich mit und / oder / nicht - Verknüpfungen, wenn - dann - Aussagen und Tautologien. Außerhalb der Tatsache, dass sie das logische Fundament der Computertechnik ist, wird Boolesche Algebra auch für mathematische Beweise benutzt.
Typisch sind etwa Tabellen wie die Folgende, um die Und - Verknüpfung zweier Teile, A und B auf
wahr(1) oder falsch(0) zu prüfen:
A   B   A&B
0    0    0
1    0    0
0    1    0
1    1    1

Kleines Intermezzo über Viren

Ein Virus ist ein Programm, das sich Im Bootsektor von Disketten, dem Master Boot Record(MBR) der Festplatte oder in Makros, Mails, dem Arbeitsspeicher usw. festsetzen kann, um sich dann als selbstreproduzierender Parasit zu vermehren. Viren "schlafen" oft bis zu einem bestimmten Datum. Der von einem Virus verursachte Schaden reicht von einem DOS Fenster, das sich nicht mehr schließen lässt und ständig wiederholt "Hast du mich lieb?" bis zu massiven Schäden u.U. sogar an der Hardware, an der Software sowieso. Man sollte besonders wenn man oft im Internet ist immer einen aktuellen Virenscanner installiert haben. Einen immer aktuellen gratis Virenscanner gibt es unter

http://www.free-av.com

Darstellung von Zeichen

Ein Standard für die Darstellung von Zeichen ist der 28 große American Standard Code for Information Interchange, kurz ASCII. Er enthält 255 verschiedene Zeichen

(8 bit), das sind:

- Buchstaben (groß, klein) - Ziffern (0 - 9) - Sonderzeichen (, . ; ?, %, $, § usw.) - Mathematische Operatoren (+ - * / %[Modulo]) - Nationale Zeichen (ä, ö , ü, ß, ç, Ø, ë usw.) - Steuerzeichen (BS-backspace, BEL-bell, LF-linefeed, CR-carriage return, EOF-end of file, EOB-end of block, sync-synchronize, nak-negative acknoledgement, ak-acknowledgement).

ASCII ist Blockcode, d.h. alle Zeichen sind gleich lang, nämlich 8 bit - pro Ziffer 8 bit und pro Dezimalpunkt 8 bit, also ein Byte pro Zeichen, da jedes der Zeichen für sich die Möglichkeit enthält, sich in jedes der anderen 254 Zeichen zu verwandeln.

Man erhält ASCII-Zeichen in Windows, indem man bei gedrückter
Taste deren numerischen Wert auf dem Nummernblock eingibt.
Mit den normalen Zahlen geht es nicht.
10 ist z.B. newline

Darstellungsarten von Zahlen

Besonders bedeutsam für die Darstellung von Zahlen bezogen auf Computer sind das Binärrechnen, sowie der Oktal - und der Hexadezimal Code. Es gibt außerdem eine Mischform, die sich BCD, für Binary Code Decimal nennt. Statt die Binärzahl mit ihren Stellenüberläufen fortlaufend darzustellen, stellt BCD jeweils eine Dezimalstelle durch 4 Bit dar.

BCD

0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001

Die 17 wird z.B. mit getrennter Zehner- und Einer-Ziffer in BCD wie folgt dargestellt:
0001 | 0111

. Da die Wortbreite sich auf moderneren PCs auf 32 bit erhöht hat, belegt nun eine Integer - Variable auch 32 bit.
In unserer Dezimalschreibweise multipliziert man die Einerstelle mit 100, die Zehnerstelle mit 101, die Hunderter mit 10², Tausender mit 10³, usw. Entsprechend stellt in der Binärschreibweise die erste Stelle 20 dar, die zweite 21, die dritte 2², die vierte 2³ usw.
Bei Nachkommastellen entspricht die erste 2-1 = ½, die zweite 2-2 = ¼, die dritte 2-3 = 0.125 usw.
Die 2B-1 - Komplementdarstellung bzw. 2Bit Komplementdarstellung
Jede binäre Zahl enthält ein Vorzeichenbit. Es ist das erste von Links, bzw, letzte von rechts.
+17 sieht dann so aus: 0 | 0..........010001.
Wenn nun -17 daraus wird, dreht sich jedes Bit in sein Gegenteil, das wäre für -17
nicht so wie erwartet 1 | 0...........010001, sondern 1 | 1............101110 ,
dazu muss noch eine 1 gezählt werden, sodass sich eine
1 | 1.........101111 ergibt.
Binary Code Decimal nennt. Statt die Binärzahl mit ihren Stellenüberläufen fortlaufend darzustellen, stellt BCD jeweils eine Dezimalstelle durch 4 Bit dar. Bei einer Änderung des Vorzeichens einer Zahl im Binärcode muss man also immer das Komplement +1 bilden.

Größen von Variablen

Die Größen von Variablen unterschiedlichen Typs und damit ihr maximales numerisches Fassungsvermögen sind in der C bzw. C++ Header Datei limits.h festgelegt. Auszug aus limits.h:
/* Minimum and maximum values a `signed short int' can hold. */
#define SHRT_MIN (-32768)
#define SHRT_MAX 32767
/* Maximum value an `unsigned short int' can hold. (Minimum is 0). */
#define USHRT_MAX 65535
/* Minimum and maximum values a `signed int' can hold. */
#define __INT_MAX__ 2147483647
#define INT_MIN (-INT_MAX-1)
#define INT_MAX __INT_MAX__
Umwandlung der Dezimalzahl 33 in eine Binärzahl nach dem Greedy - Algorithmus
Von oben nach unten wird immer, wenn möglich, etwas abgezogen:
         33
2hoch6     64     0
2hoch5     32     1
2hoch4     16     0
2hoch3     8     0
2hoch2     4     0
2hoch1     2     0
2hoch0     1     1


also: 33 = 0100001

Oktalzahlen

Um Binärcode in seine oktale Schreibweise umzuwandeln, bildet man aus der Binärzahl jeweils 3er - Gruppen:

Aus 111 111 111 würde oktal 777, aus 000 100 000 würde 040.
dez     bin     okt     hex
0     0000     0     0
1     0001     1     1
2     0010     2     2
3     0011     3     3
4     0100     4     4
5     0101     5     5
6     0110     6     6
7     0111     7     7
8     1000     10     8
9     1001     11     9
10    1010     12     A
11    1011     13     B
12    1100     14     C
13    1101     15     D
14    1110     16     E
15    1111     17     F

16 Bit sind 216 - 1, darstellbar hex ffff, bin 1111111111111111(also 16 Einser), dezimal 65535.

Vorteile bei der Verwendung von Integer - Variablen

Das System stimmt immer, d.h. int *,+, oder - int ist immer noch int. Jede Zahl innerhalb des in limits.h festgelegten Intervalls ist darstellbar. Es gibt keine Rundungsfehler. Es gibt immer eine größte darstellbare Zahl. Jede Zahl, die darüberliegt, braucht mehrere Variablen.

Gleitkomma - Standards

IEEE P754      floating point standard,
beruht auf binär System und gilt für PCs.
IBM Gleitkomma
beruht auf hexadezimal System. Beide Standards sind miteinander inkompatibel.

Der Problemlösungsvorgang als iterativer Prozess



PAP zur Umrechnung von Dezimal- in Binärzahlen

http://www.hardwaregrundlagen.de/

Bemerkungen zu "der Problemlösungsvorgang als iterativer Prozess"

1) Bei der Definition des Problems sollte man sehr vorsichtig sein, nicht zuviel zu versprechen. Optimismus ist an dieser Stelle fehl am
Platz. Noch ist nämlich nicht bekannt, ob das Problem überhaupt lösbar ist - und wenn es lösbar ist, wie umfangreich es ist - wieviel
Aufwand die Lösung erfordert. Also ist hier interner Pessimismus angesagt. Je nach Umfang der Aufgabe gibt es eine Machbarkeitsanalyse,
die mit Hilfe der Komplexitätstheorie an das Problem herangeht.

2) Ist die Lösung des Problems machbar mit den zur Verfügung stehenden Mitteln, so kommt es zum Vertrag mit dem Kunden. Intern plant man nun seine Ressourcen. Ein Vorführmodell(Prototyp) wird erstellt, das noch nicht funktioniert, sondern vielmehr dazu dient, grafische Details zum Erscheinungsbild des geplanten Programms mit dem Kunden abzusprechen.

3) Im Lösungsansatz erstellt man zunächst ein Grobkonzept. Dies kann auch schon vor dem Prototyp geschehen. Dann kommt man zum Feinkonzept. Generell nennt man den Lösungsansatz nach dem Durchlauf von Iterationen Lösungskorrektur oder Lösungsergänzung

4) Testverfahren:


a) black box - Test
Der Tester prüft das Programm aus Benutzersicht, hierzu gehören normale Werte, exotische Werte, besonders wertvoll sind Praxisdaten, die z.B. der Kunde zur Verfügung stellen könnte, um mögliche Fehler(bugs) des Programms abzufangen. Der Begriff "Bug" heißt wörtlich "Wanze" und kommt aus der Urzeit der Elektronik, wo es heißt, dass ein Insekt einen Fehler erzeugt haben soll, indem es mit seinem eigenen Körper einen Stromkreis geschlossen oder unterbrochen hat. Zu sehen ist diese Geschichte in dem Film "Brazil" von Terry Gilliam.

b) white box - Test
Diesen Test nennt man auch Debugging. Programmierumgebungen, wie MS VC++6 enthalten einen Debugger, in dem man Haltepunkte festlegen kann, an denen das Programm gestoppt wird, um entscheiden zu können, ob die richtigen Werte dort angekommen sind. "White Box" deshalb, weil während des gesamten Tests der Prüfer den Quellcode offen vor sich hat.

c) Papier und Bleistifttest
Dieser Test sollte chronologisch eigentlich am Anfang stehen. Man hat den Algorithmus vor sich, normalerweise auf Papier und überlegt sich, ob er dazu taugt, das Problem zu lösen.

Nach allen internen Testläufen kommt "der Augenblick der Wahrheit", nämlich

d) der Kundentest
Der Kunde bekommt das Programm. Hier werden oft Fehler gefunden. Das kommt daher, dass die Blickrichtigung des Programmierers, bzw. der Tester aus der Programmierabteilung, der eines Wissenschaftlers ähnelt, der sein eigenes Theorem beweisen will, statt es zu widerlegen.
Beim Kundentest gilt es, verkappte Auftragserweiterungen im Stil von "Hier könnte man noch..." tunlichst zu vermeiden. Wenn alles in Ordnung ist, könnte die Abnahme schon nach dem Kundentest erfolgen. Sonst heißt es "Gehe zurück zum Problemlösungsansatz". Es kann aber auch zu einer regulären Auftragswerweiterung kommen, die der Programmierer, oder seine Firma dann übernimmt, oder auch nicht. Auch die Auftragserweiterung fährt dann fort bei der Lösungserweiterung / Lösungsansatz, wobei ein neuer Ansatz in der Regel nicht nötig sein wird.

Beispiel

Der Kundenberater einer Bank, der Anlageberatung zu einem festen Zinssatz betreibt, wünscht sich ein Programm, das das Wachstum des Kapitals zu seinen Bedingungen im Laufe der Jahre mit Zinseszins ausrechnet, um Vergleiche mit anderen Anlageformen zu ermöglichen. Zerobond würde dabei bedeuten, dass es sich um eine garantierte Ausschüttung handelt, ohne dass vor Ablauf der Frist laufende Zinsen gutgeschrieben werden.
Das Problem muss möglichst sofort so weit wie möglich detailliert werden. Bei der Problemaufnahme sollte man selbst ein Beispiel rechnen, den Problemanfang bestimmen, klären, ob auch Nachzahlungen möglich sind, oder die Anlage nur am Anfang der Periode erfolgt. Das Problem muss in der Fachsprache des Kunden erörtert werden, und der Programmierer muss sich gegenüber den Fachspezifika des Kunden lernfähig zeigen, da er in der Regel nicht über den selben fachlichen Hintergrund wie der Kunde verfügt. Es geht also um Zinseszinsrechnung. Man sollte vom Kunden ein Rechnungsbeispiel erhalten. Durch hohe Detaillierung wird das Problem eingegerenzt, um gleich am Anfang zu vermeiden, dass das Problem irgendwelche unberücksichtigten Nebenaufgaben enthält und so ausufert. Die Eingabe wird also aus Zinssatz, Anfangskapital und Dauer bestehen. Die Bearbeitungsgebühren müssen in den Algorithmus mit einbezogen werden. Außerdem sind mit dem Kunden die Fragen nach der Hardwareumgebung, Betriebssystem usw. zu klären.

Man will z.B. auf dem Bildschirm ausgeben:

AKAP: 2000 Euro
Zins: 10%
Laufzeit: 3 Jahre

Dann ergibt sich:
1.Jahr: 2000.- * 10%------->200.-,
2.Jahr: 2200.- * 10%------->220.-,
3.Jahr: 2420.- * 10%------->242.-,
Ergebnis: 2662.-

zum Lösungsansatz
(das ist die Suche nach dem Algorithmus)
Voraussetzungen:
1) Zahlen (z.B. Taschenrechner) eingeben und ausgeben
2) Zeichenfolgen ein- und ausgeben, wie Buchstaben, Ziffern, Sonderzeichen (z.B. Tastatur)
3) Die Möglichkeit, eingegebene Daten in mit Namen benannten endlichen Speicherbereichen abzulegen
4) Die Möglichkeit, Zahlen zu addieren, subtrahieren, multiplizieren, usw.
5) Alle benutzten Speicherbereiche sind begrenzt
6) Durch Abfrage bestimmter Eigenschaften der Speicherbereiche kann über das weitere Vorgehen entschieden werden.

Zum Aufzeigen des Programmablaufes gibt es verschiedene Darstellungsarten, wovon hier drei verschiedene exemplarisch ausgewählt wurden:

1.) Pseudocode


Speicherbereiche: AKAP, ZINSSATZ, DAUER, LKAP, LJAHR, ZINSFUSS, ZINSEN
Kommentar: Bedeutung der einzelnen Speicherbereiche, bzw. Variablen
Zinssatz = 10%
Zinsfaktor = 0.1
einlesen (AKAP);
einlesen (ZINSSATZ);
ZINSFUSS = ZINSSATZ / 100;
einlesen (DAUER);
setze LJAHR = 0;
setze LKAP = AKAP;
(A) erhöhe LJAHR um 1; [LJAHR = LJAHR + 1]
setze ZINSEN = LKAP * ZINSFUSS;
LKAP = LKAP + ZINSEN;
ausgabe bildschirm (LJAHR, LKAP, ZINSEN);
Wenn (LJAHR != DAUER) Fortsetzung bei (A);
ENDE

2.) Programmablaufplan, PAP


3.) Nassi - Shneiderman Struktogramme


WEITER!