Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Typwandlung von double zu int

BDelphi / 12 Antworten / Baumansicht Nickles

oder umgekehrt!

Hallo erstmal und eine Schönes Osterfest.
Ich habe die Aufgabe, die ich mir selber gestellt habe.
Zahlen die ich multipliziere durch 3 zu Teilen, das geht aber leider nicht, das geht so weit ich weiß nur mit int - werten.
Ich versuche dies in VC 6.0 zu reallisieren.
Die Frage ist jetzt: Geht das überhaupt, ich nehme an mit dem cast-Operator, aber wie ist die Frage, ich bin noch ziemlich unerfahren, und im VC 6.0 ist es recht kompliziert finde ich, habt ihr vielleicht einen Lösungsvorschlag für mich?
Danke schon mal im vorraus.
Gruß Thorsten :-)

bei Antwort benachrichtigen
Dreamforger BDelphi „Typwandlung von double zu int“
Optionen

Frohes Eiersuchen,

wenn deine summe eine double zahl ist solltest du auch durch double teilen:

double sum3 = summe / (double)3;

einfacher zu schreiben ist wohl

double sum3 = summe / 3.0; // oder nur 3.

wenn du nur

double sum3 = summe / 3;

schreibst meckert der compiler wahrscheinlich weil 3 eine int zahl ist. 3. bzw 3.0 sind jedoch double zahlen ( 3.0f währe dann eine float zahl)



bei Antwort benachrichtigen
BDelphi Dreamforger „Frohes Eiersuchen, wenn deine summe eine double zahl ist solltest du auch durch...“
Optionen

Hallo Dreamforger,
ebenfalls frohes Eiersuchen

ich habe da glaube ich einen kleinen Fehler bei der beschreibung gemacht.
ich möchte prüfen ob die zahl durch drei Teilbar ist, in etwa 20 x 20 und das dann automatisch am ende 441 raus kommt. Ich habe schon versucht das mit dem modulo (%) zu machen, aber da sagt der compiler das ginge nur mit int werten!?

bei Antwort benachrichtigen
Dreamforger BDelphi „Hallo Dreamforger, ebenfalls frohes Eiersuchen ich habe da glaube ich einen...“
Optionen

"in etwa 20 x 20 und das dann automatisch am ende 441 raus kommt."
daraus werd ich zwar auch nicht schlauer, aber wir kommen der sache schon näher :-)

wie wärs mit

double sum3 = summe / 3.0;
if (sum3 == floor(sum3))
// war durch 3 teilbar
else
// nicht durch 3 teilbar

bei Antwort benachrichtigen
Schaub-Johannes Dreamforger „ in etwa 20 x 20 und das dann automatisch am ende 441 raus kommt. daraus werd...“
Optionen

Innerhalb der Dialog-Klasse:

double Wert1=333.00;
if ((int)Wert1%3==0){
MessageBox("Ist durch 3 Teilbar","Titel",MB_OK);
}else{
MessageBox("Ist nicht durch 3 Teilbar","Titel",MB_OK);
}

Hast du das gemeint?

bei Antwort benachrichtigen
BDelphi Schaub-Johannes „Innerhalb der Dialog-Klasse: double Wert1 333.00 if int Wert1 3 0 MessageBox Ist...“
Optionen

Hallo,
ja fast, er soll bloss keine Meldung ausgeben sondern intern hochrechnen, ohne das sich die eingegebne Zahl verändert, sondern nur das resultat.

gruß Thorsten

bei Antwort benachrichtigen
BDelphi Dreamforger „ in etwa 20 x 20 und das dann automatisch am ende 441 raus kommt. daraus werd...“
Optionen

Hallo nochmal,

ja, das ist so - in meinem Beruf wofür ich ein Programm schreiben will, muss die Zahl durch 3 Teilbar sein. D.h wenn ich 20 eingebe soll er intern solange hochzählen bis die eingegebne Zahl durch drei Teilbar ist und daraus das Ergebnis ausgibt, das wäre dann im prinzip 0.20cm * 0.20cm = 0.41qm das nennt sich bei uns 3 : 3.
Aber was Du mir da jetzt vogegeben hast klingt sehr interessant, so hatte ich bisher das noch nicht versucht, kann ich dann nach dem else schreiben "sum3 +1" würde das funktionieren?
gruß Thorsten :-)

bei Antwort benachrichtigen
Dreamforger BDelphi „Hallo nochmal, ja, das ist so - in meinem Beruf wofür ich ein Programm...“
Optionen

ich hab zwar immer noch nicht raus warum 20cm * 20cm nicht 0.040 qm ist, das ist aber wohl auch nicht das Problem.

was du wirklich suchst ist anscheinend die Zahl die
1. größer oder gleich einer eingegebenen Zahl ist,
2. ganzzahlig ist und
3. durch 3 teilbar ist.
und dafür willst du die eingegebene Zahl solange um 1 erhöhen bis die obigen bedingungen erfüllt sind.

Auch wenn das drei Wünsche auf einmal sind kannst du das ja auch leichter haben ( insbesondere auch schneller ):

#include math.h // muss natürlich in spitzklammerndouble sum3 = eingabe/3.0; // sum3 hat jetzt evtl nachkommastellen
sum3 = ceil( sum3 ); // sum3 wurde jetzt auf die nächthöhere ganze Zahl aufgerundet. Falls sum3 bereits ganzzahlig war ist nichts passiert.

bsp.: eingabe = 20; // cm
sum3 = eingabe/3; // = 6.667cm;
sum3 = ceil(sum3); // = 7 cm;

danach kannst du sum3 wieder mit 3 multiplizieren und hast die kanntenlänge von deinem quadrat. Hier halt 21 cm.

PS. wie du schon vorgeschlagen hast könntest du im else zweig 1 addieren: eingabe++; dann musst du aber nochmal prüfen ob deine eingabe jetzt durch 3 teilbar ist: c&p des vorherigen codes.


bei Antwort benachrichtigen
BDelphi Dreamforger „ich hab zwar immer noch nicht raus warum 20cm 20cm nicht 0.040 qm ist, das ist...“
Optionen

Hallo,
das sieht schon echt toll aus:-)
Wir kommen der sache jetzt schon viel näher. ich bin noch blutjunger Anfänger,was ich noch nicht ganz verstanden habe, ist "ceil"?

Sorry wenn ich jetzt ein wenig nerve, nicht nur das ich mit dem Programmieren rum ärgere - was mir Spass macht, sondern das ich mich noch mit dem VC 6 einen abägern kann,was mir übrigens auch spass macht.
Was ich bisher immer gemacht habe ist die ganz banale zusammen-rechnung mit Q_Inhalt = Breite * Hoehe;
wenn ich das jetzt richtig verstanden habe heist das?
Q_Inhalt = Breite/3 * Hoehe/3;
Q_Inhalt = ceil(Q_Inhalt);????
Eine kleine Erklärung dazu, warum ich das so brauche ist ganz einfach, von Breuf bin ich Glaser, wenn Du jetzt zu mir in den Laden kommst und Du eine Scheibe von 20 * 20 haben willst, berechne ich dir nicht das oben genante, sondern 21 * 21, in den Preislisten die wir haben wird auch so gerechnet auch von meinem Händler so, es gibt auch Versicherungslisten die genauso aufgebaut sind.
Und mein Ziel ist so ein Programm zu schreiben...
1. Weil es mir Spass macht, es ist mein Hobby
und 2. weil ich schon einige Programme gesehen habe, die unheimlich umständlich waren, obwohl ich ja eigentlich mit diveresen Programmen
ganz gut umgehen kann.

Aber noch mal ne PS:
Wie behälst Du das alles, kannst Du mit dem VC perfekt umgehen?
Kennst Du ein gutes Buch oder sonstiges womit ich den VC besser beherschen kann/könnte?
Ich habe ein recht gutes buch wie ich meine von H.J.Scheibl!?
Aber was ich brauche steht da natürlich nicht drin, vom Drucken mal ganz abgesehen.
Aber Danke für deine mühe :-)

Gruss Thorsten






