Autor |
Beitrag |
Sack2000
Hält's aus hier
Beiträge: 11
|
Verfasst: Di 31.05.05 15:30
Hi, Community
Im Informatikunterricht programmieren wir einen Elternsprechtagmanager, bei dem die Anfangszeiten und die Endzeiten jeweils in zwei integer Variablen gespeichert sind. Zum einen in start_hour, start_minute , end_hour und end_minute.
Ich möchte jetzt gerne wissen, wenn jetzt in start_hour 15 steht und in start_minute 30, wie kann ich die beiden Zahlen in einer anderen Variable benutzen, sodass sie hintereinander stehen, also dann so "1530".
Ich brauche nämlich die Differenz aus der Endzeit - Anfangszeit, aber dies geht nur wenn die Zahlen 4 Ziffern haben...
Ich hoffe das Problem wird klar 
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Di 31.05.05 15:40
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var start_hour, start_minute , end_hour, end_minute: Integer; start, ende: Integer; begin start := StrToInt(IntToStr(start_hour)+IntToStr(start_minute)); ende := StrToInt(IntToStr(end_hour)+IntToStr(end_minute)); end; |
Beispiel:
start_hour  15
start_minute  30
 start  1530
Zuletzt bearbeitet von WeBsPaCe am Di 31.05.05 16:17, insgesamt 1-mal bearbeitet
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 31.05.05 15:40
So kannst du nicht mit Zeiten rechnen. 1530 - 1450 = 80. Bei mir sind es von 10 vor drei bis halb vier aber nur 40 Minuten.
Nimm ein Edit (TMaskEdit), lass diort die Zeit im Format hh:mm eingeben und wandele das in TTime um und rechen damit.
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Di 31.05.05 15:41
Ich nehme mal an, das das Info-Unterricht ist. Und dann kann man da wunderschön irgendwelche Prozeduren schreiben, die überprüfen ob die erste Zahl größer ist oder die zweite. Ich kenn sie doch die Info-Lehrer. 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 31.05.05 15:44
Und was nützt dir das? Guck dir mein Rechenbeispiel in meinem vorherigen Post an. Dir ist wohl noch nie aufgefallen, dass eine Stunde nur 60 Minuten hat und nicht hundert.
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Di 31.05.05 16:00
Dann hab ich deine Problembeschreibung falsch gesehen.  Dachte an sowas: 1450-1620  Aber dein Problem ist ja wohl auch zu lösen. Mit div und mod hast du dann ganz schnell folgenden Code:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var differenz, dauer_stunden, dauer_minuten: Integer; begin differenz := 80; dauer_stunden := differenz div 60; dauer_minuten := differenz mod 60; ShowMessage(IntToStr(dauer_stunden)); ShowMessage(IntToStr(dauer_minuten)); end; |

|
|
Sack2000 
Hält's aus hier
Beiträge: 11
|
Verfasst: Di 31.05.05 16:08
Danke erstmal
ne es geht draum, dass ich die Anwesenheit programmieren soll, also von wann bis wann ein Lehrer oder Eltern Teil da ist. Und die Anwesenheit wird in zwei Comboboxen angezeigt also die eine heißt halt von und die andere bis.
In dieser Box sollen dann alle möglichen Gespräche eines Tages auftauchen. Und ich dachte daran, dass man halt wenn jetzt der Sprechtag von 15:30 bis 18:30 geht, erstmal rechnet:
1830-1530 dann geteilt durch die Gesprächslänge also 10 Min
dann hat man 300:10 = 30
Also 30 freie Termine und dann wollte ich mit ner for schleife von 1 bis 30 die Gesprächslänge dazu addieren
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Di 31.05.05 16:11
Klingt doch ganz ordentlich. Wo ist das Problem? 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 31.05.05 16:13
Sack2000 hat folgendes geschrieben: |
1830-1530 dann geteilt durch die Gesprächslänge also 10 Min
dann hat man 300:10 = 30
|
Du hast es nicht verstanden, was ich versucht habe dir zu erklären. Von 15:30 bis 18:30 sind es drei Stunden also 180 Minuten. 180 geteilt durch 10 Minuten Gesprächslänge ergibt 18 Termine!
|
|
Sack2000 
Hält's aus hier
Beiträge: 11
|
Verfasst: Di 31.05.05 16:16
Stimmt wie muss ich denn jetzt die Rechnung ändern, damit das hinkommt.
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Di 31.05.05 16:16
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 31.05.05 16:16
Das Problem?
Manoman.
15:30 bis 18:30 sind 3 Stunden. Macht 180 Minuten.
Das durch 10 sind 18 Termine.
Sind euch die warmen Tage zu Kopf gestiegen? 
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Di 31.05.05 16:18
Sack2000 hat folgendes geschrieben: | Stimmt wie muss ich denn jetzt die Rechnung ändern, damit das hinkommt. |
Welche Rechnung? 
|
|
Sack2000 
Hält's aus hier
Beiträge: 11
|
Verfasst: Di 31.05.05 16:20
Ja das Programm muss doch jetzt die 3 Stunden erkennen und wissen, dass 3 Stunden 180 Minuten haben. Und dann 180 : 10 teilen. Oder nicht
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 31.05.05 16:22
Du musst mit Variablen vom Typ TTime rechnen.
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 31.05.05 16:24
Du kannst mit Zeitwerten rechnen. Z.B.: Differenzen bilden.
Wenn du dir noch die Funktionen StrToTime und TimeToStr in der Hilfe ansiehst, solltest du eigentlich zurecht kommen.
Kleiner Tipp: Intern werden Zeitwerte als Zahlen behandelt.
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Di 31.05.05 16:27
Häh?
Du hast doch zwei Zahlen wie z.B. 16, 20, 15 und 40 oder nicht? Die fügst du mit meinem Code von da oben zusammen. Dann hast du 1620 und 1540. Das subtrahieren: 1620-1540. Dann hast du 80. Teilst die 80 durch 10: 80/10. Und hast deine Anzahl der Termine raus: 8.

|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 31.05.05 16:30
@webspace:
Schau mal auf die Uhr und zähl die Minuten. Das sind nämlich nur 40.
Zuletzt bearbeitet von jasocul am Di 31.05.05 16:30, insgesamt 1-mal bearbeitet
|
|
Allesquarks
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: Di 31.05.05 16:30
integers die man in Delphi mit einem Wert belegt werden ersteinmal als Zahlen im Zehnersystem interpretiert. leider sehen wir unsere Zeitangaben auch so an, was nicht stimmt, da 60 s=1min ; 60 min=1 h und 24 h =1 T ist also total konfus
Tja wie man das rechnet: Vielleicht die Stunden in Minuten umrechnen (*60) (dann hast du nämlich einheitliche Einheiten und kannst dann auch durch 10 min teilen andernfalls kannst du nicht einfach Stunden durch Minuten teilen was soll denn da Einheitenmäßig rauskommen (so wie Äpfel durch Birnen teilen) (Minute durch Minute ist einheitenlos, was ja eine Anzahl auch sein sollte))
Wenn du den Befehl div und mod mit 60 benutzt also Division mit Rest und so kannst du dann beim zurückrechnen sofort wieder Stunden und Minuten bekommen
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Di 31.05.05 16:43
jasocul hat folgendes geschrieben: | @webspace:
Schau mal auf die Uhr und zähl die Minuten. Das sind nämlich nur 40. |
Gut. Jetzt hab ich das Problem verstanden. 
|
|