Zum Navigations-Menü
Kein Layout? Lesen Sie hier, warum...

Turbo Pascal

Forum



Alle Dateien dieses Themas

Dateiname Dateigröße geschrieben von Datum
BRUCHMAT.PAS2.7KBfenix28.05.10 19:27Nachricht lesen
DIALOG.PAS5.9KBfenix28.05.10 19:28Nachricht lesen
BRUCHREC.pas3.8KBBP9207.06.10 22:49Nachricht lesen
BRUCH.PAS4KBBP9213.06.10 14:46Nachricht lesen

1 Bruchrechenen

Autor: <Thomas> (G) (IP bekannt)
Datum: 27. Mai. 2010 16:28

Hallo,
ich programmiere in der schule mit turbopascal und komme nicht gerade gut damit zurecht.Das ist auch der Grund warum ich zu euch schreibe.Wir programmieren zurzeit ein bruchrechen programm,welches den stellenwert einer klassenarbeit hat.Da ich eine gute note haben möchte, hoffeich auf eure Unterstützung.

Das folgende Programm soll 2 Brüche addieren,subtrahieren,dividieren und multiplizieren können.
So weit bin ich bisher gekommen. Wenn jemand einen fehlker entdeckt bitte verbessern.auch wäre es schön wenn mir jemand das programm weiter schreiben könnte da ich zum jetztigen Zeitpunkt total auf dem schlauch stehe.

Hier das Programm:

PROGRAM bruchrechner_mit_record; (* Die elegantere Methode! Entrup, April 2010 *)

CONST links=2;   (* Spalte zur Eingabe des ersten Bruches *)
      rechts=30;
     

Type t_bruch=Record
               zaehler : Longint;
               nenner  : Longint;
             END;
...

VAR bruch1, ... : t_bruch;
...........


Procedure Eingabe(var bruch1);
begin
  writeln('Geben sie einen Zaehler ein: ');
  readln(bruch1.zaehler);
  writeln('Geben sie einen Nenner ein: ');
  readln(bruch1.nenner);
end;


function ggt(x,y:longint):longint;
begin
  repeat
    if x>y then x:=x-y else y:=y-x;
  until x=y;
  ggt:=x;
end; 

procedure kuerzen(var bruch1:t_bruch);
begin
  bruch1.zaehler:= bruch1.zaehler div ggt(bruch1.zaehler,bruch1.nenner);
  bruch1.nenner:=bruch1.nenner div ggt (bruch1.zaehler,bruch1.nenner);
end;

BEGIN
  Initialisierung;  (* Variablen auf Null, Bildschirm frei usw.. *)
  Maske; (* Bildschirm wird vorbereitet, Hinweise an Benutzer, Einteilung Brüche, Bruchstriche usw... *)
  REPEAT
    eingabe(bruch1, links);
    kuerzen(bruch1);
    eingabe(operator);
    eingabe(bruch2, rechts);
    kuerzen(bruch2);
    case operator of
      '+' : Addition(bruch1, bruch2, ergebnisbruch);
      '-' : Subtraktion(...);
      '*' : Multiplikation(...);
      '/' : Division(...);
    END;
    kuerzen(ergebnisbruch);
    Ausgabe(...);
  UNTIL NOT weiter;
  Abschied; (* freundlich verabschiedet man sich vom Benutzer *)
END.



Das Hauptprgramm sowie der global festgelegte teil ist vom lehrer vorgeschrieben und darf nicht geändert werden !!!
Vielen Dank für eure HIlfe

Antworten | Zitieren

2 Re: Bruchrechenen

Bewertungen: 0 negativ/0 positiv

Autor: BP92 (R) (IP bekannt)
Datum: 27. Mai. 2010 19:30

Hallo,

was ich bisher sehe, ist schon nicht schlecht. Bei der Prozedur "Eingabe()" fehlt der Datentyp t_Bruch, sonst wirds nicht kompilieren.

Das mit dem Kuerzen sieht auch soweit richtig aus. An welcher Stelle kommst du also nicht weiter? Wie du auf "ergebnisbruch" kommst, oder wie die Ausgabe aussehen soll, oder...?

Wann schreibst du denn diese Arbeit. (Nicht etwa schon morgen, nehm ich mal an...) :)

-- 
PASCAL Programmierer aus Leidenschaft

Turbo Pascal Beispiele fuer Anfaenger: [www.webplain.de]

Momentane Projekte:
-----------------------
Konsolen-Adventure Game mit FreePascal (im Denkpause-Forum) [www.webplain.de]
Funktionsplotter und -rechner; Vorabversion gibt's hier: [www.webplain.de]
Objektorientierte Textmodus-GUI; Release-Termin: groesstenteils fertig

Antworten | Zitieren

3 Re: Bruchrechenen

Bewertungen: 0 negativ/0 positiv

Autor: fenix (R) (IP bekannt)
Datum: 28. Mai. 2010 19:30

Hi Thomas,
ich hatte mal dieses Programm ins Forum gehängt, vielleicht kannst Du da etwas nutzen. Hier eine " Kopie des Beitrags" mit den Dateien.

Gruß
fenix


" Autor: fenix   (R)   (IP bekannt)
Datum: 11. Jan. 2010 16:02

Hi gerrit rohling

hier hänge ich eine Programm-Quelle  (zu Turbo Pascal) an, die mein Freund Dr. (Math) Fuhrmann (+) in konzentrierter Form erstellt hat.

Es handelt sich um Bruchrechnen mit + - * /  Rechnungen.

Mit dem Code kannst Du sicher etwas anfangen, versuchs mal mit dem kompilierten Programm, die Benutzerseite ist etwas typisch (spartanisch) für einen Mathe-Dr.

Einfach mal anschauen und vielleicht lernen und verstehen :)

MfG
fenix

PS. da gibts schon mal einen Hinweis im Nov 2008 auf ggt (aus diesem Programm)

PPS. Rückmeldungen / Kommentare sind Hilfen für Helfer  :)



2 mal bearbeitet. Zuletzt am 12.01.10 14:34 von fenix.

Anhänge:

    * BRUCHMAT.PAS (2.7KB)
    * DIALOG.PAS (5.9KB)   "

Anhänge:

Antworten | Zitieren

4 Re: Bruchrechenen

Bewertungen: 0 negativ/0 positiv

Autor: <Thomas> (G) (IP bekannt)
Datum: 30. Mai. 2010 20:06

danke fenix für den tipp,
aber beim ausführen deines programms kommen bei mir fehlermeldungen auf.

ZU BP92: ja ich bin jetzt etwas weiter gekommen zu dem programm pben habe ich zwischen di procedure kuerzen und dem Hauptprogramm  noch folgende sachen programmiert:


procedure eingabe_operator(var operator:char);
begin
  repeat
  writeln('welchen Operator moechten sie haben (+,-,*,/)');
  readln(operator);
  until operator IN ['+','-','*','/']
end;


function kgv(a,b:longint):longint;
begin
  kgv:= a DIV ggt(a,b) * b;
end;
   

procedure addition(var bruch1,bruch2,ergebnisbruch:t_Bruch);
begin
  ergebnisbruch.nenner:=kgv(bruch1.nenner,bruch2.nenner);
  ergebnisbruch.zaehler:=ggt(  


beim kürzen des ergebnisbruch.zaehler stehe ich momentan auf dem schlauch.
wäre nett wenn wir jemand da helfen könnte.ist der rest denn auch in ordnung?

hätte jemand eine idee wie ich die procedure multiplikation und division nach dem gleichen schema wie in der procedure addition programmieren könnte

Antworten | Zitieren

5 Re: Bruchrechenen

Bewertungen: 0 negativ/0 positiv

Autor: BP92 (R) (IP bekannt)
Datum: 30. Mai. 2010 20:17

Hi Thomas,

das Eingeben des Rechenoperators kannst auch so machen:

VAR
  cOp: CHAR;
...
  REPEAT
    cOp:=READKEY;
  UNTIL (cOp IN ['+','-','*','/']);
  WRITE(cOp);
...

Dann sparst du dir die Prozedur, oder du definierst gleich eine FUNCTION, die den Operator als CHAR zurueckgibt. ;) Dadurch laesst sich die Verwendung von zu vielen globalen Variablen vermeiden.

Ueber den Rest muss ich noch mal kurz gruebeln, jedenfalls musst du bei der Addition eines Bruches das kgv() der beiden Nenner finden. Bsp:
2/4 + 1/8
Da musst du als Ergebnis dann die 8 bekommen, am besten auch als FUNCTION realisiert. Dann die 2 mit (8 DIV 4) erweitern und dann hast den Zaehler richtig. Nach Addition der beiden Zaehler kommt als Ergebnis dann 5/8 raus...

Codebeispiel bastel ich dann auch mal :)

-- 
PASCAL Programmierer aus Leidenschaft

Turbo Pascal Beispiele fuer Anfaenger: [www.webplain.de]

Momentane Projekte:
-----------------------
Konsolen-Adventure Game mit FreePascal (im Denkpause-Forum) [www.webplain.de]
Funktionsplotter und -rechner; Vorabversion gibt's hier: [www.webplain.de]
Objektorientierte Textmodus-GUI; Release-Termin: groesstenteils fertig

Antworten | Zitieren

6 Re: Bruchrechenen

Bewertungen: 0 negativ/0 positiv

Autor: fenix (R) (IP bekannt)
Datum: 31. Mai. 2010 10:11

Zitat <Thomas>:

danke fenix für den tipp,
aber beim ausführen deines programms kommen bei mir fehlermeldungen auf.

beim kürzen des ergebnisbruch.zaehler stehe ich momentan auf dem schlauch.
wäre nett wenn wir jemand da helfen könnte. ist der rest denn auch in ordnung?


Hi Thomas<>  Das Kürzen steht explizit in dem Programm 'Bruchmat'.

Procedure kuerze(Var b:Bruch);
  Var
    z,n,t:Integer;
  Begin
    With b Do Begin
      z:= Zaehler; n:= Nenner;
      t:= ggt(z,n) ;
      Zaehler:=z Div t; Nenner:=n Div t;
      If t=1 Then teilerfremd:= True
      Else teilerfremd:=False;
    End
  End;

Diese Prozedur wird bei der Ausgabe aufgerufen...

Procedure Ausgabe(Var b:Bruch);
  Begin
    kuerze(b); GotoXY(50,2);
    With b Do Begin
      Writeln ('Ergebnis: ',Zaehler,'/',Nenner);
      If Not teilerfremd Then Begin
        GotoXY(50,4); Writeln('gekrzt!')
      End {von if}
    End   {von With}
  End;    {von Ausgabe}

wünsche viel Erfolg,  vielleicht kannst Du etwas verwenden, halt evtl. die Variablennamen ändern....
Gruß
fenix

Antworten | Zitieren

7 Re: Bruchrechenen

Bewertungen: 0 negativ/0 positiv

Autor: <Thomas> (G) (IP bekannt)
Datum: 07. Jun. 2010 15:49

Hallo,
entschuldigung, dass ich so spät zurückschreiben,aber ich habe erstmal versucht vllt ein bisschen ohne hilfe weiterzukommen.das hab ich auch geschaft :

Mein programm sieht im moment so aus:

PROGRAM bruchrechner_mit_record; (* Die elegantere Methode! Thomas, Juni 2010 *)

CONST links=2;   (* Spalte zur Eingabe des ersten Bruches *)
      rechts=30;
     

Type t_bruch=Record
               zaehler : Longint;
               nenner  : Longint;
             END;


VAR bruch1,bruch2,ergebnisbruch : t_bruch;



procedure Maske;
begin
clrscr;
  gotoxy(8,8);
  write(bruch1.zaehler );
  gotoxy(8,9);
  write('-----------' );
  gotoxy(8,10 );
  write(bruch1.nenner);
  gotoxy(20,9 );
  write(operator);
  gotoxy(32,8 );
  write(bruch2.zaehler );
  gotoxy(32,9);
  write('-----------' );
  gotoxy(32,10);
  write(bruch2.nenner);
  gotoxy(44,10);
  write('=');
  gotoxy(56,8 );
  write(ergebnisbruch.zaehler );
  gotoxy(56,9);
  write('-----------' );
  gotoxy(56,10);
  write(ergebnisbruch.nenner);
end;



Procedure eingabe(var bruch1:t_Bruch);
begin
  writeln('Geben sie einen Zaehler ein: ');
  readln(bruch1.zaehler);
  writeln('Geben sie einen Nenner ein: ');
  readln(bruch1.nenner);
end;


function ggt(x,y:longint):longint;
begin
  repeat
    if x>y then x:=x-y else y:=y-x;
  until x=y;
  ggt:=x;
end; 


procedure kuerzen(var bruch1:t_bruch);
begin
  bruch1.zaehler:= bruch1.zaehler div ggt(bruch1.zaehler,bruch1.nenner);
  bruch1.nenner:=bruch1.nenner div ggt (bruch1.zaehler,bruch1.nenner);
end;


procedure eingabe_operator(var operator:char);
begin
  repeat
  writeln('welchen Operator moechten sie haben (+,-,*,/)');
  readln(operator);
  until operator IN ['+','-','*','/']
end;


function kgv(a,b:longint):longint;
begin
  kgv:= a DIV ggt(a,b) * b;
end;
   

procedure addition(var bruch1,bruch2,ergebnisbruch:t_Bruch);
var k:longint;
begin
begin
  ergebnisbruch.nenner:=kgv(bruch1.nenner,bruch2.nenner);
  k:=kgv(bruch1.nenner,bruch2.nenner) * bruch1.zaehler;
  ergebnisbruch.zaehler:=k +  kgv(bruch1.nenner,bruch2.nenner) * bruch2.zaehler;
end;
Kuerzen(ergebnisbruch);
end;

procedure subtraktion(var bruch1,bruch2,ergebnisbruch:t_Bruch);
var k:longint;
begin
begin
  ergebnisbruch.nenner:=kgv(bruch1.nenner,bruch2.nenner);
  k:=kgv(bruch1.nenner,bruch2.nenner) * bruch1.zaehler;
  ergebnisbruch.zaehler:=k -  kgv(bruch1.nenner,bruch2.nenner) * bruch2.zaehler;
end;
Kuerzen(ergebnisbruch);
end;


procedure Multiplikation(var bruch1,bruch2,ergebnisbruch:t_Bruch);
begin
begin
  ergebnisbruch.nenner:=bruch1.nenner * bruch2.nenner;
  ergebnisbruch.zaehler:=bruch1.zaehler * bruch2.zaehler;
end;
 Kuerzen(ergebnisbruch);
end;


procedure Division(var bruch1,bruch2,ergebnisbruch:t_Bruch);
begin
begin
  ergebnisbruch.nenner:=bruch1.nenner * bruch2.zaehler;
  ergebnisbruch.zaehler:=bruch1.zaehler * bruch2.nenner;
end;
 Kuerzen(ergebnisbruch);
end;


procedure Ausgabe(ergebnisbruch:t_Bruch);
begin
  writeln(ergebnisbruch.zaehler);
  writeln(ergebnisbruch.nenner);
end;


BEGIN
  clescr;

  Initialisierung;  (* Variablen auf Null, Bildschirm frei usw.. *)
  Maske; (* Bildschirm wird vorbereitet, Hinweise an Benutzer, Einteilung Brüche, Bruchstriche usw... *)
  REPEAT
    eingabe(bruch1, links);
    kuerzen(bruch1);
    eingabe(operator);
    eingabe(bruch2, rechts);
    kuerzen(bruch2);
    case operator of
      '+' : Addition(bruch1, bruch2, ergebnisbruch);
      '-' : Subtraktion(...);
      '*' : Multiplikation(...);
      '/' : Division(...);
    END;
    kuerzen(ergebnisbruch);
    Ausgabe(...);
  UNTIL NOT weiter;
  Abschied; (* freundlich verabschiedet man sich vom Benutzer *)
END.



Bei der procedure maske kriselt es bei mir auf grund von fehlermeldunegn. kann mir da eine alternative lösung geben, damit die procedur richtig ist? Desweiteren habe ich keine idee was ich bei der procedure initalisierung machne muss.
ist das programm denn sonst soweit in ordnung?

mfg Fabian

Antworten | Zitieren

8 Re: Bruchrechenen

Bewertungen: 0 negativ/0 positiv

Autor: fenix (R) (IP bekannt)
Datum: 07. Jun. 2010 18:58

Hi Thomas,

die Maske wird zuerst aufgerufen,

welche Ergebnisse (Zaehler, Nenner) werden da ausgegeben?

Gruß fenix

Antworten | Zitieren

9 Re: Bruchrechenen

Bewertungen: 0 negativ/0 positiv

Autor: BP92 (R) (IP bekannt)
Datum: 07. Jun. 2010 22:00

Hallo zusammen,

