Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

24.05.2011, 16:39

Einen float in eine Zeit umwandeln C++

Hallo Spieleprogrammierer und Programmierer,

versuche zwar schon ein paar Jahren C++ zu lernen, aber aus Zeitmangel hält alles an einer schwachen Linie fest. Jetzt aber zu meinem Problem. Und zwar versuch ich eine einfache Konsolenanwandung zu erstellen um die Bauzeiten von Gebäuden in einem Browsergame zu errechnen. Scheint auch soweit zu funktionieren. Zumindest spukt es mir die selben Werte aus wie Excel und der gute alte geliebte Taschenrechner. Das Problem dabei ist, wie kann ich den Dezimalwert in einen Zeitwert umwandeln, so das er mir Anzeigt, wie lang das Gebäude bis zur Fertigstellung benötigt (ohne herunter zu zählen). Das Endformat soll so aussehen Tage, Stunden, Minuten, Sekunden (Beispiel 2D 09H 22M 00S).

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <time.h>
#include <math.h>
#include <stdio.h>

using namespace std;

// Hauptprogramm

int main()
{
   //Variablen
   //
   int GebSt;           // Gebaeudestufe
   int ForSt;           // Forschungsstufe
   int Grund;           // Grundwert
   float Basis;         // Basiswert
   float Ergebnis;      // Ergebnis
   float ZwiGeb;        // Zwischenwert Gebaeude zum potenzieren
   



   // Begrüßung

   cout << "Herzlich Willkommen im Berechnungstool zur Berechnung der Gebäude-Bauzeiten." << endl;
   cout << "****************************************************************************" << endl;
   cout << endl;
   cout << "Die Berechnung baut auf folgende Formel auf: \n"
        "( ( ( 2 * ( Grundwert * ( Basiswert hoch ( Gebaeudestufe - 1 ) ) ) \n"
        "+ ( ( Gebaeudestufe ) * 100 ) ) / 50 ) * 2,5 ) \n"
        "- ( ( ( ( ( 2 * (Grundwert * (Basiswert hoch ( Gebaeudestufe - 1 ) ) ) \n"
        "+ ( ( Gebaeudestufe ) * 100 ) ) / 50 ) * 2,5 ) / 100 * 5 ) * ( Forschungsstufe ) ) \n"
        "- ( ( ( ( ( ( 2 * (Grundwert * ( Basiswert hoch ( Gebaeudestufe - 1 ) ) ) \n"
        "+ ( ( Gebaeudestufe ) * 100 ) ) / 50) * 2,5 ) \n"
        "- ( ( ( ( ( 2 * ( Grundwert * ( Basiswert hoch ( Gebaeudestufe - 1 ) ) ) \n"
        "+ ( ( Gebaeudestufe ) * 100 ) ) / 50 ) * 2,5 ) / 100 * 5) * ( Forschungsstufe ) ) ) / 100 ) * 15 ) \n" << endl;


   // Eingabe
   cout << "Gib den Grundwert ein: ";
   cin >> Grund;
   cout << "Bitte gib den Basiswert, mit dem potenziert werden soll, ein: ";
   cin >> Basis;
   cout << "Bitte gib die Gebaudestufe ein: ";
   cin >> GebSt;
   cout << "Bitte gib die Forschungsstufe ein: ";
   cin >> ForSt;


   // Rechnen
   ZwiGeb = pow(Basis,(GebSt - 1));
   Ergebnis = (((2*(Grund*ZwiGeb)+(GebSt*100))/50)*2.5)-(((((2*(Grund*ZwiGeb)+(GebSt*100))/50)*2.5)/100*5)*ForSt)-((((((2*(Grund*ZwiGeb)+(GebSt*100))/50)*2.5)-(((((2*(Grund*ZwiGeb)+(GebSt*100))/50)*2.5)/100*5)*ForSt))/100)*15);

   

   // Ausgabe

   cout << "Das Ergebnis: ";
   printf( "%d %H %M %S", Ergebnis);



system("PAUSE");

return 0;
}


Dankeschön schonmal im voraus, Seppel.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

24.05.2011, 17:23

Willkommen im Forum.
Das ergebniss wird in Sekunden angegeben?
Wenn ja kannst du es(nach einem Cast in int) relativ einfach mit Modulo lösen.
Eine Minute hat 60 Sekunden
Eine Stunde hat 60 Minuten also 60*60=3600 Sekunden
Ein Tag hat 24 Stunden also 3600*24 = 86400 Sekunden.

Nun Rechnest du aus wieviele Tage es sind.
Tage = Sekunden/86400
restliche Sekunden nach abzug der Tage = Sekunden%86400 oder Sekunden-86400*Tage

Dann wie viele Stunden.
Stunden = restliche Sekunden nach abzug der Tage / 3600

und jetzt wieviele Sekunden noch übrig sind.
restliche Sekunden nach abzug der Stunden = restliche Sekunden nach abzug der Tage%3600 oder restliche Sekunden nach abzug der Tage-3600*Stunden

Hoffe das war verständlich und hat dir weiter geholfen.

edit: Ich kann sowas besser in Code formulieren xD

C-/C++-Quelltext

1
2
3
4
int sekunden = 32487678;// als Beispiel
int tage = sekunden/(60*60*24);
int stunden = sekunden/(60*60);
int restlicheSekunden = sekunden % 60;


Wenn du noch Jahre ausrechnen willst wirds wegen den Schaltjahren etwas komplizierter^^
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »NachoMan« (24.05.2011, 17:32)


3

24.05.2011, 18:04

Danke für die schnelle Antwort und deiner Hilfe.

Hab das jetzt mal nach meinem Verständnis eingebaut ^^.

Ergebnis bleibt leider das selbe. Hab es nur wieder, wie beim Vorversuch (bevor ich gepostet hab), mit einer cout-Ausgabe gemacht.
Miss ich da jetzt noch ein <if>-Abfrage einbauen???
Wenn ich mehrer Variablen in die cout-Ausgabe schreibe, fehlt ihm beim compilieren ein Argument, oder so ähnlich.

C-/C++-Quelltext

1
cout << Tage"D" Stunden"H" Minuten"M" Sekunden"S" << endl;

C-/C++-Quelltext

1
cout << Tage"D" << Stunden"H" << Minuten"M" << Sekunden"S" << endl;


Wenn ich nur eine Variabel angebe, compiliert er nur mit ein paar Warnungen, das die anderen nicht verwendet werden. Zeigt mir dann aber halt nur den Inhalt an, von der Variabel die ich angegeben hab.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

4

24.05.2011, 18:08

Die Zeile müsste so aussehen:

C-/C++-Quelltext

1
cout << Tage << "D" << Stunden << "H" << Minuten << "M" << Sekunden << "S" << endl;


Das nächste mal bitte die die erst Fehlermeldungen oder Warnungen mit posten. :thumbsup:

Achja, besorg dir ein Einsteigerbuch, wenn du noch keins hast oder lern eine einfacherere Programmiersprache.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

5

24.05.2011, 21:48

Z.B. Python.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

6

24.05.2011, 23:20

besorg dir ein Einsteigerbuch
So blöd wie es sich anhört, aber der Satz hat was gebracht. Jetzt läuft es ^^. Ein dreiviertel Jahr nichtstun ist heftig. Hab schon einige Bücher durch, darunter auch C++ für Spieleprogrammierer. Nur manchmal da hängt die Umsetzung. Das stellt man es sich durch Fremdfunktionen leichter vor als wenn man es einfach mal so machen würde.
Auf jedefall Danke ;).

Hier noch für andere die auch mal so ein Problemchen haben die Lösung:

C-/C++-Quelltext

1
2
3
4
5
6
7
   // Ausgabe

   cout << "Das Ergebnis: ";
   cout << Tage << "D ";
   cout << Stunden << "H "; 
   cout << Minuten << "M ";
   cout << RestlicheSekunden << "S " << endl;

Werbeanzeige