[OT] Spielwiese für Hacker und PI (was: was mache ich falsch)
-
Hi
ich arbeite zur Zeit ein C++ Buch durch und steh noch ganz am Anfang.
Die erste Aufgabe habe ich hingekriegt:
Bei der zweiten läuft das Programm und stoppt glaube ich nicht mehr??!!
Die Zahlen kann ich am Anfang noch eingeben aber mehr auch nichtAufgabenstellung:
Schreiben sie ein Programm das ihren Namen und ihre Adresse herausgibt:
Mein Programmcode:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>using namespace std;
int main()
{
int Adressausgabe;printf(" Wollen Sie Die Adresse des Computernutzers wissen?\n Falls JA druecke 1\n falls Nein eine andere Zahl ");
scanf("%d", &Adressausgabe);system ("Pause");
if (Adressausgabe == 1)
{
printf(" max musterman \n schillerstraße 9 \n 999999 alaska \n ");
system("Pause");}else
{
printf("Vielen Dank \n");
system("Pause");
}}Aufgabe 2:
Schreiben sie ein Programm dass ganze Zahlen von der Tastatur einliest und anschließend deren Summe, Differenz, Quotient, Produktund den Divisionsrest auf dem Bildschirm ausgibt
was passiert wenn man durch 0 dividiert?Mein Code:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>using namespace std;
int main()
{
int zahl1, zahl2;
int summe, differenz,produkt, quotient, divrest;
int k;printf( "Guten Tag: " );
printf(" Geben Sie zwei ganze Zahlen ein!: ");
scanf("%d %d ", &zahl1, &zahl2);
system("Pause");if(zahl1 >= zahl2)
{
summe = zahl1 + zahl2;
differenz = zahl1 - zahl2;
quotient= zahl1 / zahl2;
k = quotient * zahl2 ;
divrest = zahl1 - k;}
else {
summe = zahl2 + zahl1;
differenz = zahl2 - zahl1;
quotient = zahl2 / zahl1;
k= quotient * zahl1 ;
divrest = zahl2 - k ;
}printf( "Ergebnisse: \n");
printf("Summe: %d\n", summe);
printf("Differenz: %d\n", differenz);
printf("produkt: %d\n", produkt);
printf("quotient: %d\n", quotient);
printf("divrest: %d\n", divrest);
system("Pause");
return 0
}Bitte um Hilfe!!
Wie hätte ich Aufgabe 1 besser lösen können?
-
florii schrieb:
Bitte um Hilfe!!
Wie hätte ich Aufgabe 1 besser lösen können?Wenn in deinem Buch tatsächlich noch
printfverwendet wird, solltest du dir ein aktuelles Buch laufen.printfsollte eigentlich in C++ nicht mehr unbedingt verwendet werden. Daher besteht der Verdacht, dass das Buch veraltet ist.system("pause")ist meiner Meinung nach unschön, weil man seinen Code unnötigerweise Plattformabhängig macht.Dein Programm kompiliert wahrscheinlich nicht einmal, da hinter deinem letzten
returnein Semikolon fehlt. Lies die Fehlermeldungen deines Compilers.Dein Programm sollte in etwa so aussehen:
#include <cstdlib> #include <iostream> using namespace std; int main() { int zahl1, zahl2; int summe, differenz,produkt, quotient, divrest; cout << "Guten Tag: " << endl; cout << " Geben Sie zwei ganze Zahlen ein!: " << ends; cin >>zahl1 >> zahl2; if(zahl1 >= zahl2) { summe = zahl1 + zahl2; differenz = zahl1 - zahl2; quotient= zahl1 / zahl2; produkt = quotient * zahl2 ; divrest = zahl1 % zahl2; } else { summe = zahl2 + zahl1; differenz = zahl2 - zahl1; quotient = zahl2 / zahl1; produkt = quotient * zahl1 ; divrest = zahl1 % zahl1 ; } cout << "Ergebnisse:" << endl; cout << "Summe:" << summe << endl; cout << "Differenz: " << differenz << endl; cout << "produkt: " << produkt << endl; cout << "quotient: " << quotient << endl; cout << "divrest: " << divrest << endl; return EXIT_SUCCESS; }Btw.: Verwende die Code-Tags, wenn du Quelltext postest.
-
@Progchild
Danke für deine Hilfe

-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ (auch C++0x) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Noch dazu: Du inkludierst <iostream>, obwohl du keine I/O Streams benutzt (errinert mich an einen anderen Post, von nem Typ der in einem 'C++' Programm eine einzige, unnötige Zeile C++ benutzt hat - eben die).
Die erste Aufgabe könnte man vielleicht so lösen:
#include <iostream> #include <cstdlib> int main() { std::cout<<" Wollen Sie Die Adresse des Computernutzers wissen?\n Falls JA dr\201cken Sie 1\n falls Nein eine andere Zahl\n"; if (std::cin.get()) std::cout<<" max musterman \n schillerstra\341e 9 \n 999999 alaska\n"<<std::endl; std::cout<<"Vielen Dank !"<<std::endl; system("pause"); }
-
Hacker schrieb:
Noch dazu: Du inkludierst <iostream>, obwohl du keine I/O Streams benutzt (errinert mich an einen anderen Post, von nem Typ der in einem 'C++' Programm eine einzige, unnötige Zeile C++ benutzt hat - eben die).
Die erste Aufgabe könnte man vielleicht so lösen:
#include <iostream> #include <cstdlib> int main() { std::cout<<" Wollen Sie Die Adresse des Computernutzers wissen?\n Falls JA dr\201cken Sie 1\n falls Nein eine andere Zahl\n"; if (std::cin.get()) std::cout<<" max musterman \n schillerstra\341e 9 \n 999999 alaska\n"<<std::endl; std::cout<<"Vielen Dank !"<<std::endl; system("pause"); }
Wie bitte soll florii als Anfänger das denn verstehen? Er sollte schon "using namespace std;" nutzen, da das Programm dann anschaulicher wird. Deine if-Bedingung kann auch nur ein Fortgeschrittener verstehen. Jedoch bin ich mir nicht so ganz sicher. false ist ja 0 und true 1, aber ich glaube true ist auch alles >1
-
Hacker baut gerne absolut kryptische Programme, die weder ein Anfänger, noch meistens er selbst versteht. Ignorier ihn einfach. Die meisten davon sind noch dazu fehlerhaft, wie auch dieses.
-
Da muss ich Ape Recht geben. Der User könnte auch 328937 angeben und dieser würde eine Ausgabe erzeugen. Hier spielt es zwar keine Rolle aber bei anderen Programmen könnte der Threadersteller Schierigkeiten bekommen und müsste Debuggen

-
florii schrieb:
ich arbeite zur Zeit ein C++ Buch durch und steh noch ganz am Anfang.
...[...alle variablen am anfang definiert...] [...printf...] [...scanf...](meine Betonung)
Wenn Du ganz am Anfang stehst, hast Du ja noch Gelegenheit, Dir ein besseres Buch zu besorgen; denn das, was Du da im Moment hast, scheint Dir kein C++ sondern "C mit #include <iostream> und using namespace std;" beizubringen.
-
Bitte nächstes Mal auch den Thread Du brauchst Hilfe? beachten. Im Bezug auf Threadtitel, C++-Tags und Problembeschreibung kannst du dich noch verbessern

-
O, nein ich hab grad erst jetzt gecheckt was eigentlich dieses "1 oder eine andere Zahl" heißt (hab es mir vorher nie richtig angesehen, ich dachte da steht 1 für Ja und 0 für Nein, das hab ich ja schon sehr oft gesehen) - natürlich ist die Abfrage falsch (war ein Schreibfehler). Tut mir sehr leid, nächstes mal werd' ich genauer lesen

#include <iostream> #include <cstdlib> using namespace std; int main() { cout<<" Wollen Sie Die Adresse des Computernutzers wissen?\n Falls JA dr\201cken Sie 1\n falls Nein eine andere Zahl\n"; int a(0); cin>>a; if (a == 1) cout<<" max musterman \n schillerstra\341e 9 \n 999999 alaska\n"; cout<<"Vielen Dank !"<<endl; system("pause"); }Das dürfte ein Anfänger verstehen.
-
@Hacker: Da fehlt noch ein
return. Außerdem schon wieder dieses unschönesystem("pause").
-
ProgChild schrieb:
@Hacker: Da fehlt noch ein
return.Das ist bei
main()nicht nötig – steht es nicht, entspricht es einemreturn 0;am Ende vonmain().
-
Hacker schrieb:
#include <cstdlib>Buuuuh!
Hacker schrieb:
using namespace std;Buuuuh!
Hacker schrieb:
int a(0);Buuuuh!
Hacker schrieb:
system("pause");Buuuuh!
Noch dazu ist alles hässlich. Tu uns allen einen Gefallen und verschone uns mit deinem Code.
-
Nein nein nein stopp.
using namespace std;wegen einem Rat aus der vorherigen Seite.
system("pause")#include <cstdlib>hab ich auch nicht gern(ich nutze es ja selbst auch nie), ich hab es nur dagelassen weil flori es auch genutzt hat und cin.get() für Sie noch zu "fortgeschritten" sein scheint.
und was ist an
int a(0);so schlimm ? Der Bezeichner ?
Sag mal was, anstatt nur die ganze Zeit zu Buuhen.

Der Code ist, wie gesagt (und von dir ignoriert), so konstruiert das jemand wie flori ihn verstehen kann.Und was genau war daran hässlich ?
-
314159265358979 schrieb:
Hacker schrieb:
using namespace std;Buuuuh!
Nix da. Das ist gut und richtig so. Nur weil es nicht DEIN Stil ist, heisst es nicht, dass es schlecht oder falsch ist. Hier siehst du sogar ein Paradebeispiel für richtige Benutzung. Nebenbei Buuhst du ihn dafür aus, nachdem er darauf hingewiesen wurde, dass es GENAU SO wie es jetzt ist lesbarer ist. Du stehst also mit deiner Meinung ziemlich alleine da.
Hacker schrieb:
int a(0);Buuuuh!
Auch das ist völlig in Ordnung so. Man könnte sogar behaupten, dass dies pre C++0x eine der besten Generalisierungen zur Erzeugung von einzelnen Variablen ist (du würdest auch immer T a(0) schreiben, wenn T ein beliebiges Template ist und nicht T a = 0)
Und hässlich ist der Code auch nicht. Nur ein wenig zu viele Leerzeilen, aber das wird sich schon geben. Ich fürchte, dass es für einen Anfänger so auch einfacher zu erfassen ist, weil der Code nicht wie ein kryptischer Block aussieht.
Lass mal endlich diese Kinderkacke sein. Dein Templateschwachsinn ist auch nicht besser. Verschone uns einfach mit deinen nervigen rants, die nichts, aber auch gar nichts beitragen.
-
otze schrieb:
Man könnte sogar behaupten, dass dies pre C++0x eine der besten Generalisierungen zur Erzeugung von einzelnen Variablen ist
Könnte man zwar, aber deswegen diese Schreibweise generell zu bevorzugen, wäre doch ein wenig übertrieben.
-
otze schrieb:
Nix da. Das ist gut und richtig so. Nur weil es nicht DEIN Stil ist, heisst es nicht, dass es schlecht oder falsch ist. Hier siehst du sogar ein Paradebeispiel für richtige Benutzung. Nebenbei Buuhst du ihn dafür aus, nachdem er darauf hingewiesen wurde, dass es GENAU SO wie es jetzt ist lesbarer ist. Du stehst also mit deiner Meinung ziemlich alleine da.
Ich habe nichts gegen using namespace; aber für was soll denn das ein Paradebeispiel sein? "Globalisierung" des Namensraums wegen einer Funktion? Generell gilt: man sollte den Zugang zum Namensraum möglichst nur auf die Funktionen beschränken, die es auch brauchen.
Zur Initialisierung mit int a(0); :
dies ist zwar keine weit verbreitete Schreibweise, aber sie ist C++ pur und definitiv akzeptabel. IMO ist jedoch die von C stammende Schreibweise zu bevorzugen, da auf diese Weise für das menschliche Auge schneller ersichtlich wird, dass es sich um eine Initialisierung handelt.
-
[Rewind] schrieb:
Ich habe nichts gegen using namespace; aber für was soll denn das ein Paradebeispiel sein? "Globalisierung" des Namensraums wegen einer Funktion?
Es ging nur darum, florii nicht zu irritieren. Um nix anderes. Hier ist allen völlig klar, dass man das auch "sauberer", bzw. anders machen könnte.
-
otze schrieb:
Nix da. Das ist gut und richtig so. Nur weil es nicht DEIN Stil ist, heisst es nicht, dass es schlecht oder falsch ist. Hier siehst du sogar ein Paradebeispiel für richtige Benutzung.
Natürlich ist das schlecht. using namespace XY ist immer schlecht. Alleine aus Konsistenzgründen. Und brauchst du alles aus dem std-namespace? (Ich tippe jetzt einfach mal auf nein.) Und wenn du zu faul bist, std:: dranzuschreiben, dann nimm using std::XY;.
otze schrieb:
Auch das ist völlig in Ordnung so. Man könnte sogar behaupten, dass dies pre C++0x eine der besten Generalisierungen zur Erzeugung von einzelnen Variablen ist (du würdest auch immer T a(0) schreiben, wenn T ein beliebiges Template ist und nicht T a = 0)
Nein, das ist nicht in Ordnung. Der Anfänger wird sich fragen, wieso da kein = ist. Aber wenn du so auf "Generalisierung" bist, wieso nimmst du dann nicht immer {}? Geht doch nun bei allem. Die Initialisierung ist übrigens sowieso unnötig.
otze schrieb:
Und hässlich ist der Code auch nicht. Nur ein wenig zu viele Leerzeilen, aber das wird sich schon geben.
Die Leerzeilen sind gar nicht mal der Kritikpunkt. Seine Leertaste ist wohl kaputt oder so.
otze schrieb:
Dein Templateschwachsinn ist auch nicht besser.
Welcher Templateschwachsinn?
Edit: Sorry, ganz vergessen. endl ist natürlich auch Mist.
Hier mal ne verbesserte Version...
#include <iostream> int main() { // So lokal wie möglich halten. using std::cin; using std::cout; // Konstanten sind sexy. Ob die Nummern stimmen, weiß ich gerade nicht. Das zweite erzeugt vermutlich einen Überlauf. char const ue = '\201'; char const sz = '\341'; // Leerzeichen sind nicht böse, Zeilenumbrüche bei Ausgaben könnte man auch in mehrere Codezeilen schreiben. cout << "Wollen Sie Die Adresse des Computernutzers wissen?\n" << "Falls Ja dr" << ue << "cken Sie 1\n" << "Falls Nein eine andere Zahl\n"; // Initialisierung unnötig. int entered; cin >> entered; if(entered == 1) { // Blöcke kann man auch hinzufügen. cout << "Max Musterman\n" << "Schillerstra" << sz << "e 9\n" << "999999 alaska\n"; } cout << "Vielen Dank!\n"; cin.get(); // Wie auch immer. Alles ist besser als system(). Sogar getch oder kbhit. }
-
314159265358979 schrieb:
otze schrieb:
Auch das ist völlig in Ordnung so. Man könnte sogar behaupten, dass dies pre C++0x eine der besten Generalisierungen zur Erzeugung von einzelnen Variablen ist (du würdest auch immer T a(0) schreiben, wenn T ein beliebiges Template ist und nicht T a = 0)
Nein, das ist nicht in Ordnung. Der Anfänger wird sich fragen, wieso da kein = ist.
[...]
Hier mal ne verbesserte Version...
#include <iostream> int main() { // So lokal wie möglich halten. using std::cin; using std::cout; // Konstanten sind sexy. wchar_t const ue = '\201'; wchar_t const sz = '\341'; // Leerzeichen sind nicht böse, Zeilenumbrüche bei Ausgaben könnte man auch in mehrere Codezeilen schreiben. cout << "Wollen Sie Die Adresse des Computernutzers wissen?\n" << "Falls Ja dr" << ue << "cken Sie 1\n" << "Falls Nein eine andere Zahl\n"; // Initialisierung unnötig. int entered; cin >> entered; if(entered == 1) { // Blöcke kann man auch hinzufügen. cout << "Max Musterman\n" << "Schillerstra" << sz << "e 9\n" << "999999 alaska\n"; } cout << "Vielen Dank!\n"; cin.get(); // Wie auch immer. Alles ist besser als system(). Sogar getch oder kbhit. }Was ist das für eine Logik ? Kein Anfänger wird diesen Code ohne weiteres verstehen.
Leerzeilen ? Wo zum teufel willst du in dem Code Leerzeichen ?
Völlig unnötige Konstanten, lateinische Umlaute brauchst du nur jeweils ein mal (!).
Endl hab ich nicht benutzt.Und auf using wären hier mindestens auch die hälfte (inklusive mir) gekommen, aber wenn du einfach zu faul bist meine verdammten Posts zu lesen, wird dir kein Mensch mehr helfen können.