
______________________________________________________________

Aufgabe 1.1
___________
Quelltext:

MODULE euro EXPORTS Main;
IMPORT IO;

VAR wert: REAL;
VAR proof: INTEGER;

BEGIN

	IO.Put("Geben sie den umzuwandelnden DM-Wert im Format 1.00 ein: \n");
	IO.Put("DM: ");
	wert:= IO.GetReal();

(*****************************************************************************)
(* Um zu pruefem, ob "wert" 2 Nachkommastellen hat, wird der Inhalt 2 Stellen*)
(* nach links gerueckt. Ist dieser Wert gleich seinem gerundeten Wert, so ist*)
(* die Bedingung erfuellt.                                                   *)
(*****************************************************************************)

	wert:= wert * 100.0;
	proof:= ROUND(wert);

	(* Pruefe: gerundeter Wert als Fliesskommazahl gleich Original?*)
	(* Wenn ja: Fahre fort; Sonst: Fehlermeldung, Abbruch.         *)
	IF FLOAT(proof)= wert THEN	
		(* 0 und negative Werte koennen 2 Nachkommastellen haben.*)
		(* Pruefe: eingegebener Wert ist groesser 0?             *)
		(* Wenn ja: Fahre fort; Sonst: Fehlermeldung, Abbruch.   *)
		IF wert>0.0 THEN
			wert:= wert / 1.95583; (*Berechne Wert in Euro*)
			(* Wert wird gerundet, und anschliessend wieder   *)
			(* 2 Stellen nach rechts gerueckt, um das Ergebnis*)
			(* mit 2 Nachkommastellen angeben zu koennen.     *)
			proof:=ROUND(wert);
			wert:= FLOAT(proof) / 100.0;
			IO.Put("Kurs 1.95583/1: \n");
			IO.Put("EURO: ");
			IO.PutReal(wert);
			IO.Put("\n");
		ELSE
			IO.Put("Sie haben einen Wert kleiner oder gleich \n");
			IO.Put("Null eingegeben. \n");
			IO.Put("Verwenden sie bitte nur Werte, die \n");
			IO.Put("positive Geldbetraege darstellen.");
		END;
	ELSE
		IO.Put("Sie haben einen Wert mit zu vielen Nachkommata \n");
		IO.Put("angegeben. Bitte verwenden sie nur 2 Nachkomma- \n");
		IO.Put("stellen. \n");
	END;

END euro.

Testlauf:

Geben sie den umzuwandelnden DM-Wert im Format 1.00 ein:
DM: 1.00
Kurs 1.95583/1:
EURO: 0.51

Geben sie den umzuwandelnden DM-Wert im Format 1.00 ein:
DM: 0.51
Kurs 1.95583/1:
EURO: 0.26

Geben sie den umzuwandelnden DM-Wert im Format 1.00 ein:
DM: 2000.00
Kurs 1.95583/1:
EURO: 1022.58

Geben sie den umzuwandelnden DM-Wert im Format 1.00 ein:
DM: 0
Sie haben einen Wert kleiner oder gleich
Null eingegeben.
Verwenden sie bitte nur Werte, die
positive Geldbetraege darstellen.

Geben sie den umzuwandelnden DM-Wert im Format 1.00 ein:
DM: -10
Sie haben einen Wert kleiner oder gleich
Null eingegeben.
Verwenden sie bitte nur Werte, die
positive Geldbetraege darstellen.

Testlaufende.

Aufgabe 1.2
___________
Quelltext:

MODULE min EXPORTS Main;
IMPORT IO;

VAR Min: INTEGER;
VAR Max: INTEGER;

BEGIN

Min:=LAST(INTEGER);

(* Um das jeweilige Minimum zu bestimmen, lese endlos einen Wert ein *)
(* und vergleiche mit dem vorhergenden. Behalte den kleineren Wert   *)
(* und gib ihn aus.                                                  *)

  LOOP

     IO.Put("Geben sie einen zu vergleichenden Wert ein: ");
     Max:= IO.GetInt();

     (* Pruefe: Eingabe negativ. Wenn ja, Abbruch. Sonst, setze fort. *)
     IF Max<0 THEN
	IO.Put("Der eingegebene Wert ist negativ. Programmabbruch.\n");
	EXIT;
     END;

     (* Pruefe: Eingabe kleiner als bisher kleinster Wert. Wenn ja, ersetze *)
     (* alten Wert durch neuen. Sonst, setze fort.                          *)
     IF Max<Min THEN
	IO.Put("\nDas neue Minimum lautet: ");
	Min:=Max;
     ELSE
	IO.Put("\nAltes Minimum ist auch das neue Minimum: ")
     END;

     IO.PutInt(Min);
     IO.Put("\n");

  END;

END min.

Testlauf:

Geben sie einen zu vergleichenden Wert ein: 20

Altes Minimum ist auch das neue Minimum: 20
Geben sie einen zu vergleichenden Wert ein: 10

Das neue Minimum lautet: 10
Geben sie einen zu vergleichenden Wert ein: 30

Altes Minimum ist auch das neue Minimum: 10
Geben sie einen zu vergleichenden Wert ein: 25

Altes Minimum ist auch das neue Minimum: 10
Geben sie einen zu vergleichenden Wert ein: 9

Das neue Minimum lautet: 9
Geben sie einen zu vergleichenden Wert ein: 50

Altes Minimum ist auch das neue Minimum: 9
Geben sie einen zu vergleichenden Wert ein: 35

Altes Minimum ist auch das neue Minimum: 9
Geben sie einen zu vergleichenden Wert ein: 5

Das neue Minimum lautet: 5
Geben sie einen zu vergleichenden Wert ein: 40

Altes Minimum ist auch das neue Minimum: 5
Geben sie einen zu vergleichenden Wert ein: -20
Der eingegebene Wert ist negativ. Programmabbruch.

Testlaufende.

Aufgabe 1.3
___________
Quelltext:

MODULE teiler EXPORTS Main;
IMPORT IO;

VAR a: INTEGER; (* Begrenzung der zu berechnenden Werte im positiven Bereich *)
VAR b: INTEGER; (* Zahl zu der Vielfache zu best. sind.                      *)

BEGIN

a:=10;

(*Um ganzzahlige Teiler zu bestimmen, Lese endlos obere Grenze und Teiler ein*)
(*und gib Zahlen von 0 bis a aus, welche bei ganzzahliger Division mit dem   *)
(*dem Teiler b ohne Rest teilbar sind.                                       *)
  LOOP

     IO.Put("Bitte geben sie einen Grenzwert groesser 0 ein: ");
     a:= IO.GetInt();

     IO.Put("Bitte geben sie den Teiler ein: ");
     b:= IO.GetInt();

     (*Enthaelt der zu bestimmende Bereich 0 bis a kein Element, dann Abbruch*)
     IF a<1 THEN
	IO.Put("Wertebereich ist leer!\n");
	EXIT;
     END;

     IO.Put("Vielfache:");

     (*Gib von 0 bis a alle Zahlen aus, die bei ganzzahliger Division mit dem*)
     (*Teiler b keinen Rest ergeben; also Vielfache von b sind.              *)
     FOR i:=1 TO a DO
	IF (i MOD b)=0 THEN
	    IO.PutInt(i);
	    IO.Put(" ");
	END;
     END;

     IO.Put("\n");

  END;

END teiler.

Testlauf:

Bitte geben sie einen Grenzwert groesser 0 ein: 20
Bitte geben sie den Teiler ein: 1
Vielfache:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Bitte geben sie einen Grenzwert groesser 0 ein: 20
Bitte geben sie den Teiler ein: 3
Vielfache:3 6 9 12 15 18
Bitte geben sie einen Grenzwert groesser 0 ein: 15
Bitte geben sie den Teiler ein: 5
Vielfache:5 10 15
Bitte geben sie einen Grenzwert groesser 0 ein: 20
Bitte geben sie den Teiler ein: 40
Vielfache:

Testlaufende.