Plausibilität eines Kalenderdatums (Unterprogramme)
Prüfen Sie, ob eine Eingabe zu einem Kalenderdatum sinnvoll ist. Dazu werden Jahr, Monat und Tag eingegeben. Prüfen Sie, ob das Datum existiert. Geben Sie als Resultat einen Boole'schen Wert (true / false) aus. Verwenden Sie für Daten Donnerstag, 4. Oktober 1582, den Julianischen Kalender. Verwenden Sie für Daten Freitag, 15. Oktober 1582, den Gregorianischen Kalender. Auf den 4. Oktober 1582 folgte nach Papst Gregors Kalender direkt der 15. Oktober 1582.
Verwenden Sie das Unterprogramm aus Schaltjahre.
0 Kommentare
4 Lösung(en)
def schaltjahr(jahr):
schalt = False
if (jahr%4) == 0:
schalt = True
if (schalt%100) == 0:
schalt = False
if (schalt%400) == 0:
schalt = True
return schalt
#Parameter als Integer eingeben
def pruefe_datum(tag,monat,jahr):
tage_monat = [0,31,28,31,30,31,30,31,31,30,31,30,31]
plausibel = True
if tag > tage_monat[monat]:
plausibel = False
if monat == 2:
if tag == 29:
if schaltjahr(jahr):
plausibel = True
if monat < 1 or monat > 12:
plausibel = False
if jahr == 1582:
if monat == 10:
if tag in [5,6,7,8,9,10,11,12,13,14]:
plausibel = False
if jahr < 0:
plausibel = False
return plausibel
#Teste Datum
print pruefe_datum(4,5,2100)
print pruefe_datum(12,10,1582)
print pruefe_datum(29,2,2004)
print pruefe_datum(29,2,2003)
/*
* SANTIS TRAINING MODUL 755
* Aufgabe Plausibilität eines Kalenderdatums
* Autor Chris O'Connor
* Datum 21. Februar 2018
*/
package ch.santis.modul755.work;
import java.util.Scanner;
public class Kalenderdatum {
public static void main(String[] args) {
new Kalenderdatum().top();
}
String iS(String Frage) {
System.out.print(Frage);
return new Scanner(System.in).nextLine();
}
void Splitt(String iDate) {
int indexOfPunkt = iDate.indexOf('.');
int indexOfLPunkt = iDate.lastIndexOf('.');
Tag = Integer.parseInt(iDate.substring(0, indexOfPunkt));
Monat = Integer.parseInt(iDate.substring((indexOfPunkt + 1), indexOfLPunkt));
Jahr = Integer.parseInt(iDate.substring((indexOfLPunkt + 1), iDate.length()));
}
void SchaltJahr() {
if(Jahr % 4 == 0) { schaltJahr = true; }
if(Jahr % 100 == 0) { schaltJahr = false;}
if(Jahr % 400 == 0) { schaltJahr = true; }
if(Jahr < 1582 && Jahr % 4 == 0) { schaltJahr = true; }
}
boolean Day() {
if(schaltJahr == true) { Kalender[1] += 1;}
if(Tag > 0 && Tag <= Kalender[Monat - 1]) { return true; }
return false;
}
boolean Month() {
if(Monat > 0 && Monat <= 12) { return true;}
return false;
}
boolean Year() {
if(Jahr > 0) { return true;}
return false;
}
int Tag, Monat, Jahr;
boolean schaltJahr = false;
int Kalender[] = {31,28,31,30,31,30,31,31,30,31,30,31};
void top() {
String iDate = iS("Datum = ");
Splitt(iDate);
SchaltJahr();
if(Year() && Month() && Day()) {
System.out.println("Datum ist Möglich!");
}else{
System.out.println("Datum ist nicht Möglich!");
}
}
}
Lösung von: Name nicht veröffentlicht
function isLeapYear(y) {
let a = y < 1582,
b = y % 4 == 0,
c = y % 400 == 0;
return (a && b) || (!a && (b && c));
}
function isReasonableDate(y, m , d) {
for (let i = 0; i < arguments.length; i++)
arguments[i] = parseInt(arguments[i]);
// ober- und untergrenzen
if (d<1 || d>31 || m<1 || m>12) return false;
// februar
if (m == 2) {
if (d < 29) return true;
if (d == 29) return isLeapYear(y);
return false;
}
// kurze monate
if ((m==4 || m==6 || m==9 || m==11) && d==31) return false;
// 1582
if (y==1582 && m==10 && d>4 && d<15) return false;
// qué será, será
let tomorrow = new Date().setDate(new Date().getDate()+1),
diq = new Date(y, m-1, d);
if (diq > tomorrow) return 'maybe';
return true;
}
// main
let input = prompt('Tajpu daton (tt.mm.jjjj):').split('.');
console.log(
input.join('.'),
isReasonableDate(input[2], input[1], input[0])
);
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
// C++ 20 | VS-2022
#include <iostream>
#include <vector>
#include <string>
using namespace std::literals;
struct date {
int day, month, year;
};
inline const auto is_leap_year(const int year_) {
return (year_ >= 1582 && year_ % 4 == 0 && year_ % 100 != 0 || year_ % 400 == 0);
}
inline const auto get_split_date(const std::string& str_, const char& del_ = ' ') {
std::vector<std::string> out;
std::string wrd = "";
for (const auto& chr : str_)
if (chr == del_) { out.push_back(wrd); wrd = ""; }
else { wrd += chr; }
out.push_back(wrd);
return out;
}
inline const auto is_excluded_date(const date& date_) {
const auto& [day, month, year] = date_;
return year == 1582 && month == 10 && day > 4 && day < 15;
}
inline const auto is_date(const date& date_) {
if (is_excluded_date(date_)) return false;
const auto& [day, month, year] = date_;
const auto feb{ is_leap_year(year) ? 29 : 28 };
int month_days[]{ 31,feb,31,30,31,30,31,31,30,31,30,31 };
if (year < 1 || year > 9'999) return false;
if (month < 1 || month > 12) return false;
if (day < 1 || day > month_days[month - 1] + 1) return false;
return true;
}
inline const auto is_date(const std::string& date_) {
const auto spl{ get_split_date(date_, '.') };
if (spl.size() != 3) return false;
return is_date(date{ std::stoi(spl[0]), std::stoi(spl[1]), std::stoi(spl[2]) });
}
inline const std::ostream& print(std::ostream& os_, bool res_) {
os_ << "date is " << (res_ ? "valid" : "invalid") << "\n";
return os_;
}
int main() {
print(std::cout, is_date(date{ 19,2,1952 }));
print(std::cout, is_date("13.10.1582"s));
print(std::cout, is_date(date{ 29,2,2024 }));
print(std::cout, is_date("13.12.2045"s));
}
Lösung von: Jens Kelm (@JKooP)
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 2 |
Schwierigkeit: | k.A. |
Webcode: | fa38-e9da |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |