Zum Inhalt springen

C - Programm Lösung für Maus,Katze und Hund


Empfohlene Beiträge

Geschrieben

Schreiben Sie ein C-Programm um das folgende Problem zu lösen.

Aufgabe:

Sie haben 100 € zur Verfügung und müssen folgende Tiere einkaufen.

Maus = 0.50€

Katze = 4.50€

Hund = 5.00€

Bedingung: insgesamt müssen es 100 Tiere sein und jeweils (mindestens) eine Tierart soll in Ihrem Einkaufwagen auftauchen.

Lösung in C :

#include <stdio.h>

main()

{

int x, y, z, alleTiere;

float summe ;

float maus=.50,katze=4.50,hund=5.00 ;

for (x = 1 ;x<= 100 ;x++)

for(y = 1 ;y<= 100 ;y++)

for(z = 1 ;z<= 100 ;z++) {

summe = (x*maus) + (y*katze) + (z*hund);

alleTiere = x + y + z;

if((summe == 100.00) && (alleTiere==100))

printf(„\nMaus = %d, Katze=%d, Hunde=%d\n“,x ,y, z);

}

}

Geschrieben

Optimierungsvorschlag:

int main() 
{
int x, y, z;
float summe ;
float maus=.50,katze=4.50,hund=5.00 ;

for (x = 1; x <= 98; x++)
for(y = 1; y <= 99 - x; y++) {
z = 100 - (x + y);
summe = (x*maus) + (y*katze) + (z*hund);
if(summe == 100.00)
printf("\nMaus = %d, Katze=%d, Hunde=%d\n",x ,y, z);
}
}[/CODE]

Geschrieben

#include <stdio.h>

#include <stdlib.h>

main()

{

int x=0, y=0, z=0;

int alleTiere;

float maus=.50,katze=4.50,hund=5.00;

float summe ;

for (x = 1 ;x<= 100 ;x++)

{

for(y = 1 ;y<= 100-x ;y++)

{

for(z = 1 ;z<= 100-(x+y) ;z++)

{

alleTiere = x + y + z;

summe = (x*hund) + (y*katze) + (z*maus);

if(summe == 100.00 && alleTiere==100)

{

printf("\nHund = %d, Katze=%d, Maus=%d\n",x ,y, z);

goto Ende;

}

}

}

}

Ende:;

printf("Sie muessen %d Hunde, %d Katzen und %d Maeuse kaufen\n",x,y,z);

};

P.S.: zum Formatieren war ich jetzt zu faul ;)

Geschrieben

das goto war noch drin als Ausstiegspunkt, weil ich zuerst 'ne Endlosschleife gebaut hatte ;)

Vergessen rauszunehmen.

Auch der printf am Schluss is nur Spielerei gewesen um die Anzeige verfolgen zu können. Hatte mir immer die aktuelle Anzahl der versch. Tiere anzeigen lassen...

Geschrieben

Das mit dem Goto habe ich ganz am Anfang gelernt. Zu dem Zeitpunkt haben mir vier verschiedene Leute gesagt das man das nur im Notfall benutzen sollte, weil man damit kreuz und quer im Programm rumwuseln kann, und das sehr sehr leicht in die Hose geht!

Bine

Geschrieben

Thema ist das Programm Hund, Katze, Maus. Inhalt des Programms (und somit des Themas) ist unter anderem die Sprungmarke "goto".

Sinn eines Forums über Programmiersprachen ist Erlernen neuer Techniken, Verbessern des eigenen Stils, Lösungssuche zu Programmierproblemen UND Gedankenaustausch zu grundsätzlichen Fragen der Programmierung.

Welcher Beitrag ist am Thema vorbei? :confused:

@Woodstock: Danke für den Hinweis, ich werde in Zukunft meinen Stil dahingehend verbessern :)

Geschrieben
Original geschrieben von bAdVamp

Thema ist das Programm Hund, Katze, Maus. Inhalt des Programms (und somit des Themas) ist unter anderem die Sprungmarke "goto".

Richtig.

Sinn eines Forums über Programmiersprachen ist Erlernen neuer Techniken, Verbessern des eigenen Stils, Lösungssuche zu Programmierproblemen UND Gedankenaustausch zu grundsätzlichen Fragen der Programmierung.
Sinn eines solchen Forums ist aber auch, dass man aus dem Titel eines Threads Rückschlüsse auf den Inhalt ziehen kann.

Welcher Beitrag ist am Thema vorbei? :confused:
Ich habe keinen Beitrag als OffTopic bezeichnet, insofern verstehe ich die Frage nicht. Ich habe gebeten, beim Thema zu bleiben, damit dieser Thread nicht zu einer goto-Diskussion wird.

Wenn Du Dich über die Moderation unterhalten möchtest, dann bitte per PM, denn das ist hier definitiv OffTopic.

Geschrieben

Ich hab den Spaß nochmal in einer einzelnen Schleife probiert. Vielleicht kann mir einer den Rundungsfehler erklären, der sich beim Hund ergibt (deshalb das -1 anfangs bei der If-Abfrage) ohne Welchem bei Position x=880705 noch ein zusätzliches falsches Ergebnis ausgespuckt wird:


	float maus=.5,katze=4.5,hund=5.;

	for (long x=10101;x<1000000;x++)

	{

		if ((x%100-1+(x/100)%100+(x/10000)%100)==100 &&

		 ((x%100)*hund+(((x+50)/100)%100)*katze+(((x+5000)/10000)%100)*maus)==100)

		TRACE("\nHund = %d, Katze=%d, Maus=%d\n",x%100,(x/100)%100,(x/10000)%100);

	}

Ich finde, daß das Goto oben korrekt angewendet wurde. Warum der Aufrur? Der einzig sinnvolle Einsatz heutzutage ist der Sprung aus mehrfach verschachtelten Schleifen, was wesentlich übersichtlicher ist als unnötige Abbruchkriterien die den Source aufplustern.

Geschrieben
Original geschrieben von Crush

Vielleicht kann mir einer den Rundungsfehler erklären, der sich beim Hund ergibt (deshalb das -1 anfangs bei der If-Abfrage) ohne Welchem bei Position x=880705 noch ein zusätzliches falsches Ergebnis ausgespuckt wird:

Wenn ich Deinen Code ausführe, erhalte ich zwei falsche Ergebnisse: 3 - 9 - 89 und 11 - 0 - 90. Ohne das -1 läuft das Programm wie gewünscht (MS VC6 SP5).
Geschrieben

Komisch, bei mir lief´s vorhin erst nach dem -1 einwandfrei, ohne gabs 1 richtiges und 1 falsches Ergebnis... jetzt habe ich das vom Board nochmal rauskopiert, das -1 rausgenommen (was ja logisch betrachtet auch richtig war und mich selber durcheinander gebracht hat) und plötzlich ist es auch so, daß es nur 1 richtiges Ergebnis liefert.

Ich habe vorhin ziemlich an den Compile-Settings rumgespielt ... vielleicht hat den das durcheinander gebracht? Also einfach das -1 wegstreichen und dann klappt es.

Wahrscheinlich hatte nur mein Compiler irgendwie gerade einen Schlag weg.

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...