1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Hilfe bei Turbo PAscal

Discussion in 'Programmieren' started by Sorber, Oct 11, 2007.

Thread Status:
Not open for further replies.
  1. Sorber

    Sorber Byte

    Hallo liebe Community,

    ich brauche eure Hilfe.
    Im Informatik Unterricht sollen wir jetzt einen taschenrechner progammieren. Ich habe da schon einmal angefange, komme jetzt aber irgendiwe nicht weiter.
    Könnt Ihr mir da bitte weiterhelfen?

    Danke im voraus.

    Gruß
    Sorber



    Bisheriges Script:


    program rechner;

    var
    a,b : real;
    c : char;
    d: real;

    begin


    writeln ('Bitte geben Sie die erste Zahl ein');
    read(a);

    write ('Bitte geben Sie die Rechenoperation ein, die Sie ausfuehren lassen wollen.');
    writeln ('Moeglichkeiten: +,-,*,/,Qudratl');
    read(c);

    if
    c= +
    Then begin writeln ('Bitte geben Sie den zweiten Summanden an.');
    read(b);
    d:=a+b;
    writeln('Ergebnis Ihrer Rechnung:', d );




    if c= -
    Then begin
    writeln ('Bitte geben Sie den Subtrahenten ein.');
    read(b);
    d:=a-b;
    writeln('Ergebnis Ihrer Rechnung:', d );


    if c= *
    Then begin
    writeln ('Bitte geben Sie den zweiten Faktor ein.');
    read(b);
    d:=a*b;
    writeln('Ergebnis Ihrer Rechnung:', d );



    if c= /
    Then begin
    writeln ('Bitte geben Sie den Divisor ein.');
    read(b);
    d:=a/b;
    writeln('Ergebnis Ihrer Rechnung:', d );


    if c="Qudrat"
    Then begin
    d:= a*a;
    writeln ('Ergebnis Ihrer Rechnung', d);

    end.
     
  2. TheD0CT0R

    TheD0CT0R Dr. h.c. Mod

    Und was ist jetzt konkret das Problem?
     
  3. Sorber

    Sorber Byte

    beim compilieren sagt mir tubo.exe immer beim THEN nahc der if bedingung:
    "Error 42 : Error in Expression"
     
  4. TheD0CT0R

    TheD0CT0R Dr. h.c. Mod

    Ist der Code in deinem Beitrag etwa 1:1 aus der .pas Datei kopiert? :eek:

    - ...
    - Nach jedem begin muss auch mal ein end; kommen.
    - Warum fünf mal "if-then"? Nimm lieber case.
     
  5. Sorber

    Sorber Byte

    nja das mit case hab Ich noch nicht gewusst.

    wäre ganz cool wenn du mich mal bei icq adden könntest.
    Meine nummer hab ich dir per PN geschrieben
     
  6. TheD0CT0R

    TheD0CT0R Dr. h.c. Mod

    Kann ich machen, aber dieses konkrete Thema sollte hier in diesem Thread weiter behandelt werden. Ist nicht gut wenn man einen Thread in der Luft hängen lässt und auf IM oder Mail umsteigt.
     
  7. Michi0815

    Michi0815 Guest

    if <bedingung> then
    begin
    // anweisungen wenn <bedingung> zutrifft
    end else begin
    // anweisungen wenn <bedingung> nicht zutrifft
    end;
    wobei der else zweig optional ist.

    in deinem fall also:
    if c='+' Then
    begin
    writeln ('Bitte geben Sie den zweiten Summanden an.');
    read(b);
    d:=a+b;
    writeln('Ergebnis Ihrer Rechnung:', d );
    end;
    beachte auch die einfachen hochkomma ' um das +! (was übrigens der grund für den fehler ist)

    btw c="Quadrat" ist lötzinn! c ist vom typ char und kann daher nur genau 1 zeichen aufnehmen.
     
  8. Falcon37

    Falcon37 Ganzes Gigabyte

    Wenn c vom Typ Char ist, dann muss es so aussehen:

    if c = '-' then ....

    Also Hochkomma benutzen.

    btw: if ist schneller als case (ob man den Unterschied bemerkt ist eine andere Frage).
     
  9. TheD0CT0R

    TheD0CT0R Dr. h.c. Mod

    Aber ab 3 Wahlmöglichkeiten aufwärts bedeutet das unnötige Codezeilen. ;)
     
  10. Falcon37

    Falcon37 Ganzes Gigabyte

    Es hat eben alles seine zwei Seiten :-)
     
  11. Sorber

    Sorber Byte

    Ok also erstmal danke für den Hinweis.

    Habe den Quellcode nun nochmal überarbeitet und das Programm wird nun zumindest schon einmal vollständig compiliert.

    Jetzt hab ich aber immernoch ein Problem:
    wenn ich das Programm dann ausführe kann ich zwar die erste Zahl eingeben, danach beendet sich das Programm aber selbstständig.
    Wäre nett wenn ihr mich ncohmals supporten könntet.

    Momentaner Quellcode:
    program rechner;

    var
    a,b : real;
    c : char;
    d: real;

    begin


    writeln ('Bitte geben Sie die erste Zahl ein');
    read(a);

    write ('Bitte geben Sie die Rechenoperation ein, die Sie ausfuehren lassen wollen.');
    write ('Moeglichkeiten: +,-,*,/');
    writeln ('wenn Sie das Qudrat der eingegebenen Zahl bestimmen lassen wollen tippen Sie biite q ein'?;
    read(c);

    if
    c= '+' Then
    begin writeln ('Bitte geben Sie den zweiten Summanden ein.');
    read(b);
    d:=a+b;
    writeln('Ergebnis Ihrer Rechnung:', d );
    end;



    if c= '-' Then
    begin
    writeln ('Bitte geben Sie den Subtrahenten ein.');
    read(b);
    d:=a-b;
    writeln('Ergebnis Ihrer Rechnung:', d );
    end;

    if c= '*' Then
    begin
    writeln ('Bitte geben Sie den zweiten Faktor ein.');
    read(b);
    d:=a*b;
    writeln('Ergebnis Ihrer Rechnung:', d );
    end;


    if c= '/' Then
    begin
    writeln ('Bitte geben Sie den Divisor ein.');
    read(b);
    d:=a/b;
    writeln('Ergebnis Ihrer Rechnung:', d );
    end;

    if c='q' Then
    begin
    d:= a*a;
    writeln ('Ergebnis Ihrer Rechnung', d);
    end;


    end.

    Gruß
    Sorber
     
  12. TheD0CT0R

    TheD0CT0R Dr. h.c. Mod

    Versuch es mal mit readln statt read. Musst dann halt nach der Eingabe des Buchstabens Enter drücken.
     
  13. Michi0815

    Michi0815 Guest

    das liegt an deinen read()'s ersetze sie mal durch readln

    edit zu spät :(
     
  14. Hascheff

    Hascheff Moderator

    Sinnvoll ist auch, alle write durch writeln zu ersetzen.
    Ohne Nachteil spart man Codezeilen, indem

    writeln('Ergebnis Ihrer Rechnung:', d );

    nur einmal hinter allen If-Konstrukten steht. Ist doch immer das gleiche. Wenn du es jedesmal im Then-Abschnitt lässt, dann kannst du auch variieren:

    writeln ('Summe: ', d);
    writeln ('Differenz: ', d);
    writeln ('Produkt: ', d);
    writeln ('Quotient: ', d);
    writeln ('Quadrat: ', d);

    Oder du schreibst

    writeln (a, c, b, '=', d);

    (Außer beim Quadrat)

    Aber das Wichtigste:

    Klar, nach

    writeln ('Ergebnis Ihrer Rechnung', d);

    ist es fertig und beendet sich. Du musst ihm

    pause

    sagen. (Ich hoffe, mich trügt die Erinnerung nicht, ist schon eine Weile her.)
     
  15. AData

    AData Byte

    Du musst nicht:
    if c= /
    sondern:
    if c= '/'

    schreiben

    Gruß Alexander


    PS. Oh, das wurde ja schon korrigiert....
     

  16. also ich besuche eine htl .. und jetz haben wir mit dem programmieren in ainf begonnen .. und ich habe ein paar schwierigkeiten ..

    bei mir kommt auch immer ein fehler mit if und then .. und ich hab das jetz gelsen mit case .. wie tu ich das anwenden ??

    wenn mir jem helfen kann er wär sehr wichtig weil wir am freitag eine schriftliche wiederholung haben und eine verzweifelte anfängerin bin ..!:o
     
Thread Status:
Not open for further replies.

Share This Page