Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Letzter Tag im Monat (Unterprogramme)

Schreiben Sie die folgende Funktion:

letzterTagImMonat(monat: int, jahr: int) : int

Diese Funktion gibt den letztmöglichen Tag des jeweiligen Monats aus.

Das Jahr wird benötigt, um allfällige Schaltjahre zu berücksichtigen.

Existiert das Jahr oder der Monat nicht, so soll Null (0) zurückgegeben werden.

1 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (1)

RoSieg 18. Mai 2015 10:07   reply report
Ich verstehe die umständlichen Lösungen in C# nicht! Die Klasse
DateTime bietet eine statische Funktion DateTime.DaysInMonth(int year, int month), mittels der das schnell zu bewerkstelligen ist.

14 Lösung(en)

/**
 * @version 0.1 (Feb 27, 2015)
 * @author Philipp Gressly Freimann 
 *         (philipp.gressly@santis.ch)
 */
public class Wotag {

	public static void main(String[] args) {
		new Wotag().top();
	}


	/* Haupt Einstiegspunkt */
	void top() {
		test(2000,  1, 31);
		test(2000,  2, 29);
		test(1900,  2, 28);
		test(2001,  3, 31);
		test(2001,  9, 30);
		test(1400,  2, 29);
		test(1582, 12, 31);
		test(1582,  2, 28);
		test(0   , 12,  0); // fehler
	}
	
	void test(int jahr, int monat, int letzterSoll) {
		int letzter = letzterTagImMonat(monat, jahr);
		if(letzter == letzterSoll) {
			System.out.println("  OK: jahr: " + jahr  +
					                    " monat:" + monat +
					                " (" + letzter + ")");
		} else {
			System.out.println("Fehler Jahr=" + jahr  +
					                 ", monat="   + monat + 
					                 " ist=" + letzter +
					                 " (soll=" + letzterSoll + ")");
		}
	}

	int letzterTagImMonat(int monat, int jahr) {
		// Fehlerbehandlung (Waechter)
		if(jahr == 0)               return 0;
		if(monat < 1 || monat > 12) return 0;
		
		// Hauptteil
		if(4 == monat || 6 == monat || 9 == monat || 11 == monat) {
			return 30;
		}
		if(monat != 2) {
			return 31;
		}
		return 28 + schalttag(jahr);
	}
	
	// 1 im Schaltjahr, 0 sonst
	int schalttag(int jahr) {
		if(jahr %   4 != 0)                { return 0; }
		if(jahr % 400 == 0)                { return 1; }
		if(jahr % 100 == 0 && jahr > 1582) { return 0; }
		return 1;
	}
	// true im Schaltjahr, false sonst
	boolean schaltjahr(int jahr) {
		return 1 == schalttag(jahr);
	}
	
} // end of class Wotag
                

Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

import calendar

def letzter_tag(year, month):
    try:
        if month in (1,3,5,7,8,10,12):
            day = 31    
        elif calendar.isleap(year) == True and month == 2:
                day = 29
        elif month == 2:
                day = 28
        else:
            day = 30

        last_day_month = calendar.weekday(year, month, day)
        print(last_day_month)

        tag = calendar.day_name[last_day_month]
        print("Der letzte Tag im Monat", calendar.month_name[month],"war der", day, ". Das war ein ", tag, ".")
    except:
        print("Die Kombination von Tag/Monat/Jahr existiert nicht oder Sie haben"
              "keine gültiges Datum in der Form JJJJ MM angegeben.")

letzter_tag(1396, 2)
                

Lösung von: Py Thon ()

#Noch eine Möglichkeit des calendar-Moduls
import calendar
def test(jahr, monat):
    try:
        month_range = calendar.monthrange(jahr,monat)#gibt ein Tuple (= unsortierte Liste)mit dem ersten Tag des Monats als int an (Mo = 0, Di = 1, ...) und den letzten Tag des Monats
        letzter_tag = month_range[1]#
        print(letzter_tag)
    except:
        print ("Falsche Eingabe")

test(2000,  1)
test(2000,  2)
test(1900,  2)
test(2001,  3)
test(2001,  9)
test(1400,  2)  #hier gibt es einen Fehler :(
test(1582, 12)
test(1582,  2)
test(23, 40)    #Fehlermeldung

                

Lösung von: Py Thon ()

using System;
using System.Linq;

namespace Letzter_Tag_im_Monat {
	class Program {

		//Aufgabe
		public static int? LastDayOfMonth(int month, int year) {

			if (year < 1 || month > 12 || month < 1) return null;

			bool leapYear =
				year < 1583 ? false :
				year % 4 != 0 ? false :
				year % 400 == 0 ? true :
				year % 100 == 0 ? false : true;

			return
				new int[] { 4, 6, 9, 11 }.Contains(month) ? 30 :
				month != 2 ? 31 :
				leapYear ? 29 : 28;
		}

		static void Main() {

			//Beispielausgaben:
			foreach (int Year in new int[] { 0, 1580, 1584, 1600, 1700, 2012, 2013 }) {
				for (int Month = 0; Month <= 13; Month++)
					Console.WriteLine("{0:00}. {1,4}: {2,2:0} Tage", Month, Year, LastDayOfMonth(Month, Year).GetValueOrDefault(0));
				Console.WriteLine("\n");
			}

			Console.ReadKey(true);
		}
	}
}

                

Lösung von: Marcel Kapma ()

using System;
using System.Linq;

namespace Letzter_Tag_im_Monat {
	class Program {

		//Aufgabe
		public static int? LastDayOfMonth(int month, int year) {

			//Ginge auch:
			return
			    year < 1 ? (int?)null :
			    month > 12 ? (int?)null :
			    month < 1 ? (int?)null :
			    new int[] { 4, 6, 9, 11 }.Contains(month) ? 30 :
			    month != 2 ? 31 :
			    year < 1583 ? 28 :
			    year % 4 != 0 ? 28 :
			    year % 400 == 0 ? 29 :
			    year % 100 == 0 ? 28 : 29;
		}

		static void Main() {

			//Beispielausgaben:
			foreach (int Year in new int[] { 0, 1580, 1584, 1600, 1700, 2012, 2013 }) {
				for (int Month = 0; Month <= 13; Month++)
					Console.WriteLine("{0:00}. {1,4}: {2,2:0} Tage", Month, Year, LastDayOfMonth(Month, Year).GetValueOrDefault(0));
				Console.WriteLine("\n");
			}

			Console.ReadKey(true);
		}
	}
}

                

Lösung von: Marcel Kapma ()

var theMonth = prompt("Monat und Jahr (in der Form MM-JJJJ):"),
    month = parseInt(theMonth.split("-")[0]),
    year = parseInt(theMonth.split("-")[1]);
    
function getLastDayOfMonth(m, y) {
   return new Date(y, m, 0).getDate() || 0;  // januar ist 0 im Date-objekt
}

console.log(getLastDayOfMonth(month, year));
                

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

// Vira
namespace ProgrammierAufgaben
{
    using System;
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Last day:  " + letzterTagImMonat(45, 2015));
            Console.ReadKey(true);
        }
        private static int letzterTagImMonat(int month, int year)
        {
            try
            {
                return DateTime.DaysInMonth(year, month);
            }
            catch
            {
                return 0;
            }
        }
    }
}

                

Lösung von: Thomas Rührig (Htl-Donaustadt (bzw ÖZBF nominiert - TU-Wien))

import java.util.Scanner;

public class Main
{
	private byte leapYear(int year)
	{
		if(year % 400 == 0)
		{
			return 29;
		}
		else if(year % 100 == 0)
		{
			return 28;
		}
		else if(year % 4 == 0)
		{
			return 29;
		}
		else
		{
			return 28;
		}
	}
	
	private int letzterTagImMonat(byte monat, int jahr)
	{
		byte lastDay;
		
		switch(monat)
		{
			case 1: lastDay = 31; break;
			case 2: lastDay = leapYear(jahr); break;
			case 3: lastDay = 31; break; 
			case 4: lastDay = 30; break;
			case 5: lastDay = 31; break;
			case 6: lastDay = 30; break;
			case 7: lastDay = 31; break;
			case 8: lastDay = 31; break;
			case 9: lastDay = 30; break;
			case 10: lastDay = 31; break;
			case 11: lastDay = 30; break;
			case 12: lastDay = 31; break;
			default: lastDay = 0;
		}
		return lastDay;
	}
	
	public static void main(String[] args)
	{
		Main run = new Main();
		Scanner input = new Scanner(System.in);
		int year;
		byte month;
		
		System.out.printf("Enter Number of Month: ");
		month = input.nextByte();
		System.out.printf("%nEnter Year: ");
		year = input.nextInt();
		input.close();
			
		if(month > 0 && month < 13)
		System.out.printf("%n%nThe last day is %d.%d.%d", run.letzterTagImMonat(month, year), month, year);
		else
		{
			System.out.printf("%n0");
		}
	}

}
                

Lösung von: Andy Großhennig (Bundeswehr)

Module Module1
    Sub Main()
        Console.Write("Gebe den Monat ein: ") : Dim monat As Integer = Console.ReadLine()
        Console.Write("Gebe das Jahr ein: ") : Dim jahr As Integer = Console.ReadLine()
        Console.WriteLine("Letzter Tag im Monat: " & letzterTagImMonat(monat, jahr))
        Console.ReadLine()
    End Sub

    Public Function letzterTagImMonat(monat As Integer, jahr As Integer)
        Return Date.DaysInMonth(jahr, monat)
    End Function
End Module
                

Lösung von: Elias Zech (Optics Balzers)

// NET 6.x | C# 10.x | VS-2022
static int LastDayOfMonth(int year, int month) => year is < 1 or > 9999 || month is < 1 or > 12 ? 0 : DateTime.DaysInMonth(year, month);
Console.WriteLine($"{LastDayOfMonth(1582, 12)}");
                

Lösung von: Jens Kelm (@JKooP)

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define MIN_YEAR 1582
#define MAX_YEAR 9999

static const char* months[] = { "Januar", "Februar", "Maerz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" };
static int days_in_month[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

static inline bool is_leapYear(int y) {
	return (y >= MIN_YEAR && y % 4 == 0 && y % 100 != 0 || y % 400 == 0);
}

int main(void) {
	int year, month;
	printf("Jahr: ");
	scanf("%d", &year);
	printf("Monat: ");
	scanf("%d", &month);

	if (month < 1 || month > 12 || year < MIN_YEAR || year > MAX_YEAR)
		return EXIT_FAILURE;
	
	if (is_leapYear(year)) days_in_month[1] = 29;

	printf("%s %04d hat %02d Tage", months[month - 1], year, days_in_month[month - 1]);

	return EXIT_SUCCESS;
}
                

Lösung von: Jens Kelm (@JKooP)

// C++ 17 | VS-2022
#include <iostream>
#include <boost/date_time/gregorian/gregorian.hpp>
using namespace boost::gregorian;

auto get_ultimo(size_t year, size_t month) {
    if (month < 1 || month > 12 || year < 1582 || year > 9999) return size_t(0);
    const date first{date::year_type(year), date::month_type(month), 1 };
    return size_t(first.end_of_month().day());
}

int main() {
    constexpr auto year{ 2022 }, month{ 2 };
    const auto ultimo{ get_ultimo(year, month) };
    std::cout << "Der " << month << ". Monat" << " im Jahr " << year << " hat " << ultimo << " Tage." << "\n";
}

                

Lösung von: Jens Kelm (@JKooP)

' VBA

Function GetUltimo(year%, month%) As Integer
    GetUltimo = IIf(month < 1 Or month > 12 Or year < 1901 Or year > 9999, 0, Day(DateSerial(year, month + 1, 0)))
End Function

Sub Main()
    Debug.Print GetUltimo(2022, 2)
End Sub
                

Lösung von: Jens Kelm (@JKooP)

// C++ 20 | VS-2022 | msvc/std:c++20

#include <iostream>
#include <chrono>
#include <format>

using namespace std::chrono;

const auto get_ultimo(int year_, int month_) {
    if (month_ < 1 || month_ > 12 || year_ < 1582 || year_ > 9999) return unsigned(0);
    year_month_day_last ylast{ year{year_} / month_ / last };
    return static_cast<unsigned>(ylast.day());
}

int main() {
    constexpr auto year{ 2024 }, month{ 2 };
    const auto ultimo{ get_ultimo(year, month) };
    std::cout << std::format("Der {}. Monat im Jahr {} hat {} Tage.", month, year, ultimo);
}
                

Lösung von: Jens Kelm (@JKooP)

Verifikation/Checksumme:

test(2000,  1, 31);
test(2000,  2, 29);
test(1900,  2, 28);
test(2001,  3, 31);
test(2001,  9, 30);
test(1400,  2, 29);
test(1582, 12, 31);
test(1582,  2, 28);
test(0   , 12,  0); // fehler

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1.5
Schwierigkeit: Mittel
Webcode: d5pm-hf8p
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen