milos Geschrieben 20. Juni 2002 Geschrieben 20. Juni 2002 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); } } Zitieren
Woodstock Geschrieben 20. Juni 2002 Geschrieben 20. Juni 2002 Hmm, was willst Du uns damit denn jetzt sagen? Bine Zitieren
milos Geschrieben 20. Juni 2002 Autor Geschrieben 20. Juni 2002 Ich dachte mir das Programm würde den einen oder anderen intressieren.... Zitieren
Woodstock Geschrieben 21. Juni 2002 Geschrieben 21. Juni 2002 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 Zitieren
Klotzkopp Geschrieben 21. Juni 2002 Geschrieben 21. Juni 2002 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] Zitieren
bAdVamp Geschrieben 21. Juni 2002 Geschrieben 21. Juni 2002 #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 Zitieren
Woodstock Geschrieben 21. Juni 2002 Geschrieben 21. Juni 2002 Ohoh, goto sollte man nur im Notfall benutzen. Davor würde ich immer abraten, und das ist doch wirklich nicht nötig! Bine Zitieren
Klotzkopp Geschrieben 21. Juni 2002 Geschrieben 21. Juni 2002 @bAdVamp: Du brauchst keine Schleife für z, denn z ergibt sich aus x und y. Dann kannst Du Dir auch die Prüfung auf x+y+z == 100 sparen. Zitieren
TingleTangle Geschrieben 21. Juni 2002 Geschrieben 21. Juni 2002 Ohoh, goto sollte man nur im Notfall benutzen So und warum? Zitieren
bAdVamp Geschrieben 21. Juni 2002 Geschrieben 21. Juni 2002 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... Zitieren
Woodstock Geschrieben 21. Juni 2002 Geschrieben 21. Juni 2002 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 Zitieren
bAdVamp Geschrieben 21. Juni 2002 Geschrieben 21. Juni 2002 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? Zitieren
Klotzkopp Geschrieben 21. Juni 2002 Geschrieben 21. Juni 2002 Bleibt bitte beim Thema. Wenn Ihr über die Verwendung von goto diskutieren wollt, macht einen neuen Thread auf. Zitieren
bAdVamp Geschrieben 21. Juni 2002 Geschrieben 21. Juni 2002 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 Zitieren
Klotzkopp Geschrieben 21. Juni 2002 Geschrieben 21. Juni 2002 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. Zitieren
Crush Geschrieben 21. Juni 2002 Geschrieben 21. Juni 2002 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. Zitieren
Klotzkopp Geschrieben 21. Juni 2002 Geschrieben 21. Juni 2002 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). Zitieren
Crush Geschrieben 21. Juni 2002 Geschrieben 21. Juni 2002 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. Zitieren
Empfohlene Beiträge
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.