bei Antwort benachrichtigen
Dreamforger BDelphi „Hallo, das sieht schon echt toll aus:- Wir kommen der sache jetzt schon viel...“
Optionen

Vorab: ich hab kein Problem damit längere Diskussionenen zu führen - Wir haben beide etwas davon: Ich beherrsche zwar die Materie muss aber noch stark am erklären-können arbeiten

ceil ist das mathemathische aufrunden, floor ist mathematisches abrunden und round rundet ganz normal
bsp.
ceil( 1 ) -> 1 ; ceil( 1.25 ) -> 2; ceil( 1.75 ) ->2;
floor( 1 ) -> 1; floor( 1.25 ) -> 1; floor( 1.75 ) -> 1;
round( 1 ) -> 1; round( 1.25 ) -> 1; round( 1.75 ) -> 2;

die ganzen funktionen kommen aus der Bibliothek math.h, deshalb musst du die auch erstmal mit #include ... 'aktivieren'

zu deinem Programm:
was du wirklich machen willst ist wohl für jede seite deines Werkstücks das nächste Vielfache von 3 zu bestimmen. Da du das für jede Seite machen willst bietet sich da wohl eine eigene function an:

double next3multiple( double value ) {
double val3 = ceil( value/3.0 ) * 3.0;
return val3;
}

in deinem Programm rufst du dann die für jede Seite, nach der eingabe die funktion auf

...
double laenge = ...;
double laenge3 = next3multiple( laenge );
double breite = ...;
double breite3 = next3multiple( breite );

danach kannst du die neuen ...3 variablen wieder ausgeben, und/oder sie zwecks flächenbestimmung multiplizieren

zum PS.
Naja ich studier Informatik, programmiere seit ca 10 Jahren und habe mir das zeug durch viel ausprobieren beigebracht. Das kostet viel Zeit und nerven.
Ich selbst habe ein Buch das man nur zu abschrecken verwenden kann. Von einem Dr. Fleischhauer (oder so ähnlich).
Einziger Rat den ich dir geben kann ist das du dich von Dr.en und Prof.en als Autoren fernhälst. Die überkomplizieren das ganze nur unnötig mit Akademischen sülz den man erst Versteht wenn's schon zu spät ist.

Bis denn
Fabian



bei Antwort benachrichtigen
BDelphi Dreamforger „Vorab: ich hab kein Problem damit längere Diskussionenen zu führen - Wir haben...“
Optionen

Hallo Fabian,

fände ich gut, wenn ich dich ein wenig mit meinen Problemen nerven könnte!?
Was hälst Du davon wenn wir per E-Mail kontakt aufnehmen würden?
Würde mich freuen....
BDelphi@onlinehome.de

Gruß Thorsten

bei Antwort benachrichtigen
BDelphi Dreamforger „Vorab: ich hab kein Problem damit längere Diskussionenen zu führen - Wir haben...“
Optionen

Hallo noch mal Fabian,

danke übrigens noch mal für deine Funktion, die funktioniert hervorragend :-)
Ich hatte erst probleme damit die Funktion richtig einzubinden, weil ich bei dem ganzen Quellcode von VC 6 nicht so richtig wusste wo ich diesen nun eintragen sollte, aber wie Du schon sagtest - Ausprobieren geht über Studieren.
Übrigens noch mal was zu den Prof`s, ich finde das von dem H.J Scheibl, das Buch was ich habe gar nicht so schelcht, der schreibt nach meinem empfinden recht verständlich, durch dieses Buch bin ich überhaupt erst so richtig vorran gekommen mit dem VC 6.
Aber gut, einige sachen sind recht kompliziert und recht undurchschaubar, das liegt dann aber auch mir selbst, weil ich nicht einfach Lese und dann verstehe, ich muß mich da richtig reinknien.
Gruß Thorsten :-)

bei Antwort benachrichtigen
Borlander BDelphi „Typwandlung von double zu int“
Optionen

Ich vermute, dass ist was Du suchst:

Ergebnis = 3 * (int)ceil(Zwischenergebnis/3);


CU Borlander

bei Antwort benachrichtigen