@ Thomas: die von dir gezeigte Procedure Kuerzen arbeitet voellig falsch. Wenn du den Zaehler veraenderst, solange der Nenner noch nicht bearbeitet wurde, liefert der zweite Aufruf des Ggt() nur durch Zufall mal den richtige Wert (wie das z.B. bei 4/6 der Fall ist).

Loesung: Du musst den Wert, durch den Zaehler und Nenner dividiert werden, in einer Variable zwischenspeichern und dann Zaehler und Nenner durch diesen Wert mittels DIV-Operator teilen. ;)

// --------------------------
// Zaehler und Nenner kuerzen
// --------------------------
PROCEDURE Kuerzen(VAR tB: tBruch);
VAR
  iFaktor: INTEGER;
BEGIN
  iFaktor:=Ggt(tB.iZaehler,tB.iNenner);
  tB.iZaehler:=tB.iZaehler DIV iFaktor;
  tB.iNenner:=tB.iNenner DIV iFaktor;
END;  (* Func Kuerzen() *)

Dieser Prozedur uebergibst du dann den Bruch als eine Variable und dieser wird dann soweit es geht, gekuerzt. Das kannst du z.B. direkt nach der Eingabe des ersten Bruchs anwenden, oder du laesst erst beide Brueche eingeben und kuerzt nachher nur den Ergebnisbruch.

Ist dir die Prozedur "Maske()" usw. vorgegeben? Sonst schmeiss mal alles, was "ueberfluessig ist" raus und bitte vermeide die Verwendung von globalen Variablen. Uebergebe die wenigen Variablen, die global, aber unmittelbar vor dem Hauptprogramm, deklariert werden muessen, mit Hilfe von Parametern an die Prozeduren und Funktionen ;)

Im angehaengten Beispiel ist das alles mit sog. "Referenzuebergabe" realisiert. Erkennbar ist das am VAR direkt vor den zu uebergebenden Variablen.

-- 
PASCAL Programmierer aus Leidenschaft

Turbo Pascal Beispiele fuer Anfaenger: [www.webplain.de]

Momentane Projekte:
-----------------------
Konsolen-Adventure Game mit FreePascal (im Denkpause-Forum) [www.webplain.de]
Funktionsplotter und -rechner; Vorabversion gibt's hier: [www.webplain.de]
Objektorientierte Textmodus-GUI; Release-Termin: groesstenteils fertig




2 mal bearbeitet. Zuletzt am 07.06.10 22:49 von BP92.

Anhänge:

Antworten | Zitieren

10 Re: Bruchrechenen

Bewertungen: 0 negativ/0 positiv

Autor: <Thomas> (G) (IP bekannt)
Datum: 12. Jun. 2010 13:41

hallo
zu BP92: die maske ist vorgegeben.

mein program hat sehr große fortschritte gemacht. es wird ausgeführt allerdings mit fehlern.Das sind meine Probleme:

Wenn ich die 2 brüche eingebe werden sie nicht direkt gekürzt,was eigentlich passierne sollte. Außerdem schmiert das prgramm nach der eingabe des 2 bruches immer ab. der ergebnisbruch wird nich hingeschrieben und der abschied und auch die frage ob noch mal gerechnet werden soll erscheint nicht auf dem bildschirm.




ROGRAM bruchrechner_mit_record; (* Die elegantere Methode! Thomas, Juni 2010 *)
USES wincrt;

CONST links=8;   (* Spalte zur Eingabe des ersten Bruches *)
      rechts=38;
     

Type t_bruch=Record
               zaehler : Longint;
               nenner  : Longint;
             END;


VAR bruch1,bruch2,ergebnisbruch : t_bruch;operator:char;
   

procedure initialisierung(var bruch1,bruch2,ergebnisbruch: t_bruch);
begin
  clrscr;
  bruch1.zaehler:=0;
  bruch1.nenner:=0;
  bruch2.zaehler:=0;
  bruch2.nenner:=0;
  ergebnisbruch.zaehler:=0;
  ergebnisbruch.nenner:=0;
end;


procedure maske;
begin
  gotoxy(29,1);
  write('Bruchrechnung(+,-,*,/)');
  gotoxy(29,2);
  write('======================');
  gotoxy(4,9);
  write('-----------' );
  gotoxy(34,9);
  write('-----------' );
  gotoxy(54,9);
  write('=');
  gotoxy(60,9);
  write('-----------' );
end;



Procedure eingabe(var bruch1:t_Bruch;spalte:integer);
begin
  gotoxy(spalte,15);
  writeln('Geben sie einen Zähler ein: ');
  gotoxy(spalte,8);
  readln(bruch1.zaehler);
  gotoxy(spalte,19);
  writeln('Geben sie einen Nenner ein: ');
  gotoxy(spalte,10);
  readln(bruch1.nenner);
end;


function ggt(x,y:longint):longint;
begin
  repeat
    if x>y then x:=x-y else y:=y-x;
  until x=y;
  ggt:=x;
end; 

PROCEDURE Kuerzen(VAR bruch1:t_Bruch);
VAR
  iFaktor: longint;
BEGIN
  iFaktor:=Ggt(bruch1.Zaehler,bruch1.Nenner);
  bruch1.zaehler:=bruch1.zaehler DIV iFaktor;
  bruch1.nenner:=bruch1.nenner DIV iFaktor;
END; 



procedure eingabe_operator(var operator:char;spalte:integer);
begin
  repeat
  gotoxy(spalte,5);
  writeln('Welchen Operator möchten Sie haben? (+,-,*,/)');
  gotoxy(24,9);
  readln(operator);
  until operator IN ['+','-','*','/']
end;


function kgv(a,b:longint):longint;
begin
  kgv:= a DIV ggt(a,b) * b;
end;
   

procedure addition(var bruch1,bruch2,ergebnisbruch:t_Bruch);
var k:longint;
begin
begin
  ergebnisbruch.nenner:=kgv(bruch1.nenner,bruch2.nenner);
  k:=kgv(bruch1.nenner,bruch2.nenner) * bruch1.zaehler;
  ergebnisbruch.zaehler:=k +  kgv(bruch1.nenner,bruch2.nenner) * bruch2.zaehler;
end;
Kuerzen(ergebnisbruch);
end;

procedure subtraktion(var bruch1,bruch2,ergebnisbruch:t_Bruch);
var k:longint;
begin
begin
  ergebnisbruch.nenner:=kgv(bruch1.nenner,bruch2.nenner);
  k:=kgv(bruch1.nenner,bruch2.nenner) * bruch1.zaehler;
  ergebnisbruch.zaehler:=k -  kgv(bruch1.nenner,bruch2.nenner) * bruch2.zaehler;
end;
Kuerzen(ergebnisbruch);
end;


procedure Multiplikation(var bruch1,bruch2,ergebnisbruch:t_Bruch);
begin
begin
  ergebnisbruch.nenner:=bruch1.nenner * bruch2.nenner;
  ergebnisbruch.zaehler:=bruch1.zaehler * bruch2.zaehler;
end;
 Kuerzen(ergebnisbruch);
end;


procedure Division(var bruch1,bruch2,ergebnisbruch:t_Bruch);
begin
begin
  ergebnisbruch.nenner:=bruch1.nenner * bruch2.zaehler;
  ergebnisbruch.zaehler:=bruch1.zaehler * bruch2.nenner;
end;
 Kuerzen(ergebnisbruch);
end;


procedure Ausgabe(ergebnisbruch:t_Bruch);
begin
  gotoxy(56,8);
  readln(ergebnisbruch.zaehler);
  gotoxy(56,10);
  readln(ergebnisbruch.nenner);
end;


function weiter:boolean;
var buchstabe:char;
begin
  gotoxy(8,2);
  writeln('wollen sie nocheinmal rechnen?dann j eingeben! ');
  gotoxy(8,3);
  readln(buchstabe);
  if buchstabe ='j' then weiter:=true else
  weiter:=false
end;


procedure Abschied;
begin
  writeln('Danke das Sie mein Bruchrechnenprogramm benutzt haben');
  readln;
end;


