hm anfängerin...

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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.
  • also ich stell mal das bruchrechnungsprog mal rein was ich gemacht hab... ich willhalt nur wissen ob des richtig is

    Quellcode

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

    Quellcode

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


    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!

    Quellcode

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

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • 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)
  • 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:

    Quellcode

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

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]