Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Wochentag (Montag/Dienstag/...) eines bestimmten Datums (Algorithmen)

Erstellen sie einen Algorithmus zur berechnung des Wochentages eines nicht festgelegten Datums. Der Algorithmus weiß dass der 1.9.2014 ein Montag ist. Angenommen wir wollen nun den Wochentag des 5.9.2014 wissen, also einem Tag der von dem von uns festgelegten Zeitpunkt aus in der Zukunft liegt, gebe ich dem Algorithmus die Werte Tag, Monat und Jahr, also 5, 9 und 2014. Dieser berechnet daraufhin anhand des wissens, dass der 1.9.2014 ein Montag ist den Wochentag des 5.9.2014. Wir sind nun jedoch erneut neugierig und wollen ermitteln, welcher Wochentag der 25.8.2014, also ein Tag, der von dem von uns aus festgelegten Zeitpunkt aus gesehen, in der Vergangenheit liegt.

Beachten Sie hierbei Schaltjahre! So ermitteln sie Schaltjahre:

Ist das Jahr durch 4 aber nicht durch 100 teilbar, ohne dass ein Rest entsteht, ist es ein Schaltjahr. Kann das Jahr durch 100 geteilt werden ist es kein Schaltjahr, außer das Jahr kann auch durch 400 geteilt werden. In diesem Fall gillt es doch als Schaltjahr. D.h.:

Wenn Jahr / 4 = ohne rest UND Jahr / 100 = mitRest -> Schaltjahr

Ansonsten wenn Jahr / 100 = ohne rest UND Jahr / 400 = ohne rest -> Schaltjahr

Ansonsten -> kein Schaltjahr

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

10 Lösung(en)

import locale
from datetime import date

locale.setlocale(locale.LC_ALL, "")

ds = input("Gib ein Datum ein: ")
d = date(*[int(e) for e in reversed(ds.split("."))])

print("Wochentag:", d.strftime("%A"))

                

Lösung von: Karl Welzel ()

/**
 * 
 */
package consoleprogramme.calendar;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


public class Wochentagberechnung {
    public static void main(String[] args) {
	int w_tag;

	System.out.println("Bestimmung des Wochentags aus dem Datum");
	System.out.print("Tag (xx)    : ");
	int tag = new java.util.Scanner(System.in).nextInt();

	System.out.print("Monat (xx)  : ");
	int monat = new java.util.Scanner(System.in).nextInt();

	System.out.print("Jahr (xxxx) : ");
	int jahr = new java.util.Scanner(System.in).nextInt();

	/**
	 * Integer (tag, monat und jahr) werden in String gecastet.
	 * Danach werden die umgewandelten Strings mit einem 
	 * StringBuilder-Objekt angehaengt + "Punkte" um das Format 
	 * "dd.MM.yyyy zu erhalten. Zuletzt wird das StringBuilder-Objekt
	 * in String umgewandelt.
	 * 
	 */
	StringBuilder sb = new StringBuilder();
	String s = sb.append(new Integer(tag).toString()).append(".")
		.append(new Integer(monat).toString()).append(".")
		.append(new Integer(jahr).toString()).toString();

	if (isValidDate(s)) {

	    int h = monat, k = jahr;

	    if (monat < 3) {
		h = monat + 12;
		k = jahr - 1;
	    }
	
	    // Berechnung des Wochentages anhand des Schlaltjahres

	    w_tag = (tag + 2 * h + (3 * h + 3) / 5 + k + k / 4 - k / 100 + k / 400 + 1) % 7;

	    switch (w_tag) {
	    case 0:
		System.out.println("");
		System.out.println("Der " + tag + "." + monat + "." + jahr
			+ " -> Sonntag");
		break;
	    case 1:
		System.out.println("");
		System.out.println("Der " + tag + "." + monat + "." + jahr
			+ " -> Montag");
		break;
	    case 2:
		System.out.println("");
		System.out.println("Der " + tag + "." + monat + "." + jahr
			+ " -> Dienstag");
		break;
	    case 3:
		System.out.println("");
		System.out.println("Der " + tag + "." + monat + "." + jahr
			+ " -> Mittwoch");
		break;
	    case 4:
		System.out.println("");
		System.out.println("Der " + tag + "." + monat + "." + jahr
			+ " -> Donnerstag");
		break;
	    case 5:
		System.out.println("");
		System.out.println("Der " + tag + "." + monat + "." + jahr
			+ " -> Freitag");
		break;
	    case 6:
		System.out.println("");
		System.out.println("Der " + tag + "." + monat + "." + jahr
			+ " -> Samstag");
		break;
	    }
	}
	
	
    }

