Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   Testauswertungsprogramm (https://www.delphipraxis.net/135482-testauswertungsprogramm.html)

FreePascal 11. Jun 2009 16:35


Testauswertungsprogramm
 
Hallo, ich hab ein kleines Programm in FreePascal programmiert
Folgendes:
Delphi-Quellcode:
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.
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.
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

Lannes 11. Jun 2009 16:53

Re: Testauswertungsprogramm
 
Hallo,

schau Dir mal case an. :wink:

FreePascal 11. Jun 2009 16:57

Re: Testauswertungsprogramm
 
Du meinst eine Case summe OF
Verknüpfung anstatt der verschachtelten IF THEN ELSE :?:
Gruß, Martin

haentschman 11. Jun 2009 16:59

Re: Testauswertungsprogramm
 
Hallo...

case ist da wesentlich eleganter und übersichtlicher. Das merkst du schnell selbst :thumb:

:hi:

thkerkmann 11. Jun 2009 17:15

Re: Testauswertungsprogramm
 
Warum nicht erst mal die Fehler beheben:
Delphi-Quellcode:
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.
und schon gehts - Grundlagen von if then else - das war nämlich C style.

Gruss

Der.Kaktus 11. Jun 2009 17:21

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.

FreePascal 11. Jun 2009 17:42

Re: Testauswertungsprogramm
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, hab es jetzt doch mit IF THEN ELSE gemacht:
Delphi-Quellcode:
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.
So hab ich zwei Fehler drinne, sagt der debug mod., und zwar bei 19,35 sagt er:
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

SimStar001 11. Jun 2009 17:45

Re: Testauswertungsprogramm
 
Schreibe deinen Code doch bitte auf case um. Das ist wirklich tausendmal besser. Dann findest du auch schnell selbst fehler!

FreePascal 11. Jun 2009 17:59

Re: Testauswertungsprogramm
 
Delphi-Quellcode:
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.
So, umgeschrieben.

inherited 11. Jun 2009 18:01

Re: Testauswertungsprogramm
 
Schau Dir den Beitrag von "Der Kaktus" nochmal an...

FreePascal 11. Jun 2009 18:13

Re: Testauswertungsprogramm
 
Danke, funzt
Perfetto :wink:

DeddyH 11. Jun 2009 18:18

Re: Testauswertungsprogramm
 
Auch wenn es jetzt geht und eleganter gelöst wurde, der Fehler ist ein fehlendes if:
Zitat:

Delphi-Quellcode:
ELSE {hier muss noch ein IF hin}(summe>44) AND (summe<=50) THEN writeln('Sie haben ein Sehr GUt erreicht!');


thkerkmann 11. Jun 2009 19:40

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

FreePascal 11. Jun 2009 19:46

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:

DeddyH 11. Jun 2009 19:50

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:
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');
[edit] Oder mal auf dein Programm angewendet:
Delphi-Quellcode:
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');
[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz