Zum Inhalt springen

C++ Newbie - [S] jemand der mir den Quelltext verbesser


Empfohlene Beiträge

Geschrieben

Hallo liebe Fachinformatiker Community,

ich bin jetzt seit September in einer Ausbildung zum Fachinformatiker für Systemintegrationen. Nur leider hab ich in der Schule wohl noch so meine Problemchen ;)

Und zwar sollen wie als Übung/Hausaufgabe ein Programm schreiben (c++) welches folgende Funktionen haben sollte:

Ein Bauartikelhändler gwährt seinen Kunden beim Kaufd von Dachziegeln einen Mengenrabatt:

Einkaufsmenge Rabatt

-------------------------------

bis 500 Stck 2%

bis 1000 Stck 5%

darüber 10%

Kunden mit einer Geschäftsbeziehung von mehr als 10 Jahren und einer Menge von mehr als 1000 Stück erhalten einen zusätzlichen Rabatt von 5%.

So soweit so gut: Strutkogramm habe ich gezeichnet und anschliessend angefangen den Source zu schreiben. Nur leider meckert mein Compiler (Visual C++ express). Kann jedoch den Fehler nicht feststellen.

Wär toll wenn mir da jemand helfen könnte!

Hier der Quelltext:



#include <iostream>

#include <iomanip>


using namespace std;


int main(void)

{

	int mengeziegel, bezjahre, rabatt, preisziegel;


	cout << " Rabattrechner ! /n ";


cout << "Bitte geben Sie die gewünschte Menge an Ziegeln ein!";

cin  >> mengeziegel;


cout << "Wie lange sind Sie schon Kunde von uns? ";

cin  >> bezjahre;


cout << " Wie viel kostet ein einzelner Ziegel?" ;

cin  >> preisziegel;


if (mengeziegel >= 500)

{ 

	rabatt=2;

	}


		if {mengeziegel >= 1000)

		{

			rabatt=5;

}

			if (mengeziegel <=1000);

			{ 

				rabatt=10;

				}


			else (mengeziegel <=1000 || bezjahre>=10);

			{

				rabatt=15;

}


			cout << " Es kostet sie gerade mal: " << (preisziegel*mengeziegel)/rabatt; << " Euro" ;


			return 0;


		}

		cin.get();

			cin.get();

			}

Fehlerausgabe:

d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(26) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'

Grüsse

terrax

Geschrieben

Leider immernoch der gleiche *******:

Kompilieren...

rabatt.cpp

d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(26) : error C2059: Syntaxfehler: '{'

d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(26) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'

d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(26) : error C2059: Syntaxfehler: ')'

d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(27) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'

d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(27) : warning C4552: '>=': Operator hat keine Auswirkungen; Operator mit Nebeneffekt erwartet

Das Buildprotokoll wurde unter "file://d:\Documents and Settings\uNknown\My Documents\Visual Studio 2008\Projects\rabatt_ziegel\rabatt_ziegel\Debug\BuildLog.htm" gespeichert.

rabatt_ziegel - 4 Fehler, 1 Warnung(en)

========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

Geschrieben

Hey Jungs,

dank euch schonmal!

Leider bestehen wohl immernoch Fehler, ich verzweifle langsam...


Kompilieren...

rabatt.cpp

d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(45) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'

d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(45) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.

d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(46) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'

d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(46) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.

d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(46) : error C2086: 'int cin': Neudefinition

        d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(45): Siehe Deklaration von 'cin'

d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(47) : error C2059: Syntaxfehler: '}'

d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(47) : error C2143: Syntaxfehler: Es fehlt ';' vor '}'

d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(47) : error C2059: Syntaxfehler: '}'

Das Buildprotokoll wurde unter "file://d:\Documents and Settings\uNknown\My Documents\Visual Studio 2008\Projects\rabatt_ziegel\rabatt_ziegel\Debug\BuildLog.htm" gespeichert.

rabatt_ziegel - 8 Fehler, 0 Warnung(en)

So hier mal der aktualisierte Source:

#include <iostream>

#include <iomanip>


using namespace std;


int main(void)

{

	int mengeziegel, bezjahre, rabatt, preisziegel;


	cout << " Rabattrechner ! /n ";


cout << "Bitte geben Sie die gewünschte Menge an Ziegeln ein!";

cin  >> mengeziegel;


cout << "Wie lange sind Sie schon Kunde von uns? ";

cin  >> bezjahre;


cout << " Wie viel kostet ein einzelner Ziegel?" ;

cin  >> preisziegel;


if (mengeziegel >= 500)

{ 

	rabatt=2;

	}


		if (mengeziegel >= 1000)

		{

			rabatt=5;

}

			if (mengeziegel <=1000)

			{ 

				rabatt=10;

				}


			else (mengeziegel <=1000 || bezjahre>=10);

			 {  

				rabatt=15;

             }


			cout << " Es kostet sie gerade mal: " << (preisziegel*mengeziegel)/rabatt << " Euro" ;


			return 0;


		}

		cin.get();

			cin.get();

			}

@ Robotto, hmm 2 Klammern zu viel? Welche meinst du, also meines Wissens gehören die alle dort hin , wo sie jetzt stehen.

Grüsse

terrax

Geschrieben

Die Einrückung kann Dir helfen, dass Du Fehler findest:


#include <iostream>

#include <iomanip>


using namespace std;


int main(void) {

	int mengeziegel, bezjahre, rabatt, preisziegel;


	cout << " Rabattrechner ! \n ";


	cout << "Bitte geben Sie die gewünschte Menge an Ziegeln ein: ";

	cin  >> mengeziegel;


	cout << "Wie lange sind Sie schon Kunde von uns: ";

	cin  >> bezjahre;


	cout << " Wie viel kostet ein einzelner Ziegel: " ;

	cin  >> preisziegel;


	if (mengeziegel >= 500)

		rabatt=2;


	if (mengeziegel >= 1000)

		rabatt=5;


	if (mengeziegel <=1000) 

		rabatt=10;


	else 

		if (mengeziegel <=1000 || bezjahre>=10)

			rabatt=15;


	cout << " Es kostet sie gerade mal: " << (preisziegel*mengeziegel)/rabatt << " Euro \n\n" ;

	return 0;


}

Das Returnzeichen für einen Zeilenumbruch lautet "\n" und nicht "/n", ob der Code nun semantisch korrekt ist, habe ich nicht überprüft!

HTH Phil

Geschrieben

Hey Ho,

danke dir Phil, scheint ja schonmal zu laufen. Aber es scheint auch wirklich nur so. In 80% der Fälle ist das Ergebnis 0, in den übrigen 20% irgendwas anderes, aufjedenfall nicht das richtige Ergebnis.

Stimmt etwas an meiner Rechnung nicht? Steh grad nen bisschen auf der Leitung...

Grüsse

Geschrieben

		if (mengeziegel >= 1000)

		{

			rabatt=5;

}

			if (mengeziegel <=1000)

			{ 

				rabatt=10;

				}


			else (mengeziegel <=1000 || bezjahre>=10);

			 {  

				rabatt=15;

             }

Das ergibt hinten und vorne keinen Sinn. Warum rückst Du unabhängige If-Abfragen ein? Im else-Zweig fehlt offensichtlich noch ein if.

Und auch dann ergibt dein Algorhythmus keinen Sinn.

Du gibst einen Rabatt von 4 bei mehr (oder gleich) als 1000 Stück und einen Rabatt von 10 bei weniger oder gleich 1000 Stück.

Du solltest die Aufgabe nochmal lesen und das ganze nochmal von vorn anfangen. Die 5 % extra gibt es bei > 1000 Stück und einer Geschäftsbeziehung von mehr als 10 Jahren, die letzte Abfrage kann daher in die >1000 Abfrage mit hinein.

Ein Integer ist für den Betrag auch nicht angebracht, dafür brauchst Du schon eine Gleitkommazahl.

Geschrieben

Hey Jungs,

dank euch schonmal. Bin nun nach laaaangem überlegen und rumprobieren endlich zur richtigen Lösung gekommen. Will sie euch ma nicht vorenthalten:


#include <iostream>

#include <iomanip>


using namespace std;


int main(void) {

	int mengeziegel, bezjahre, rabatt, preisziegel;

	double betragziegel, rabattbetrag, gesamtbetrag;


	cout << " Rabattrechner ! \n ";


	cout << "Bitte geben Sie die gewünschte Menge an Ziegeln ein: ";

	cin  >> mengeziegel;


	cout << "Wie lange sind Sie schon Kunde von uns: ";

	cin  >> bezjahre;


	cout << " Wie viel kostet ein einzelner Ziegel: " ;

	cin  >> preisziegel;




	if (mengeziegel <= 1000)

		rabatt=5;

	if (mengeziegel <= 500)

		rabatt=2;


	if (mengeziegel >1000) 

		rabatt=10;



		if (mengeziegel >1000 && bezjahre>=10)

		{

			rabatt=15; 

	    }


	betragziegel=mengeziegel*preisziegel;

	rabattbetrag=(betragziegel*rabatt)/100;

	gesamtbetrag=betragziegel-rabattbetrag;


	cout << gesamtbetrag;


	cin.get();

	cin.get();

	cin.get();

	return 0;


}

Grüsse

terrax

Geschrieben

Hallo,

ich würde das if - Konstrukt etwas umstellen.


if (mengeziegel <= 500)
rabatt=2;
else if (mengeziegel <= 1000)
rabatt=5;
else
{
//es kann dann nur noch > 1000 sein
if (bezjahre>=10)
rabatt=15;
else
rabatt=10;
}
[/code]

Jetzt muss er nicht mehr so oft immer die gleichen Prüfungen durchführen. Bei deinem kleinen Programm geht die Zeitersparnis wohl gegen Null aber bei größeren kann es schon mal was bringen. Vor allem ist die Lesbarkeit so besser.

Dein Programm funktioniert genau so gut.

Frank

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...