Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

n-ter Tag im Jahr (Felder)

Initialisieren Sie ein Feld mit den folgenden zwölf Werten: 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31. Kurz, jeder Wert bezeichnet die Anzahl Tage eines Monats. Schreiben Sie eine Methode tagNr(Tag, Monat): integer, die von einem Tag ausgibt, um den wievielten Tag im Jahr es sich handelt. Gehen Sie vorerst nicht auf Schaltjahre ein. Schreiben Sie eine weitere Methode tagNr(Tag, Monat, Jahr): integer, die berücksichtigt, ob es sich um ein Schaltjahr handelt. Der erste Tag im Jahr ist der 1. Januar. Verwenden Sie wiederum die Funktion aus Schaltjahre.

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

9 Lösung(en)

# Bestimmung des n-ten Tages
def tagNr(Tag,Monat):
    tage_monat = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    nr = 0
    for i in range(Monat-1):
        nr = nr + tage_monat[i]
    nr = nr + Tag
    return nr
        

print tagNr(28,8)
                

Lösung von: Martin Guggisberg (Universität Basel / PH FHNW)

int tagImJahr(int jahr, int monat, int tag) {
  int tageImMonat[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  int monatsTage = 0; //Tage durch Monate vor aktuellem Datum
  int aktMonatsIndex = 0; // januar
  while (aktMonatsIndex < monat - 1) {
    monatsTage = monatsTage + tageImMonat[aktMonatsIndex];
    aktMonatsIndex = aktMonatsIndex + 1;
  }   
  if (monat <= 2 && istSchaltJahr(jahr)) { // Jan. und feb. speziell
    monatsTage =monatsTage - 1;
  }
  return monatsTage + tag;
}
    
boolean istSchaltJahr(int jahr) {
  if(0 == jahr % 400) 
    return true;
  if(0 == jahr % 100) 
    return false;
  return 0 == jahr % 4;
}
                
#!/usr/bin/ruby
# -*- coding: utf-8 -*-

# @autor Philipp Gressly Freimann
# 17. Feb. 2011 (Corinas Geburtstag)
#
# Aufgabe hackerboard.de + programmieraufgaben.ch
# Gegeben dd.mm.yyyy (ein Datum). Berechne die Position im Jahr:
#    1. Jan. =   1
#   31. Dez. = 365 (mit Ausnahmen) 
#
# Es wird keine Prüfung gemacht, ob das Datum existiert!

# Hilfsfunktionen:

def nach15OktImJahr1582(d, m, y) 
  puts "greg #{d}. #{m}. #{y}"
  if(  1582  !=  y) then return false end
  if(    10  <   m) then return true  end
  if(    10  >   m) then return false end
  return 15  <=  d 
end

def schaltJahr(y)
  # julianisch:
  if(y < 1582) then return 0 == y % 4 end
  # gregorianisch:
  return 0 == y % 400 ? true : (0 == y % 100 ? false : (0 == y % 4))
end

# Julianische Korrektur:
# Je Differenzen zum standard ägyptischen bürgerlichen 
#    Verwaltungsmonat mit je 30 Tagen:
# MONAT0, Jan, Feb, März, ..., Nov (Dez. unnötig)
diff30 = [-30,1,-2,1,0,1,0,1,1,0,1,0]

# Einlesen
print "DD.MM.YYYY eingeben: "
dd,mm,yy = STDIN.gets.scan(/(\d{2})\.(\d{2})\.(\d{4})/).flatten
dd = dd.to_i; mm = mm.to_i; yy = yy.to_i

if(schaltJahr(yy))
  diff30[2] += 1  #Im Februar einen Tag dazuzählen
end

res = dd
# Rechne alle Monate mit 30 Tagen (+/- Korrektur) zum Datum dazu.
diff30[0..(mm.to_i-1)].each {|d| res += d + 30}

# 1582 Korrektur:
if(nach15OktImJahr1582(dd, mm, yy)) 
  res = res - 10
end

#Ausgabe
puts "Der #{dd}. #{mm}. #{yy} ist der #{res}. Tag im Jahr." 
                

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

using System;

namespace n_ter_Tag_im_Jahr {
	class Program {

		//Aufgabe
		static int TagNr(int tag, int monat, int jahr = 1) {
			int[] tageImMonat;
			try {
				tageImMonat = new int[] {
					31,
					DateTime.IsLeapYear(jahr) ? 29 : 28,
					31, 30, 31, 30, 31, 31, 30, 31, 30, 31
				};
			}
			catch (ArgumentOutOfRangeException) {
				return -1;
			}

			if (tag > tageImMonat[--monat] || tag < 1) return -1;

			int tage = 0;
			while (monat > 0)
				tage += tageImMonat[--monat];

			return tage + tag;
		}

		//Ausgabe
		static void Main() {
			Console.WriteLine(TagNr(1, 1));
			Console.WriteLine(TagNr(1, 2));
			Console.WriteLine(TagNr(31, 12, 2011));
			Console.WriteLine(TagNr(31, 12, 2012));

			Console.ReadKey(true);
		}
	}
}
                

Lösung von: Marcel Kapma ()

// Warum umständlich mit Schaltjahrabfragen und Anzahl von Tagen in einem Monat hantieren?

function nthDayInYear(d) {
   return Math.ceil((d - new Date(d.getFullYear(), 0, 1)) / 864e+5);
}

console.log(nthDayInYear(new Date(Date.parse(prompt("Datum:")))));
                

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

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

// Variante 1 (mit C#-Funktion)
var date = DateTime.Now;
var dayOfYear1 = date.DayOfYear;
Console.WriteLine($"Tag des Jahres: {dayOfYear1}");

// Variante 2 (ohne C#-Funktion)
var (year, month, day) = (2022, 3, 23);
var isLeapYear = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
var arrMonth = new int[] { 31, isLeapYear ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

// 2.1
var dayOfYear2 = arrMonth.Take(month - 1).Sum() + day;
Console.WriteLine($"Tag des Jahres: {dayOfYear2}");

// 2.2 (C# 8.x nötig)
var dayOfYear3 = arrMonth[..(month - 1)].Sum() + day;
Console.WriteLine($"Tag des Jahres: {dayOfYear3}");

// 2.3
var m = 0;
for (var i = 0; i < month - 1; i++) m += arrMonth[i];
var dayOfYear4 = m + day;
Console.WriteLine($"Tag des Jahres: {dayOfYear4}");
                

Lösung von: Jens Kelm (@JKooP)

// C++ 14 | VS-2022

#include <iostream>

int nth_day_of_year(int y, int m, int d) {
    auto sum{ 0 };
    auto ily{ y % 4 == 0 && y % 100 != 0 || y % 400 == 0 };
    int mon[]{ 31, ily ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    for (auto i{ 0 }; i < m - 1; i++) sum += mon[i];
    return sum + d;
}

int main() {
    std::cout << nth_day_of_year(2022, 7, 7) << "\n";
}
                

Lösung von: Jens Kelm (@JKooP)

// C++ 20 | VS-2022

#include <iostream>
#include <array>
#include <numeric>

constexpr auto nth_day_of_year(const auto& year_, const auto& month_, const auto& day_) {
    const auto feb{ 28 + (year_ % 4 == 0 && year_ % 100 != 0 || year_ % 400 == 0) };
    const std::array<int, 12> arr{ 31, feb , 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    return std::accumulate(arr.begin(), arr.end() - (13LL - month_), 0LL) + day_;
}

int main() {
    std::cout << nth_day_of_year(2024, 7, 7) << "\n";
}
                

Lösung von: Jens Kelm (@JKooP)

' VBA

Public Function IsLeapyear(year_ As Integer)
    IsLeapyear = IIf((year_ Mod 4 = 0 And year_ Mod 100 <> 0 Or year_ Mod 400 = 0), 1, 0)
End Function

Public Function NthDayOfYear(date_ As Date)
    Dim sum As Integer
    Dim arr()
    arr = Array(31, 28 + IsLeapyear(Year(date_)), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    For i = 1 To Month(date_) - 1
        sum = sum + arr(i)
    Next i
    NthDayOfYear = sum + Day(date_)
End Function

' oder:

Public Function NthDayOfYear(date_ As Date)
    NthDayOfYear = DateDiff("y", DateSerial(Year(date_), 1, 1), date_) + 1
End Function

' oder kürzer:

Public Function NthDayOfYear(date_ As Date)
    NthDayOfYear = DatePart("y", date_)
End Function
                

Lösung von: Jens Kelm (@JKooP)

Verifikation/Checksumme:

tagNr(1, 1) -> 1

tagNr(1, 2) -> 32

tagNr(31, 12, 2011) -> 365

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 2
Schwierigkeit: k.A.
Webcode: gqsc-8u29
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen