Einführung in die Software-Qualitätssicherung

Größe: px
Ab Seite anzeigen:

Download "Einführung in die Software-Qualitätssicherung"

Transkript

1 Einführung in die Software-Qualitätssicherung Ralf Adams, TBS1 Bochum Version 1.1 vom 6. Oktober 2006

2 Inhaltsverzeichnis 1 Einführung Motivation Inhalte des Skripts Konstruktive QS Punkt, Punkt, Komma, Strich Semikolon Falsch gesetzt Fehlende Semikolon Komma Komma oder Punkt? Fehlende Kommata Konstanten Kommentare Geschachtelte Kommentare Division mit Zeigern Andere Kommentarzeichen Zuweisung und Vergleich Ausführungsreihenfolge Inkrement / Dekrement UND/ODER-Verknpfungen Funktionsparameter Rechnen Probleme bei ganzen Zahlen Darstellung ganzer Zahlen Über- und Unterlauf Rundungsfehler Zahlendarstellung nach IEEE Rundungsfehler Test auf Gleichheit Source Files Kommentare Formatierungen Datentypen Variablen und Konstanten Zeiger Funktionen Makros Einführung in die Software-Qualitätssicherung 2

3 Inhaltsverzeichnis 2.15 Operatoren Kontrollfluss Namenskonvention für Variablen SQL-Datenbanken Performance Performance-Regeln Performance-Kennlinien Analytische QS Qualitätsmerkmale Funktionalität Angemessenheit Richtigkeit Interoperabilität Ordnungsmäßigkeit Sicherheit Zuverlässigkeit Reife Fehlertoleranz Wiederherstellbarkeit Benutzbarkeit Verstädlichkeit Erlernbarkeit Bedienbarkeit Effizienz Zeitverhalten / Performance Verbrauch Änderbarkeit / Wartbarkeit Analysierbarkeit Modifizierbarkeit Prüfbarkeit Übertragbarkeit / Portabilität Anpassbarkeit Installierbarkeit Konformität Austauschbarkeit Source Code Abdeckung Modifizierte Äquivalenzklassenanalyse Einführung in die Software-Qualitätssicherung 3

4 Tabellenverzeichnis 2.1 Unterschiedliche vorzeichenbehaftete Darstellungen bei 4 Bit Breite Präfix nach der ungarischen Notation Usability und Anwenderkreis Muster einer Testfalltabelle Erster Schritt der MÄKA (Felder ermitteln) Zweiter/Dritter Schritt der MÄKA (ÄKs ermitteln) Vierter Schritt der MÄKA (Kombinationen erstellen) Vierter Schritt der MÄKA (Kombinationen bearbeiten) Einführung in die Software-Qualitätssicherung 4

5 Abbildungsverzeichnis 2.1 Kennlinien der Performance Szenarien Qualitätsmerkmale für Software nach DIN / ISO Einführung in die Software-Qualitätssicherung 5

6 Definitionen 1 Exponent und Mantisse Numerisch instabil Standard Richtlinie Testen (eng) QS-Merkmal Qualität (nach DIN 55350, Teil 11) Testen (allgemein nach DIN 55350, Teil 11) QS-Merkmal: Angemessenheit / (Nur-)Vollständigkeit QS-Merkmal: Richtigkeit QS-Merkmal: Interoperabilität QS-Merkmal: Ordnungsmäßigkeit QS-Merkmal: Sicherheit QS-Merkmal: Reife QS-Merkmal: Fehlertoleranz QS-Merkmal: Wiederherstellbarkeit QS-Merkmal: Verstädlichkeit QS-Merkmal: Erlernbarkeit QS-Merkmal: Bedienbarkeit QS-Merkmal: Zeitverhalten / Performance QS-Merkmal: Verbrauch QS-Merkmal: Analysierbarkeit QS-Merkmal: Modifizierbarkeit QS-Merkmal: Prüfbarkeit QS-Merkmal: Anpassbarkeit QS-Merkmal: Installierbarkeit QS-Merkmal: Konformität QS-Merkmal: Austauschbarkeit C 0 -Abdeckung Programmpfad C 1 -Abdeckung C 0,k - und C 1,k -Abdeckung Einführung in die Software-Qualitätssicherung 6

7 Quelltexte 2.1 float.c Teil float.c Teil float.c Teil Rundungsfehler Fall 1: Subtraktion sehr ähnlicher Zahlen Rundungsfehler Fall 2: Stark abweichende Zahlen Rundungsfehler Fall 3: Stark abweichende Zahlen Rundungsfehler Fall 4: Additionsreihenfolge (1) Rundungsfehler Fall 4: Additionsreihenfolge (2) Test auf Gleichheit (1) Test auf Gleichheit (2) Test auf Gleichheit (3) Wechselgeld Zahlenkonvertierung Einführung in die Software-Qualitätssicherung 7

8 Literaturverzeichnis Boehm, Oliver: Fehlerfrei Programmieren in C und C Auflage. Heidelberg: dpunkp- Verlag, 2000 ISBN , Ein einfach tolles Buch. Sollte man kaufen und lesen und lesen und lesen... Council, Transaction Processing Performance: Homepage. Homepage der TPC-Norm Organisation Gruma, G.: Management Site in bleak SQA Survey Soft News. IEEE Software, May 1988, Hämerlin, Günther/Hoffmann, Karl-Heinz: Numerische Mathematik. 1. Auflage. Springer Verlag, 1989 ISBN Schnupp, Peter: Von C zu C: Problemlos Portieren. München, Wien: Carl Hanser Verlag, 1990 ISBN , Oliver Böhm: Diese Buch enthält einige wertvolle Hinweise, wie man portable Programme schreibt. Es ist allen Programmieren zu empfehlen, die für mehrere Welten entwicklen mssen. Stoer, Josef: Numerische Mathematik Auflage. Springer-Lehrbuch, 1983 ISBN Stoer, Josef/Burlisch, Roland: Numerische Mathematik Auflage. Springer-Lehrbuch, 1983 ISBN Trauboth, Heinz: Software-Qualitätssicherung. 2. Auflage. München: Oldenbourg-Verlag, 1996, Handbuch der Informatik Thema 15, Eine sehr theoretische Übersicht über aktuelle QS-Methoden. Nicht zum Lernen, aber zum Nachschlagen geeignet. Zawodny, Jeremy D.: MySQL Performance Tuning. Juni 2001, Eine gute einfach gehalten Einführung in Perfomance Tuning Einführung in die Software-Qualitätssicherung 8

9 1 Einführung 1.1 Motivation Software Qualitätssicherung ist ein unter Schülern und Programmieren genauso beliebtes Thema wie Dokumentation. Jeder erkennt die Notwendigkeit, keiner mag es tun. Mit diesem Skript sollen zwei wesentliche Ziele erreicht werden: 1. Darstellung wichtiger Grundbegriffe 2. Interesse und Spaß m Thema wecken Wird erstmal erkannt, dass ein guter Test mit einem eleganten Stück Source Code vergleichbar ist, hoffe ich kreatives Interesse an dem Thema zu wecken. Software-Fehler sind ein akzeptierter Bestandteil der Nutzung von Software. Es ist mathematisch nachweisbar, dass es unmöglich ist immer fehlerfreie Software zu produzieren, bzw. Fehlerfreiheit nachzuweisen. In der USA werden 8-10 Fehler pro 1000 Source Code Zeilen als normal betrachtet. 1 Dass man diese Fehlerquote mit einfachen und bekannten Mitteln reduzieren kann, zeigt das Discovery Projekt der NASA. Das Flugrechnersystem hat ca. 500K Zeilen und die Bodensoftware ca. 1,7M Zeilen Source Code. IBM hatte am Ende des Projekts eine Fehlerquote von 0,11 (Bord) und 0,4 (Boden) pro 1000 Zeilen Source Code. Schlüssel zum Erfolg waren (Quelle: Trauboth): Das Management stand hinter der QS. Das gesamte Projektteam war in die QS eingebunden. Der Auftraggeber hat die Prioritäten richtig gesetzt und war in den QS-Entscheidungen eingebunden. Trotzdem ist nach einer Umfrage richtige QS nicht etabliert. Eine US-amerikanische Studie ermittelte folgende Zahlen(Gruma): 74% der Betriebe haben eine Stelle für Qualitätssicherung. 23% dieser Personen haben eine adäquate Aus- oder Fortbildung. 1 Damit wird keine Aussage über die Qualität des Fehlers gemacht! Einführung in die Software-Qualitätssicherung 9

10 1 Einführung 13% der Betriebe erfassen die Kosten der QS. 6% der Betriebe führen eine Fehleranalyse durch. 5% setzen QS-Tools ein. 4% der Betriebe messen ihre Qualität anhand von Metriken. Der Markt für dieses Know-how ist gewaltig. Studien zeigen, dass ca % des Projektaufwands in den Test fließen. Informatiker 2, Fachinformatiker und informationstechnische Assistenten werden aber überwiegen in der Kunst der Softwarenentwicklung trainiert. Somit werden die 40 60% vermutlich sehr laienhaft verballert. 1.2 Inhalte des Skripts Analytische QS: Auch gemeinhin als Testen bezeichnet. Es werden verschiedene Testmethoden vorgestellt. Eine blackbox- und eine whitebox-methode. Konstruktive QS: Die Kunst eine SW schon mit möglichst wenig Fehlern in den Test gehen zu lassen. Hier werden verschiedenste Aspekte beleuchtet: Programmierichtlinien Source Code Review Datenbankperformance Viele Aspekte der QS und besonders des Qualitätsmanagements bleiben - leider - unberücksichtigt. Dazu gehören beispielsweise folgende Themen: Softwareänerungsmanagement Konfigurationsmanagement Analyse- und Designmethoden ABC-Analyse Hacking u.v.m. Da dies ein Skript für den Schulbetrieb und kein fertiges Buch ist, lebt dieses Skript. Die Versionsnummer gibt somit keinen Stabilitätsgrad an, sondern stellt lediglich den Grad der Veränderung zur letzten Version dar. 2 Ich möchte an dieser Stelle für das ganze Skript hinweisen, dass keine -innen Formulierungen verwendet werden. Ich verwende die Begriffe als geschlechtsneutrale Berufsbezeichnungen und möchte nicht den Eindruck erwecken, dass nur Männer diesen Beruf ausüben. Einführung in die Software-Qualitätssicherung 10

11 Murphys Law: Wenn etwas schief gehen kann, wird es schief gehen. Wenn etwas nicht schief gehen kann, wird es trotzdem schief gehen. Wenn ein Kette von Ereignissen schief gehen kann, wird es in der schlechtestmöglichen Reihenfolge schief gehen. Wenn ein Ereignis, das hätte schief gehen können, nicht schief geht, wäre es besser gewesen, es wäre schief gegangen. In diesem Kapitel geht es nicht darum alle Fehlerquellen aufzulisten. Am Ende sollte aber der Blick für mögliche Fehlerquellen geschärft sein. 2.1 Punkt, Punkt, Komma, Strich Semikolon Falsch gesetzt In C wird eine Anweisung durch ein Semikolon abgeschlossen. Dies ist meist auch das Zeilenende. Gerade für Anfänger entsteht aber häufig das Missverständnis, dass auch Schleifenoder Verzweigungensköpfe mit einem Semikolon abgeschlossen werden. 1 for (i = 0; i < n; i ++); 2 a[i] = i; Der Programmierer will offensichtlich das Array mit dem Wert i vorbelegen. Aufgabe 2.1 Schreiben Sie ein Programm, welches diesen Source Code enthält und lassen sie sich den Inhalt des Arrays a ausgeben. Interpretieren Sie das Ergebnis und korrigieren Sie das Programm. Ähnliches sollte bei diesem Programm zu beobachten sein: 1 if (i < 0); 2 printf ("\ nein negatives i" ); Einführung in die Software-Qualitätssicherung 11

