Autor |
Beitrag |
peiter
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 03.12.07 13:11
finde den fehler leider nicht
bitte helt mir
Delphi-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:
| procedure TForm1.Button_BerechneClick(Sender: TObject); var Tagheute, tag2, monatheute, monat2, jahrheute, jahr2:integer; alter:real; begin Tag1:=strtoint(Edit_tag1.text); Tag2:=strtoint(Edit_Tag2.text); Monat1:=strtoint(Edit_Monat1.text);
Monat2:=strtoint(Edit_Monat2.text); Jahr1:=strtoint(Edit_Jahr1.text); Jahr2:=strtoint(Edit_Jahr2.text); if tag1>tag2 and if monat1>monat2 then alter:=Jahr1-jahr2 else if Tag1<Tag2 and if monat1>monat2 then Alter:=Jahr1-jahr2 else if tag1<tag2 and if monat1<monat2 then Alter:=Jahr1-jahr1-2 else if Tag1>tag2 and if monat1<monat2 then Alter:=Jahr2-Jahr1-1
Edit_Ausgabe.text:=floattostr(Alter)
end; |
mir wird bei Edit_Ausgabe... dass der operator nicht auf den operandentyp anwendbar ist
zur info es soll ein simples programm werden, wo ich mein geburtsdatum und das heute datum eingeben und mir wird gesagt wie alt ich bin
Moderiert von Tino: Delphi-Tags hinzugefügt
Zuletzt bearbeitet von peiter am Mo 03.12.07 16:28, insgesamt 1-mal bearbeitet
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 03.12.07 13:19
Ersetzte mal real durch singe, double oder extended
_________________ Markus Kinzler.
|
|
Magic J
      
Beiträge: 66
WinXP Prof., Vista
Delphi6, Delphi 2009, Java(Eclipse), C++, Basic
|
Verfasst: Mo 03.12.07 13:22
Hi
Versuchs mal so:
(Klammern dazu, 2."if" immer weg, Simikolon nicht vergessen)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| if (tag1>tag2) and (monat1>monat2) then alter:=Jahr1-jahr2 else if (Tag1<Tag2) and (monat1>monat2) then Alter:=Jahr1-jahr2 else if (tag1<tag2) and (monat1<monat2) then Alter:=Jahr1-jahr1-2 else if (Tag1>tag2) and (monat1<monat2) then Alter:=Jahr2-Jahr1-1;
Edit_Ausgabe.text:=floattostr(Alter); |
Gruß Jonas
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Mo 03.12.07 13:24
Hallo peiter  ,
könntest du in deinem Quelli bitte die Variablen so bennen, dass man weiß, was das aktuelle Datum ist und was das Geburtsdatum? Denn ich sehe auf Anhieb da nicht durch.
Aber zu mindestens sehe ich soweit durch, um dir sagen zu können, dass es relativ umständlich ist (auch wenn es bestimmt zum Ziel führt).
Was für dich vlt. interessant ist: Du kannst das Aktuelle Datum per Now bestimmen. Um Das Alter zu bestimmen wandelst du einfach das Geburtsdatum per StrToDate um, ermittelst die Differenz zwischen den beiden Werten (Now-Geburtstag) und wandelst das per DateToStr, oder ähnlcihem, wieder zurück. Da brauchste keine Sonderfälle betrachten  .
|
|
jaenicke
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 03.12.07 13:28
Wenn du zwei Bedingungen prüfen möchtest, dann ist and schon korrekt, es gehört aber kein zweites if da hin: Delphi-Quelltext 1: 2: 3: 4: 5:
| if (tag1>tag2) and (monat1>monat2) then alter:=Jahr1-jahr2 else if (Tag1<Tag2) and (monat1>monat2) then Alter:=Jahr1-jahr2 ... | Das ganze geht aber auch einfacher: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| uses ... ..., StdCtrls, DateUtils;
procedure TForm1.Button_BerechneClick(Sender: TObject); begin Edit_Ausgabe.Text := IntToStr(YearsBetween(now, StrToDate(Edit_Geburtsdatum.Text))); end; | Dabei brauchst du nur ein Editfeld, in den das Geburtsdatum eingegeben wird, now ist das aktuelle Datum, und YearsBetween berechnet automatisch, wieviele Jahre dazwischen liegen.
|
|
peiter 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 03.12.07 16:30
okay danke für die seeeeehr schnelle antwort
themageändert^^
datumsname geändert;)
hoffe jezz sidn alle zufrieden
ich werde alles mal testen
weitere probleme werden folgen^^ 
mfg
|
|
peiter 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 03.12.07 16:41
Magic J hat folgendes geschrieben: | Hi
Versuchs mal so:
(Klammern dazu, 2."if" immer weg, Simikolon nicht vergessen)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| if (tag1>tag2) and (monat1>monat2) then alter:=Jahr1-jahr2 else if (Tag1<Tag2) and (monat1>monat2) then Alter:=Jahr1-jahr2 else if (tag1<tag2) and (monat1<monat2) then Alter:=Jahr1-jahr1-2 else if (Tag1>tag2) and (monat1<monat2) then Alter:=Jahr2-Jahr1-1;
Edit_Ausgabe.text:=floattostr(Alter); |
Gruß Jonas |
Jawoll danke  
das funzt alles seeeeehr geil:)
dank dir
zu den anderen: sry das verstehe ich end ganz also nein ich verstehe es schon aber umsetzen kann ichs leider nicht^^
ein beispiel wäre nett^^@heiko^^ 
@jaenicke: das mit deinem beispiel funzt bei mir leider nicht... er kennt dateutils nicht-.-
mfg
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Mo 03.12.07 19:14
|
|
peiter 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 03.12.07 22:58
[quote=" Heiko"] peiter hat folgendes geschrieben: | sry das verstehe ich end ganz also nein ich verstehe es schon aber umsetzen kann ichs
peiter hat folgendes geschrieben: |
@jaenicke: das mit deinem beispiel funzt bei mir leider nicht... er kennt dateutils nicht-.-
mfg |
Nimm SysUtils, imho steht es da drin, ansonsten muss ich mal Delphi wieder anschmeißen . |
aalso^^
sysutils steht da schon^^
wenn ich datautils jezz stattdessen oder dazu eingebe wird mir immer gesagt
"Datei nicht gefunden: "Datiutils.dcu""
liegt das vllt daran dass ich noch delphi 3 habe1^^
kostenlos, da ichs von der schule habe und die eine lizens besitzen^^
|
|
jaenicke
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 03.12.07 23:59
peiter hat folgendes geschrieben: | liegt das vllt daran dass ich noch delphi 3 habe1^^
kostenlos, da ichs von der schule habe und die eine lizens besitzen^^ |
Kostenlos ist kein Argument, das ist die neue Version von Delphi auch^^: turboexplorer.com/
Delphi 3 kennt die Unit DateUtils wirklich noch nicht, das stimmt. Da musst du das wohl selbst programmieren, wie du es ja auch schon angefangen hast.
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Di 04.12.07 11:29
peiter hat folgendes geschrieben: | liegt das vllt daran dass ich noch delphi 3 habe1^^ |
 wie kann man nur mit so etwas altmodischem noch arbeite  , am besten noch auf Vista  .
Bei D3 dürfte dir lediglich YearsBetween fehlen. Vlt. ist es ja in einer anderen Unit  .
Falls du bei D3 bleiben möchtest (da die TD-Programme wohl kaum auf D3 in der Schule laufen dürften [versuch mal deinen Lehrer dazu zu bringen, in der Schule TD zu nutzen  ])
Gekürzt sieht die Funktion in TD so hier aus:
Delphi-Quelltext 1: 2: 3: 4:
| function YearsBetween(const ANow, AThen: TDateTime): Integer; begin Result := Trunc((ANow-AThen)/365.25); end; |
Die 365.25 entstehen durch die Schaltjahre, ist zwar noch ein ungenauer Wert, aber die Genauigkeit spielt ja keine Rolle  .
|
|
peiter 
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 04.12.07 14:59
dachte schon das liegt an mir^^
gut ja ich kann mir auch so ne neuere version besorgen aber wie du schon sagst in der schule wirds nicht laufen^^
und unser lehrer überprüft das auch immer mit d3:P
bis freitag werde ich nochmal ein problem posten^^
hab leider grad keine zeit
aber euer forum ist echt geil;)
wird mir in meiner schulzeit sicherlich sehr helfen:)
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Di 04.12.07 17:10
peiter hat folgendes geschrieben: | gut ja ich kann mir auch so ne neuere version besorgen aber wie du schon sagst in der schule wirds nicht laufen^^ |
Die neuere Version kann ich dir nur empfehlen, denn damit geht das coden ungemein schneller.
peiter hat folgendes geschrieben: | und unser lehrer überprüft das auch immer mit d3:P |
Das überoprüfen ist ja nicht das Problem, denn da reicht ja die Exe. Das Problem ist das weitercoden. Wenn du etwas zu Hause codest und in der Schule weitermachen möchtest, ist das schwierig, da TD u.a. ein paar Abkürzungen hat, die D3 nicht kennt. Und soweit ich mich erinnere, hat Borland nach D3 die Komponenten mal aufgeräumt  .
|
|