    /**
     * Ueberprueft ob ein beliebiges Datum valid ist.
     * 
     * @param dateAsString
     *            Datum, welches geprueft werden soll
     * @return <code>true </code> falls "dateAsString" korrekt ist.
     */
    public static boolean isValidDate(String dateAsString) {

	Date date = null;

	try {

	    DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
	    dateFormat.setLenient(false);

	    date = dateFormat.parse(dateAsString);
	    if (!date.equals(null))
		return true;
	    else
		return false;
	} catch (ParseException pe) {
	    System.err
		    .println("falsches Datum (" + dateAsString + ")");
	}
	return false;

    }

}

                

Lösung von: Houssein Fofana ()

import datetime

jahr = int(input("Jahr: "))
monat = int(input("Monat: "))
tag =int(input("Tag: "))

d = datetime.date(jahr, monat, tag)
tag = d.weekday()
if tag == 6:
    w_tag = "Sonntag"
elif tag ==0:
    w_tag= "Montag"
elif tag ==1:
    w_tag= "Dienstag"
elif tag ==2:
    w_tag= "Mittowch"
elif tag == 3:
    w_tag= "Donnerstag"
elif tag ==4:
    w_tag= "Freitag"
else:
    w_tag= "Samstag"
print(w_tag)

                

Lösung von: Py Thon ()

#Disclaimer: 
# Ist mein erstes Programm in Python, programmiere ueblicherweise in C++
# bitte gebt mir Tipps zum verbessern

import sys
from math import *

def MonatsTage(monat, jahr):
	if monat==1 or monat==3 or monat==5 or monat==7 or monat==8 or monat==10 or monat==12:
		return 31
	elif monat==2:
		if (Schaltjahr(jahr)):
			return 29
		else:
			return 28
	else:
		return 30

def Jahrestage(jahr):
	if (Schaltjahr(jahr)):
		return int(366)
	else:
		return int(365)
	
def Schaltjahr(jahr):
	if ((jahr) % 4 == 0 and (jahr % 100) != 0):
		return bool(True)
	elif ((jahr % 100) == 0 and (jahr % 400) == 0):
		return bool(True)
	else:
		return bool(False)
		
def Wochentag (nummer):
	if nummer == 0:
		print ("Montag")
	elif nummer == 1:
		print ("Dienstag")
	elif nummer == 2:
		print ("Mittwoch")
	elif nummer == 3:
		print ("Donnerstag")
	elif nummer == 4:
		print ("Freitag")
	elif nummer == 5:
		print ("Samstag")
	elif nummer == 6:
		print ("Sonntag")
		
	
	
Tage_Unterschied=0 #Abstand bis zum 1.9.2014
Tag = int(input("Tag: "))
Monat = int(input("Monat: "))
Jahr = int(input ("Jahr: "))

#ueberpruefen
if Monat<1 or Monat>12:
	print ("Ungueltiger Monat")
	sys.exit ()
if Tag < 0 or Tag > MonatsTage(Monat, Jahr):
	print ("Ungueltiger Tag")
	sys.exit ()	

Tage_Unterschied = int(-244)

Tage_Unterschied += Tag

#Monate zu Tage
it = int(1)
while Monat != it:
	Tage_Unterschied += MonatsTage(it, Jahr)
	it += 1


#Jahre zu Tage
Jahresunterschied=int (Jahr-int(2014))
if Jahresunterschied < 0:
	for i in range(0, abs(Jahresunterschied)):
		Tage_Unterschied -= Jahrestage(2014-i)
elif Jahresunterschied > 0:
	for i in range(0, abs(Jahresunterschied)):
		Tage_Unterschied += Jahrestage(2014+i)
		
Wochentag(Tage_Unterschied % 7)
                

Lösung von: Name nicht veröffentlicht

function getWochentag(d, m, y) {
  var daysDe = ("Sonntag Montag Dienstag Mittwoch Donnerstag Freitag " +
    "Samstag Sonntag").split(" ");
  return daysDe[new Date(y, m - 1, d).getDay()];
}

console.log(getWochentag(1, 7, 2016));    // Freitag
console.log(getWochentag(15, 9, 2010));   // Mittwoch
console.log(getWochentag(29, 2, 2008));   // Freitag

                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