12 Fehlende Semikolon Anfänger vergessen oft das Semikolon. Die erzeugt zwar eine Fehlermeldung, aber leider keine besonders hilfreiche: 1 int main () { 2 printf (" Dies ist Zeile 1\ n") 3 printf (" Dies ist Zeile 2\ n"); 4 return 0; 5 } In Zeile 2 fehlt das Semikolon. Leider wird der Compiler eine Fehlermeldung erzeugen, dass irgendwas mit Zeile 3 nicht in Ordnung sei. Das hängt damit zusammen, dass der Compiler das Ende einer Anweisung anhand des Semikolons erkennt. Nun erst überpüft er, ob die gesamte Anweisung sinnvoll ist. Wegen des fehlenden Semikolons betrachtet er beide Zeilen als eine Anweisung, die in Zeile 3 endet. Also gilt: Bei einem parse error in line?? oder missing ; in line?? immer erst gucken, ob man das Semikolon in der Vorgängerzeile vergessen hat Komma Ein wenig bekannter Operator ist der Komma-Operator. Er wird hauptsächlich in for-schleifen verwendet: 1 for (i = 0, j = 0; i < 10; i++, j += 2) { 2 /* Tue was */ 3 } Der Komma-Operator erlaubt es in einer Anweisung mehrere Befehle unterzubringen. In diesem Fall werden innerhalb der for-schleife zwei Variablen benötigt: i, j. Während i immer um eins erhöht wird, wächst j immer um zwei. Natrlich kann - und sollte - man diese Logik auch ohne Komma-Operator programmieren Komma oder Punkt? Bei der Zuweisung einer Fließkommazahl passiert es dem Anfänger leider manchmal, dass er folgende Zuweisung programmiert: 1 x = 5,3; Hier wird der Variablen x der Wert 5 zugeordnet. Das,3 ist zwar inhaltlicher Müll, aber syntaktisch in Ordnung und wird deshalb - leider - nicht vom Compiler abgewiesen. Wichtig: Bei einigen Compiler kann man länderspezifische Einstellungen vornehmen. Dazu gehört auch das Trennzeichen: Komma oder Punkt. Es ist nicht empfehlenswert dieses zu ändern; der Source Code wird extrem vom Compiler abhängig. Auch wird das Verständnis sinken, da fast alle Programme mit englischer Syntax geschrieben werden und Programmmierer dies auch deshalb so erwarten. Einführung in die Software-Qualitätssicherung 12

13 Fehlende Kommata Zeichenketten werden vom Compiler zusammengefasst, wenn sie nur von Leerzeichen, Tabulatoren oder Zeilenumbrüchen getrennt werden. Dadurch kann Source Code übersichtlicher programmiert werden: 1 printf (" Sie haben eine falsche Eingabe gemacht - " 2 " Druecken Sie irgendeine Taste um fortzufahren\n" ); Beide Strings werden zu einem zusammengefasst. Leider hat dieses feature auch einen Nachteil: 1 char * namen [] = { 2 " Alfred ", 3 " Michael ", 4 " Wilhelm " 5 " Gunther ", 6 " Bernd " 7 }; In Zeile 4 fehlt ein Komma. Dadurch werden die beiden Strings zusammengefasst und kein Array mit 5 Namen, sondern mit 4 Namen erzeugt. Der Befehl: 1 printf ("\n%s", namen [2]); liefert WilhelmGunther. Auch hier ist keine hilfreiche Compilerwarnung oder -fehlermeldung zu erwarten. 2.2 Konstanten 1 x1 = 2000; 2 x2 = 0020; Aufgabe 2.2 Schreiben Sie ein Programm, welches x1 und x2 ausgibt und interpretieren Sie das Ergebnis! 2.3 Kommentare Geschachtelte Kommentare Geschachtelte Kommentare sind nach ANSI-Standard nicht erlaubt. Viele Compiler bieten aber diese Möglichkeit als Feature an, da man für das Debugging gerne Programmteile inklusive der Kommentare ausblenden möchte. Hier ein Beispiel für einen geschachtelten Kommentar: Einführung in die Software-Qualitätssicherung 13

14 1 /* Aus Testzwecken auskommentiert START 2 /* Ermittle die Anzahl der 50-Cent Muenzen */ 3 while ( frest > 0.50) { 4 frest -= 0.50; 5 ianzahl50cent++; 6 } 7 /* Ermittle die Anzahl der 20-Cent Muenzen */ 8 while ( frest > 0.20) { 9 frest -= 0.20; 10 ianzahl20cent++; 11 } 12 Aus Testzwecken auskommentiert ENDE */ 13 /* Ermittle die Anzahl der 10-Cent Muenzen */ 14 while ( frest > 0.10) { 15 frest -= 0.10; 16 ianzahl10cent++; 17 } In Zeile 1 wird ein mehrzeiliger Kommentar geöffnet. Dieser Kommentar soll bis zur Zeile 12 gehen, so dass nur die letzte while-schleife ausgeführt wird. Erlaubt der Complier verschachtelte Kommentare, wird dies auch geschehen. Wechselt man nun zu einem Compiler, der das nicht erlaubt oder wird verlangt, dass der Source Code ANSI-Standards entspricht, wird dieser Source Code nicht mehr compilierbar sein. Der Kommentar wird in Zeile 2 geschlossen und die Zeile 12 wird nicht verstanden. Die Zeile 7 wird als normaler Kommentar interpretiert. Aufgabe 2.3 Wir wird folgender Source Code bei erlaubten und nicht erlaubten verschachtelten Kommentaren interpretiert: 1 /* Initialisierung 2 ok = TRUE; 3 4 /* Suche */ 5 while(ok) { } Geben Sie eine Korrektur an! Um herauszufinden, ob ein Kommentar verschachtelt werden darf, kann man folgenden Source ausführen lassen (Schnupp): 1 int main () { 2 printf (" Geschachtelte Kommentar sind %s.\ n", /*/*/0*/**/1? " erlaubt " : " verboten "); 3 return 0; 4 } Aufgabe 2.4 Implementieren und interpretieren Sie diesen Test! Allgemeiner Hinweis: Sie sollten zum Auskommentieren lieber den Präprozessor verwenden: 1 #define TEST 2 #ifndef TEST 3 /* Ermittle die Anzahl der 50-Cent Muenzen */ 4 while ( frest > 0.50) { 5 frest -= 0.50; Einführung in die Software-Qualitätssicherung 14

15 6 ianzahl50cent++; 7 } 8 /* Ermittle die Anzahl der 20-Cent Muenzen */ 9 while ( frest > 0.20) { 10 frest -= 0.20; 11 ianzahl20cent++; 12 } 13 #endif 14 /* Ermittle die Anzahl der 10-Cent Muenzen */ 15 while ( frest > 0.10) { 16 frest -= 0.10; 17 ianzahl10cent++; 18 } In Zeile 1 auf der vorherigen Seite wird eine mit Hilfe des Präprozessorbefehls #define ein (leeres) C-Symbol (hier TEST 1 ) definiert. Da das Symbol definiert ist, wird die Bedingung der Zeile 2 auf der vorherigen Seite falsch und der Präprozessor schneidet alle Source Code Zeilen von 2 auf der vorherigen Seite bis 13 raus. Würde Zeile 1 auf der vorherigen Seite komplett fehlen, wäre die Bedingung der Zeile 2 auf der vorherigen Seite wahr und die Source Code Zeilen werden nicht rausgeschnitten. Eine Variante: 1 #define TEST 1 2 #if TEST ==0 3 /* Ermittle die Anzahl der 50-Cent Muenzen */ 4 while ( frest > 0.50) { 5 frest -= 0.50; 6 ianzahl50cent++; 7 } 8 /* Ermittle die Anzahl der 20-Cent Muenzen */ 9 while ( frest > 0.20) { 10 frest -= 0.20; 11 ianzahl20cent++; 12 } 13 #endif 14 /* Ermittle die Anzahl der 10-Cent Muenzen */ 15 while ( frest > 0.10) { 16 frest -= 0.10; 17 ianzahl10cent++; 18 } Division mit Zeigern Man betrachte folgenden Source Code sehr genau: 1 x=y/*p; /* y durch *p teilen */ 2 *q ++; Leider wird y nicht durch den Wert des Zeigers p geteilt werden. Es wird vielmehr folgendes kompiliert werden: 1 x=y *q ++; Durch Einfügen einfacher Leerzeichen tritt das Problem nicht mehr auf: 1 Sie müsen nur sicherstellten, dass dieses Symbol von keinem anderen verwendet wird! Einführung in die Software-Qualitätssicherung 15

16 1 x = y / *p; /* y durch *p teilen */ 2 *q ++; Andere Kommentarzeichen Die meisten C-Compiler verstehen auch die C++-Kommentarzeichen (//). Dies hängt damit zusammen, dass die meisten C-Compiler C++-Compiler sind. Leider sind solche Programme nicht mehr ANSI-konform. Verwenden Sie also in C-Programmen nur die C-Kommentarzeichen und in C++ die C++-Kommentarzeichen. 2.4 Zuweisung und Vergleich Leider ist in C ein Programmierfehler von anfang an eingewebt worden: Der Zuweisungsoperator = wird leider oft mit dem Vergleichsoperator == verwechselt. Kommt man aus der Pascalprogrammierung (oder Verwandte) ist dies besonders ärgerlich, da Pascal die Zuweisung mit := durchführt und der Vergleich ein einfaches Gleichheitszeichen (=) ist. Typische Fehler sind: 1 if (x = y) { } oder 1 while( cweiter = j ) { } Die meisten Compiler werfen hier allerdings eine Warnung aus. Beabsichtigt war in beiden Fällen: 1 if (x == y) { } bzw. 1 while( cweiter == j ) { } Soll getestet werden, ob eine Zuweisung geklappt hat, so sollte man dies wie folgt tun: 2 1 if ( TRUE == (x = y)) { } Nun erkennt jeder Programmierer, dass die Zuweisung kein Fehler ist, sondern wirklich gewollt ist. 2 Man muss ggf. das Symbol TRUE selbst definieren: #define TRUE (1==1) Einführung in die Software-Qualitätssicherung 16

17 2.5 Ausführungsreihenfolge Inkrement / Dekrement Die Reihenfolge des Inkrement-/Dekrement-Operators hängt davon ab, ob der Operator vor oder nach der Variablen steht. Aufgabe 2.5 Bestimmen Sie die Bildschirmausgabe des folgenden Programms! 1 int main () { 2 int x, i; 3 4 x = i = 1; 5 6 x = i ++; 7 printf ("\ nx = %i", x ); 8 9 x = ++ i; 10 printf ("\ nx = %i\n", x ); return 0; 13 } Aufgabe 2.6 Bestimmen Sie die Bildschirmausgabe des folgenden Programms! 1 int main () { 2 int x, y; 3 int *p; 4 5 x = y = 2; 6 p = &y; 7 8 x = (* p )++; 9 printf ("\ nx = %i\t*p = %i", x, *p ); x = (* p )++ * *p; 12 printf ("\ nx = %i\t*p = %i", x, *p ); x = *p * (*p )++; 15 printf ("\ nx = %i\t*p = %i", x, *p ); x = *p * *p; 18 (* p )++; 19 printf ("\ nx = %i\t*p = %i\n", x, *p ); return 0; 22 } Aufgabe 2.7 Wie verhält sich dieses Programm, wenn man die Klammern um *p weglassen wrde? Einführung in die Software-Qualitätssicherung 17

18 2.5.2 UND/ODER-Verknpfungen Bei UND/ODER-Verknpfung muss beachtet werden, dass die meisten Compiler eine Optimierung bei der Auswertung einsetzen. Ist bei einer UND-Verknüpfung schon die erste der beiden Teilbedingungen falsch, muss die zweite nicht mehr ausgewertet werden, da die Gesamtbedingung falsch sein muss. Analog ist dieses Argument bei der ODER-Verknüpfung: Ist schon die erste der beiden Teilbedingungen richtig, muss keine weitere mehr ausgewertet werden, da die Gesamtbedingung richtig sein muss. 1 #define TRUE (1==1) 2 #define FALSE (0==1) 3 4 int gibmireinbool(int iwas) { 5 printf (" Ich bin mit %i aufgerufen worden \n", iwas ); 6 return iwas; 7 } 8 9 int main () { 10 if( gibmireinbool( FALSE ) && gibmireinbool( TRUE )) { 11 /* Irgendwas */ 12 } 13 printf ("\ nund (1) getestet " ); 14 if( gibmireinbool( TRUE ) && gibmireinbool( FALSE )) { 15 /* Irgendwas */ 16 } 17 printf ("\ nund (2) getestet " ); 18 if( gibmireinbool( FALSE ) gibmireinbool( TRUE )) { 19 /* Irgendwas */ 20 } 21 printf ("\ noder (1) getestet " ); 22 if( gibmireinbool( TRUE ) gibmireinbool( FALSE )) { 23 /* Irgendwas */ 24 } 25 printf ("\ noder (2) getestet \n"); return 0; 28 } Aufgabe 2.8 Erstellen Sie eine Tabelle, wann welcher Funktionsaufruf erfolgt und wann nicht. Leiten Sie daraus Regeln für die Auswertung ab. Überprfen Sie die Regeln, indem Sie alle Kombinationen mit drei Teilbedingungen programmieren. Der Sinn dieser Optimierung ist klar. Man stelle sich vor, dass anstelle der sehr einfachen Funktion gibmireinbool() ein rechenintensive Auswertung stünde. Diese kann man dann aus Sicht der Auswertung der Bedingung sparen. Problematisch wird das ganze, wenn in einer Teilauswertung eine Operation oder Berechnung durchgeführt wird. Man betrachte dazu folgendes Programm (nach einer Idee aus Boehm) 3. Der Wille des Programmieres ist klar. Er liest zwei Eingaben über die Tastatur zeichenweise ein und gibt diese auf den Bildschirm wieder aus. Das erste mal funktioniert alles wunderbar, aber beim zweiten mal? 3 Unter UNIX und Varianten kann es wegen getchar() dazu kommen, dass hier die Logik nicht funktioniert. Einführung in die Software-Qualitätssicherung 18

19 1 #include < stdio.h > 2 #define MAXSIZE int main () { 5 char arrceinstring[ MAXSIZE ] = { \0 }; 6 unsigned int uzaehler = 0; 7 char czeichen = ; 8 9 while (( czeichen!= \n ) && (( czeichen = getchar ())!= EOF ) && ( uzaehler < 255)) { 10 arrceinstring[ izaehler ] = czeichen ; 11 izaehler ++; 12 } arrceinstring[ uzaehler ] = \0 ; 15 printf (" Eingabe 1:\ n%s\n", arrceinstring); /* Hier passiert super viel! */ uzaehler = 0; 20 while (( czeichen!= \n ) && (( czeichen = getchar ())!= EOF ) && ( uzaehler < 255)) { 21 arrceinstring[ uzaehler ] = czeichen ; 22 uzaehler ++; 23 } arrceinstring[ uzaehler ] = \0 ; 26 printf (" Eingabe 2:\ n%s\n", arrceinstring); return 0; 29 } Aufgabe 2.9 Programmieren Sie das Beispiel, betrachten Sie die Ausgabe und begünden Sie diese. Programmieren Sie dieses Beispiel so um, dass das erwartete Ergebnis erscheint Funktionsparameter ANSI-C legt nicht fest, wie die Parameter eines Funktionsaufrufs ausgewertet werden. So kann folgender Aufruf, je nach verwendeter Hardware oder verwendetem Compiler unterschiedliche Ergebnisse erzeugen: 1 printf ("\n%i %i\n", ++i, ++ i ); Es ist offen, ob zuerst das rechte oder das linke i inkrementiert wird. 2.6 Rechnen Probleme bei ganzen Zahlen Darstellung ganzer Zahlen Grundsätzlich werden Zahlen im Rechner im Binärzahlsystem dargestellt. Dies bedeutet das alle Zahlen zur Basis 2 dargestellt werden. Bei positiven Zahlen ist das einfach. Man überführt die dezimale Zahl mit Hilfe bekannter Algorithmen in die binäre Darstellung. Einführung in die Software-Qualitätssicherung 19

20 Beispiel: 5331 : 2 = 2665 Rest : 2 = 1332 Rest : 2 = 666 Rest : 2 = 333 Rest : 2 = 166 Rest : 2 = 83 Rest 1 83 : 2 = 41 Rest 1 41 : 2 = 20 Rest 1 20 : 2 = 10 Rest 0 10 : 2 = 5 Rest 0 5 : 2 = 2 Rest 1 2 : 2 = 1 Rest 0 1 : 2 = 0 Rest 1 Daraus ergibt sich die binäre Darstellung: = Bei vorzeichenbehafteten Zahlen wird es komplizierter. Im wesentlichen sind 3 Darstellungen in den heutigen CPUs implementiert: Vorzeichenbit, 2er-Komplement und Excess 2 n 1. Die nachfolgenden Beispiele werden der einfachheithalber bzgl. einer Breite von 8 Bits dargestellt. Dies läßt sich leicht auf längere Zahlendarstellungen übertragen. Vorzeichenbit Stehen insgesamt 8 Bits zur Verfügung, wird ein Bit - meist das Bit mit der Nummer 7 oder Breite 1 - zur Kodierung des Vorzeichens verwendet. Das Vorzeichenbit wird so gewählt, dass 1 Vorzeichenbit das gewünschte Vorzeichen ergibt. Bei einer negativen Zahl ist somit das Vorzeichen 1 und bei einer positiven 0. Beispiel: Die Darstellung hat folgende Eigenschaften: Es gibt zwei Darstellungen der 0: und Für arithmetische Operationen müssen die Darstellungen umgewandelt werden. Der Wertebereich bei gegebener Breite B ist: 2 n 1 bis 2 n 1 ; also hier -127 bis Einführung in die Software-Qualitätssicherung 20

21 2er-Komplement Die Kodierung als 2er-Komplement hat eine enge Beziehung zur Subtraktion ganzer binärer Zahlen. Soll beispielsweise a b ausgerechnet werden. Dann wird die Zahl b in das 2er-Komplement umgewandelt und mit a addiert. Die Summe davon ist tatsächlich die Differenz. Somit ist das 2er-Komplement eine Darstellung von b. Beispiel: Wandle die Zahl in ihre positive binäre Darstellung um Bilde das 1er-Komplement, indem die Bits invertiert werden Bilde das 2er-Komplement indem du eine 1 addierst. Mögliche Überträge auf Bit 8 werden ignoriert Diese Darstellung ist der Standard für vorzeichenbehaftete Integer-Datentypen, z.b. für C/C++ oder Pascal. Die Darstellung hat folgende Eigenschaften: Es gibt nur eine Darstellungen der 0: Für arithmetische Operationen muss die Darstellungen nicht umgewandelt werden. Der Wertebereich bei gegebener Breite B ist: 2 n bis 2 n 1 1; also hier -128 bis Bei dieser Darstellung wird für die Zahl a folgende Gleichung nach x auf- Excess 2 n 1 gelöst: a +x = 127x = 127 a Beispiel für a = 51: x = 127 ( 51). Also x = 178. Die Darstellung hat folgende Eigenschaften: Es gibt nur eine Darstellungen der 0: Für arithmetische Operationen muss die Darstellungen nicht umgewandelt werden. Der Wertebereich bei gegebener Breite B ist: 2 n 1 1 bis 2 n ; also hier -127 bis Einführung in die Software-Qualitätssicherung 21

22 Wert Binärzahl Vorzeichen 2-er Komplement Excess / Tabelle 2.1: Unterschiedliche vorzeichenbehaftete Darstellungen bei 4 Bit Breite Über- und Unterlauf Intern werden ganze Zahlen (int) als Dualzahlen in 2 oder 4 Bytes kodiert. Der begrenzte Platz sorgt dafür, dass es sowas wie eine kleinste und eine größte darstellbare Zahl gibt. Dieses Programm 4 setzt beginnt genau 10 Zahlen vor der größten darstellbaren Zahl und erhöht diese nun 20 mal um 1. 1 #include < stdio.h > 2 #include <math.h > 3 4 int main () { 5 unsigned int uzahl = 0; 6 unsigned int uplatz = 0; 7 unsigned int i = 0; 8 9 /* Ermittle die Anzal der Bytes, die ein Integer hat */ 10 uplatz = sizeof(unsigned int); /* Ermittle eine Zahl kurz vor der Grenze */ 13 uzahl = (unsigned int) pow (2, ( uplatz * 8)) - 10; for (i = 0; i < 20; i++, uzahl ++) { 16 printf ("%u\n", uzahl ); 17 } // for Ende return 0; 20 } // main Ende 4 Unter Linux mit -lm bersetzen Einführung in die Software-Qualitätssicherung 22

23 Aufgabe 2.10 Schreiben Sie ein Programm, welches durch stätiges Subtrahieren einen Unterlauf erzeugt. Leider melden weder Compiler noch Laufzeitsystem eine Warnung oder Fehlermeldung, wenn ein Über- oder Unterlauf auftritt. Das Beispiel oben mag noch konstruiert sein, aber wenn in einer Berechnung ein solcher Fehler auftritt, ist dies für den Anwender und Programmierer sehr schwer zu erkennen. 1 int main () { 2 unsigned int ukante1 = 0; 3 unsigned int ukante2 = 0; 4 unsigned int uflaeche = 0; 5 6 /* Flaechenberechnung in Quadratmeter */ 7 8 printf ("\ nbitte geben Sie die erste Kantenlaenge in km an: " ); 9 scanf ("%u", & ukante1 ); printf ("\ nbitte geben Sie die zweite Kantenlaenge in km an : " ); 12 scanf ("%u", & ukante2 ); uflaeche = ( ukante1 * 1000) * ( ukante2 * 1000); printf ("\ ndie Flaeche in Quadratmeter: %u", uflaeche ); return 0; 19 } // main Ende Werden in diesem Programm 70 und 70 eingegeben, ist das Ergebnis schon falsch! * = Aufgabe 2.11 Erstellen Sie ein einfaches Programm, welches aus einer positiven Zahl durch permanentes Addieren eine negative macht! Wenn Sie eine ganze Zahl (mit oder ohne Vorzeichen) verwenden, müssen Sie sich immer überlegen, welches die maximalen oder minimalen Werte sind, die vorkommen können. Dabei spielt es keine Rolle, wie unwahrscheinlich Sie das finden! Auch sollte bedacht werden, dass intern Zahlen in andere Einheiten umgerechnet werden könnten (siehe Beispiel), was auch zu Fehlberechnungen führen kann Rundungsfehler Zahlendarstellung nach IEEE 754 Bei vielen Berechnungen werden Zahlen aus einem großen Zahlenbereich verwendet. So kann beispielsweise eine astronomische Berechnung die Masse eines Elektrons ( g) und 5 Und somit nach Murphy s Law führen wird! Einführung in die Software-Qualitätssicherung 23

24 die Masse der Sonne ( g) beinhalten. Diese beiden Zahlen könnten (dezimal) wie folgt dargestellt werden: Um mit beiden Zahlen rechnen zu künen, müssen beide die gleiche Anzahl von Stellen vor (28) und nach (34) dem Komma haben. Dies würde für das Ergebnis bedeuten, dass es ebenfalls mit 62 Bits dargestellt werden würde. Die Darstellung der Sonnenmasse mit 34 Nachkommastellen ist zum einen: eine ungeheure Verschwendung von Platz und CPU-Rechenzeit und zum anderen falsch, da keine so genaue Messung vorliegt. Die Festlegung der Anzahl von Vor- und Nachkommastellen nennt man auch Festkommadarstellung. Diese Art der Darstellung erzwingt aber diese beiden Nachteile. Es wird also nach einer Darstellungsweise gesucht, die für den Wertebereich einer Zahl die Genauigkeit zur Verfügung stellt, die sinnvoll ist. Also für Sonnenmassen genügend Vorkommastellen und für Elektronen gnügend Nachkommastellen. Die heute in den PCs verwendeten Systeme haben ihren Ursprung in der wissenschaftlichen Darstellung von Zahlen als Mantisse und Exponent und wurde von Konrad Zuse eingeführt: Definition 1 Exponent und Mantisse Sei n eine rationale Zahl und B die Basis eines Zahlensystems, dann läßt sich n wie folgt darstellen: n = f B B e f wird Mantisse zur Basis B und e wird Exponent genannt. Beispiele: B=10 n= : B=2 n=12.375: = Diese Definition ermöglicht nun eine Darstellung von Brüchen indem man zum einen die signifikanten Werte (Mantisse) angibt und zum anderen mit welcher Zahl (Basis hoch Exponent) man die Mantisse multiplizieren muss, um an den ursprünglichen Wert zu kommen. Da das Komma bei dieser Art der Darstellung nicht festliegt, sondern durch den Exponenten dynamisch bestimmt wird, nennt man diese Darstellung Fließkommazahl (floating point number). Die Darstellung in der jetzigen Form ist mehrdeutig, d.h. zu einer Zahl gibt es viele mögliche Darstellungen ( = = ). Um dieses Problem zu beseitigen, wird eine sogenannte Normalisierung eingeführt: Einführung in die Software-Qualitätssicherung 24

25 1. In einem Kontext werden alle Zahlen zur selben Basis dargestellt (hier: B=2). 2. Der Exponent wird so gewählt, dass in der Mantisse nur die erste Stelle vor dem Komma eine 1 ist. Dies bedeutet, dass die zweite und alle weiteren Stellen vor dem Komma gleich 0 sind. Da die erste Stelle vor dem Komma nicht 0 sein kann, sondern immer 1 ist, braucht diese nicht mit gespeichert zu werden. Man muss somit immer 1.0 hinzufügen. 3. Der Exponent wird in Excess-127 (siehe Kapitel auf Seite 21) kodiert. 4. Gerundet wird auf die erste Stelle (Z l+1 ) hinter dem darstellbaren Bereich nach folgender Regel: { Z l = Z l : Z l+1 < B/2 Z l + 1 : Z l+1 B/2 5. Die Zahl 0 wird durch 0 im Exponenten und 0 in der Mantisse dargestellt. Beispiele: V Exponent Mantisse Das Vorzeichenbit ist 0 und kodiert somit eine positive Zahl. Der Exponent kodiert im Excess-127 Code eine 1 ( ). Die Mantisse ist 0. Addiert man die implizite 1, so ergibt sich 1.0 Wert = ( 1) Vorzeichenbit 2 Exponent (Mantisse + 1) Wert = ( 1) (0+1.0) Wert = = 0.5 V Exponent Mantisse Das Vorzeichenbit ist 1 und kodiert somit eine negative Zahl. Der Exponent kodiert im Excess-127 Code eine 1 ( ). Die Mantisse ist = = Addiert man die implizite 1, so ergibt sich Wert = ( 1) Vorzeichenbit 2 Exponent (Mantisse + 1) Wert = ( 1) ( ) Wert = = Einführung in die Software-Qualitätssicherung 25

26 V Exponent Mantisse Das Vorzeichenbit ist 1 und kodiert somit eine negative Zahl. Der Exponent kodiert im Excess-127 Code eine 4 ( ). Die Mantisse ist 0. Addiert man die implizite 1, so ergibt sich 1.0 Wert = ( 1) Vorzeichenbit 2 Exponent (Mantisse + 1) Wert = ( 1) (0+1.0) Wert = = Das folgende C-Programm soll die interne Darstellung einer Zahl vom Datentyp float verdeutlichen. Quelltext 2.1: float.c Teil 1 1 #include< stdio.h > 2 #include< math.h > 3 /*********************************************** 4 * Globale Variablen * 5 ***********************************************/ 6 union { 7 float fzahl ; /* einmal als normales float */ 8 struct { /* Wichtig: Bitfelder werden von Hinten ausgelesen! */ 9 unsigned BIT00 :1; /* Ende Mantisse */ 10 unsigned BIT01 :1; 11 unsigned BIT02 :1; 12 unsigned BIT03 :1; 13 unsigned BIT04 :1; 14 unsigned BIT05 :1; 15 unsigned BIT06 :1; 16 unsigned BIT07 :1; 17 unsigned BIT08 :1; 18 unsigned BIT09 :1; 19 unsigned BIT10 :1; 20 unsigned BIT11 :1; 21 unsigned BIT12 :1; 22 unsigned BIT13 :1; 23 unsigned BIT14 :1; 24 unsigned BIT15 :1; 25 unsigned BIT16 :1; 26 unsigned BIT17 :1; 27 unsigned BIT18 :1; 28 unsigned BIT19 :1; 29 unsigned BIT20 :1; 30 unsigned BIT21 :1; 31 unsigned BIT22 :1; /* Start Mantisse */ 32 unsigned BIT23 :1; /* Ende Exponent */ 33 unsigned BIT24 :1; 34 unsigned BIT25 :1; 35 unsigned BIT26 :1; 36 unsigned BIT27 :1; 37 unsigned BIT28 :1; 38 unsigned BIT29 :1; 39 unsigned BIT30 :1; /* Start Exponent */ 40 unsigned BIT31 :1; /* Vorzeichenbit */ 41 } bzahl ; /* einmal als Bitfolge */ 42 } FLOAT ; /* Name der globalen Variablen */ Einführung in die Software-Qualitätssicherung 26

27 Im ersten Teil wird die globale Variable FLOAT erzeugt. Diese ist eine union aus der normalen float-zahl fzahl und dem Bitfeld bzahl. Die Union ermöglicht, dass die gleichen 32 Bit (oder 4 Byte) im Speicher unter zwei verschiedenen Namen angesprochen werden können. Durch das Bitfeld können einzelne Bits ausgelesen und geschrieben werden. Quelltext 2.2: float.c Teil 2 1 /*********************************************** 2 * Hilfsfunktion fuer Potenzen * 3 ***********************************************/ 4 long unsigned int hoch (unsigned int ubasis, unsigned int uexponent ) { 5 return (long unsigned int) floor ( pow ( ubasis, uexponent )); 6 } /* hoch Ende */ 7 8 /*********************************************** 9 * Ausgabe des float als Bitfolge * 10 ***********************************************/ 11 void show_bits () { 12 printf (" %.10f\t %u ", FLOAT. fzahl, FLOAT. bzahl. BIT31 ); 13 printf ("%u", FLOAT. bzahl. BIT30 ); 14 printf ("%u", FLOAT. bzahl. BIT29 ); 15 printf ("%u", FLOAT. bzahl. BIT28 ); 16 printf ("%u", FLOAT. bzahl. BIT27 ); 17 printf ("%u", FLOAT. bzahl. BIT26 ); 18 printf ("%u", FLOAT. bzahl. BIT25 ); 19 printf ("%u", FLOAT. bzahl. BIT24 ); 20 printf ("%u", FLOAT. bzahl. BIT23 ); 21 printf (" %u", FLOAT. bzahl. BIT22 ); 22 printf ("%u", FLOAT. bzahl. BIT21 ); 23 printf ("%u", FLOAT. bzahl. BIT20 ); 24 printf ("%u", FLOAT. bzahl. BIT19 ); 25 printf ("%u", FLOAT. bzahl. BIT18 ); 26 printf ("%u", FLOAT. bzahl. BIT17 ); 27 printf ("%u", FLOAT. bzahl. BIT16 ); 28 printf ("%u", FLOAT. bzahl. BIT15 ); 29 printf ("%u", FLOAT. bzahl. BIT14 ); 30 printf ("%u", FLOAT. bzahl. BIT13 ); 31 printf ("%u", FLOAT. bzahl. BIT12 ); 32 printf ("%u", FLOAT. bzahl. BIT11 ); 33 printf ("%u", FLOAT. bzahl. BIT10 ); 34 printf ("%u", FLOAT. bzahl. BIT09 ); 35 printf ("%u", FLOAT. bzahl. BIT08 ); 36 printf ("%u", FLOAT. bzahl. BIT07 ); 37 printf ("%u", FLOAT. bzahl. BIT06 ); 38 printf ("%u", FLOAT. bzahl. BIT05 ); 39 printf ("%u", FLOAT. bzahl. BIT04 ); 40 printf ("%u", FLOAT. bzahl. BIT03 ); 41 printf ("%u", FLOAT. bzahl. BIT02 ); 42 printf ("%u", FLOAT. bzahl. BIT01 ); 43 printf ("%u \ n", FLOAT. bzahl. BIT00 ); 44 } /* show_bits Ende */ Der zweite Teil besteht aus zwei Funktionen. Die Funktion hoch() ermöglicht die Potenzierung mit ganzen Zahlen. Dies ist notwendig, da pow() nur auf double-werten arbeitet. Die Funktion show_bits() zeigt die Zahl einmal als float-wert und einmal in Binärform. Quelltext 2.3: float.c Teil 3 1 /*********************************************** 2 * main * 3 ***********************************************/ 4 int main () { 5 6 /* Test1: 7 Es wird angenommen, dass diese Zahl folgende Darstellung hat: Einführung in die Software-Qualitätssicherung 27

28 8 Vorzeichenbit: 1 9 Exponent: (-1 in Excess 127) 10 Mantisse: Es soll nun durch gezielt Veraenderungen nachgewiesen werden, 12 dass die interne Darstellung nach IEEE 754 erfolgt. */ 13 FLOAT. fzahl = -0.5; 14 show_bits (); /* Test2: 17 Das Setzten des Vorzeichenbits soll nur das Vorzeichen aendern */ 18 FLOAT. bzahl. BIT31 = 0; 19 show_bits (); /* Test3: 22 Das Setzten eines Bits im Exponenten sollte eine entsprechend 23 Zweierpotenz hinter dem Komma anzeigen 24 Hier: Exponent -3, dadurch 1*0.125 */ 25 FLOAT. bzahl. BIT24 = 0; 26 show_bits (); 27 FLOAT. bzahl. BIT24 = 1; /* Nur Rueckgaengig */ /* Test4: 30 Das Setzten eines Bits in der Mantisse bedeutet 1 plus den 31 gesetzten Wert. 32 Hier > 1.5 * 0.5 (Exponent) = 0.75 */ FLOAT. bzahl. BIT22 = 1; 35 show_bits (); return 0; 38 } /* main Ende */ Im dritten Teil werden einige Tests durchgeführt, die belegen sollen, dass rechnerintern die Fließkommazahlen nach IEEE754 dargestellt werden. Wie viele Zahlen kann man nun bei festliegender Mantissen und Exponentenlänge darstellen? Dazu ein Beispiel im Dezimalsystem: Die Länge der Mantisse sei 3 und Länge des Exponenten 2. Es können damit Zahlen in folgendem Intervall dargestellt werden: bis Dies ist ein sehr großer Zahlenbereich, der mit nur 5 Bits abgedeckt wird. ABER: Es können zwar Zahlen aus diesem Bereich dargestellt werden, nur nicht alle!!!. Dadurch entstehen Rundungsfehler. Beispiel: Die Werte und der Wert sind darstellbar. Das arithmetische Mittel der beiden hingegen nicht: = = verlangt aber 4 Stellen in der Mantisse. Man ist gezwungen zu runden und das Ergebnis ist nach obiger Rundungsregel Um nun Zahlen miteinander beispielsweise addieren zu können, wird folgender Ablauf von der CPU durchgefhrt (Beispiel: a = und b = ): 1. Bringe beide Summanden auf den höchsten Exponenten: Die Darstellung von ist 2 2 1,875 und von ist Nun werden beide auf den höchsten Exponenten verschoben. Der höchste Exponent ist 2. a muss nicht verändert werden, aber b: b = Einführung in die Software-Qualitätssicherung 28

29 2. Addiere die Mantissen: Mantisse M a = = M b = 0.25 = M a+b = Die Mantisse M a+b hat den Wert von Normalisiere die Summe: Die Mantisse M a+b muss noch mit 2 addiert werden. Eine 1 als Übertrag der Mantissenaddition und die implizite 1 von a. Man erhöht die Zahl 2.125, also = Diese Zahl muss noch normalisiert werden: = Die 1 wird implizit gespeichert, so dass die normalisierte Zahl wie folgt aussieht: V Exponent Mantisse Normalisiere die Summenden Die bedeutet nicht anderes, als die Summanden wieder in ihre ursprüngliche Darstellung zurckzuführen. Aufgabe 2.12 Überprfen Sie diese Rechnung anhand des obigen Programms! Rundungsfehler Werden in einem Rechner zwei Fließkommazahlen addiert, subtrahiert,... so kann im Allgemeinen nicht davon ausgegangen werden, dass die Zahlen und das Rechenergebnis exakt dargestellt werden können. Beispiel: Die Zahl 0.3 soll rechnerintern dargestellt werden. Es ergibt sich eine float-darstellung: V Exponent Mantisse Dummerweise entspricht die Zahl dem Wert: Sei a eine echte Zahl und ā die Darstellung im Rechner. Dann nennt man ε a den Fehler der Zahl a. ε a läßt sich darstellen als ε a = a ā Innerhalb gewisser Grenzen kann dieser Fehler toleriert werden. Schlecht ist aber, wenn durch unglükliche Berechnungen sich dieser Fehler verstärkt. Einführung in die Software-Qualitätssicherung 29

30 Fall 1: Subtraktion sehr ähnlicher Zahlen Nehmen wir die einfache Rechenaufgabe: Sei also a = 0.3 und b = Folgendes kleine C-Programm soll uns weiterhelfen (Die Zeilen 1-89 sind dem obigen Beispiel identisch): Quelltext 2.4: Rundungsfehler Fall 1: Subtraktion sehr ähnlicher Zahlen 1 /*********************************************** 2 * main * 3 ***********************************************/ 4 int main () { 5 6 float a_strich = 0.3; 7 float b_strich = ; 8 9 FLOAT. fzahl = a_strich ; 10 show_bits (); 11 FLOAT. fzahl = b_strich ; 12 show_bits (); FLOAT. fzahl = a_strich - b_strich ; 15 show_bits (); return 0; 18 } Die Ausgabe: Erste Frage, wie hoch sind die Fehler ε a und ε b? ε a = a ā = = ε b = b b = = Es ergibt sich eine Fehlerquote für a von % und für b von %, also sehr kleine Fehler. Zweite Frage, wie hoch ist der Fehler der Berechnung? ε a b = ā b = = Bedenkt man, dass das echte Ergebnis gerade mal ist, so ergibt sich ein Fehler von 297%!!! Einführung in die Software-Qualitätssicherung 30

31 Definition 2 Numerisch instabil Eine mathematische Berechnung heißt numerisch instabil, wenn die Berechnungsergebnisse bei realistischen Eingaben eine Fehlerquote im Ergebnis erzeugt. Welche Fehlerquote akzeptabel ist, muss am Beispiel entschieden werden. Fall 2: Stark abweichende Zahlen Ist eine Zahl sehr viel größer oder kleiner als eine andere und wird dann mit ihr subtrahiert, entstehen große Fehler. Sei hier als Beispiel die Auflösung einer quadratischen Gleichung gewählt. Es gilt hier bei gegebenen a, b und c die Lösungen folgender Gleichung zu finden: ax 2 +bx +c = 0 Es gibt zwei Lösungen: x 1 x 2 = b + b 2 4ac 2a = b b 2 4ac 2a Folgendes kleine Programm bildet diese Formeln ab: Quelltext 2.5: Rundungsfehler Fall 2: Stark abweichende Zahlen 1 #include< stdio.h > 2 #include< math.h > 3 #include< stdlib.h > 4 5 int main (int argc, char * argv []) { 6 7 float a, b, c, x1, x2; 8 9 a = b = c = x1 = x2 = 0.0; printf ("\ nbitte geben Sie a ein : " ); 12 scanf ("%f", &a ); 13 printf (" Bitte geben Sie b ein : " ); 14 scanf ("%f", &b ); 15 printf (" Bitte geben Sie c ein : " ); 16 scanf ("%f", &c ); x1 = ( -1*b + sqrt( pow (b,2) -4* a*c )) / (2* a ); 19 x2 = ( -1*b - sqrt( pow (b,2) -4* a*c )) / (2* a ); printf ("\ nx1 = %f: Gegenprobe = %f \n", x1, a* x1* x1 + b* x1 + c); 22 printf (" x2 = %f: Gegenprobe = %f\n", x2, a*x2 * x2 + b* x2 + c ); return 0; 25 } /* main Ende */ Aufgabe 2.13 Geben Sie in dieses Programm folgende Werte ein, überprfen Sie die Ergebnisse und geben Sie die Fehlerquote in % an! Einführung in die Software-Qualitätssicherung 31

32 a = 1,b = 3,c = 1 a = 0.1,b = 1,c = 0.2 a = 0.1,b = 10,c = 0.2 Aufgabe 2.14 Ermitteln Sie, wo im Programm die numerische Fehlerquelle liegt! Aufgabe 2.15 Programmieren Sie x 2 nach folgender Formel 6 um: x 2 = 2c/( b b 2 4ac) Quelltext 2.6: Rundungsfehler Fall 3: Stark abweichende Zahlen 1 #include< stdio.h > 2 #include< math.h > 3 4 int main () { 5 6 float x1, x2, x3, y1, y2, y3 ; 7 8 x1 = x2 = x3 = y1 = y2 = y3 = 0.0; 9 10 x1 = 1 e7 ; 11 y1 = x1 + 1; 12 x2 = 1 e8 ; 13 y2 = x2 + 1; x3 = x2 ; 16 y3 = x3 + 5; 17 printf ("\ nx1 = %f,\ ty1 = %f :\ tx1 - y1 = %f ", x1, y1, y1 - x1 ); 18 printf ("\ nx2 = %f,\ ty2 = %f :\ tx2 - y2 = %f ", x2, y2, y2 - x2 ); 19 printf ("\ nx3 = %f,\ ty3 = %f :\ tx3 - y3 = %f\n", x3, y3, y3 - x3 ); return 0; 22 } Dieses Programm sollte sehr einfache Ergebnisse liefern, tut es aber nicht. Die Ausgaben sind: x1 = , y1 = : x1 - y1 = x2 = , y2 = : x2 - y2 = x3 = , y3 = : x3 - y3 = Aufgabe 2.16 Ermitteln Sie anhand der IEEE754-Darstellung die Ursache des Fehlers. Neben dem Phänomen des Über- oder Unterlaufs des Exponenten, ergeben sich auch Fehler durch die große Unterschiede selbst. So macht es einen Unterschied, wie man Zahlen addiert: 1 #include < stdio.h > 2 3 int main () { 4 float x [10] = {0.0}; 5 float fzahl = 0.0; 6 unsigned int i = 0; 7 Quelltext 2.7: Rundungsfehler Fall 4: Additionsreihenfolge (1) 6 Folgt aus der Gleichung: x 1 x 2 = c/a Einführung in die Software-Qualitätssicherung 32

33 8 x [0] = 50000; 9 x [1] = 4000; 10 x [2] = 3000; 11 x [3] = 2000; 12 x [4] = 1000; 13 x [5] = 0.001; 14 x [6] = 0.009; 15 x [7] = 0.09; 16 x [8] = 0.9; 17 x [9] = 1; fzahl = 0.0; 21 for (i = 0; i <10; i++) { 22 fzahl += x[i ]; 23 } /* for Ende */ 24 printf (" Vorne anfangen :\ t%f\n", fzahl ); fzahl = 0.0; 27 for (i=0; i <10; i++) { 28 fzahl += x [10 -( i+1)]; 29 } /* for Ende */ 30 printf (" Hinten anfangen :\ t%f\n", fzahl ); return 0; 33 } /* main Ende */ Man erkennt, dass die beiden for-schleifen das Array mal von vorne und mal von hinten aufaddieren. Man erhält folgende Ausgabe: Vorne anfangen: Hinten anfangen: Aufgabe 2.17 Überlegen Sie sich, warum die Ergebnisse so unterschiedlich sind! Aufgabe 2.18 Denken Sie sich ein Programm aus, welches Zahlen zwischen 1 und 1 3 addiert. Überlegen Sie sich, welche mögliche Fehlerquelle dabei zu beachten ist. Wie könnte eine Lösung aussehen? Bei Zahlen, die stark voneinander abweichen, ergibt sich auch eine nicht offensichtliche Eigenschaft der Addition im Computer. Normalerweise ist die Addition assoziativ, d.h.: a + b + c = (a +b)+c = a +(b +c) = (a +c)+b 1 #include < stdio.h > 2 3 int main () { 4 float a, b, c, ab, ac, bc ; 5 6 a = 10000; 7 b = ; 8 c = ; 9 10 ab = a+b; 11 ac = a+c; 12 bc = b+c; 13 Quelltext 2.8: Rundungsfehler Fall 4: Additionsreihenfolge (2) Einführung in die Software-Qualitätssicherung 33

Computerarithmetik ( )

Computerarithmetik ( ) Anhang A Computerarithmetik ( ) A.1 Zahlendarstellung im Rechner und Computerarithmetik Prinzipiell ist die Menge der im Computer darstellbaren Zahlen endlich. Wie groß diese Menge ist, hängt von der Rechnerarchitektur

Mehr

Binärdarstellung von Fliesskommazahlen

Binärdarstellung von Fliesskommazahlen Binärdarstellung von Fliesskommazahlen 1. IEEE 754 Gleitkommazahl im Single-Format So sind in Gleitkommazahlen im IEEE 754-Standard aufgebaut: 31 30 24 23 0 S E E E E E E E E M M M M M M M M M M M M M

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

2. Negative Dualzahlen darstellen

2. Negative Dualzahlen darstellen 2.1 Subtraktion von Dualzahlen 2.1.1 Direkte Subtraktion (Tafelrechnung) siehe ARCOR T0IF Nachteil dieser Methode: Diese Form der Subtraktion kann nur sehr schwer von einer Elektronik (CPU) durchgeführt

Mehr

Grundlagen der Informatik

Grundlagen der Informatik Mag. Christian Gürtler Programmierung Grundlagen der Informatik 2011 Inhaltsverzeichnis I. Allgemeines 3 1. Zahlensysteme 4 1.1. ganze Zahlen...................................... 4 1.1.1. Umrechnungen.................................

Mehr

Binäre Gleitkommazahlen

Binäre Gleitkommazahlen Binäre Gleitkommazahlen Was ist die wissenschaftliche, normalisierte Darstellung der binären Gleitkommazahl zur dezimalen Gleitkommazahl 0,625? Grundlagen der Rechnerarchitektur Logik und Arithmetik 72

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Lösungen: zu 1. a.) 0 0 1 1 b.) 1 1 1 1 c.) 0 1 1 0 + 1 1 0 0 + 0 0 1 1 + 0 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 1

