ass21
Big d00d
|
Hallo an alle, ich lerne aktuell (seit 2 Wochen) in der Schule C++. Nun haben wir eine Übungsaufgabe bekommen, die ich doch lösen möchte. Ausgegeben werden soll folgendes: Berechnungen zum Kegel {mittig}
Kegeldurchmesser in mm: <Eingabe>
Kegelhöhe in mm: <Eingabe>
Volumen des Kegels: xxxxxxx.xx Kubikmillimeter. Mantelfläche des Kegels: xxxxxxx.xx Quadratmillimeter. Oberfläche des Kegels: xxxxxxx.xx Quadratmillimeter.
ENDE mit beliebiger TASTE (mittig) Bisher habe ich folgendes Zustande gebracht: //------------------------------------------------------------
#pragma hdrstop
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define geteilt 2 //Wert zu Umrechnung von Durchmesser zu Radius
#define pi 3.141592654 /*Kreiszahl Pi zur Errechnung der Grundflaeche und Mantelflaeche*/
#define geteiltt 3
//---------------------------------------------------------------------------
void main()
{
float Durchmesser, Hoehe, Volumen, Mantelflaeche, Oberflaeche, Grundflaeche,
Radius, Seite, Seite1;
printf("\n\tProgramm zur Errechnung von Volumen, Mantelflaeche\n ");
printf("\tund Oberflaeche eines Kegels\n\n");
printf("\tKugeldurchmesser in mm: ");
scanf("%f", &Durchmesser);
printf("\n\n\n");
printf("\tKegelhoehe in mm : ");
scanf("%f", &Hoehe);
Radius= Durchmesser / geteilt;
Seite1= Radius * Radius + Hoehe * Hoehe; //Nicht sicher
double Seite1 = sqrt("%f", &Seite); //falsch
Grundflaeche= pi * Radius * Radius;
Volumen= Grundflaeche * Hoehe / geteiltt;
Mantelflaeche= pi * Radius * Seite;
printf("\n\tVolumen : ");
printf("%f", Volumen);
printf("\n\n\n");
printf("%f", Mantelflaeche);
getch();
/* #pragma argsused
int main(int argc, char* argv[])
{
return 0; */
}
//---------------------------------------------------------------------------
Wie man ja an dem Kommentar hinter double erkennen kann, ist da was nicht ganz richtig Ich will einfach versuchen die Wurzel aus Seite1 zu ziehen, um auf Seite zu kommen (Pythagoras lässt grüßen). Wie bekomme ich das jetzt am dümmsten hin? Die Oberfläche nacher ausrechnen zu lassen ist ja kein Problem mehr. tia ass
Bearbeitet von that am 20.09.2008, 17:52
|
Bodominjaervi
OC Addicted
|
Mein Programmieren ist schon lange her, aber du lässt bei der sqrt die Adresse berechnen imho. Ich glaube, hier liegt das Problem, gib einfach das & einmal weg. (Sorry, falls das nicht stimmen sollte)
|
ass21
Big d00d
|
Hab das & weggegeben, hat leider nichts gebracht. Sonst noch Vorschläge?
|
muene
Addicted
|
Ist auch schon eine weile her das ich c++ programmiert habe, aber kannst du das %f nicht weglassen und nur
double Seite1 = sqrt(Seite);
schreiben? Aber wie gesagt, is schon eine weile her ...
Lg
|
ass21
Big d00d
|
hat leider auch nichts genützt
|
semteX
begehrt die rostschaufel
|
sqrt nimmt als parameter variablen und keine adressen. du übergibst ihm nur adressen, kein wunder, dass es ihn komplett aufbrennt.
außerdem seh ich, wenn in der c++ referenz nachschau, kein sqrt, welches 2 parameter nehmen würd... i versteh ned wie das ding überhaupt compilen kann
|
muene
Addicted
|
Überseh ich da grad was, aber du definierst "Seite" ja nur am Anfang als "float". Aber du weist ihm nirgends einen Wert zu, oder? (-somit kannst du dann auch keine wurzel draus ziehen)
lg
|
semteX
begehrt die rostschaufel
|
das ist das nächste
|
ass21
Big d00d
|
Also die Höhe und den Durchmesser muss man ja eingeben. Wie sieht dann der Quelltext aus mit dem ich dann die Seite s bei dem Kegel bekomme? Bin für alles offen
|
EG
thinking with portals
|
a² + b² = c²
Wenn a und b Katheten sind und c die Hypothinuse
In deinem Fall ist die Hypothinuse die Seite des Kegels s und a bzw b sind der Radius (Durchmesser/2) und die Höhe h.
Sprich:
(d/2)² + h² = s²
=> s = sqrt((d/2)²+h²);
edit: natürlich kannst in cpp ned '²' schreiben sondern musst halt h*h schreiben...
|
that
ModeratorHoffnungsloser Optimist
|
Aua, das ist ja kein C++, das ist falsches C. Fangen wir oben an: #pragma hdrstop
Was soll der Unsinn? #include <stdio.h>
#include <conio.h>
#include <math.h>
stdio.h gehört so wie printf zu C. I/O in C++ macht man mit <iostream>. conio.h ist irgendein propritäres Zeug aus der DOS-Zeit. #define geteilt 2 //Wert zu Umrechnung von Durchmesser zu Radius
#define pi 3.141592654 /*Kreiszahl Pi zur Errechnung der Grundflaeche und Mantelflaeche*/
#define geteiltt 3
Konstanten in C++ macht man mit "const int", "const double" usw, aber nicht mit #define. Deine Namen für 2 und 3 verschlechtern den Code statt ihn zu verbessern - wenns um die Umsetzung einer mathemetischen Formel geht, dann dürfen die Werte dort durchaus direkt drinstehen. Und Pi ist bereits in math.h definiert und heißt dort M_PI. void main()
Falsch (wenn auch vom Compiler oft akzeptiert). Richtig ist nur int main() oder int main(int argc, char** argv). float Durchmesser, Hoehe, Volumen, Mantelflaeche, Oberflaeche, Grundflaeche,
Radius, Seite, Seite1;
"float" ist nicht falsch, aber in der Praxis kaum nützlich, weil ungenau. Nimm lieber "double". printf("\n\tProgramm zur Errechnung von Volumen, Mantelflaeche\n ");
Das ist C-Stil, nicht C++. Wenn du C++ lernst, solltest du nicht die C-Features davon bevorzugen. Mit C++ I/O würdest du hier std::cout << "..." << std::endl; schreiben. scanf("%f", &Durchmesser);
Ebenso hier std::cin. double Seite1 = sqrt("%f", &Seite); //falsch
Genau. Falsch. "man sqrt" (oder was auch immer du als Dokumentation verwendest), spuckt aus: double sqrt(double x); Außerdem redekarierst du da "Seite1", das du oben schon als "float" deklariert hast, als "double". Das geht nicht. Also: Seite1 = sqrt(Seite); (was soll überhaupt "Seite1" bedeuten?) Edit: außerdem ists verkehrt, vermutlich wolltest du "Seite = sqrt(Seite1)". Du solltest klarere Namen verwenden.
Bearbeitet von that am 20.09.2008, 17:56
|
semteX
begehrt die rostschaufel
|
edit: that hats so schön zerlegt, da brauch ich gar nix mehr sagen
edit2: wie konnte das ding überhaupt compilen? i check das noch immer ned....
edit3: i tipp mal das is typische htl, wir schreiben c++ drauf, bringen den kindern erst mal C bei und am ende kommen eventuell noch ein paar OO konzepte.
Bearbeitet von semteX am 20.09.2008, 17:55
|
EG
thinking with portals
|
Flame on semtex Ich war auch in einer HTL...aber ich hab so Probleme wie mathematische Formelberechnungen durchaus in C gelernt. Objektorientierung kommt erst im 2. Jahrgang. Find ich aber durchaus richtig so...NICHT RICHTIG (und ich glaub auch nicht, dass ihm das so beigebracht wurde) find ich wenn cpp auf ein c-Programm gepappt wird. MMn hat der liebe ass21 hier einfach neu mit OOP angefangen - funktionale Vorbildung - und den Bogen noch nicht ganz raus. Da helfen ihm gute Tipps mehr als Flame über seine Schule! edit: Hoffe ich...
|
semteX
begehrt die rostschaufel
|
"übungsaufgabe in der schule" => i denk mal er hat sich die scanf und printf mit parametern ned aus den fingern gesaugt... das wird ihm scho wer in der schule so beigebracht haben
und wenn ich mich dran erinner, was bei uns unter c++ und java gelaufn ist in der HTL... brrrr...
|
ass21
Big d00d
|
Aua, das ist ja kein C++, das ist falsches C.
Fangen wir oben an:
#pragma hdrstop
Was soll der Unsinn?
#include <stdio.h>
#include <conio.h>
#include <math.h>
stdio.h gehört so wie printf zu C. I/O in C++ macht man mit <iostream>. conio.h ist irgendein propritäres Zeug aus der DOS-Zeit.
#define geteilt 2 //Wert zu Umrechnung von Durchmesser zu Radius
#define pi 3.141592654 /*Kreiszahl Pi zur Errechnung der Grundflaeche und Mantelflaeche*/
#define geteiltt 3
Konstanten in C++ macht man mit "const int", "const double" usw, aber nicht mit #define. Deine Namen für 2 und 3 verschlechtern den Code statt ihn zu verbessern - wenns um die Umsetzung einer mathemetischen Formel geht, dann dürfen die Werte dort durchaus direkt drinstehen. Und Pi ist bereits in math.h definiert und heißt dort M_PI.
void main()
Falsch (wenn auch vom Compiler oft akzeptiert). Richtig ist nur int main() oder int main(int argc, char** argv).
float Durchmesser, Hoehe, Volumen, Mantelflaeche, Oberflaeche, Grundflaeche,
Radius, Seite, Seite1;
"float" ist nicht falsch, aber in der Praxis kaum nützlich, weil ungenau. Nimm lieber "double".
printf("\n\tProgramm zur Errechnung von Volumen, Mantelflaeche\n ");
Das ist C-Stil, nicht C++. Wenn du C++ lernst, solltest du nicht die C-Features davon bevorzugen. Mit C++ I/O würdest du hier std::cout << "..." << std::endl; schreiben.
scanf("%f", &Durchmesser);
Ebenso hier std::cin.
double Seite1 = sqrt("%f", &Seite); //falsch
Genau. Falsch. "man sqrt" (oder was auch immer du als Dokumentation verwendest), spuckt aus:
double sqrt(double x);
Außerdem redekarierst du da "Seite1", das du oben schon als "float" deklariert hast, als "double". Das geht nicht.
Also: Seite1 = sqrt(Seite);
(was soll überhaupt "Seite1" bedeuten?) Wie ich sehe habe ich viel Unsinn hier verzapft zu 1: Das pragma hdrstop macht das Programm von selbst zu 2: Ja, ist wohl C zu 3: Kann sein ja zu 4: So wurde es mit gestern noch ausdrücklich (!) im Unterricht erklärt zu 5: double ist was? wie gesagt lerne das seit 2 wochen und bisher 6 wochenstunden gehabt zu 6+7: siehe 2 zu 8: das mit dem double hab ich in google gefunden, hier wen es interresiert Ich sollte den Titel ändern, that hat immerhin erörtert dass es sicher kein c++ ist, nur normales c :P Bin übrigens auf einem beruflichen Gymnasium mit dem Profilfach IT EDIT: habs jetzt mal mit evils vorschlag versucht und seinen code mit meinen variablen umgeschrieben - jedoch will der compiler ein ² nicht annehmen - muss man das dann als ^2 schreiben? Edit2: @ Evil: Doch, ich war bis vor ein paar Minuten der festen Meinung es seie cpp o.O
Bearbeitet von ass21 am 20.09.2008, 18:14
|