{KompaktSchreibWeise der Komplexen Zahl}
type komplex=record re,im:double;end;
{***************************************************************************}
{* PROCEDURE 1 *************** M E N U *************************************}
{***************************************************************************}
procedure MENU;
{Keine Rückgabe}
begin
textbackground(LightGray);
{Hellgrauer GesamtHintergrund}
window(1,1,80,25); clrscr;
{Erstellen des GesamtHintergrundes}
textbackground(Brown);
{Braunes MenuFenster}
window(7,1,74,15); clrscr;
{Erstellen des MenuFenster}
textcolor(Yellow);
{gelber Text}
gotoxy(7,2);write('* Taschenrechner für Komplexe Zahlen
(C)94 by Dave Sun*');
gotoxy(6,3);write('ÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄ');
textcolor(LightGray);
{Hellgrauer Text}
window(26,5,76,14);
{MenuFenster im MenuFenster erspart}
writeln('EINGABE................--> "1"'); {gotoxy}
writeln('ADDITION...............--> "2"');
writeln('SUBTRAKTION............--> "3"');
writeln('MULTIPLIKATION.........--> "4"');
writeln('DIVISION...............--> "5"');
writeln('BETRÄGE................--> "6"');
writeln('PROGRAMMENDE...........--> "ESC"');
textcolor(DarkGray);
{DunkelGrauer Text}
window(10,13,76,16);
{MenuFenster im MenuFenster}
writeln('Mit diesem Programm können Grundrechenarten
mit zwei Komlexen');
write('Zahlen ausgeführt werden. Wählen Sie mit
den Tasten 1 bis 6.');
textbackground(Red);
{Rotes EingabeFenster}
window(5,17,76,24); clrscr;
{Erstellen des EingabeFenster}
end;
{***************************************************************************}
{* PROCEDURE 2 *** F Ü R 'S M E N U
E I N G A B E **********************}
{***************************************************************************}
procedure MENU_EINGABE(var tast:char);
{Rückgabe eines Zeichens}
begin
textbackground(Brown);
{Braunes MenuFenster}
textcolor(White);
{Weißer Text sichtbarer Cursor}
window(70,14,70,14);clrscr;
{MenuFenster Positionieren}
while keypressed do tast:=readkey;
{Tastenpuffer leer machen}
repeat
{Read_Schleife}
tast:=readkey;
{Taste auslesen}
until ((ord(tast)=27)OR((tast>'0')AND(tast<'7'))); {ESC
oder Zahl von 1-6}
if ord(tast)=27 then tast:='0';
{ESC -> Null-Zeichen}
end;
{***************************************************************************}
{* PROCEDURE 3 ******** E I N G A B E **************************************}
{***************************************************************************}
procedure EINGABE(var zahl:KOMPLEX;nummer:BYTE); {nur Rückgabe
komlexe Zahl}
var fehler:word;
{Zum Ablegen des IOResult}
begin
textbackground(Red);
{Rotes AusgabeFenster}
textcolor(14);
{Gelber Text}
window(6,22,76,24);
{Erstellen des EingabeFenster}
{$I-}
{CompilerAnweisung: Ein-/Ausgabe-Prüfung "OFF"}
repeat
{Lese Schleife}
clrscr;
{MiniEingabeFenster löschen}
write('Geben Sie den Real - Teil der ',nummer,'
komlexen Zahl an : ');
readln(zahl.re);
{Eingabe RealTeil der Komplexen Zahl}
write('Geben Sie den Imaginär-Teil der ',nummer,' komlexen
Zahl an : ');
readln(zahl.im);
{Eingabe ImaginärTeil der Komplexen Zahl}
fehler:=IOResult;
{IOResultat auf FehlerVariable Ablegen}
if fehler<>0 then begin {Wurde eine unzulässige
Eingabe durchgeführt}
Sound(220);
{entspricht Beep}
Delay(200);
{SoundLänge 200ms}
NoSound;
{Sound ausschalten}
end;
until (fehler=0);
{ENDE der LeseSchleife, wenn kein Fehler}
{$I+}
{CompilerAnweisung: Ein-/Ausgabe-Prüfung "ON"}
clrscr;
{Nachträglich Fensterchen löschen}
end;
{***************************************************************************}
{* PROCEDURE 4 ****** Z A H L E N A U S G A B E ****************************}
{***************************************************************************}
procedure AUSGABE(k1,k2,k3:KOMPLEX; c:CHAR);
{keine Rückgabe}
begin
textbackground(Red);
{Rotes AusgabeFenster}
textcolor(LightRed);
{HellRoter Text}
window(14,18,76,21); clrscr;
{Erstellen des AusgabeFensters}
{Formatierte Ausgabe der Zahlen}
writeln(' Komplexe Zahl 1 = ',k1.re:10:8,'
',k1.im:10:8);
writeln(' Komplexe Zahl 2 = ',k2.re:10:8,'
',k2.im:10:8);
write(' Komplexe Zahl 3 = ',k3.re:10:8,'
',k3.im:10:8);
textcolor(Yellow);
{Gelber Text}
gotoxy(1,2);write(c);
{Ausgabe des Operators}
if c<>' ' then begin
{'=' nur wenn Operator<>' '}
gotoxy(1,3);
{'='- Zeichen Positionieren}
write('=');end;
{Ausgabe des Zeichens}
end;
{***************************************************************************}
{* PROCEDURE 5 ***** A D D I T I O N ***************************************}
{***************************************************************************}
procedure ADDITION(k1,k2:KOMPLEX;var k3:KOMPLEX);
{Rückgabe nur k3}
begin
k3.re:=k1.re+k2.re;
{RealTeile addieren}
k3.im:=k1.im+k2.im;
{ImaginärTeile addieren}
end;
{***************************************************************************}
{* PROCEDURE 6 ***** S U B T R A K T I O N *********************************}
{***************************************************************************}
procedure SUBTRAKTION(k1,k2:KOMPLEX;var k3:KOMPLEX);
{Rückgabe nur k3}
begin
k3.re:=k1.re-k2.re;
{RealTeile subtrahieren}
k3.im:=k1.im-k2.im;
{ImaginärTeile subtrahieren}
end;
{***************************************************************************}
{* Procedure 7 ***** M U L T I P L I K A T I O N ***************************}
{***************************************************************************}
procedure MULTIPLIKATION(k1,k2:KOMPLEX;var k3:KOMPLEX);
{Rückgabe nur k3}
begin
k3.re:=(k1.re*k2.re)-(k1.im*k2.im);
k3.im:=(k1.re*k2.im)+(k1.im*k2.re);
end;
{***************************************************************************}
{* Procedure 8 ****** D I V I S I O N **************************************}
{***************************************************************************}
procedure DIVISION(k1,k2:KOMPLEX;var k3:KOMPLEX);
{Rückgabe nur k3}
begin {a+bi -> Z-Quer=a-bi;
(a-bi)*(a+bi)=a^2+b^2}
if( (k2.re*k2.re)+(k2.im*k2.im) )<>0 then begin
{Nenner muß <>0 sein}
k3.re:=( (k1.re * k2.re )
+ (k1.im*k2.im) ) / {Bildung des RealTeils}
( (k2.re * k2.re ) + (k2.im*k2.im) );
k3.im:=( (k1.re * (-k2.im)) + (k1.im*k2.re)
) / {Bildung ImaginärTeil}
( (k2.re * k2.re ) + (k2.im*k2.im) );
end
else begin
{Ist Nenner = 0}
textbackground(Red);
{Rotes AusgabeFenster}
textcolor(14);
{Gelber Text}
window(15,22,40,24);
{Erstellen des FehlerFenster}
Sound(220);
{entspricht Beep}
Delay(200);
{SoundLänge 200ms}
NoSound;
{Sound ausschalten}
writeln('Division durch Null'); {FehlerAusgabe}
writeln('Bestätige mit Enter');
readln;
{Warten auf Enter}
clrscr;
{Schrott weglöschen}
k3.re:=0;k3.im:=0;
{löschen von k3}
end;
end;
{***************************************************************************}
{* Procedure 9 ****** B E T R Ä G E B I L D E
N **************************}
{***************************************************************************}
procedure BETRAEGE(k1,k2,k3:KOMPLEX);
{keine Rückgabe}
begin
textbackground(Red);
{Rotes AusgabeFenster}
textcolor(14);
{Gelber Text}
window(30,22,76,24);
{Erstellen des AusgabeFensters}
{Formatierte Ausgabe der ZahlenBeträge}
writeln('|Zahl 1| = ',sqrt(k1.re*k1.re+k1.im*k1.im):10:8);
writeln('|Zahl 2| = ',sqrt(k2.re*k2.re+k2.im*k2.im):10:8);
write ('|Zahl 3| = ',sqrt(k3.re*k3.re+k3.im*k3.im):10:8);
end;
{***************************************************************************}
{********** E N D E D E S P R O C E D U
R E N T E I L S ****************}
{***************************************************************************}
{***************************************************************************}
{************************* H A U P T P R O G R A M M **********************}
{***************************************************************************}
var aufgabe :CHAR;
{Variable zur Aufgaben Abfrage}
k1,k2,k3:KOMPLEX;
{Komplexe initialisieren}
begin
k1.re:=0.0; k1.im:=0.0;
{alle Zahlen auf Null setzen}
k2.re:=0.0; k2.im:=0.0;
{alle Zahlen auf Null setzen}
k3.re:=0.0; k3.im:=0.0;
{alle Zahlen auf Null setzen}
MENU;
{gesamte Oberfläche Ausgeben}
AUSGABE(k1,k2,k3,' ');
{Zeige die Null - Zahlen}
repeat
{Große ProgrammSchleife}
MENU_EINGABE(aufgabe);
{Was soll ich machen}
case aufgabe of
{Allgemeine Case Abfrage}
'0': begin textbackground(Black);
{Schwarzer GesamtHintergrund}
textcolor(LightGray); {HellGraue TextFarbe}
window(1,1,80,25); {Erstellen
des GesamtHintergrundes}
clrscr;end;
{Bildschirm löschen und Tschüß}
'1': begin k1.re:=0.0; k1.im:=0.0;
{Eingabe vorbereiten}
k2.re:=0.0; k2.im:=0.0; {alle Zahlen auf Null setzen}
k3.re:=0.0; k3.im:=0.0;
AUSGABE(k1,k2,k3,' '); {Zeige die Null - Zahlen}
EINGABE(k1,1);
{1.komlexe Zahl eingeben}
AUSGABE(k1,k2,k3,' '); {Ausgabe der aktuellen Zahlen}
EINGABE(k2,2);
{1.komlexe Zahl eingeben}
AUSGABE(k1,k2,k3,' ');end;{Ausgabe der aktuellen Zahlen}
'2': begin ADDITION(k1,k2,k3);
{Addition ausführen}
AUSGABE(k1,k2,k3,'+');end;{Ausgabe der aktuellen Zahlen}
'3': begin SUBTRAKTION(k1,k2,k3);
{Subtraktion ausführen}
AUSGABE(k1,k2,k3,'-');end;{Ausgabe der aktuellen Zahlen}
'4': begin MULTIPLIKATION(k1,k2,k3);
{Multiplikation ausführen}
AUSGABE(k1,k2,k3,'*');end;{Ausgabe der aktuellen Zahlen}
'5': begin DIVISION(k1,k2,k3);
{Division ausführen}
AUSGABE(k1,k2,k3,':');end;{Ausgabe der aktuellen Zahlen}
'6': BETRAEGE(k1,k2,k3);
{Beträge bilden und Ausgabe}
else writeln('keine Funktion!');
{Sicherheitshalber nochmal else}
end;
{ENDE der Case Anweisung}
until (aufgabe='0');
{ENDE der Großen ProgrammSchleife}
end.
{***************************************************************************}
{***************** E N D E H A U P T P R O G R A M
M ********************}
{***************************************************************************}