You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Wednesday, January 10th 2007, 6:58pm

hm anfängerin...

Also ich hab ein schwerwiegendes Problem.... Meine Info Lehrerin kommt aus Russland und kann eigentlich niemanden Informatik vermitteln weil sie 1.meint sie muss uns nichts erklären 2. sie kann nicht wirklich deutsch.
Von daher wollt ich wissen ob mir hier jemand bisschen bei Pascal helfen kann also ich selbst kann so halb alles schreiben und so weiter aber brauch jemanden der mir wenigstens sagt ob das wasich geschrieben habe richtig ist. von daher bitte meldet euch ganz schnell. schreib nämlich morgen sogar nen test.

2

Wednesday, January 10th 2007, 8:37pm

Klar, wo ist denn genau das Problem?

3

Wednesday, January 10th 2007, 9:26pm

also ich stell mal das bruchrechnungsprog mal rein was ich gemacht hab... ich willhalt nur wissen ob des richtig is

Delphi Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Program Bruchrechnung;
    Var b1,b2,s,k,n1,n2,z1,z2:REAL;
  Begin
  b1:=z1/n1;
  b2:=z2/n2;
  writeln('Geben sie einen zähler und nenner ein für den ersten bruch')
  readln(z1,n1)
  writeln('Nun dasselbe für den 2. bruch')
  readln(z2,n2)
  writeln('Entscheiden sich ob die brüche addiert(1),subtrahiert(2),multipliziert(3) oder dividiert(4) werden sollen')
  readln(k)
   if k=1 then
   s:=b1+b2
   else begin
     if k=2 then 
     s:=b1-b2
     else begin
       if k=3 then
       s:=b1*b2
       else begin
         if k=4 then
         s:=b1/b2
         end;
       end;
      end;
    end.
