AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Erstellen eines Datum-überprüfers

Ein Thema von Mo53 · begonnen am 16. Mai 2021 · letzter Beitrag vom 17. Mai 2021
Antwort Antwort
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#1

AW: Erstellen eines Datum-überprüfers

  Alt 16. Mai 2021, 19:17
Zum Spaß noch ein Ansatz:
Delphi-Quellcode:
var
  Tag : Integer;
  Monat : Integer;
  Jahr : Integer;
  TagOK : Boolean;
  MonatOk : Boolean;
  JahrOk : Boolean;
  IstSchaltjahr : Boolean;
begin
  write('Bitte den Tag eingeben ');
  readln(Tag);
  write('Bitte den Monat eingeben ');
  readln(Monat);
  write('Bitte das Jahr eingeben ');
  readln(Jahr);
  TagOk := (Tag >= 1) and (Tag <= 31);
  MonatOk := (Monat >= 1) and (Monat <= 12);
  JahrOk := (Jahr >= 1) and (Jahr <= 3000);
  IstSchaltJahr := (Jahr mod 4 = 0) and (Jahr mod 100 <> 0) or (Jahr mod 400 = 0);
  if TagOk and MonatOk and JahrOk then
  begin
    case Monat of
      2: case IstSchaltjahr of
           true : TagOk := (Tag <= 29);
           false : TagOk := (Tag <= 28);
         end;
      1, 3, 5, 7, 8, 10, 12 : TagOk := (Tag <= 31);
      4, 6, 9, 11 : TagOk := (Tag <= 30);
    end;
  end;
  writeln('Als Datum wurde der ', Tag,'.', Monat,'.', Jahr,' eingegeben:');
  case TagOk of
    true : writeln('Der Tag ', Tag, ' ist gültig.');
    false : writeln('Der Tag ', Tag, ' ist ungültig.');
  end;
  case MonatOk of
    true : writeln('Der Monat ', Monat, ' ist gültig.');
    false : writeln('Der Monat ', Monat, ' ist ungültig.');
  end;
  case JahrOk of
    true : writeln('Das Jahr ', Jahr, ' liegt im zulässigen Bereich.');
    false : writeln('Das Jahr ', Jahr, ' liegt ausserhalb des zulässigen Bereiches.');
  end;
  case JahrOk and IstSchaltjahr of
    true : writeln('Bei dem Jahr ', Jahr,' handelt es sich um ein Schaltjahr.');
    false : writeln('Bei dem Jahr ', Jahr,' handelt es sich nicht um ein Schaltjahr.');
  end;
  readln;
end.
@KodeZwerg:

Es geht erstmal darum die Grundzüge des Programmierens und die Umsetzung einer Aufgabenstellung in entsprechende Logik zu lernen. Das dazu Delphi benutzt wird, ist nachrangig. Daher ist es momentan noch nicht hilfreich in Delphi vorhanden Funktionalitäten zu nutzen, auch wenn dies eigentlich naheliegend erscheint.

Die delphieigenen Funktionen kann man dann gerne zur Verifizierung der eigenen Ergebnisse nutzen. Dann lernt man direkt beides

Geändert von Delphi.Narium (16. Mai 2021 um 19:34 Uhr) Grund: Wie immer: Schreibfehler
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#2

AW: Erstellen eines Datum-überprüfers

  Alt 16. Mai 2021, 19:29
@Delphi.Narium. Super gemacht alles drin und die Rückgabe so wie sie sein sollte.
Kleine Einschränkung Formatierung könnte besser sein. Aber jedem das seine.

Meine wäre so! LOL..

Delphi-Quellcode:
program ueb03;
{$APPTYPE CONSOLE}
{$R+,Q+ X-}

uses
  System.SysUtils;

var
  Tag: Integer;
  Monat: Integer;
  Jahr: Integer;
  TagOK: Boolean;
  MonatOk: Boolean;
  JahrOk: Boolean;
  IstSchaltjahr: Boolean;

begin
  write('Bitte den Tag eingeben ');
  readln(Tag);
  write('Bitte den Monat eingeben ');
  readln(Monat);
  write('Bitte das Jahr eingeben ');
  readln(Jahr);

  TagOK := (Tag >= 1) and (Tag <= 31);
  MonatOk := (Monat >= 1) and (Monat <= 12);
  JahrOk := (Jahr >= 1) and (Jahr <= 3000);

  IstSchaltjahr := (Jahr mod 4 = 0) and (Jahr mod 100 <> 0) or
    (Jahr mod 400 = 0);

  if TagOK and MonatOk and JahrOk then
  begin
    case Monat of
      2:
        case IstSchaltjahr of
          true:
            TagOK := (Tag <= 29);
          false:
            TagOK := (Tag <= 28);
        end;
      1, 3, 5, 7, 8, 10, 12:
        TagOK := (Tag <= 31);
      4, 6, 9, 11:
        TagOK := (Tag <= 30);
    end;
  end;
  writeln('Als Datum wurde der ', Tag, '.', Monat, '.', Jahr, ' eingegeben:');

  case TagOK of
    true:
      writeln('Der Tag ', Tag, ' ist gültig.');
    false:
      writeln('Der Tag ', Tag, ' ist ungültig.');
  end;

  case MonatOk of
    true:
      writeln('Der Monat ', Monat, ' ist gültig.');
    false:
      writeln('Der Monat ', Monat, ' ist ungültig.');
  end;

  case JahrOk of
    true:
      writeln('Das Jahr ', Jahr, ' liegt im zulässigen Bereich.');
    false:
      writeln('Das Jahr ', Jahr, ' liegt ausserhalb des zulässigen Bereiches.');
  end;

  case JahrOk and IstSchaltjahr of
    true:
      writeln('Bei dem Jahr ', Jahr, ' handelt es sich um ein Schaltjahr.');
    false:
      writeln('Bei dem Jahr ', Jahr,
        ' handelt es sich nicht um ein Schaltjahr.');
  end;
  readln;

end.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#3

AW: Erstellen eines Datum-überprüfers

  Alt 16. Mai 2021, 19:44
Bei diesem ganzen Case true false werfe ich mal IfThen in den Raum.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#4

AW: Erstellen eines Datum-überprüfers

  Alt 16. Mai 2021, 19:47
Bei diesem ganzen Case true false werfe ich mal IfThen in den Raum.
Warum? Um dann diesen ganzen IFThen Kram zu haben? Wo soll da der Vorteil liegen.

tsss..
  Mit Zitat antworten Zitat
mmw
(Gast)

n/a Beiträge
 
#5

AW: Erstellen eines Datum-überprüfers

  Alt 16. Mai 2021, 20:44
hallo,

zur Erinnerung

https://www.geo.de/geolino/mensch/25...der-29-februar


wurde aber schon drauf hingewiesen #5

Gruß

Geändert von mmw (16. Mai 2021 um 20:46 Uhr)
  Mit Zitat antworten Zitat
Mo53

Registriert seit: 16. Mai 2021
59 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Erstellen eines Datum-überprüfers

  Alt 16. Mai 2021, 21:15
@KodeZwerg

Leider ist uns die Benutzung von Dingen die wir noch nicht hatten untersagt.
Ich verstehe ehrlich gesagt auch nicht warum die uns das Leben nicht leichter machen, aber ich denke die machen das um uns das zu veranschaulichen.
  Mit Zitat antworten Zitat
Mo53

Registriert seit: 16. Mai 2021
59 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Erstellen eines Datum-überprüfers

  Alt 16. Mai 2021, 21:37
Leute zum Thema der Osternüberprüfung verstehe ich die letzte Gleichung nicht, da beide Seiten der Gleichung ja nicht immer das gleiche ergeben.

Die Osterformel: So berechnen Sie das Datum

a = Jahr mod 4
b = Jahr mod 7
c = Jahr mod 19
d = (19c + 24) mod 30
e = (2a + 4b + 6d + 5) mod 7
f = (c + 11d + 22e) / 451
Der Ostersonntag wird daraus wie folgt errechnet: 22 + d + e - 7f
Ist dieses Ergebnis größer als 31, so liegt Ostern im April.
Dann muss folgende Formel für die Berechnung des Ostersonntag angewandt werden:
22 + d + e - 7f - 31 = d + e - 7f - 9.

Ich habe versucht das mal zum Verständnis in ein Quelltext zu übersetzen, da habe ich für beide Seiten der Gleichung jeweils eine Variable deklariert um zu schauen ob immer dasselbe rauskommt.