Lösungen: zu 1. a.) 0 0 1 1 b.) 1 1 1 1 c.) 0 1 1 0 + 1 1 0 0 + 0 0 1 1 + 0 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 1 Lösungen: zu 1. a.) 0 0 1 1 b.) 1 1 1 1 c.) 0 1 1 0 + 1 1 0 0 + 0 0 1 1 + 0 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 1 vorzeichenlose Zahl: 15 vorzeichenlose Zahl: 18 vorzeichenlose Zahl: 13 Zweierkomplement: - 1

Mehr

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff Programmieren in C Felder, Schleifen und Fließkommaarithmetik Prof. Dr. Nikolaus Wulff Addition von Zahlen 1 2 3 4 5 #include int main() { int x,y,z,sum; x = 1; y = 2; z = 4; sum = x + y + z;

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Zeichen bei Zahlen entschlüsseln

Zeichen bei Zahlen entschlüsseln Zeichen bei Zahlen entschlüsseln In diesem Kapitel... Verwendung des Zahlenstrahls Absolut richtige Bestimmung von absoluten Werten Operationen bei Zahlen mit Vorzeichen: Addieren, Subtrahieren, Multiplizieren

Mehr

Übung 9 - Lösungsvorschlag

Übung 9 - Lösungsvorschlag Universität Innsbruck - Institut für Informatik Datenbanken und Informationssysteme Prof. Günther Specht, Eva Zangerle Besprechung: 15.12.2008 Einführung in die Informatik Übung 9 - Lösungsvorschlag Aufgabe