writeln('das ergebnis der rechnung ist =',k:2:2)
end.[

4

Wednesday, January 10th 2007, 10:01pm

nebenbei:
Syntax Delphi ist sehr praktisch zum lesen:

Delphi Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Program Bruchrechnung;
 Var b1,b2,s,k,n1,n2,z1,z2:REAL;
Begin
b1:=z1/n1;
b2:=z2/n2;
writeln('Geben sie einen zähler und nenner ein für den ersten bruch')
readln(z1,n1)
writeln('Nun dasselbe für den 2. bruch')
 readln(z2,n2)
writeln('Entscheiden sich ob die brüche addiert(1),subtrahiert(2),multipliziert(3) oder dividiert(4) werden sollen')
readln(k)
if k=1 then
s:=b1+b2
else begin
if k=2 then
s:=b1-b2
else begin
if k=3 then
s:=b1*b2
else begin
if k=4 then
s:=b1/b2
end;
end;
end;
end.
writeln('das ergebnis der rechnung ist =',k:2:2)
end.


b1:=z1/n1;
b2:=z2/n2;

macht am anfang wenig sinn, da du zuerst n1, n2 usw. einlesen musst.
(du kannst hier keine formeln festlegen, sondern nur werte zuweisen)
für den unteren Teil wäre wohl ein case schöner wenn du das nicht aus einem Grund vermeiden willst.
Zähler und nenner sind normalerweise ganzzahlig => integer

Strichpunkte nicht vergessen!

Delphi Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Program Bruchrechnung;
var
  s, b1,b2: REAL;
  k,n1,n2,z1,z2: Integer;
begin
  readln(z1,n1);
  writeln('Nun dasselbe für den 2. bruch');
  readln(z2,n2);
  writeln('Entscheiden sich ob die brüche addiert(1),subtrahiert(2),multipliziert(3)  oder dividiert(4) werden sollen');
  readln(k);
  b1:=(real)z1/n1;
  b2:=(real)z2/n2;
  case k of
    1: s := b1 + b2;
    2: s := b1-b2;
    3: s:= b1*b2;
    4: s := b1/b2;
  end;
  writeln('das ergebnis der rechnung ist =',k:2:2)
end.

5

Wednesday, January 10th 2007, 10:03pm

Da sind noch ein paar Probleme in dem Code. Ich werde mal auflisten was mir beim drüberfliegen aufgefallen ist (Fehler und Verbesserungsvorschläge):

1. Division durch 0: Es gibt mehrere Möglichkeiten in deinem Programm durch 0 zu teilen. Da das Ergebnis nicht definiert ist und du den Fehlerfall nicht abfängst wird dein programm abbrechen.
2. Du teilst z1 durch n1 und DANACH lässt du dir überhaupt Werte geben, die Reihenfolge ist so also falsch.
3. Das Ergbnis deiner Berechnung ist eine Dezimalzahl. Ich kenne die Aufgabenstellung nicht, aber es ist oftmals gewünscht, dass das Ergebnis als Bruch ausgegeben werden soll. Wenn ja brauchst du noch mindestens eine Funktion fürs kürzen.
4. Deine Variablen sind alle vom Typen REAL. Es ist unüblich zwei Kommazahlen in einem Bruch anzugeben, ich würde da einen Integer verwenden.

6

Wednesday, January 10th 2007, 10:04pm

Da war jemand schneller...

7

Wednesday, January 10th 2007, 10:08pm

Wegen Division durch 0 seh ich kein Problem:
Die Fehlermeldung, die Delphi hier automatisch erzeugt ist aussagekräftig, das Programm beenden sinnvoll

OK wenns eine andere Pascal-Version ist währe eine (andere) Fehlermeldung vll nötig

Brüche kürzen reicht nicht, man müsste die rechenarten auch umschreiben, gerade bei +/- nicht ganz trivial (aber machbar)

8

Wednesday, January 10th 2007, 10:33pm

Wenn man kürzen kann ist Addition und Subtraktion ein Kinderspiel, man muss nur die Zähler mit dem Nenner des anderen Multiplizieren und die beiden Nenner und das ganze addieren/subtrahieren. Für den Rest gibt es ja kürzen, ist ein Vierzeiler.

Zum Teilen durch 0: Ich weiß sehrwohl das Delphi Exceptions hat und die auch wunderschöne MessaBoxen erzeugen. Wenn man die aber nicht behandelt, springt Delphi autmomatisch aus der Prozedur raus. Es ist als undefiniert was in den Registern steht und damit auch das Funktionsergebnis einer Funktion. Ich bin deswegen kein Freund von unbehandelten Exceptions. Es beendet also nicht wirklich sinnvoll, viel eher macht er in einem undefinierten Zustand weiter.
Ich bin mir nicht sicher ob es Pascal ist, ich würde aber darauf tippen und wenn dem so ist hab ich noch einen 5. Hinweis: Es fehlt das benutzen der Unit crt.
Wärs Delphi würde es sich um einen Konsolenprogramm handeln (wo die Fehlerbehandlung schon etwas anders aussieht) und Delphi hätte eine Compilerdirektive {$APPTYPE CONSOLE} eingefügt die ich aber auch nirgends sehen kann.

Zur Delphi-Fehlerbehandlung in der Konsole: Nimm dieses Programm compile es mit deinem Delphi, und dann schließe Delphi und starte die .exe selber (also Doppelklick oder aus der Konsole), du wirst sehen da ists Essig mit der Fehlermeldung:

Delphi Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
 SysUtils;
 
var 
 a, b: Integer;
 m: Real;
begin
 a:=1;
 b:=0;
 m:=a/b;
 writeln(m);
end.

9

Thursday, January 11th 2007, 12:00pm

ah danke also ^^ ich hab jetzt den test geschrieben . aber bruchrechnung kam nicht vor von daher nochmal glück gehabt. aber trotzdem weiß ich jetzt wenigstens was ich falsch gemacht hab.

Similar threads

Social bookmarks