URL: https://www.overclockers.at/coding-stuff/c-frage_199833/page_2 - zur Vollversion wechseln!
Zitat von thatAua, das ist ja kein C++, das ist falsches C.
Fangen wir oben an:Code:#pragma hdrstop
Was soll der Unsinn?Code:#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.Code:#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.Code:void main()
Falsch (wenn auch vom Compiler oft akzeptiert). Richtig ist nur int main() oder int main(int argc, char** argv).Code: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".Code: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.Code:scanf("%f", &Durchmesser);
Ebenso hier std::cin.Code: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?)
^2 und ^3 gehen ALLE nicht, es gibt zwar funktionen wie "pow" (ist in math.h dabei) allerdings wenn du es dir einfach machen willst: schreib a*a... ist das selbe
ich hab dir jetzt grad einen kleinen code geschrieben, der funktioniert und alles das beinhaltet, was du brauchst...
generell: nutz google. wenn du bei ner funktion ned weißt, wie sie richtig aufrufbar ist, google nach der funktion, häng ein c noch dran und du kommst zum beispiel zu so einer seite:
http://www.cplusplus.com/reference/...cmath/sqrt.html
weiters brauchst du jetzt am anfang das &Variable NUR beim scanf! Das wird für dich erst interessant wenn ihr zu so sachn wie zeiger kommt. wird am anfang natürlich a nie erklärt, weil das konzept eher schwer zu verdauen ist.
was ist double: "ein besserer float" reicht im moment zum verständniss, wird auch für kommazahlen verwendet.
ich hab dir jetzt nen kurzen code geschrieben, welcher funktioniert. normalerweise musst M_PI nicht extra definieren, ich musste es, liegt am visual studio compiler und ich wollt mich nimmer damit spielen:
Code:#include <stdio.h> #include <math.h> #define M_PI 3.14159265358979323846 int main() { double a, b, c; printf("insert a double for a: "); scanf("%lf", &a); printf("value for a is : %lf\n", a); printf("let's make a square root...\n"); b = sqrt(a); printf("Squareroot of %lf is %lf\n", a, b); printf("let's multiply b with PI!\n"); c = b * M_PI; printf("and the result is... %lf", c); return 0; }
1. Ich glaub dir kein Wort.
4. Was ist 4.?
5. double ist so wie float, nur genauer.
8. dort steht nix von %f oder &. Und "double sqrt(double x)" bedeutet ja nur, dass die Funktion ein "double" als Parameter erwartet und ein "double" zurückgibt - nicht dass du den Rückgabewert dort lokal deklarieren musst.
Was spricht gegen eine übersichtliche 1:1-Umsetzung der Formeln aus dem Mathebuch?
double r = d / 2;
double G = M_PI * r*r;
double V = G * h / 3;
double s = sqrt( h*h + r*r );
double M = r * s * M_PI;
die conio.h ist eine Lustige. Die verwendet man im Unterricht gerne für die Befehle getch(). Mit denen macht man gerne "ENDE mit beliebiger TASTE (mittig)".
Ihr Unixhasen müsst bedenken, dass man im Unterricht als Neuling meistens irgendeine Entwicklungsumgebung, beispielsweise Borlands, verwendet und das reicht auch mal fürn Anfang. Diese Entwicklungsumgebungen führen das Programm unter Windows dann direkt aus und das Konsolenfenster schließt sich natürlich dann gleich wieder. Deshalb wollen die Lehrer immer das mit der Taste, weil sonst das Programm direkt verschwindet.
(Wie macht man das ohne getch() und System("pause")? - Wegen dem Befehl in die CLI hab ich schonmal mächtig vom that eins aufs Schüsserl bekommen )
that, ich glaub erms, dass das "Programm" den Befehl macht. Einfach irgend eine Entwicklungsumgebung die irgendwelche Befehle reinklopft am Anfang. Borland hat glaub ich auch gute 5 Zeilen includes und so drinnen.
Und, ja leider wird die Programmiersprache C immer als C++ im Unterricht deklariert. Ich weiß nicht warum. Gestört, kA. Ich hab mich damals immer so darüber aufgeregt (HTL) Sogar die Klassenkameraden haben mich dann immer veräppelt weil ich immer jemanden anderen ausgebessert habe weil er meinte "ich programmiere C++"
Zitat von Burschi1620die conio.h ist eine Lustige. Die verwendet man im Unterricht gerne für die Befehle getch(). Mit denen macht man gerne "ENDE mit beliebiger TASTE (mittig)".
Ihr Unixhasen müsst bedenken, dass man im Unterricht als Neuling meistens irgendeine Entwicklungsumgebung, beispielsweise Borlands, verwendet und das reicht auch mal fürn Anfang. Diese Entwicklungsumgebungen führen das Programm unter Windows dann direkt aus und das Konsolenfenster schließt sich natürlich dann gleich wieder. Deshalb wollen die Lehrer immer das mit der Taste, weil sonst das Programm direkt verschwindet.
(Wie macht man das ohne getch() und System("pause")? - Wegen dem Befehl in die CLI hab ich schonmal mächtig vom that eins aufs Schüsserl bekommen)
that, ich glaub erms, dass das "Programm" den Befehl macht. Einfach irgend eine Entwicklungsumgebung die irgendwelche Befehle reinklopft am Anfang. Borland hat glaub ich auch gute 5 Zeilen includes und so drinnen.
Und, ja leider wird die Programmiersprache C immer als C++ im Unterricht deklariert. Ich weiß nicht warum. Gestört, kA. Ich hab mich damals immer so darüber aufgeregt(HTL) Sogar die Klassenkameraden haben mich dann immer veräppelt weil ich immer jemanden anderen ausgebessert habe weil er meinte "ich programmiere C++"
Ich hab in der htl offiziell C gelernt mit gvim und mingw
Aber es stimmt, wir haben diesen grauslichen C++ adim bekommen nur das den keiner verwendet hat.
er hat dir nur die fehler aufgezeigt, dabei muss ma ned nett sein. ne harte antwort wär gewesn "les dein sch... buch aber nerv uns nicht, noob"Zitat von ass21Ja, hab von der Schule den Borland C++Builder 5 bekommen. N bischen angestaubt aber es funktioniert
@ that: hab ich dir irgendwas gemacht oder warum so harte antworten?...
Zitat von MarcellusIch hab in der htl offiziell C gelernt mit gvim und mingw
Zitat von ass21@ that: hab ich dir irgendwas gemacht oder warum so harte antworten?...
Zitat von semteXer hat dir nur die fehler aufgezeigt, dabei muss ma ned nett sein. ne harte antwort wär gewesn "les dein sch... buch aber nerv uns nicht, noob"
Das Posten von ausführbaren Dateien (*.exe) ohne dazugehörigen Quellcode ist unerwünscht.
Bitte poste den aktuellen Sourcecode deiner Anwendung.
Zitat von ass21Das mit dem double hab ich übrigens nicht hinbekommen.... Man muss doch oben statt float double hinschreiben und bei scanf statt "scanf("%f");" "scanf("%d");" schreiben, oder? Wenn ich es so mache kommt überall 0 raus.
Code://--------------------------------------------------------------------------- #include <stdio.h> #include <conio.h> #include <math.h> //--------------------------------------------------------------------------- int main() { float Durchmesser, Hoehe, Volumen, Volumen1, Mantelflaeche, Oberflaeche, Grundflaeche, Radius, seite, Oberflaeche1, Mantelflaeche1; printf("\t\t\t\tJ.Schmid, TG11/3 Vers. 0.1a"); printf("\n\n\n\tProgramm zur Errechnung von Volumen, Mantelflaeche\n "); printf("\tund Oberflaeche eines Kegels\n\n\n\n\n"); printf("\tKegeldurchmesser in mm: "); scanf("%f", &Durchmesser); printf("\tKegelhoehe in mm : "); scanf("%f", &Hoehe); Radius= Durchmesser / 2; seite = sqrt(Radius * Radius + Hoehe * Hoehe); Grundflaeche= M_PI * Radius * Radius; Volumen1= Grundflaeche * Hoehe / 3; Volumen= Volumen1 / 1000; Mantelflaeche1= M_PI * Radius * seite; Mantelflaeche= Mantelflaeche1 / 100; Oberflaeche1= Grundflaeche + Mantelflaeche; Oberflaeche= Oberflaeche1 / 100; double x = Mantelflaeche; Mantelflaeche= (int)(Mantelflaeche*100+0.5)/100.0; printf("\n\n\tVolumen : "); printf("%f", Volumen); printf(" Kubikzentimeter"); printf("\n\tMantelflaeche : "); printf("%f", Mantelflaeche); printf(" Quadratzentimeter"); printf("\n\tOberflaeche : "); printf("%f", Oberflaeche); printf(" Quadratzentimeter"); printf("\n\n\n\n\t\t\tENDE mit beliebiger TASTE"); getch(); } //---------------------------------------------------------------------------
ZitatKegeldurchmesser in mm: 10
Kegelhoehe in mm : 0
Volumen : 0.000000 Kubikzentimeter
Mantelflaeche : 0.790000 Quadratzentimeter
Oberflaeche : 0.793252 Quadratzentimeter
Code:printf("\n\n\tVolumen : "); printf("%f", Volumen); printf(" Kubikzentimeter");
Code:printf("\n\n\tVolumen : %f Kubikzentimeter", Volumen);
Zitat von Burschi1620Und, ja leider wird die Programmiersprache C immer als C++ im Unterricht deklariert. Ich weiß nicht warum.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025