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
Seite 1 von 2  1 2      
Mo53

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

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
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

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
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
692 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Erstellen eines Datum-überprüfers

  Alt 17. Mai 2021, 08:31
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?
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.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Delphi.Narium

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

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

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

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

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

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

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
Delphi.Narium

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

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
Antwort Antwort
Seite 1 von 2  1 2      


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