Delphi-Quellcode:
var
  a, b, c, d, e, f: integer;
  Jahr: integer;
  Ostersonntag: integer;
  OsternApril: integer;
  Ostern2: integer;

begin
  writeln('Jahr eingeben');
  readln(Jahr);
  a := Jahr mod 4;
  b := Jahr mod 7;
  c := Jahr mod 19;
  d := (19 * c + 24) mod 30;
  e := (2 * a + 4 * b + 6 * d + 5) mod 7;
  f := (c + 11 * d + 22 * e) div 451;
  Ostersonntag := 22 + d + e - 7 * f;
  if (Ostersonntag > 31) then
    OsternApril := 22 + d + e - 7 * f - 31;
  Ostern2 := d + e - 7 * f - 9;
  writeln(OsternApril);
  writeln(Ostern2);
  readln;

end.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#8

AW: Erstellen eines Datum-überprüfers

  Alt 17. Mai 2021, 17:40
Bei diesem ganzen Case true false werfe ich mal IfThen in den Raum.
Weiter oben steht aber, dass Funktionen nicht genutzt werden sollen.

Hatte bereits ein entsprechendes Beispiel gepostet und es aufgrund des Hinweises geändert.
Zitat von Mo53:
Ich verstehe ehrlich gesagt auch nicht warum die uns das Leben nicht leichter machen, aber ich denke die machen das um uns das zu veranschaulichen.
Exakt darum geht es: Lernen, wie man Probleme löst, für die es noch keine fertige Lösung (Funktion, Prozedur, ...) gibt.

Was ist bei If then else zu beachten. Welche Fallstricke gibt es bei der Nutzung von AND und OR, wann müssen dort Klammern gesetzt werden, wann nicht (Grundzüge der booleschen Algebra).

Das Schaltjahr ist halt ein schöner Aufhänger für sowas, weil man die Richtigkeit der Ergebnisse ohne jegliche Hilfsmittel prüfen kann. Man muss wissen: Jahr durch 4, wenn nicht durch hundert, ausser durch 400.

Zitat von Sinspin:
Für die einen oder anderen ist es wohl schon ein bisschen länger her programmieren gelernt zu haben.
Wer es sich selber beigebracht hat, ging eh quer durch.
Aber wer es in Schule oder Studium gelernt hat kennt das, Stück für Stück, immer ein bisschen was neues.

Und genau darum geht es hier. IF THEN ELSE Stuktur und Verschachtelung.
Wer mehr machen will, oder es anders machen will der kann das Privat sicher gerne machen.
Aber wenn der Test mit diesen Einschränkungen kommt dann sind die halt so. Grundlagen. Grundlagen. Grundlagen.
Genau das ist es: Es geht darum Programmieren zu lernen und nicht darum den Umgang und die Besonderheiten von Delphi zu lernen.

Wenn es morgen heißt: Schön, Ihre Lösung gefällt mir. Nächste Aufgabe: Bitte das Gleiche in C++, Java, Python, Basic, was weiß der Geier ... Was hilft es mir da, wenn in Unit xyz von Delphi schon was fertiges drinne ist?

Wenn man die Grundlagen der Programmierung im Studium gelernt hat, unabhängig von irgendeiner Programmiersprache, hat man nach dem Studium eine reellle Chance mit der Programmiersprache zu arbeiten, die beim zukünftigen Arbeitgeber zum Einsatz kommt.

Wenn ich virtuos mit Delphi und seinen Units und alle den vielen Feinheiten und Besonderheiten, die wir (mehr oder weniger) alle daran so schätzen, umgehen kann, hilft das herzlich wenig, wenn nachher was völlig anderes zum Einsatz kommt.

Aber die Grundlagen, die nach dem Studium sitzen sollten, helfen immer weiter, sie sind überall gleich.
  Mit Zitat antworten Zitat
mmw
(Gast)

n/a Beiträge
 
#9

AW: Erstellen eines Datum-überprüfers

  Alt 17. Mai 2021, 20:24
hallo,

'Hättest Du ein paar Jahreszahlen als Beispiel wo es Probleme gibt? Danke!'


ich nehme mal an, das ich gemeint war.
Laut dem code aus #22

340,360,380,400 usw.

Ich wollte nur wie in #5 auf die Kalenderreform von 1582 hinweisen

Gruß
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz