Verstehe die Rückgabe meines Programms nicht!

Hi.

Das Problem ist, das der Wert der float-Variablen namens "verbrauch" immer noch vollständig aus int's berechnet wird.

Da die verbrauchten Liter (in der Realität) immer kleiner sind als die gefahrenen Kilometer kommt bei (getankteliter/gesamtstrecke) immer 0 heraus - es wird eine Integerdivision durchgeführt.

Um den Compiler zu zwingen eine Gleitkommaberechnung durchzuführen, muß mindestens einer der Operanden ein Gleitkommatyp sein. Bsp:
C:
verbrauch = getankteliter * 100.f / gesamtstrecke;
Das 100.f ist ein Gleitkommaliteral vom Typ float.
 
Ich hab mir erlaubt, dein Programm ein wenig zu verbessern :)

Du fragst nach Teilstrecken, kannst aber sowieso nur 4 einlesen, also warum danach fragen?

Hier meine Version: Das Programm fragt dich wie viele Teilstrecken du hast, und erstellt demnach dann eine Variable mit der richtige Größe ;)

Möcht mal deine/eure Meinung dazu hören :)

Ist aber in C++ programmiert, deswegen auch Strukturen....

Code:
#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
	struct teilstrecken
	{
		int teilstrecke;
	};

	int länge_teilstrecke;
	int anzahlteilstrecken;
	int gesamtstrecke;
	int getankteliter;
	float verbrauch = 0;

	cout << "Bitte geben Sie die Anzahl der Teilstrecken ein: ";
	cin >> anzahlteilstrecken;

	
	teilstrecken * länge = 0;
	länge = new teilstrecken[anzahlteilstrecken];

	int x = 1;

	while (x <= anzahlteilstrecken)
	{
		cout << "Laenge Teilstrecke " << x << ": ";
		cin >> länge_teilstrecke;

		länge[x].teilstrecke = länge_teilstrecke;
		x++;
	}

	int i = 1;
	x = 1;

	gesamtstrecke = länge[1].teilstrecke;

	while(i < anzahlteilstrecken)
	{
		gesamtstrecke = gesamtstrecke + länge[x+1].teilstrecke;
		i++;
		x++;
	}

	cout <<"Gesamtstrecke (km): " << gesamtstrecke << "\n";

	cout <<"Bitte geben Sie die getankten Liter ein: ";
	cin >> getankteliter;

	gesamtstrecke = gesamtstrecke * 100;

	verbrauch = ((float)getankteliter/(float)gesamtstrecke)*100.0;

	cout << "Verbrauch(l/100 km): " << verbrauch << "\n";

	system("PAUSE");
	return 0;

	
}
 
Möcht mal deine/eure Meinung dazu hören :)

Ist aber in C++ programmiert, deswegen auch Strukturen....

1. Hast du das Programm eigentlich mal kompiliert/getestet?

2. Verwendung von Umlauten in Variablen, Funktionen, Objekten, Definitionen usw. sollte tunlichst vermieden werden. Ich weiß nicht, welchen Compiler du verwendest, aber der GCC kann das nicht verarbeiten.

3. Wenn es C++ wäre, sollten es dann nicht Klassen sein? Strukturen sind die "Klassen" in C. Warum eigentlich nicht in reinem C?

4. Desweiteren erstellst du mit "new" ein neues Objekt, gibst es aber nicht wieder mit "delete" frei => Speicherleck.

5. Die Verwendung von "system()" sollte man vermeiden, wenn man Platform-Unabhängig sein will. Das Kommando "PAUSE" gibt es AFAIK unter Linux nicht. Für diesen speziellen Zweck des Wartens auf eine Benutzer-Reaktion könnte man getchar() verwenden, nach dem man stdin geflushed hat.

Vielleicht gibts noch andere Problemstellen, das ist mir halt auf Anhieb aufgefallen...
 
Uhm dass ist mir jetzt aber peinlich, dass ich schwachsinn geredet habe mit den Strukturen :eek:

Also getestet hab ichs mit Visual Studio C++ Express 2010, hat mir keinen Fehler ausgegeben.

Wenn ich delete folgendermaßen verwende:
Code:
 delete laenge;
bekomme ich eine Fehlermeldung, dass ich nach dem ende des Heaps etwas hineinschreiben will, also geh ich davon aus, dass 'laenge' schon gelöscht wurde oder?
 
Zuletzt bearbeitet von einem Moderator:
Zurück