![]() |
Testauswertungsprogramm
Hallo, ich hab ein kleines Programm in FreePascal programmiert
Folgendes:
Delphi-Quellcode:
SO weit, so gut, es funktioniert. Jetzt will ich aber, dass am Ende die Gesamtpunktezahl einer Note zugeordnet wird und diese dann halt ausgegeben wird.
program testauswertung
uses crt; var nr, summe, punkte:integer; begin clrscr; summe:=0; FOR nr:=1 TO 4 DO begin writeln('Aufgabe: ',nr); readln(punkte); summe:=summe+punkte; end; writeln('Gesamtpunktezahl: ',summe); readln; end. Note 4: 24-29 Punkte Note 3: 29-37 Punkte Note 2: 38-44 Punkte Note 1: 45-50 Punkte Ich habe mir folgendes überlegt, wie ich es angehen könnte: Die Gesamtpunktezahl ist ja summe, ich habe dann mir folgendes ausgedacht:
Delphi-Quellcode:
writeln('Gesamtpunktezahl: ',summe);
IF (summe>23) AND (summe<=29) THEN writeln('Sie haben ein Genügend erreicht!'); ELSE IF (summe>29) AND (summe<=37) THEN writeln('Sie haben ein Befriedigend erreicht!'); ELSE IF (summe>37) AND (summe<=44) THEN writeln('Sie haben ein Gut erreicht!'); ELSE (summe>44) AND (summe<=50) THEN writeln('Sie haben ein Sehr GUt erreicht!'); readln; end. Das haut aber nicht ganz hin, habt ihr eine andere Idee wie ich es vielleicht lösen könnte? Danke, Martin |
Re: Testauswertungsprogramm
Hallo,
schau Dir mal case an. :wink: |
Re: Testauswertungsprogramm
Du meinst eine Case summe OF
Verknüpfung anstatt der verschachtelten IF THEN ELSE :?: Gruß, Martin |
Re: Testauswertungsprogramm
Hallo...
case ist da wesentlich eleganter und übersichtlicher. Das merkst du schnell selbst :thumb: :hi: |
Re: Testauswertungsprogramm
Warum nicht erst mal die Fehler beheben:
Delphi-Quellcode:
und schon gehts - Grundlagen von if then else - das war nämlich C style.
writeln('Gesamtpunktezahl: ',summe);
IF (summe>23) AND (summe<=29) THEN writeln('Sie haben ein Genügend erreicht!'); <<<<<<<<<<<< semi weg ELSE IF (summe>29) AND (summe<=37) THEN writeln('Sie haben ein Befriedigend erreicht!'); <<< semi weg ELSE IF (summe>37) AND (summe<=44) THEN writeln('Sie haben ein Gut erreicht!'); <<<<<<<<<<<<< semi weg ELSE (summe>44) AND (summe<=50) THEN writeln('Sie haben ein Sehr GUt erreicht!'); readln; end. Gruss |
Re: Testauswertungsprogramm
Hallo,
Case waer einfacher(wie schon vor mir geschrieben)
Delphi-Quellcode:
writeln('Gesamtpunktezahl: ',summe);
Case Summe of 23..29:writeln('Sie haben ein Genügend erreicht!'); 30..37:writeln('Sie haben ein Befriedigend erreicht!'); 38..44:writeln('Sie haben ein Gut erreicht!'); 45..50:writeln('Sie haben ein Sehr Gut erreicht!'); end; readln; end. |
Re: Testauswertungsprogramm
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, hab es jetzt doch mit IF THEN ELSE gemacht:
Delphi-Quellcode:
So hab ich zwei Fehler drinne, sagt der debug mod., und zwar bei 19,35 sagt er:
program testauswertung
uses crt; var nr, summe, punkte:integer; begin clrscr; summe:=0; FOR nr:=1 TO 4 DO begin writeln('Aufgabe: ',nr); readln(punkte); summe:=summe+punkte; end; writeln('Gesamtpunktezahl: ',summe); IF (summe>23) AND (summe<=29) THEN writeln('Sie haben ein Genügend erreicht!') ELSE IF (summe>29) AND (summe<=37) THEN writeln('Sie haben ein Befriedigend erreicht!') ELSE IF (summe>37) AND (summe<=44) THEN writeln('Sie haben ein Gut erreicht!') ELSE (summe>44) AND (summe<=50) THEN writeln('Sie haben ein Sehr GUt erreicht!'); readln; end. 19,35: Illegal Expression 19,35: Fatal:Syntax Error, ";" expected but "THEN" found. Ich lade das Programm mal hoch, vlt könnte jemand schauen und es dann wieder hochladen... Danke, Martin |
Re: Testauswertungsprogramm
Schreibe deinen Code doch bitte auf case um. Das ist wirklich tausendmal besser. Dann findest du auch schnell selbst fehler!
|
Re: Testauswertungsprogramm
Delphi-Quellcode:
So, umgeschrieben.
program testauswertung
uses crt; var nr, summe, punkte:integer; begin clrscr; summe:=0; FOR nr:=1 TO 4 DO begin writeln('Aufgabe: ',nr); readln(punkte); summe:=summe+punkte; end; writeln('Gesamtpunktezahl: ',summe); IF summe=>24<=29 OR summe=>29<=37 OR summe=>37<=44 OR summe=<44 THEN begin CASE summe OF >24<=29:begin writeln('Genügend'); end; >29<=37:begin writeln('Befriedigend'); end; >37<=44:begin writeln('GUt'); end; >44:begin writeln('Sehr gut'); end; end; end ELSE writeln('Falsche Eingabe.Progr.abbr.'); readln; end. |
Re: Testauswertungsprogramm
Schau Dir den Beitrag von "Der Kaktus" nochmal an...
|
Re: Testauswertungsprogramm
Danke, funzt
Perfetto :wink: |
Re: Testauswertungsprogramm
Auch wenn es jetzt geht und eleganter gelöst wurde, der Fehler ist ein fehlendes if:
Zitat:
|
Re: Testauswertungsprogramm
Danke DeddyH.
[OT] Ich bin immer wieder überrascht, wie selbstverständlich man hier gerne eine andere Lösung vorschlägt, anstatt sich auch mal um sowas wie Syntax-Fehler zu kümmern. Ein Anfänger benötigt zunächst Sicherheit im Umgang mit der Syntax bevor die Eleganz Einzug halten kann. [/OT] Gruss |
Re: Testauswertungsprogramm
Danke für diese rückmeldung, aber ich habe es dann mit case of gemacht
Ich hätte immer gedacht: If Else if .... Else Ist offenbar aber nicht so, Danke :thumb: |
Re: Testauswertungsprogramm
Das stimmt so aber auch nicht ganz. Wenn da nur noch ein else ohne weitere Bedingung am Schluss steht, fängt der Code danach alle Fälle ab, die vorher "durchs Raster gefallen sind". Beispiel:
Delphi-Quellcode:
[edit] Oder mal auf dein Programm angewendet:
if var = 1 then
ShowMessage('var ist 1') else if var = 2 then ShowMessage('var ist 2') else ShowMessage('var ist weder 1 noch 2');
Delphi-Quellcode:
[/edit]
IF (summe>23) AND (summe<=29) THEN
writeln('Sie haben ein Genügend erreicht!') ELSE IF (summe>29) AND (summe<=37) THEN writeln('Sie haben ein Befriedigend erreicht!') ELSE IF (summe>37) AND (summe<=44) THEN writeln('Sie haben ein Gut erreicht!') ELSE IF (summe>44) AND (summe<=50) THEN writeln('Sie haben ein Sehr GUt erreicht!') {wenn wir hier ankommen, stimmt etwas nicht} ELSE writeln('Ich weiß nicht wieso, aber in Summe steht Mumpitz drin'); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz