# Negative float-Zahlen aus Array addieren



## Sandman76 (20. März 2007)

Hallo Leute,

ich hab ein kleines Prog geschrieben, dass ein Array mit float-Zahlen durchläuft und die Zahlen addiert.
Allerdings geht das seltsamerweise nicht mit negativen Zahlen!

Hier ein Ausschnitt:

```
ifstream Reader("test.txt");
    int i=0;
    double fla[15000];
    double f=0;
    double Summe=0;

    Reader >> f;
    while (! Reader.eof())
    {
    cout << f << endl;
    fla[i] = f;
    Summe = Summe + fla[i];
    Reader >> f;
    i++;
    }
```
Wo liegt der Fehler?

Gruß

Jochen


----------



## jsendrow (21. März 2007)

"geht nicht" ist eine extrem ungenau Aussage. Sollen wir hier jetzt raten was das Programm nicht macht?

Also mach Dir mal die Mühe zu BESCHREIBEN was du erwartest und was Du bekommst. Dein Sourcecode macht genau das was Du programmiert hast und mehr kann auch der beste er nicht aus ihm herauslesen. In deinem Fall aber macht der Sourcecode _nicht_ das, was du willst, aber da keiner hier Gedankenlesen kann weis auch keienr hier was Du dir gedacht hast und kann daher auch nicht auf Deinen Denkfehler hinweisen.


----------



## Sandman76 (21. März 2007)

Also ich bin da anderer Meinung, dass ich genau beschrieben habe, dass mein Prog Zahlen addiert - wie man sieht, die float-Zahlen aus der angegebenen Datei!

Außerdem habe ich mein Problem geschildert:

Negative Zahlen werden falsch addiert, gibt man die Summe aus! 
Aber ich hab noch ein Prob festgestellt!

Beispiel 1: in der txt-Datei würde folgendes stehen: 0.01 0.02
                                                                            0.01
-> es wird mit cout << f << endl; nur 0.01 und 0.02 ausgegeben! Jeweils die letzte Zahl wird verschluckt -> wird außerdem falsch als 0.03 ausgegeben bei cout << Summe << endl;

Beispiel2: in der txt-Datei würde folgendes stehen: -0.01 0.02
                                                                          0.05 0.01
 -> wird falsch als 0.06 ausgegeben.


Wo liegt der Fehler also!

Gruß

Jochen


----------



## jsendrow (21. März 2007)

Sandman76 hat gesagt.:


> ich hab ein kleines Prog geschrieben, dass ein Array mit float-Zahlen durchläuft und die Zahlen addiert.
> Allerdings geht das seltsamerweise nicht mit negativen Zahlen!



Das nennst Du eine genaue Schilderung? Junge, du musst noch viel über zwischenmenschliche Kommunikation lernen. Alles was da steht ist: Ich addiere und es geht nicht ohne auch nur den HAUCH einer Detailbeschreibung.

Das lustige ist, daß Du den Fehler sogar schon selber beschreibst, es nur nicht kapierst.

Dein Beispiel 1:

0.01 + 0.02 + 0.01   ergibt 0.03 und die letzte Zahl wird nicht ausgegeben.

Dein Beispiel 2:

-0.01 + 0.02 + 0.05 +  0.01 ergibt 0.06 und wieder fehlt bei die die letzte Zahl

So, jetzt guck mal genau hin. Würdest Du jeweils die letzte Zahl der Reihe ganz weglassen, dann stimmen die ergebnisse. (-0.01 + 0.02 + 0.05 = 0.06) Dein Problem hat also überhaupt nichts mit nicht funktionierenden Additionen negativer Zahlen zu tuen. sondern damit, daß schlicht immer die letzte Zahl der Reihe nicht berücksichtigt wird.

Und GENAU DAS macht din Programm, es lädt die letzte Zahl, aber bricht dann die Schleife ab. Schau mal genau in den Ablauf innerhalb der while-schleife.

1. Berrechnung
2. nächsten wert lesen.

Beim letzten wert greift dann die Abbruchbedingung der while-schleife bevor der Wert addiert wird... Das ist alles. Ohne es jetzt ausprobieren zu wollen müßte der Code eher so lauten:


```
int i=0;
    double fla[15000];
    double f=0;
    double Summe=0;

    while (! Reader.eof())
    {
    Reader >> f;
    cout << f << endl;
    fla[i] = f;
    Summe = Summe + fla[i];
    i++;
    }
```


----------



## deepthroat (21. März 2007)

Hi.





jsendrow hat gesagt.:


> Beim letzten wert greift dann die Abbruchbedingung der while-schleife bevor der Wert addiert wird... Das ist alles. Ohne es jetzt ausprobieren zu wollen müßte der Code eher so lauten:
> 
> 
> ```
> ...


Auch das ist nicht wirklich richtig. Eine Möglichkeit die richtig funktioniert:
	
	
	



```
while (Reader >> f) {
    cout << f << endl;
    fla[i] = f;
    Summe = Summe + fla[i];
    i++;
}
```
Gruß


----------



## Sandman76 (22. März 2007)

Interessant 
Danke für eure Antworten! Werde mich das nächste Mal besser und klarer Ausdrücken ;-)


Gruß

Jochen


----------

