Autor Beitrag
peiter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 03.12.07 13:11 
finde den fehler leider nicht
bitte helt mir

ausblenden 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 user profile iconTino: Delphi-Tags hinzugefügt


Zuletzt bearbeitet von peiter am Mo 03.12.07 16:28, insgesamt 1-mal bearbeitet
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mo 03.12.07 13:19 
Ersetzte mal real durch singe, double oder extended

_________________
Markus Kinzler.
Magic J
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 66

WinXP Prof., Vista
Delphi6, Delphi 2009, Java(Eclipse), C++, Basic
BeitragVerfasst: Mo 03.12.07 13:22 
Hi

Versuchs mal so:
(Klammern dazu, 2."if" immer weg, Simikolon nicht vergessen)

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mo 03.12.07 13:24 
Hallo peiter :welcome: ,

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
// Oben bei uses schreibst du DateUtils dazu:
uses
  ...
  ..., StdCtrls, DateUtils;

// Und dein Buttonklick:
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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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^^;):P
mfg
peiter Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 03.12.07 16:41 
user profile iconMagic J hat folgendes geschrieben:
Hi

Versuchs mal so:
(Klammern dazu, 2."if" immer weg, Simikolon nicht vergessen)

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mo 03.12.07 19:14 
user profile iconpeiter hat folgendes geschrieben:
sry das verstehe ich end ganz also nein ich verstehe es schon aber umsetzen kann ichs leider nicht^^
ein beispiel wäre nett^^@heiko^^;):)

Entspricht genau dem von jaenicke, nur eben ausformuliert (bei Foren-Neueinsteigern weiß man immer nicht, ob die lieber Quelltext mit unbekannten Methoden mögen oder lieber die >usformulierung) ;)

user profile iconpeiter 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 ;).
peiter Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 03.12.07 22:58 
[quote="user profile iconHeiko"]
user profile iconpeiter hat folgendes geschrieben:
sry das verstehe ich end ganz also nein ich verstehe es schon aber umsetzen kann ichs
user profile iconpeiter 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 03.12.07 23:59 
user profile iconpeiter 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Di 04.12.07 11:29 
user profile iconpeiter hat folgendes geschrieben:
liegt das vllt daran dass ich noch delphi 3 habe1^^

:shock: wie kann man nur mit so etwas altmodischem noch arbeite :mrgreen: , am besten noch auf Vista :twisted: .

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:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Di 04.12.07 17:10 
user profile iconpeiter 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.

user profile iconpeiter 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 ;).