REPORT  zwochentag.

PARAMETERS: pa_tag TYPE d.

DATA: lv_wochentag TYPE p.

CALL FUNCTION 'DAY_IN_WEEK' " Gibt Wochentag als Zahl aus.
    EXPORTING
      datum = pa_tag
    IMPORTING
      wotnr = lv_wochentag.

CASE lv_wochentag. " Ausgabe
  WHEN 1.
    WRITE: 'Montag'.
  WHEN 2.
    WRITE: 'Dienstag'.
  WHEN 3.
    WRITE: 'Mittwoch'.
  WHEN 4.
    WRITE: 'Donnerstag'.
  WHEN 5.
    WRITE: 'Freitag'.
  WHEN 6.
    WRITE: 'Samstag'.
  WHEN 7.
    WRITE: 'Sonntag'.
ENDCASE.
                

Lösung von: Alexander S. (msg systems)

// NET 6.x | C# 10.x | VS-2022

using System.Globalization;

// Variante 1
static string Weekday(int day, int month, int year) => new DateTime(year, month, day).ToString("dddd");
Console.WriteLine(Weekday(29, 3, 2022));

// Variante 2 (mittels eigener Enumeration)
static string Weekday2(int day, int month, int year) => Enum.GetName(typeof(Wochentage), new DateTime(year, month, day).DayOfWeek) ?? "unbekannt";
Console.WriteLine(Weekday2(29, 3, 2022));

// Variante 3 (benötigt 'System.Globalization.CultureInfo', wenn deutsche Ausgabe gewünscht wird)
CultureInfo ci = new CultureInfo("de-DE", false);
string Weekday3(int day, int month, int year) => ci.DateTimeFormat.GetDayName(new DateTime(year, month, day).DayOfWeek);
Console.WriteLine(Weekday3(29, 3, 2022));

enum Wochentage { Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag}
                

Lösung von: Jens Kelm (@JKooP)

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

const char* weekday[] = { "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "unbekannt"};

int main(void) {
	struct tm time_;
	int year, month, day;
	printf("Jahr: ");
	scanf("%d", &year);
	printf("Monat: ");
	scanf("%d", &month);
	printf("Tag: ");
	scanf("%d", &day);

	time_.tm_year = year - 1900;
	time_.tm_mon = month - 1;
	time_.tm_mday = day;
	time_.tm_hour = 0;
	time_.tm_min = 0;
	time_.tm_sec = 1;
	time_.tm_isdst = -1;

	if (mktime(&time_) == -1) time_.tm_wday = 7;
	printf("Datum ist ein %s", weekday[time_.tm_wday]);
	return EXIT_SUCCESS;
}
                

Lösung von: Jens Kelm (@JKooP)

// C++ 20 | VS-2022

#include <iostream>
#include <chrono>

using namespace std::chrono;

inline const auto get_weekday(const year_month_day& ymd_) {
    weekday wd_sht{ ymd_ };
    const auto wd_num{ (wd_sht - Sunday).count() };
    const year_month_weekday wd_lng{ ymd_ };
    return std::make_tuple(wd_lng, wd_sht, wd_num);
}

int main() {
    constexpr year y{ 2024 };
    constexpr month m{ 2 };
    constexpr day d{ 29 };
    constexpr year_month_day ymd{ y, m, d };
    const auto& [wd_lng, wd_sht, wd_num] { get_weekday(ymd) };
    std::cout << "Datum: " << ymd <<
        "\nWochentag lang: " << wd_lng <<
        "\nWochentag kurz: " << wd_sht <<
        "\nWochentag Zahl: " << wd_num << "\n";
}
                

Lösung von: Jens Kelm (@JKooP)

// VBA-Funktion

Function GetWeekday(ByVal date_ As Date, Optional ByVal weekStartsWith_ As VbDayOfWeek = vbMonday)
    GetWeekday = WeekdayName(Weekday(date_, weekStartsWith_))
End Function

Sub Main()
    Debug.Print GetWeekday(Now)
End Sub
                

Lösung von: Jens Kelm (@JKooP)

Verifikation/Checksumme:

Eingabe:

1.7.2016

Ausgabe:

Freitag

 

Eingabe:

15.9.2010

Ausgabe:

Mittwoch

 

Eingabe:

29.2.2008

Ausgabe:

Freitag

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.5
Schwierigkeit: Mittel
Webcode: n353-cfym
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen