Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Daten von einer Datei aufaddieren durch FOR TO DO (https://www.delphipraxis.net/125788-daten-von-einer-datei-aufaddieren-durch-do.html)

coly546 11. Dez 2008 16:12


Daten von einer Datei aufaddieren durch FOR TO DO
 
Hallo,
beim vorliegenden Programm möchte ich die eingegebenen Werte (jeder Stunde) addieren. So das ich zum Schluss die Gesamteinnahmen aller Stunden habe. Das habe ich auch schon mit einer zweiten For-to-do Schleife probiert, leider ohne Erfolg. In der Vergangenheit, hatte ich dieses Problem schon einmal gelöst, jedoch finde ich die passende Datei nicht mehr.

Es wäre nett, wenn sich das mal Jemand ansehen könnte.



Ich danke euch bereits im voraus!


Delphi-Quellcode:
program In_Out;
{$APPTYPE CONSOLE}
uses
  SysUtils;
var Datei_X:file of real;
    Wert,Ergebnis:real;
    i:integer;

{------------------------------------------------------------------------------}
procedure Eingabe;
var i:integer;
begin

ASSIGN (Datei_X,'C:\Dokumente und Einstellungen\File.DAT');
REWRITE(Datei_X);
for i:=10 to 19 do
begin
 write('               ',i,':00 Uhr! Wie hoch waren die Einnahmen?:');
 readln(Wert);
 WRITE(Datei_X,Wert);
end;

CLOSE(Datei_X);
writeln;writeln('                               ENTER dr',#129,'cken...');
readln;
end;

{------------------------------------------------------------------------------}
procedure Ausgabe;
Begin
for i := 1 to 20 do writeln(' ');
writeln('            Ihre Einnahmen...:');
writeln;

ASSIGN (Datei_X, 'C:\Dokumente und Einstellungen\File.DAT');
{$I-}
RESET(Datei_X);                
{$I+}

  if IOResult <>0 then
  writeln('Datei ist weg')
  else begin
While not EoF(Datei_X) do
 begin
 READ(Datei_X, Wert);
 write('                               ');writeln(Wert:10:2,' Euro');
 for i:=10 to 19 do
  Ergebnis:=Wert+1;
 end;
writeln;writeln(Ergebnis:10:2);
CLOSE(Datei_X);
writeln;writeln;writeln;writeln('                               ENTER dr',#129,'cken...');
readln;
End;end;

Der.Kaktus 11. Dez 2008 16:19

Re: Daten von deiner Datei aufaddieren durch FOR TO DO
 
Zitat:

Zitat von coly546
Hallo,
beim vorliegenden Programm möchte ich die eingegebenen Werte (jeder Stunde) addieren. So das ich zum Schluss die Gesamteinnahmen aller Stunden habe. Das habe ich auch schon mit einer zweiten For-to-do Schleife probiert, leider ohne Erfolg. In der Vergangenheit, hatte ich dieses Problem schon einmal gelöst, jedoch finde ich die passende Datei nicht mehr.

Es wäre nett, wenn sich das mal Jemand ansehen könnte.



Ich danke euch bereits im voraus!


Delphi-Quellcode:
program In_Out;
{$APPTYPE CONSOLE}
uses
  SysUtils;
var Datei_X:file of real;
    Wert,Ergebnis:real;
    i:integer;

{------------------------------------------------------------------------------}
procedure Eingabe;
var i:integer;
begin

ASSIGN (Datei_X,'C:\Dokumente und Einstellungen\File.DAT');
REWRITE(Datei_X);
for i:=10 to 19 do
begin
 write('               ',i,':00 Uhr! Wie hoch waren die Einnahmen?:');
 readln(Wert);
 WRITE(Datei_X,Wert);
end;

CLOSE(Datei_X);
writeln;writeln('                               ENTER dr',#129,'cken...');
readln;
end;

{------------------------------------------------------------------------------}
procedure Ausgabe;
Begin
for i := 1 to 20 do writeln(' ');
writeln('            Ihre Einnahmen...:');
writeln;

ASSIGN (Datei_X, 'C:\Dokumente und Einstellungen\File.DAT');
{$I-}
RESET(Datei_X);                
{$I+}

  if IOResult <>0 then
  writeln('Datei ist weg')
  else begin
While not EoF(Datei_X) do
 begin
 READ(Datei_X, Wert);
 write('                               ');writeln(Wert:10:2,' Euro');
 for i:=10 to 19 do
  Ergebnis:=Wert+1;
//----> hier fehlt das naechste Read !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 end;
writeln;writeln(Ergebnis:10:2);
CLOSE(Datei_X);
writeln;writeln;writeln;writeln('                               ENTER dr',#129,'cken...');
readln;
End;end;

Hallo..habe die Stelle im Quelltext markiert..da fehlt was ;-)

DeddyH 11. Dez 2008 16:48

Re: Daten von einer Datei aufaddieren durch FOR TO DO
 
Zitat:

Delphi-Quellcode:
for i:=10 to 19 do
  Ergebnis:=Wert+1;

Die Schleife ist so wie sie da steht, sinnlos, da Ergebnis immer wieder überschrieben wird. Meintest Du so?
Delphi-Quellcode:
for i:=10 to 19 do
  Ergebnis := Ergebnis + Wert + 1;

coly546 11. Dez 2008 20:20

Re: Daten von einer Datei aufaddieren durch FOR TO DO
 
Hi,
danke erstmal für die schnelle Antwort. Ich habe die Rechnung durch die von DeddyH ersetzt, und es kommt trotzdem das falsche Ergebnis raus.

Wenn ich für alle Stunden 25 eingebe, müsste ja 250 Euro rauskommen...es kommt aber 2600 Euro raus...


Und zu Der.Kaktus, ich weiß nicht ganz warum ich da noch einmal read schreiben sollte, denn die Datei ist ja noch offen...das Close kommt doch erst danach. :wiejetzt:



.

taaktaak 11. Dez 2008 20:38

Re: Daten von einer Datei aufaddieren durch FOR TO DO
 
Hmmm, das ist etwas "verwurstelt in meinen Augen:
Delphi-Quellcode:
While not EoF(Datei_X) do
begin
READ(Datei_X, Wert);
write('                               ');writeln(Wert:10:2,' Euro');
for i:=10 to 19 do
  Ergebnis:=Wert+1;
//----> hier fehlt das naechste Read !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
end;
1. Wo wird "Ergebnis" initialisiert? VOR das Einlesen gehört ein "Ergebnis:=0"
2. Wozu ist die for-Schleife überhaupt gut? Löschen!
3. Detlef hat ja den entscheidenden Tip bereits gegeben!

Sofern in der Datei überhaupt die richtigen Daten enthalten sind, sollte es so funktionieren:

Delphi-Quellcode:
Ergebnis:=0;
while not eof(Datei_X) do begin
  read(Datei_X, Wert);
  Ergebnis:=Ergebnis+Wert;
  end;

coly546 11. Dez 2008 20:47

Re: Daten von einer Datei aufaddieren durch FOR TO DO
 
Vielen Dank taaktaak, DeddyH und Der.Kaktus,
entschuldige bitte das meine Programmierkenntnisse noch nicht so ausgereift sind, dass es reicht ein Tipp zu geben. :oops:

Ich ging an die Lösung logisch heran und dachte: wenn bei der Eingabe eine For-To-Do Schleife habe, brauche ich die bestimmt auch bei der Ausgabe. Das das nicht der Fall ist, hätten wir ja damit geklärt.


Dankeschön :)



.

taaktaak 11. Dez 2008 20:52

Re: Daten von einer Datei aufaddieren durch FOR TO DO
 
Hallo coly546
Nee, also entschuldigen brauchst du dich nicht!!
Das ist doch Ok, wenn ein Anfänger Schwierigkeiten hat.
Also weiterhin noch viel Spaß!
:hi:


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