AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Erstellen eines Datum-überprüfers

Ein Thema von Mo53 · begonnen am 16. Mai 2021 · letzter Beitrag vom 17. Mai 2021
Antwort Antwort
Seite 3 von 4     123 4   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.603 Beiträge
 
Delphi 10.4 Sydney
 
#21

AW: Erstellen eines Datum-überprüfers

  Alt 16. Mai 2021, 18:11
Zitat:
if (Monat >= 1) and (Monat <= 12) then begin
Warum nicht als ELSE im Case?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Mo53

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

AW: Erstellen eines Datum-überprüfers

  Alt 16. Mai 2021, 18:30
Dankeschön, ich habe es nochmal korrigiert, außer das mit dem ersten If da es ja auch überprüft ob der Tag >= 1 ist, falls eine negative Zahl eingegeben wird, sollte es dann die Fehlermeldung anzeigen.

Hier nochmal die korrigierte Version:
Delphi-Quellcode:
{$APPTYPE CONSOLE}
{$R+,Q+ X-}

uses
  System.SysUtils;

var
  Tag: integer;
  Monat: integer;
  Jahr: integer;

begin

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

  if (Tag >= 1) and (Tag <= 31) then
    if (Monat >= 1) and (Monat <= 12) then
      if (Jahr >= 1) and (Jahr <= 3000) then

        case Monat of
          2:
            begin
              if (Jahr mod 4 = 0) and (Jahr mod 100 <> 0) or (Jahr mod 400 = 0)
              then
              begin
                if (Tag <= 29) then
                begin
                  writeln(Tag, ' ist zulässig.');
                  readln;
                end
                else
                begin
                  writeln(Tag, ' ist unzulässig.');
                  readln;
                end;
              end
              else
              begin
                if (Tag <= 28) then
                  writeln(Tag, ' ist zulässig.')
                else
                  writeln(Tag, ' ist unzulässig.');
              end;
            end;

          1, 3, 5, 7, 8, 10, 12:
            begin
              if (Tag <= 31) then
              begin
                writeln('Der ', Tag, '. ist gültig.');
                readln;
              end
              else
              begin
                writeln('Der ', Tag,'. ist ungültig.');
                readln;
              end;

            end;

          4, 6, 9, 11:
            begin
              if (Tag <= 30) then
              begin
                writeln('Der ', Tag, '. ist gültig.');
                readln;
              end

              else
              begin
                writeln('ungültig');
                readln;
              end;

            end;

        end

      else
      begin
        writeln('Jahr ungültig.');
        readln;
      end

    else
    begin
      writeln('Monat ungültig.');
      readln;
    end

  else
  begin
    writeln('Tag ungültig.');
    readln;
  end;

end.
  Mit Zitat antworten Zitat
TBx
(Moderator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.791 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#23

AW: Erstellen eines Datum-überprüfers

  Alt 16. Mai 2021, 18:54
Zitat:
if (Monat >= 1) and (Monat <= 12) then begin
Warum nicht als ELSE im Case?
Hätte man machen können, dann hätte man halt die bestehende Else in ein case für 4,6,9,11 umwandeln müssen.
Gruß Thomas
- Moderator Delphi-Praxis -
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.061 Beiträge
 
Delphi 10.3 Rio
 
#24

AW: Erstellen eines Datum-überprüfers

  Alt 16. Mai 2021, 18:58
Ist es untersagt die von Delphi bereitgestellten Units zu verwenden?
Eigentlich sollte man doch lernen nichts zu programmieren was es nicht schon gibt, also wozu das Rad neu erfinden?
himitsu hat bereits viele vorgefertigte methoden erwähnt.
Ich würde ja nach einem reinen vortest (tag >0 <32) (monat >0 <13)) (jahr >0 <=9999) das ganze in ein TDateTime umwandeln (Delphi-Referenz durchsuchenEncodeDate sollte da Wunder wirken).

Schön zu sehen wie es sich entwickelt, diese ursprünglichen if's waren echt sehr unübersichtlich, Danke an Emil fürs Taggen, das Case ist eine sehr gute alternative Verbesserung, weiter so und Willkommen in der DP!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.855 Beiträge
 
Delphi 7 Professional
 
#25

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

Registriert seit: 5. Dez 2019
Ort: Köln
741 Beiträge
 
Delphi 2010 Architect
 
#26

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
1.913 Beiträge
 
#27

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

Registriert seit: 5. Dez 2019
Ort: Köln
741 Beiträge
 
Delphi 2010 Architect
 
#28

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

Registriert seit: 10. Sep 2019
Ort: OWL
191 Beiträge
 
Delphi 10.3 Rio
 
#29

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
 
#30

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
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 07:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf