Hilfe bei Hausaufgabe ( Volumenberechnung eines Zylinders)
-
Hallo, ich bin neu hier im Forum und hab da mal ne ganz dringend Frage. Und zwar muss ich von der Schule aus ein programm schreiben das das Volumen eines Zylinders berechnet. Ich habe das programm geschrieben, nun meint mein Lehrer ich sollte das cout und cin durch printf und scanf ersetzen, was aber nicht geht, denn dadurch bekomme ich lauter fehler und das meine Formel falsch wäre. Könnt ihr mir helfen ?
// Hausaugaben 9.11.2006
#include <iostream>
using namespace std;
//Hauptprogramm
//
int main (){
// Variablen definierenfloat Hoehe =0;
float Durchmesser =0;
float Volumen = 0;
#define Pi 3,142;// Eingabe der Hoehe
cout << "Bitte geben Sie die Hoehe des Zylinders in Meter ein ein:";
cin >> Hoehe;// Eingabe des Durchmessers
cout <<"Bitte geben sie den Durchmesser des Zylinders in Meter ein:";
cin >> Durchmesser;// Berechnung des Volumens
Volumen = Hoehe*Durchmesser*Pi;
// Ausgabe des Volumens
cout << "Volumen des Zylinders in m^3:" <<Volumen << endl;
return 0;
}
-
yoshi schrieb:
Hallo, ich bin neu hier im Forum und hab da mal ne ganz dringend Frage. Und zwar muss ich von der Schule aus ein programm schreiben das das Volumen eines Zylinders berechnet. Ich habe das programm geschrieben, nun meint mein Lehrer ich sollte das cout und cin durch printf und scanf ersetzen, was aber nicht geht, denn dadurch bekomme ich lauter fehler und das meine Formel falsch wäre. Könnt ihr mir helfen ?
hau deinen lehrer aufn kopp, und sag dem der soll sich mal ein gutes C++ Buch kaufen!
-
yoshi schrieb:
...nun meint mein Lehrer ich sollte das cout und cin durch printf und scanf ersetzen...
Sag' Deinem Lehrer, daß er Quatsch erzählt !
Wahrscheinlich kennt er einfach kein C++ und will Dich deswegen "auf C bügeln".Ich würde ihn fragen, ob Du das Programm in C oder in C++ schreiben sollst.
In C++ ist das jedenfalls komplett in Ordnung (jedenfalls, bzgl. cin/cout).
Wenn es C sein soll, brauchst Du statt iostream dann den Header stdio.h. Dann ersetzt Ducout << "Bitte geben Sie die Hoehe des Zylinders in Meter ein ein:";
durch
printf("Bitte geben Sie die Hoehe des Zylinders in Meter ein ein:");
und
cin >> Hoehe;
durch
scanf("%f", &Hoehe);
... etc.
Mir fällt bzgl. der "Formel eines auf: Tipp: Wie werden "Fließkommazahlen" im Englischen dargestellt ?
Gruß,
Simon2.
P.S.: Setze Deinen Code mal in entsprechende Tags, damit uns das Lesen leichter fällt.
-
Erstens: man: printf(3) und man: scanf(3) werden völlig anders angewendet als cout/cin - und haben in einem C++ Programm imho nichts zu suchen. (schau dir trotzdem mal die obigen Links an, um mit ihrer Verwendung klarzukommen)
Zweitens: Wie sieht dein "berichtigstes" Programm aus? Und welche Fehler meldet dein Compiler?
Drittens: Das Volumen eines Zylinders ist Vzyl = π r2 h = π d2 h/4
Viertens: sfds
-
CStoll schrieb:
...
Schade, nun hast Du's rausgenommen.
"... werden wöllig angewendet..." hat mir wirklich gefallen.Gruß,
Simon2.
-
Simon2 schrieb:
"... werden wöllig angewendet..." hat mir wirklich gefallen.
Nobody is perfect
Aber ich bemühe mich trotzdem darum, halbwegs fehlerfrei zu schreiben (und wenn mir doch ein Fehler durchrutscht, wird er schnellstmöglich berichtigt).
Aber gut zu wissen, daß ich mit solchen Ausdrücken zur allgemeinen Belustigung beitragen kann
-
Also ich habe versucht die inlude dateien von conio in mein neues c++ zu kopieren um so dem Lehrer seinen Wunsch zu erfüllen mit printf und scanf zu arbeiten. Aber irgendwie kann er dann diese Include Datei nicht öffnen er meldet mir dort einen fatal error C1083
Ich glaube der Lehrer akzeptiert es nicht das manche lieber in C++ programmieren wollen, weil das einfach besser ist. Weil wir haben 2 Lehrer, einen normalen und ein Dr ...irgendwas. Der Dr...irgendwas meinte aber das ich das dürfte -.-
-
yoshi schrieb:
Also ich habe versucht die inlude dateien von conio in mein neues c++ zu kopieren um so dem Lehrer seinen Wunsch zu erfüllen mit printf und scanf zu arbeiten. Aber irgendwie kann er dann diese Include Datei nicht öffnen er meldet mir dort einen fatal error C1083
Eine conio(.h?) gibt es im Standard auch nicht. Genannt wurde aber auch stdio.h...
Ich glaube der Lehrer akzeptiert es nicht das manche lieber in C++ programmieren wollen, weil das einfach besser ist. Weil wir haben 2 Lehrer, einen normalen und ein Dr ...irgendwas. Der Dr...irgendwas meinte aber das ich das dürfte -.-
Momentchen, es geht nicht darum was ihr besser findet, sondern welche Sprache ihr lernen sollt
Wenn der Lehrer (der Euch unterrichtet) einen ANSI-C Kurs gibt dürft ihr natürlich nicht eigenmächtig C++ verwenden. Wenn sein Kurs allerdings "C/C++" oder gar "C++" heisst, gilt das zuvor gesagte - hau ihm ein gutes C++-Buch auf den SchädelOder sag ihm er soll hier im C++-Board einen Beitrag schreiben, warum er meint in C++ müsse man printf verwenden, und sich dann von den hier zweifelsfrei vertretenen Experten zerreissen lassen
-
Naja ich hab halt damals leicht angefangen C++ zu programmieren und die meinten ja auch das wäre die modernste Schule für Informatik in BW, aber dann lern ich net C, mal vorausgesetzt das ich da überhaupt kein schimmer habe wieso man da immer ein & und % davor machen muss ^^
-
LordJaxom schrieb:
...
Eine conio(.h?) gibt es im Standard auch nicht...Echt nicht ? ich bin ziemlich sicher, conio schon verwendet zu haben .... Mist ! Kommen solche Fragen immer dann, wenn ich gerade an den Standard nicht rankomme...
Gruß,
Simon2.
-
Simon2 schrieb:
LordJaxom schrieb:
...
Eine conio(.h?) gibt es im Standard auch nicht...Echt nicht ? ich bin ziemlich sicher, conio schon verwendet zu haben .... Mist ! Kommen solche Fragen immer dann, wenn ich gerade an den Standard nicht rankomme...
Klar kann das sein - aber deswegen ist das trotzdem kein Standard-Header (genauso wie <windows.h> ist das ein Spezialheader deines Systems).
@yoshi: Die %... im Formatstring sind notwendig, damit printf() und scanf() erkennen können, was sie wie zu interpretieren haben (die werden in der Ausgabe durch die übergebenen Variablen ersetzt bzw. markieren die Stellen der Eingabe, die du interpretieren willst).
Allerdings hat niemand wirklich Kontrolle darüber, was dort steht (und ob es zu den übergebenen Parametern passt) - deshalb wird dieses System in C++ nicht mehr verwendet.
-
yoshi schrieb:
Naja ich hab halt damals leicht angefangen C++ zu programmieren und die meinten ja auch das wäre die modernste Schule für Informatik in BW, aber dann lern ich net C, mal vorausgesetzt das ich da überhaupt kein schimmer habe wieso man da immer ein & und % davor machen muss ^^
printf() ist genauso okay, wie cout, aber cout funktioniert nur unter C++.
printf hat beliebig viele Argumente, aber mindestens eins. Das ist der "Format-String", alle nachfolgenden argumente, werden so in in den Formatstring eingefügt, wie Du es im Formatstring eben beschreibst.
Einfügt wird nur da, wo ein % Zeichen ist. Das Zeichen hinter dem % sagt aus, wie eingefügt wird.printf( "Dies %s %d T%cst.\n", "ist", 1, 'e' );
Im Formatstring können unter anderem auftauchen:
%s - hier wird ein C-String eingesetzt, hier "ein"
%d - hier kommt eine Dezimalzahl rein, hier 1.
%c - hier kommt ein einzelner Buchstabe, ein char, rein.Zusammen: "Dies ist 1 Test." und der Zeilenumbruch ("\n").
Die '%'-Zeichen findet sich nur im Formatstring von printf und scanf. Benutzt Du es als Operator heißt es Modulo (Divisionsrest: 7 % 3 ist 1, weil 2*3 Rest 1).
Das & Zeichen heißt "Addresse von". Das Ergebnis ist ein Zeiger. &yoshi ist Musterweg 1, Musterhausen. Die Adresse zeigt z.B., wo etwas hingeschickt werden kann.
int a; scanf( "%d", &a );
heißt, lese aus der Standardeingabe (in dem Fall Deine Tastatur) eine Dezimalzahl ("%d") und schreibe diese Zahl an die Adresse von a. &a ist ein Zeiger auf die Integervariable a.
scanf schickt nun den Wert der Dezimalzahl an die Adresse von a. Also empfängt a den neuen Wert, den Du zuvor über die Tastatur eingegeben hast.
-
CStoll schrieb:
Allerdings hat niemand wirklich Kontrolle darüber, was dort steht (und ob es zu den übergebenen Parametern passt) - deshalb wird dieses System in C++ nicht mehr verwendet.
Ich liebe diese allgemeingültigen Aussagen. ^^
Solange ich dieses System auch verwende ist sie übrigens auch allgemeingültig falsch. Was die Kontrolle angeht, so empfehle Dir den GNU-C++ auszuprobieren. Mit %x mal eben 'nen Zeiger ausgeben geht da nicht, für %x muss der Zeiger erst in ein int konvertiert werden, sonst gibt's Mecker...
...und ja, ich kenne und benutze auch std::string, wo ich sie für passend erachte. ^^
-
Xin schrieb:
Solange ich dieses System auch verwende ist sie übrigens auch allgemeingültig falsch. Was die Kontrolle angeht, so empfehle Dir den GNU-C++ auszuprobieren. Mit %x mal eben 'nen Zeiger ausgeben geht da nicht, für %x muss der Zeiger erst in ein int konvertiert werden, sonst gibt's Mecker...
...und ja, ich kenne und benutze auch std::string, wo ich sie für passend erachte. ^^Aber diese Überprüfung durch den Compiler dürfte nur funktionieren, wenn der auch vor Ort sieht, was im Formatstring steht. Aber der Formatstring kann auch aus einer Stringtabelle ausgelesen oder vom Benutzer angefordert werden - und dann ist es zu spät für den Compiler, etwas zu kontrollieren.
(und zur Laufzeit gibt es keine portable Möglichkeit, den Typ und die Anzahl der variablen Argumente zu ermitteln)
-
CStoll schrieb:
Simon2 schrieb:
LordJaxom schrieb:
...
Eine conio(.h?) gibt es im Standard auch nicht...Echt nicht ? ich bin ziemlich sicher, conio schon verwendet zu haben .... Mist ! Kommen solche Fragen immer dann, wenn ich gerade an den Standard nicht rankomme...
Klar kann das sein - aber deswegen ist das trotzdem kein Standard-Header (genauso wie <windows.h> ist das ein Spezialheader deines Systems)....
Ich weiß gar nicht, woher ich das habe, aber irgendwie hatte ich das unter "standardisiert" abgespeichert !
Pfui !!!
Gleich wegmachen.Gruß,
Simon2.
-
CStoll schrieb:
Xin schrieb:
Solange ich dieses System auch verwende ist sie übrigens auch allgemeingültig falsch. Was die Kontrolle angeht, so empfehle Dir den GNU-C++ auszuprobieren. Mit %x mal eben 'nen Zeiger ausgeben geht da nicht, für %x muss der Zeiger erst in ein int konvertiert werden, sonst gibt's Mecker...
...und ja, ich kenne und benutze auch std::string, wo ich sie für passend erachte. ^^Aber diese Überprüfung durch den Compiler dürfte nur funktionieren, wenn der auch vor Ort sieht, was im Formatstring steht. Aber der Formatstring kann auch aus einer Stringtabelle ausgelesen oder vom Benutzer angefordert werden - und dann ist es zu spät für den Compiler, etwas zu kontrollieren.
(und zur Laufzeit gibt es keine portable Möglichkeit, den Typ und die Anzahl der variablen Argumente zu ermitteln)Da gebe ich Dir vollkommen recht.
Das Problem kann mit cin/cout nicht passieren. Da ist man auf das festgelegt, was man kompiliert hat.Holt der Programmierer den Formatstring aus einer Tabelle, so wird er vermutlich einen Grund gehabt haben: ihn offenbar zur Laufzeit wählen zu können. Das birgt ein Fehlerpotential - wie übrigens jeder Algorithmus.
Aber er braucht das halt dynamisch.Hoffentlich hat er nicht mehr als genau einen Teilstring im Formatstring stehen, sonst wird das bei cin/cout nämlich ein zweidimensionales Array und etwas komplizierter. Kompliziertere Dinge bergen ein höheres Fehlerpotential als einfache. In dem Fall tauschen wir ein einfaches Problem gegen einen aufwendigeren Sourcecode, der entsprechend aufwendiger zu testen ist.
Für den Fall, dass ich was verpasst habe... wo ist jetzt der Vorteil an dem aufwendigeren System?Wir sitzen alle am Computer. Es gibt kein Schwarz oder Weiß, kein Windows oder Linux, kein cout oder printf. Die Frage ist immer, was wird grade benötigt.
Alles hat seine Daseinsberechtigung, auch wenn's manchem Fan schwerfällt, das entsprechend andere anzuerkennen. Außerdem läßt sich über schwarz und weiß viel besser streiten, als wenn alle den golden Mittelweg nehmen würden, oder?