Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   Testauswertungsprogramm - Variablen umändern (https://www.delphipraxis.net/135518-testauswertungsprogramm-variablen-umaendern.html)

FreePascal 12. Jun 2009 11:10


Testauswertungsprogramm - Variablen umändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo :zwinker: , so schaut das Testauswertungsprogramm zu Beginn aus.
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.

Jetzt will ich das ürsprüngliche Programm insofern umbauen, so dass der Start- u. Endwert der zu summierenden Aufgaben frei wählbar ist.
Ich habe überlegt, dass man dazu zwei neue Variablen braucht, nämlich startwert und endwert
Die muss man dann oben bei der Variablendeklaration einfügen. Und dann muss man es auch da einbauen:
FOR nr:=startwert TO endwert DO, Ich glaube aber, bei summe:=0 muss ich auch noch etwas umändern, oder :?:
.....
Dann würde das ganze ja folgendermaßen aussehen:
Delphi-Quellcode:

program testauswertung
uses crt;
var startwert, endwert, nr, summe, punkte:integer;


begin
     clrscr;
     summe:=0;
              FOR nr:=startwert TO endwert DO
              begin
                  writeln('Aufgabe: ',nr);
                  readln(punkte);
                  summe:=summe+punkte;
              end;


Alles kein Problem, es geht zum Ausführen, doch beim Ausführen steht dann:
Aufgabe: 0
dann muss man eine zahl eingeben, z.b. 34
Gesamtpunktezahl: 34

Könnt ihr mir hier weiterhelfen :?:
Danke, Martin

jaenicke 12. Jun 2009 11:11

Re: Testauswertungsprogramm - Variablen umändern
 
Du weist startwert und endwert ja nirgends zu, also haben beide vermutlich den Wert 0 und damit läuft die Schleife genau dieses eine Mal...

DeddyH 12. Jun 2009 11:16

Re: Testauswertungsprogramm - Variablen umändern
 
Du musst Start- und Endwert ja erst einmal einlesen (und auf Gültigkeit prüfen), das geht mit readln.

FreePascal 12. Jun 2009 11:19

Re: Testauswertungsprogramm - Variablen umändern
 
Danke, an das habe ich auch schon gedacht
soll ich start und endwert direkt nach summe:=0 zuweisen?
z.B.
summe:=0
startwert:=???
endwert:=???


Nur wie soll ich start bzw. endwert zuweisen, wenn sie ja frei wählbar sein sollten :?:
Danke, martin

edit:
summe:=0
startwert:=???;
readln(startwert);
endwert:=???;
readln(endwert);
....

meinste so :?:

DeddyH 12. Jun 2009 11:20

Re: Testauswertungsprogramm - Variablen umändern
 
Die Zuweisung kannst Du Dir sparen, da Du die Werte ja mit readln vom Benutzer abfragst.

jaenicke 12. Jun 2009 11:27

Re: Testauswertungsprogramm - Variablen umändern
 
Kann ReadLn direkt die Integerwerte lesen? Oder sind das nicht eher Strings, die noch umgewandelt werden müssen? (Lange nicht mehr die Konsolenbefehle benutzt... :oops: )

DeddyH 12. Jun 2009 11:32

Re: Testauswertungsprogramm - Variablen umändern
 
Jepp, kann es.
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var Zahl: integer;

begin
  try
  { TODO -oEntwickler -cKonsole Main : Hier Code einfügen }
    write('Zahl: ');
    readln(Zahl);
    writeln('Zahl war ',Zahl);
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
  readln;
end.
[edit] Einrückung korrigiert [edit]

FreePascal 12. Jun 2009 11:42

Re: Testauswertungsprogramm - Variablen umändern
 
Also, ihr meint folgendermaßen sollte es ausschauen:
Delphi-Quellcode:
program testauswertung
uses crt;
var startwert, endwert, nr, summe, punkte:integer;


begin
     clrscr;
     summe:=0;
              writeln('Bitte Startwert eingeben!!!');
               readln(startwert);
             writeln('Bitte Endwert eingeben!!!');
                readln(endwert);

FOR nr:=startwert TO endwert DO
              begin
                  writeln('Aufgabe: ',nr);
                  readln(punkte);
                  summe:=summe+punkte;
              end;


              writeln('Gesamtpunktezahl: ',summe);


              readln;


end.
Muss man denn sonst noch etwas umändern :?:

Danke, Martin

DeddyH 12. Jun 2009 11:45

Re: Testauswertungsprogramm - Variablen umändern
 
Prinzipiell ist das schon richtig so, aber Du solltest div. Fehleingaben noch abfangen:
- eine der Eingaben ist keine Zahl
- Startwert ist nicht kleiner oder gleich Endwert

Damit sollte das recht sicher sein.

FreePascal 12. Jun 2009 11:50

Re: Testauswertungsprogramm - Variablen umändern
 
Zitat:

Zitat von DeddyH
Fehleingaben solltest du noch abfangen:
- eine der Eingaben ist keine Zahl
- Startwert ist nicht kleiner oder gleich Endwert

Wo soll ich das abfragen und wie :?:

Danke, Martin

DeddyH 12. Jun 2009 11:59

Re: Testauswertungsprogramm - Variablen umändern
 
Entweder benutzt Du einen try-except-Block oder Du liest die Eingaben zunächst in Stringvariablen ein und versuchst diese dann mit Val() in Zahlen zu konvertieren. In Verbindung mit einer Schleife könntest Du die Eingabe solange wiederholen lassen, bis es eine Zahl ist.

FreePascal 12. Jun 2009 12:26

Re: Testauswertungsprogramm - Variablen umändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, auch wenn ich die Fehleingaben nicht überprüfen will, funktioniert es so nicht:
Delphi-Quellcode:
program testauswertung
uses crt;
var startwert, endwert, nr, summe, punkte:integer;


begin
     clrscr;
     summe:=0;
              writeln('Bitte Startwert eingeben!!!');
               readln(startwert);
             writeln('Bitte Endwert eingeben!!!');
                readln(endwert);

FOR nr:=startwert TO endwert DO
              begin
                  writeln('Aufgabe: ',nr);
                  readln(punkte);
                  summe:=summe+punkte;
              end;
Alles schön u. gut
Zuerst fragt er mich nach startwert, liest ihn ein z.B:4
dann fragt er mich nach meinem endwert, liest ihn ein z.B:12

Dann gibt er aus: Aufgabe: 4 er gibt immer den Startwert aus.

Wenn ich dann die Eingabetaste drücke, um das Programm zu beenden, komm ich dann nur immer eine Zeile weiter runter, doch nicht zur Programmierung. Dann muss ich Pascal immer schliessen.
Hat jemand eine idee wie das Programm richtig laufen könnte, ohne eine Abfrage von Fehleingaben :?:


Danke, Martin

DeddyH 12. Jun 2009 12:32

Re: Testauswertungsprogramm - Variablen umändern
 
Bei mir (D 2007) funktioniert das so. Was passiert denn, wenn Du aus der for- eine while-Schleife machst?

sx2008 12. Jun 2009 12:40

Re: Testauswertungsprogramm - Variablen umändern
 
Zitat:

Zitat von FreePascal
Wenn ich dann die Eingabetaste drücke, um das Programm zu beenden, komm ich dann nur immer eine Zeile weiter runter, doch nicht zur Programmierung.

Das Problem wird wohl sein, dass readln eine Integervariable einlesen möchte.
Da du readln() aber nicht gibst was es verlangt bist du gefangen.
Delphi-Quellcode:
var ....
zeile : String;

FOR nr:=startwert TO endwert DO
begin
  writeln('Aufgabe: ',nr);
  readln(zeile); // als String einlesen
  zeile := Trim(zeile); // Leerzeichen raus
  if zeile = '' then break; // Abbruch, falls Benutzer keine Lust mehr hat
  punkte := StrToInt(zeile);
  summe:=summe+punkte;
end;

FreePascal 12. Jun 2009 17:56

Re: Testauswertungsprogramm - Variablen umändern
 
Hallo, mein FreePascal sagt mir im debug mode, dass er StrTOInt und Trim nicht findet.
Könnte es eventuell sein, dass es StrToInt und Trim nur in Delphi gibt, obwohl Pascal ja praktisch das gleiche ist. :?:

Gruß, Martin

DeddyH 12. Jun 2009 18:01

Re: Testauswertungsprogramm - Variablen umändern
 
Du musst nur die entsprechenden Units einbinden (SysUtils?).

FreePascal 12. Jun 2009 18:30

Re: Testauswertungsprogramm - Variablen umändern
 
Ja, mit sysutils kennt er trim und strtoint an
8) , 0 errors ist schon mal gut, :chat:
Jetzt kann ich es dann auch mit der Eingabetaste beenden :P
Beim Ausführen:
Bitte geben sie Startwert ein
z.B. 2
Bitte geben sie jez endwwert ein
z.B. 5
Aufgabe: 2 <<<<<<<<< da kommt IMMER der Startwert

Gesamtpunktezahl: 0 <<<<<<<< ist IMMER 0


SO läuft das ab, es lässt sich dann auch wunderbar beenden :thumb:
OK, es ist richtig programmiert

nur: erfüllt es das :?:
Zitat:

Jetzt will ich das ürsprüngliche Programm insofern umbauen, so dass der Start- u. Endwert der zu summierenden Aufgaben frei wählbar ist.
Danke, Martin :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 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