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.
Kleinstkomponenten der Rechnerarchitektur - Schaltgatter
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
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.
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.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.
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.
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.
AKAP: 2000 Euro
Zins: 10%
Laufzeit: 3 Jahre
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:
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