Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Der wievielte Tag des Jahres!(Bedingte Verzweigung)
Tolgakan - Mo 20.11.06 16:42
Titel: Der wievielte Tag des Jahres!(Bedingte Verzweigung)
Tag alle mit einander!Bin neu im Forum,besser gesagt bin ein Anfänger im Programmierbereich Delphi:)In letzter Zeit beschäftige ich mich oft mit Delphi und bin bei einer Aufgabe hängen geblieben.Ich weiß nicht genau , ob die Aufgabenstellung in diese Kategorie des Forums passt,wenn nicht könnt ihr es ja mir ja sagen.Also und zwar folgende Aufgabe:
Schreibe ein Programm,das nach Eingabe eines Datums bestimmt,um den wievielten Tag des Jahres es sich handelt.
Hinweis: Jede Jahreszahl,die durch 4 aber nicht durch 100 teilbar ist,ist ein Schaltjahr.Ausnahme:Alle durch 400teilbaren Jahreszahlen sind ebenfalls Schaltjahre.
So lautet halt die Aufgabe,die ich bewältigen will.
Ich denke mit einem SpinButton zu arbeiten wäre angebracht.
Könnte mir einer sagen , wie eine mögliche Lösung aussehen sollte.Würde mich echt freuen,wenn mir einer oder eine weiterhelfen könnte.
MfG Tolgakan
Marco D. - Mo 20.11.06 16:47
Ist das Problem der Algorithmus an sich oder das Umsetzen in Delphi-Language?
Tolgakan - Mo 20.11.06 18:57
das umsetzen in delphilanguage wie es halt in delphisprache geschrieben sein muss.ich kann halt mit der Aufgabe ehrlich gesagt nix anfangen.würde mich auf deine Hilfe freuen.Danke.
MfG
tolgakan
Narses - Mo 20.11.06 19:09
Moin und :welcome: im Forum!
Naja, das ist ein Einzeiler (und ich rate dir auch davon ab, dass deinem Lehrer zu zeigen :mahn: fällt sofort auf...): ;)
Delphi-Quelltext
1: 2: 3: 4:
| uses ..., DateUtils;
ShowMessage('Heute ist der '+IntToStr(DayOfTheYear(Now))+'. Tag des Jahres.'); |
Allerdings glaube ich nicht, dass dein Lehrer das so haben wollte. :zwinker:
Zeig dochmal deinen Code/Ansatz, dann sehen wir weiter. Du musst dir doch schon irgend einen Gedanken gemacht haben, wie du da ran gehen willst, oder? ;)
cu
Narses
Tolgakan - Di 21.11.06 18:55
Hier ist mein Versuch es selbst zu machen aber irgendwie klappt es nicht.Hoffe,du kannst mir weiterhelfen.
MfG tolgakan
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: 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:
| unit Unit_datum;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Spin, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) SpinEdit1: TSpinEdit; SpinEdit2: TSpinEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; SpinEdit3: TSpinEdit; Panel1: TPanel; procedure SpinEdit1Change(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.SpinEdit1Change(Sender: TObject); var tag,monat,jahr,anzahl:integer; schalt:boolean; begin tag:=spinedit1.value; monat:=spinedit2.value; jahr:=spinedit3.value;
case monat of 1:Anzahl:=tag; 2:Anzahl:=tag+31; 3:Anzahl:=tag+59; 4:Anzahl:=tag+90; 5:Anzahl:=tag+120; 6:Anzahl:=tag+151; 7:Anzahl:=tag+181; 8:Anzahl:=tag+212; 9:Anzahl:=tag+243;
10:Anzahl:=tag+273; 11:Anzahl:=tag+304; 12:Anzahl:=tag+334; end; if ((jahr mod 4=0 and (jahr mod 100<>0)) or (jahr mod 400=0) then schalt:=true; else schalt:=false;
if schalt and(monat>=3)then inc(anzahl); end. |
Moderiert von
raziel: Delphi-Tags hinzugefügt
Narses - Di 21.11.06 20:11
Moin!
Ich würde die Bedingung mal so formulieren:
Delphi-Quelltext
1: 2: 3:
| schalt := ((jahr mod 4) = 0) and ((jahr mod 100) <> 0) or ((jahr mod 400) = 0); |
Du kannst übrigend einer Bool´schen Variablen direkt einen Ausdruck zuweisen, dafür brauchst du kein if. ;)
cu
Narses
Tolgakan - Di 21.11.06 20:34
danke aber klappt trotzdem nicht:)....das letzte END in der Unit macht bei mir Probleme.Delphi will das irgendwie nicht schlucken.
Was könnte der Grund sein und ist der Rest meines Programms akzeptabel???danke für deine Aufmerksamkeit
MfG tolgakan
Delete - Di 21.11.06 22:46
http://www.delphibasics.co.uk/RTL.asp?Name=DayOfTheYear
Example code : Show the day of the year for a TDateTime variable
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: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
| unit Unit1; interface uses DateUtils, SysUtils, Forms, Dialogs, Classes, Controls, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var myDate : TDateTime;
begin myDate := EncodeDate(1996, 03, 01); Memo1.Lines.Add('01/03/1996 day of year = '+IntToStr(DayOfTheYear(myDate)));
myDate := EncodeDate(1998, 03, 01); Memo1.Lines.Add('01/03/1998 day of year = '+IntToStr(DayOfTheYear(myDate)));
myDate := EncodeDate(2000, 03, 01); Memo1.Lines.Add('01/03/2000 day of year = '+IntToStr(DayOfTheYear(myDate)));
myDate := EncodeDate(2002, 03, 01); Memo1.Lines.Add('01/03/2002 day of year = '+IntToStr(DayOfTheYear(myDate)));
myDate := EncodeDate(2004, 03, 01); Memo1.Lines.Add('01/03/2004 day of year = '+IntToStr(DayOfTheYear(myDate)));
end; end. |
Ausgabe:
01/03/1996 day of year = 61
01/03/1998 day of year = 60
01/03/2000 day of year = 61
01/03/2002 day of year = 60
01/03/2004 day of year = 61
Moderiert von
raziel: Delphi-Tags hinzugefügt
Narses - Di 21.11.06 23:16
Moin!
@
hathor: Hehe, stimmt, DayOfTheYear() gab´s ja auch noch... ;) Aber nutzt ihm doch nix, das hatten wir ja schon. :D
@
Tolgakan: Du hast ein
end vergessen und ein Semikolon zuviel. So sollte es dann gehen:
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: 28: 29: 30: 31: 32: 33:
| procedure TForm1.SpinEdit1Change(Sender: TObject); var tag,monat,jahr,anzahl: Integer; Schalt: Boolean; begin tag := SpinEdit1.Value; monat := SpinEdit2.Value; jahr := SpinEdit3.Value; case monat of 1: Anzahl := tag; 2: Anzahl := tag +31; 3: Anzahl := tag +59; 4: Anzahl := tag +90; 5: Anzahl := tag +120; 6: Anzahl := tag +151; 7: Anzahl := tag +181; 8: Anzahl := tag +212; 9: Anzahl := tag +243; 10: Anzahl := tag +273; 11: Anzahl := tag +304; 12: Anzahl := tag +334; end; schalt := ((jahr mod 4) = 0) and ((jahr mod 100) <> 0) or ((jahr mod 400) = 0); if (Schalt and (monat >= 3)) then Inc(Anzahl); Label1.Caption := IntToStr(Anzahl); end; |
cu
Narses
Delete - Mi 22.11.06 00:55
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1(Sender: TObject); var myDate : TDateTime; tag,monat,jahr : Integer; begin tag := SpinEdit1.Value; monat := SpinEdit2.Value; jahr := SpinEdit3.Value;
myDate := EncodeDate(jahr,monat,tag); Memo1.Lines.Add(DateToStr(myDate) +' day of year = '+ IntToStr(DayOfTheYear(myDate)));
end; |
//Die Datumsfunktionen berücksichtigen Schaltjahre
http://de.wikipedia.org/wiki/ISO_8601
VaNaTiC - Mi 22.11.06 01:06
Zwei Sachen sind mir in Deinem ursprünglichen Quellcode aufgefallen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| if ((jahr mod 4=0 and (jahr mod 100<>0)) or (jahr mod 400=0) then schalt:=true else schalt:=false;
if schalt and(monat>=3)then inc(anzahl); end; end. |
Tolgakan - Mi 22.11.06 19:50
danke für eure tipps.Nach sorgfältigem Korrigieren bleibt dennoch ein Problem.Und zwar die Ausgabe.Wie muss die gemacht werden?Ich habe die Ausgabe mit Label4.caption gemacht , aber wenn ich das Programm starten will taucht bei der Ausgabe eine Fehlermeldung auf.danke euch allen
Tolgakan - Mi 22.11.06 19:52
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: 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: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80:
| unit Unit_datum;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Spin, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) SpinEdit1: TSpinEdit; SpinEdit2: TSpinEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; SpinEdit3: TSpinEdit; Label4: TLabel; procedure SpinEdit1Change(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.SpinEdit1Change(Sender: TObject); var tag,monat,jahr,anzahl:integer; schalt:boolean; begin tag:=spinedit1.value; monat:=spinedit2.value; jahr:=spinedit3.value;
case monat of 1:Anzahl:=tag; 2:Anzahl:=tag+31; 3:Anzahl:=tag+59; 4:Anzahl:=tag+90; 5:Anzahl:=tag+120; 6:Anzahl:=tag+151; 7:Anzahl:=tag+181; 8:Anzahl:=tag+212; 9:Anzahl:=tag+243; 10:Anzahl:=tag+273; 11:Anzahl:=tag+304; 12:Anzahl:=tag+334; end;
if ((jahr mod 4)=0) and ((jahr mod 100)<>0) or ((jahr mod 400)=0) then schalt:=true else schalt:=false;
if schalt and(monat>=3)then inc(anzahl);
end; Label4.caption := IntToStr(Anzahl);
end. |
ich habe halt Label4.caption genommen , da ich die anderen(label1,label2,label3 )für die Bezeichungen Tag,Monat und Jahr verwendet habe.Das Ende stimmt angeblich nicht.
Moderiert von
Gausi: Delphi-Tags hinzugefügt
Tolgakan - Do 23.11.06 13:35
Vielen Dank Gausi.Nachdem ich die beiden Zeilen vertauscht habe,startes das Programm.Danke auch all den anderen, die mir ebenfalls geholfen haben.
MfG Tolgakan
Narses - Do 23.11.06 13:48
Moin!
Markierst du dann den Thread noch entsprechend, wenn dein Problem gelöst ist? Danke. ;)
cu
Narses
Tolgakan - Fr 24.11.06 14:32
Wie markiert man?
Narses - Fr 24.11.06 14:39
Moin!
Oben rechts in deinem ersten Beitrag auf den grünen Haken klicken.
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!