C++-Frage - Seite 2

Seite 2 von 3 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/c-frage_199833/page_2 - zur Vollversion wechseln!


ass21 schrieb am 20.09.2008 um 18:07

Zitat von that
Aua, 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?)

Wie ich sehe habe ich viel Unsinn hier verzapft :eek:

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
:confused:
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 :fresserettich:

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


semteX schrieb am 20.09.2008 um 18:19

^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;
	
}


that schrieb am 20.09.2008 um 18:21

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;


Burschi1620 schrieb am 20.09.2008 um 19:48

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 :D)

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 :D (HTL) Sogar die Klassenkameraden haben mich dann immer veräppelt weil ich immer jemanden anderen ausgebessert habe weil er meinte "ich programmiere C++" :p


ass21 schrieb am 20.09.2008 um 20:32

Zitat von Burschi1620
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 :D)

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 :D (HTL) Sogar die Klassenkameraden haben mich dann immer veräppelt weil ich immer jemanden anderen ausgebessert habe weil er meinte "ich programmiere C++" :p

Ja, 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?...


Marcellus schrieb am 20.09.2008 um 21:14

Ich hab in der htl offiziell C gelernt mit gvim und mingw :cool:

Aber es stimmt, wir haben diesen grauslichen C++ adim bekommen nur das den keiner verwendet hat.


semteX schrieb am 20.09.2008 um 21:32

Zitat von ass21
Ja, 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?...
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" :p


ica schrieb am 20.09.2008 um 21:51

Zitat von Marcellus
Ich hab in der htl offiziell C gelernt mit gvim und mingw :cool:

richtig so. es ist sicher nicht schlecht mit c anzufangen - aber dann soll man gefälligst auch c und nicht c++ dazu sagen.


that schrieb am 20.09.2008 um 22:29

Zitat von ass21
@ that: hab ich dir irgendwas gemacht oder warum so harte antworten?...

Nimms nicht persönlich, sollte kein Angriff sein. Ich bin nun manchmal etwas direkt. :)


ass21 schrieb am 20.09.2008 um 22:37

Zitat von semteX
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" :p

Das ist es. Ich hab kein Buch. Das meiste hab ich mir per Google angeeignet. Die anderen sind nunmal noch bei der einfachen Ausgabe. Das wurde mir aber zu langweilig und ich wollte etwas versuchen. Deshalb habe ich hier gefragt ;)

Anbei jetzt mal die Datei was ich jetzt programmiert habe. Ob der jetzt richtig rechnet weiss ich nicht; dass er auf wwi wieviele Kommastellen rundet weiss ich auch ;)

Das 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.


that schrieb am 20.09.2008 um 22:40


Das Posten von ausführbaren Dateien (*.exe) ohne dazugehörigen Quellcode ist unerwünscht.

Bitte poste den aktuellen Sourcecode deiner Anwendung.


that schrieb am 20.09.2008 um 22:42

Zitat von ass21
Das 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.

Das sollte so funktionieren, ja.
Edit: Quatsch, %d ist für Integers. Du willst %lf.


ass21 schrieb am 20.09.2008 um 22:45

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();

}
//---------------------------------------------------------------------------

k sry, das ist jetzt der aktuellste sourcecode


EDIT: fataler fehler entdeckt...statt radius * radius hab ich radius + radius....


that schrieb am 20.09.2008 um 23:49

Zitat
Kegeldurchmesser in mm: 10
Kegelhoehe in mm : 0


Volumen : 0.000000 Kubikzentimeter
Mantelflaeche : 0.790000 Quadratzentimeter
Oberflaeche : 0.793252 Quadratzentimeter

Das ist offensichtlich falsch, da brauch ich noch nichtmal rechnen. :)

Code:
printf("\n\n\tVolumen          : ");
printf("%f", Volumen);
printf(" Kubikzentimeter");

Das ist nicht falsch, aber es geht kürzer und übersichtlicher:

Code:
printf("\n\n\tVolumen          : %f  Kubikzentimeter", Volumen);

Und ein "return 0;" fehlt am Ende, da müsste dein Compiler eigentlich meckern.


vanHell schrieb am 21.09.2008 um 02:35

Zitat von Burschi1620
Und, ja leider wird die Programmiersprache C immer als C++ im Unterricht deklariert. Ich weiß nicht warum.

Das liegt daran das der Lehrer meistens fast keinen plan von der ganzen Gschicht hat und ned mal selbst in der lage ist C von C++ zu unterscheiden.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025