BEGIN
  Initialisierung(bruch1,bruch2,ergebnisbruch);  (* Variablen auf Null, Bildschirm frei usw.. *)
  Maske; (* Bildschirm wird vorbereitet, Hinweise an Benutzer, Einteilung Brüche, Bruchstriche usw... *)
  REPEAT  
    eingabe(bruch1, links);
    kuerzen(bruch1);
    eingabe_operator(operator,links);
    eingabe(bruch2,rechts);
    kuerzen(bruch2);
    case operator of
      '+' : Addition(bruch1, bruch2, ergebnisbruch);
      '-' : Subtraktion(bruch1, bruch2, ergebnisbruch);
      '*' : Multiplikation(bruch1, bruch2, ergebnisbruch);
      '/' : Division(bruch1, bruch2, ergebnisbruch);
    END;
    kuerzen(ergebnisbruch);
    Ausgabe(ergebnisbruch);
  UNTIL NOT weiter;
  Abschied; (* freundlich verabschiedet man sich vom Benutzer *)
END.

Ich hoffe ihr könnt mir helfen.
mfg Thomas

Antworten | Zitieren

11 Re: Bruchrechenen

Bewertungen: 0 negativ/0 positiv

Autor: BP92 (R) (IP bekannt)
Datum: 13. Jun. 2010 14:01

Hallo Thomas,

Quelltexte koennen auch angehaengt werden ;)

Du verwendest WinCRT, arbeitest du mit Turbo Pascal fuer Windows oder mit der Windows Version von Borland Pascal 7?

Nun zu einer kleinen "Maengelliste", was ich an deinem Programm gefunden habe.

1. CLRSCR; gehoert in Maske(), nicht in Initialisierung()
2. ein BEGIN-END-Block in einer Prozedur reicht
3. Globale Variablen unmittelbar VOR dem Hauptprogramm deklarieren, also nach den Prozeduren und NICHT direkt nach TYPE, wozu ist sonst die Referenzuebergabe gut?!
4. CHARs mit READKEY einlesen, nicht READLN()
5. Wenn du WinCRT verwendest, dann schliesse das Fenster des Programms wieder mit DoneWinCRT
6. globale Variablen und lokale Variablen NICHT gleich benennen
7. Procedure Addition arbeitet falsch, den Zaehler des Ergebnisbruchs bekommst du so:

(Zaehler 1. Bruch)*(Hauptnenner/Nenner 1. Bruch) + (Zaehler 2. Bruch)*(Hauptnenner/Nenner 2. Bruch)

8. Subtraktion analog zu Addition
9. Prozedur Maske dann in der REPEAT Schleife aufrufen, damit der Bildschirm fuer jeden Durchgang wieder vorbereitet ist

Alles andere ist soweit i.O.


Im Anhang die reparierte Version :)

-- 
PASCAL Programmierer aus Leidenschaft

Turbo Pascal Beispiele fuer Anfaenger: [www.webplain.de]

Momentane Projekte:
-----------------------
Konsolen-Adventure Game mit FreePascal (im Denkpause-Forum) [www.webplain.de]
Funktionsplotter und -rechner; Vorabversion gibt's hier: [www.webplain.de]
Objektorientierte Textmodus-GUI; Release-Termin: groesstenteils fertig




1 mal bearbeitet. Zuletzt am 13.06.10 14:46 von BP92.

Anhänge:

Antworten | Zitieren

Hinweise

  1. Das hier ist kein Hausaufgabenservice. Konkrete Fragen werden natürlich gerne beantwortet.
  2. Probieren Sie doch zuerst die Suchfunktion aus und werfen Sie einen Blick in die FAQ.
  3. Ein aussagekräftiger Betreff ist wichtig, unter »HILFE!!!« kann man sich nichts vorstellen. Bitte nicht nur Großbuchstaben.
  4. Anhänge zu Ihrem Projekt (max. 250 KB) können helfen, das Problem schnell zu lösen.
  5. HTML-Tags sind aus Sicherheitsgründen nicht möglich.
  6. Quelltext können Sie mit [code]Quelltext[/code] formatieren.
  7. Alle weiteren möglichen Forum-Tags können Sie hier nachlesen.
Neuen Beitrag erstellen










Datei anhängen
  • Folgende Dateitypen können angehängt werden:
    asm, bgi, bmp, c, cc, cpp, gif, inc, jpg, obj, pas, pdf, png, rar, rtf, tpu, txt, zip, frm, vbp
  • Die Dateien dürfen jeweils nicht größer sein als 250KB.
  • 3 zusätzliche Dateien können an den Beitrag angehängt werden.



Nach oben
© 2000-2010 Clemens Weiß | Webplain.de
Link zu dieser Seite | Letzte Änderung: 26. Okt. 2008