Mehr

Skript und Aufgabensammlung Terme und Gleichungen Mathefritz Verlag Jörg Christmann Nur zum Privaten Gebrauch! Alle Rechte vorbehalten!

Skript und Aufgabensammlung Terme und Gleichungen Mathefritz Verlag Jörg Christmann Nur zum Privaten Gebrauch! Alle Rechte vorbehalten! Mathefritz 5 Terme und Gleichungen Meine Mathe-Seite im Internet kostenlose Matheaufgaben, Skripte, Mathebücher Lernspiele, Lerntipps, Quiz und noch viel mehr http:// www.mathefritz.de Seite 1 Copyright

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.

Mehr

Musterlösung 2. Mikroprozessor & Eingebettete Systeme 1

Musterlösung 2. Mikroprozessor & Eingebettete Systeme 1 Musterlösung 2 Mikroprozessor & Eingebettete Systeme 1 WS2014/2015 Hinweis: Die folgenden Aufgaben erheben nicht den Anspruch, eine tiefergehende Kenntnis zu vermitteln; sie sollen lediglich den Einstieg

Mehr

Mathematik: Mag. Schmid Wolfgang Arbeitsblatt 3 1. Semester ARBEITSBLATT 3 RECHNEN MIT GANZEN ZAHLEN

Mathematik: Mag. Schmid Wolfgang Arbeitsblatt 3 1. Semester ARBEITSBLATT 3 RECHNEN MIT GANZEN ZAHLEN ARBEITSBLATT 3 RECHNEN MIT GANZEN ZAHLEN Wir wollen nun die Rechengesetze der natürlichen Zahlen auf die Zahlenmenge der ganzen Zahlen erweitern und zwar so, dass sie zu keinem Widerspruch mit bisher geltenden

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

