Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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);

}

}

Hmm, was willst Du uns damit denn jetzt sagen?

Bine

Ich dachte mir das Programm würde den einen oder anderen intressieren....

Dann solltestDU das auch schreiben. Ich wußte nicht was DU damit wolltest. Habe mich halt gefragt ob DU ein Problem hast, oder was auch immer.

Aber dann ist ja gut!

Bine

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]

#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 ;)

Ohoh, goto sollte man nur im Notfall benutzen. Davor würde ich immer abraten, und das ist doch wirklich nicht nötig!

Bine

Ohoh, goto sollte man nur im Notfall benutzen

So und warum?

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

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

Bei einem komplexen Listing hätt ich's auch nicht gemacht, aber bei so 'nem Pille-Palle-Programm zum eben-mal-ausprobieren geht das schon mal, ne?

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 :)

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.

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.

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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.