Informationssysteme Gleitkommazahlen nach dem IEEE-Standard 754. Berechnung von Gleitkommazahlen aus Dezimalzahlen. HSLU T&A Informatik HS10

Informationssysteme Gleitkommazahlen nach dem IEEE-Standard 754. Berechnung von Gleitkommazahlen aus Dezimalzahlen. HSLU T&A Informatik HS10 Informationssysteme Gleitkommazahlen nach dem IEEE-Standard 754 Berechnung von Gleitkommazahlen aus Dezimalzahlen Die wissenschaftliche Darstellung einer Zahl ist wie folgt definiert: n = f * 10 e. f ist

Mehr

Funktion Erläuterung Beispiel

Funktion Erläuterung Beispiel WESTFÄLISCHE WILHELMS-UNIVERSITÄT WIRTSCHAFTSWISSENSCHAFTLICHE FAKULTÄT BETRIEBLICHE DATENVERARBEITUNG Folgende Befehle werden typischerweise im Excel-Testat benötigt. Die Beispiele in diesem Dokument

Mehr

2 Einfache Rechnungen

2 Einfache Rechnungen 2 Einfache Rechnungen 2.1 Zahlen Computer, auch bekannt als Rechner, sind sinnvoller eingesetzt, wenn sie nicht nur feste Texte ausgeben, sondern eben auch rechnen. Um das Rechnen mit Zahlen zu verstehen,

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18 Kapitel 3 Datentypen und Variablen Seite 1 von 18 Datentypen - Einführung - Für jede Variable muss ein Datentyp festgelegt werden. - Hierdurch werden die Wertemenge und die verwendbaren Operatoren festgelegt.

Mehr

Zahlensysteme Seite -1- Zahlensysteme

Zahlensysteme Seite -1- Zahlensysteme Zahlensysteme Seite -- Zahlensysteme Inhaltsverzeichnis Dezimalsystem... Binärsystem... Umrechnen Bin Dez...2 Umrechnung Dez Bin...2 Rechnen im Binärsystem Addition...3 Die negativen ganzen Zahlen im Binärsystem...4

Mehr

Einführung in die C++ Programmierung für Ingenieure

Einführung in die C++ Programmierung für Ingenieure Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF

Mehr

Numerisches Programmieren, Übungen

Numerisches Programmieren, Übungen Technische Universität München SoSe 0 Institut für Informatik Prof Dr Thomas Huckle Dipl-Math Jürgen Bräckle Nikola Tchipev, MSc Numerisches Programmieren, Übungen Musterlösung Übungsblatt: Zahlendarstellung,

Mehr

Ein polyadisches Zahlensystem mit der Basis B ist ein Zahlensystem, in dem eine Zahl x nach Potenzen von B zerlegt wird.

Ein polyadisches Zahlensystem mit der Basis B ist ein Zahlensystem, in dem eine Zahl x nach Potenzen von B zerlegt wird. Zahlensysteme Definition: Ein polyadisches Zahlensystem mit der Basis B ist ein Zahlensystem, in dem eine Zahl x nach Potenzen von B zerlegt wird. In der Informatik spricht man auch von Stellenwertsystem,

Mehr

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt

Mehr

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage: Zählen und Zahlbereiche Übungsblatt 1 1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage: Für alle m, n N gilt m + n = n + m. in den Satz umschreiben:

Mehr

25 kann ohne Rest durch 5 geteilt werden! ist wahr

25 kann ohne Rest durch 5 geteilt werden! ist wahr Lehrbrief 2: Lektion 8 - C -Praxis 4-1 - 5.2 Einfache Entscheidungen mit if und die Vergleichsoperatoren Nun tauchen wir immer tiefer in die Geheimnisse von C ein und beschäftigen uns mit einem sehr wichtigen

Mehr

Jede Zahl muss dabei einzeln umgerechnet werden. Beginnen wir also ganz am Anfang mit der Zahl,192.

Jede Zahl muss dabei einzeln umgerechnet werden. Beginnen wir also ganz am Anfang mit der Zahl,192. Binäres und dezimales Zahlensystem Ziel In diesem ersten Schritt geht es darum, die grundlegende Umrechnung aus dem Dezimalsystem in das Binärsystem zu verstehen. Zusätzlich wird auch die andere Richtung,

Mehr

1. Das dekadische Ziffernsystem (Dezimalsystem) Eine ganze Zahl z kann man als Summe von Potenzen zur Basis 10 darstellen:

1. Das dekadische Ziffernsystem (Dezimalsystem) Eine ganze Zahl z kann man als Summe von Potenzen zur Basis 10 darstellen: Zahlensysteme. Das dekadische Ziffernsystem (Dezimalsystem) Eine ganze Zahl z kann man als Summe von Potenzen zur Basis darstellen: n n n n z a a... a a a Dabei sind die Koeffizienten a, a, a,... aus der

Mehr

Primzahlen und RSA-Verschlüsselung

Primzahlen und RSA-Verschlüsselung Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also

Mehr

BITte ein BIT. Vom Bit zum Binärsystem. A Bit Of Magic. 1. Welche Werte kann ein Bit annehmen? 2. Wie viele Zustände können Sie mit 2 Bit darstellen?

BITte ein BIT. Vom Bit zum Binärsystem. A Bit Of Magic. 1. Welche Werte kann ein Bit annehmen? 2. Wie viele Zustände können Sie mit 2 Bit darstellen? BITte ein BIT Vom Bit zum Binärsystem A Bit Of Magic 1. Welche Werte kann ein Bit annehmen? 2. Wie viele Zustände können Sie mit 2 Bit darstellen? 3. Gegeben ist der Bitstrom: 10010110 Was repräsentiert

Mehr

Technische Informatik - Eine Einführung

Technische Informatik - Eine Einführung Martin-Luther-Universität Halle-Wittenberg Fachbereich Mathematik und Informatik Lehrstuhl für Technische Informatik Prof. P. Molitor Ausgabe: 2005-02-21 Abgabe: 2005-02-21 Technische Informatik - Eine

Mehr

Zahlensysteme. Digitale Rechner speichern Daten im Dualsystem 435 dez = 1100110011 binär

Zahlensysteme. Digitale Rechner speichern Daten im Dualsystem 435 dez = 1100110011 binär Zahlensysteme Menschen nutzen zur Angabe von Werten und zum Rechnen vorzugsweise das Dezimalsystem Beispiel 435 Fische aus dem Teich gefischt, d.h. 4 10 2 + 3 10 1 +5 10 0 Digitale Rechner speichern Daten

Mehr

7 Rechnen mit Polynomen

7 Rechnen mit Polynomen 7 Rechnen mit Polynomen Zu Polynomfunktionen Satz. Zwei Polynomfunktionen und f : R R, x a n x n + a n 1 x n 1 + a 1 x + a 0 g : R R, x b n x n + b n 1 x n 1 + b 1 x + b 0 sind genau dann gleich, wenn

Mehr

Numerische Datentypen. Simon Weidmann

Numerische Datentypen. Simon Weidmann Numerische Datentypen Simon Weidmann 08.05.2014 1 Ganzzahlige Typen 1.1 Generelles Bei Datentypen muss man immer zwei elementare Eigenschaften unterscheiden: Zuerst gibt es den Wertebereich, zweitens die

Mehr

Informationsblatt Induktionsbeweis

Informationsblatt Induktionsbeweis Sommer 015 Informationsblatt Induktionsbeweis 31. März 015 Motivation Die vollständige Induktion ist ein wichtiges Beweisverfahren in der Informatik. Sie wird häufig dazu gebraucht, um mathematische Formeln

Mehr

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe

Mehr

Die Programmiersprache C

Die Programmiersprache C Die Programmiersprache C höhere Programmiersprache (mit einigen Assembler-ähnlichen Konstrukten) gut verständliche Kommandos muss von Compiler in maschinenlesbaren Code (Binärdatei) übersetzt werden universell,

Mehr

Lineare Gleichungssysteme

Lineare Gleichungssysteme Lineare Gleichungssysteme 1 Zwei Gleichungen mit zwei Unbekannten Es kommt häufig vor, dass man nicht mit einer Variablen alleine auskommt, um ein Problem zu lösen. Das folgende Beispiel soll dies verdeutlichen

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16 Kapitel 5 Arithmetische Operatoren Seite 1 von 16 Arithmetische Operatoren - Man unterscheidet unäre und binäre Operatoren. - Je nachdem, ob sie auf einen Operanden wirken, oder eine Verknüpfung zweier

Mehr

Theoretische Informatik SS 04 Übung 1

Theoretische Informatik SS 04 Übung 1 Theoretische Informatik SS 04 Übung 1 Aufgabe 1 Es gibt verschiedene Möglichkeiten, eine natürliche Zahl n zu codieren. In der unären Codierung hat man nur ein Alphabet mit einem Zeichen - sagen wir die

Mehr

a) Da die Zahlen im IEEE-32Bit-Format dargestellt werden sollen, ist der Bias = 127.

a) Da die Zahlen im IEEE-32Bit-Format dargestellt werden sollen, ist der Bias = 127. Übung 2, Aufgabe 4) a) Da die Zahlen im IEEE-32Bit-Format dargestellt werden sollen, ist der Bias = 127. 1,125 in IEEE 754 (32Bit) 0,125 2 = 0,25 0,25 2 = 0,5 0,5 2 = 1 1,125 10 = 1,001 2 Da die Zahl bereits

Mehr

1 Mathematische Grundlagen

1 Mathematische Grundlagen Mathematische Grundlagen - 1-1 Mathematische Grundlagen Der Begriff der Menge ist einer der grundlegenden Begriffe in der Mathematik. Mengen dienen dazu, Dinge oder Objekte zu einer Einheit zusammenzufassen.

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

2 Darstellung von Zahlen und Zeichen

2 Darstellung von Zahlen und Zeichen 2.1 Analoge und digitale Darstellung von Werten 79 2 Darstellung von Zahlen und Zeichen Computer- bzw. Prozessorsysteme führen Transformationen durch, die Eingaben X auf Ausgaben Y abbilden, d.h. Y = f

Mehr

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmierung in C. Grundlagen. Stefan Kallerhoff Programmierung in C Grundlagen Stefan Kallerhoff Vorstellungsrunde Name Hobby/Beruf Schon mal was programmiert? Erwartungen an den Kurs Lieblingstier Für zu Hause C-Buch online: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/

Mehr

Weiterbildung und Zusatzausbildung der PHZ Luzern Interessantes und Spannendes aus der Welt der Mathematik September 2006, Dieter Ortner

Weiterbildung und Zusatzausbildung der PHZ Luzern Interessantes und Spannendes aus der Welt der Mathematik September 2006, Dieter Ortner Weiterbildung und Zusatzausbildung der PHZ Luzern Interessantes und Spannendes aus der Welt der Mathematik September 2006, Dieter Ortner Rechengesetze 1. Rechengesetze für natürliche Zahlen Es geht um

Mehr

Grundlagen der Informatik I Informationsdarstellung

Grundlagen der Informatik I Informationsdarstellung Grundlagen der Informatik I Informationsdarstellung Einführung in die Informatik, Gumm, H.-P./Sommer, M. Themen der heutigen Veranstaltung. ASCIi Code 2. Zeichenketten 3. Logische Operationen 4. Zahlendarstellung

Mehr

Bevor lineare Gleichungen gelöst werden, ein paar wichtige Begriffe, die im Zusammenhang von linearen Gleichungen oft auftauchen.

Bevor lineare Gleichungen gelöst werden, ein paar wichtige Begriffe, die im Zusammenhang von linearen Gleichungen oft auftauchen. R. Brinkmann http://brinkmann-du.de Seite 1 13.0.010 Lineare Gleichungen Werden zwei Terme durch ein Gleichheitszeichen miteinander verbunden, so entsteht eine Gleichung. Enthält die Gleichung die Variable

Mehr

der Eingabe! Haben Sie das Ergebnis? Auf diesen schwarzen Punkt kommen wir noch zu sprechen.

der Eingabe! Haben Sie das Ergebnis? Auf diesen schwarzen Punkt kommen wir noch zu sprechen. Medizintechnik MATHCAD Kapitel. Einfache Rechnungen mit MATHCAD ohne Variablendefinition In diesem kleinen Kapitel wollen wir die ersten Schritte mit MATHCAD tun und folgende Aufgaben lösen: 8 a: 5 =?

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)

Mehr

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER Inhalt 1 Einleitung... 1 2 Einrichtung der Aufgabe für die automatische Sicherung... 2 2.1 Die Aufgabenplanung... 2 2.2 Der erste Testlauf... 9 3 Problembehebung...

Mehr

Gratis Excel SVERWEIS Funktions-Anleitung, Tutorial, ebook, PDF-E-Book

Gratis Excel SVERWEIS Funktions-Anleitung, Tutorial, ebook, PDF-E-Book Gratis Excel SVERWEIS Funktions-Anleitung, Tutorial, ebook, PDF-E-Book Wir wollen wissen wieviel Umsatz Vertreter Müller im Juni gemacht hat? Dazu klicken wir irgendwo in ein Feld und geben ein: =SVERWEIS

Mehr

geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Gehen wir einmal davon aus, dass die von uns angenommenen

geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Gehen wir einmal davon aus, dass die von uns angenommenen geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Vollständigkeit halber aufgeführt. Gehen wir einmal davon aus, dass die von uns angenommenen 70% im Beispiel exakt berechnet sind. Was würde

Mehr

Professionelle Seminare im Bereich MS-Office

Professionelle Seminare im Bereich MS-Office Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion

Mehr

Binär- und Hexadezimal-Zahl Arithmetik.

Binär- und Hexadezimal-Zahl Arithmetik. Binär- und Hexadezimal-Zahl Arithmetik. Prof. Dr. Dörte Haftendorn, MuPAD 4, http://haftendorn.uni-lueneburg.de Aug.06 Automatische Übersetzung aus MuPAD 3.11, 24.04.02 Version vom 12.10.05 Web: http://haftendorn.uni-lueneburg.de

Mehr

Übungen zu C++ Kapitel 1

Übungen zu C++ Kapitel 1 Übungen zu C++ Kapitel 1 Aufgabe 1 Ergänze den Text. a) Die sechs logischen Einheiten eines Computers sind Eingabe-Einheit, Ausgabe-Einheit, RAM, ALU, CPU, Plattenspeicher. b) Die Programme, welche Hochsprachenprogramme

Mehr

Erwin Grüner 09.02.2006

Erwin Grüner 09.02.2006 FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife

Mehr

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

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff Programmieren in C Macros, Funktionen und modulare Programmstruktur Prof. Dr. Nikolaus Wulff Der C Präprozessor Vor einem Compile Lauf werden alle Präprozessor Kommandos/Makros ausgewertet. Diese sind

Mehr

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I Das Rechnen in Zahlensystemen zur Basis b=2, 8, 10 und 16 Prof. Dr. Nikolaus Wulff Zahlensysteme Neben dem üblichen dezimalen Zahlensystem zur Basis 10 sind in der Informatik

Mehr

Tipp III: Leiten Sie eine immer direkt anwendbare Formel her zur Berechnung der sogenannten "bedingten Wahrscheinlichkeit".

Tipp III: Leiten Sie eine immer direkt anwendbare Formel her zur Berechnung der sogenannten bedingten Wahrscheinlichkeit. Mathematik- Unterrichts- Einheiten- Datei e. V. Klasse 9 12 04/2015 Diabetes-Test Infos: www.mued.de Blutspenden werden auf Diabetes untersucht, das mit 8 % in der Bevölkerung verbreitet ist. Dabei werden

Mehr

Summenbildung in Bauteiltabellen mit If Then Abfrage

Summenbildung in Bauteiltabellen mit If Then Abfrage Summenbildung in Bauteiltabellen mit If Then Abfrage Die in Bauteiltabellen ausgelesenen Werte lassen sich in jeder Spalte als Summe berechnen. So können selbstverständlich die Flächen der in der Tabelle

Mehr

Kurzanleitung. MEYTON Aufbau einer Internetverbindung. 1 Von 11

Kurzanleitung. MEYTON Aufbau einer Internetverbindung. 1 Von 11 Kurzanleitung MEYTON Aufbau einer Internetverbindung 1 Von 11 Inhaltsverzeichnis Installation eines Internetzugangs...3 Ist mein Router bereits im MEYTON Netzwerk?...3 Start des YAST Programms...4 Auswahl

Mehr

Erstellen einer PostScript-Datei unter Windows XP

Erstellen einer PostScript-Datei unter Windows XP Erstellen einer PostScript-Datei unter Windows XP Sie möchten uns Ihre Druckvorlage als PostScript-Datei einreichen. Um Fehler in der Herstellung von vorneherein auszuschließen, möchten wir Sie bitten,

Mehr

Kapitel 1. Zahlendarstellung. Prof. Dr. Dirk W. Hoffmann. Hochschule Karlsruhe w University of Applied Sciences w Fakultät für Informatik

Kapitel 1. Zahlendarstellung. Prof. Dr. Dirk W. Hoffmann. Hochschule Karlsruhe w University of Applied Sciences w Fakultät für Informatik Kapitel 1 Zahlendarstellung Prof. Dr. Dirk W. Hoffmann Hochschule Karlsruhe w University of Applied Sciences w Fakultät für Informatik Zahlensystemkonvertierung Motivation Jede nichtnegative Zahl z lässt

Mehr

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet C++ Grundlagen ++ bedeutet Erweiterung zum Ansi C Standard Hier wird eine Funktion eingeleitet Aufbau: In dieser Datei stehen die Befehle, die gestartet werden, wenn das Programm gestartet wird Int main()

Mehr

Im Original veränderbare Word-Dateien

Im Original veränderbare Word-Dateien Binärsystem Im Original veränderbare Word-Dateien Prinzipien der Datenverarbeitung Wie du weißt, führen wir normalerweise Berechnungen mit dem Dezimalsystem durch. Das Dezimalsystem verwendet die Grundzahl

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

Felder, Rückblick Mehrdimensionale Felder. Programmieren in C

Felder, Rückblick Mehrdimensionale Felder. Programmieren in C Übersicht Felder, Rückblick Mehrdimensionale Felder Rückblick Vereinbarung von Feldern: typ name [anzahl]; typ name = {e1, e2, e3,..., en} Die Adressierung von Feldelementen beginnt bei 0 Die korrekte

Mehr

Erstellen von x-y-diagrammen in OpenOffice.calc

Erstellen von x-y-diagrammen in OpenOffice.calc Erstellen von x-y-diagrammen in OpenOffice.calc In dieser kleinen Anleitung geht es nur darum, aus einer bestehenden Tabelle ein x-y-diagramm zu erzeugen. D.h. es müssen in der Tabelle mindestens zwei

Mehr

Java Einführung Operatoren Kapitel 2 und 3

Java Einführung Operatoren Kapitel 2 und 3 Java Einführung Operatoren Kapitel 2 und 3 Inhalt dieser Einheit Operatoren (unär, binär, ternär) Rangfolge der Operatoren Zuweisungsoperatoren Vergleichsoperatoren Logische Operatoren 2 Operatoren Abhängig

Mehr

Zahlensysteme: Oktal- und Hexadezimalsystem

Zahlensysteme: Oktal- und Hexadezimalsystem 20 Brückenkurs Die gebräuchlichste Bitfolge umfasst 8 Bits, sie deckt also 2 8 =256 Möglichkeiten ab, und wird ein Byte genannt. Zwei Bytes, also 16 Bits, bilden ein Wort, und 4 Bytes, also 32 Bits, formen

Mehr

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder Hinweise zur Übung Benötigter Vorlesungsstoff Ab diesem Übungskomplex wird die Kenntnis und praktische Beherrschung der Konzepte

Mehr

Wir arbeiten mit Zufallszahlen

Wir arbeiten mit Zufallszahlen Abb. 1: Bei Kartenspielen müssen zu Beginn die Karten zufällig ausgeteilt werden. Wir arbeiten mit Zufallszahlen Jedesmal wenn ein neues Patience-Spiel gestartet wird, muss das Computerprogramm die Karten

Mehr

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter Aufgabe 3: Konto Um Geldbeträge korrekt zu verwalten, sind zwecks Vermeidung von Rundungsfehlern entweder alle Beträge in Cents umzuwandeln und

Mehr

Zahlen auf einen Blick

Zahlen auf einen Blick Zahlen auf einen Blick Nicht ohne Grund heißt es: Ein Bild sagt mehr als 1000 Worte. Die meisten Menschen nehmen Informationen schneller auf und behalten diese eher, wenn sie als Schaubild dargeboten werden.

Mehr

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER Abamsoft Finos in Verbindung mit der Webshopanbindung wurde speziell auf die Shop-Software shop to date von DATA BECKER abgestimmt. Mit

Mehr

Mediator 9 - Lernprogramm

Mediator 9 - Lernprogramm Mediator 9 - Lernprogramm Ein Lernprogramm mit Mediator erstellen Mediator 9 bietet viele Möglichkeiten, CBT-Module (Computer Based Training = Computerunterstütztes Lernen) zu erstellen, z. B. Drag & Drop

Mehr

in vielen technischen und wissenschaftlichen Anwendungen erforderlich: hohe Präzision große Dynamik möglich durch Verwendung von Gleitkommazahlen

in vielen technischen und wissenschaftlichen Anwendungen erforderlich: hohe Präzision große Dynamik möglich durch Verwendung von Gleitkommazahlen Gleitkommazahlen in vielen technischen und wissenschaftlichen Anwendungen erforderlich: hohe Präzision große Dynamik möglich durch Verwendung von Gleitkommazahlen allgemeine Gleitkommazahl zur Basis r

Mehr

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016 L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016 Referentin: Dr. Kelly Neudorfer Universität Hohenheim Was wir jetzt besprechen werden ist eine Frage, mit denen viele

Mehr

Diana Lange. Generative Gestaltung Operatoren

Diana Lange. Generative Gestaltung Operatoren Diana Lange Generative Gestaltung Operatoren Begriffserklärung Verknüpfungsvorschrift im Rahmen logischer Kalküle. Quelle: google Operatoren sind Zeichen, die mit einer bestimmten Bedeutung versehen sind.

Mehr

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung. Lineare Gleichungen mit einer Unbekannten Die Grundform der linearen Gleichung mit einer Unbekannten x lautet A x = a Dabei sind A, a reelle Zahlen. Die Gleichung lösen heißt, alle reellen Zahlen anzugeben,

Mehr

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

4. BEZIEHUNGEN ZWISCHEN TABELLEN

4. BEZIEHUNGEN ZWISCHEN TABELLEN 4. BEZIEHUNGEN ZWISCHEN TABELLEN Zwischen Tabellen können in MS Access Beziehungen bestehen. Durch das Verwenden von Tabellen, die zueinander in Beziehung stehen, können Sie Folgendes erreichen: Die Größe

Mehr

183.580, WS2012 Übungsgruppen: Mo., 22.10.

183.580, WS2012 Übungsgruppen: Mo., 22.10. VU Grundlagen digitaler Systeme Übung 2: Numerik, Boolesche Algebra 183.580, WS2012 Übungsgruppen: Mo., 22.10. Aufgabe 1: Binäre Gleitpunkt-Arithmetik Addition & Subtraktion Gegeben sind die Zahlen: A

Mehr

LU-Zerlegung. Zusätze zum Gelben Rechenbuch. Peter Furlan. Verlag Martina Furlan. Inhaltsverzeichnis. 1 Definitionen.

LU-Zerlegung. Zusätze zum Gelben Rechenbuch. Peter Furlan. Verlag Martina Furlan. Inhaltsverzeichnis. 1 Definitionen. Zusätze zum Gelben Rechenbuch LU-Zerlegung Peter Furlan Verlag Martina Furlan Inhaltsverzeichnis Definitionen 2 (Allgemeine) LU-Zerlegung 2 3 Vereinfachte LU-Zerlegung 3 4 Lösung eines linearen Gleichungssystems

Mehr

Grundlagen der Theoretischen Informatik, SoSe 2008

Grundlagen der Theoretischen Informatik, SoSe 2008 1. Aufgabenblatt zur Vorlesung Grundlagen der Theoretischen Informatik, SoSe 2008 (Dr. Frank Hoffmann) Lösung von Manuel Jain und Benjamin Bortfeldt Aufgabe 2 Zustandsdiagramme (6 Punkte, wird korrigiert)

Mehr

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07) C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07) 1. Aufgabe 6 Punkte Geben Sie Definitionen an für: float var; 1 a) eine float-variable var: b) einen Zeiger pvar, der float *pvar = &var; 1 auf die

Mehr

OECD Programme for International Student Assessment PISA 2000. Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

OECD Programme for International Student Assessment PISA 2000. Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland OECD Programme for International Student Assessment Deutschland PISA 2000 Lösungen der Beispielaufgaben aus dem Mathematiktest Beispielaufgaben PISA-Hauptstudie 2000 Seite 3 UNIT ÄPFEL Beispielaufgaben

Mehr

Gleichungen Lösen. Ein graphischer Blick auf Gleichungen

Gleichungen Lösen. Ein graphischer Blick auf Gleichungen Gleichungen Lösen Was bedeutet es, eine Gleichung zu lösen? Was ist überhaupt eine Gleichung? Eine Gleichung ist, grundsätzlich eine Aussage über zwei mathematische Terme, dass sie gleich sind. Ein Term

Mehr

Dokumentation von Ük Modul 302

Dokumentation von Ük Modul 302 Dokumentation von Ük Modul 302 Von Nicolas Kull Seite 1/ Inhaltsverzeichnis Dokumentation von Ük Modul 302... 1 Inhaltsverzeichnis... 2 Abbildungsverzeichnis... 3 Typographie (Layout)... 4 Schrift... 4

Mehr

Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer

Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer Allgemein: Das RSA-Verschlüsselungsverfahren ist ein häufig benutztes Verschlüsselungsverfahren, weil es sehr sicher ist. Es gehört zu der Klasse der

Mehr

Repetitionsaufgaben Wurzelgleichungen

Repetitionsaufgaben Wurzelgleichungen Repetitionsaufgaben Wurzelgleichungen Inhaltsverzeichnis A) Vorbemerkungen B) Lernziele C) Theorie mit Aufgaben D) Aufgaben mit Musterlösungen 4 A) Vorbemerkungen Bitte beachten Sie: Bei Wurzelgleichungen

Mehr

Grundlagen der Informatik (BSc) Übung Nr. 5

Grundlagen der Informatik (BSc) Übung Nr. 5 Übung Nr. 5: Zahlensysteme und ihre Anwendung Bitte kreuzen Sie in der folgenden Auflistung alle Zahlensysteme an, zu welchen jeder Ausdruck als Zahl gehören kann! (Verwenden Sie 'x für Wahl, ' ' für Ausschluß

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Aufgaben zur C-Programmierung für die Praktikumsperiode des 1.Semesters

Aufgaben zur C-Programmierung für die Praktikumsperiode des 1.Semesters Prof. Dr. Ulrich Breitschuh Hochschule Anhalt(FH) Fachbereich Informatik Aufgaben zur C-Programmierung für die Praktikumsperiode des 1.Semesters Hinweis: Die Aufgaben 3, 6 und 8 sind testatpichtige Aufgaben.

Mehr

10.1 Auflösung, Drucken und Scannen

10.1 Auflösung, Drucken und Scannen Um einige technische Erläuterungen kommen wir auch in diesem Buch nicht herum. Für Ihre Bildergebnisse sind diese technischen Zusammenhänge sehr wichtig, nehmen Sie sich also etwas Zeit und lesen Sie dieses

Mehr