Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Sonntage (Schleifen)

Die folgenden Informationen sind gegeben:

- Der 1 Januar 1900 war ein Montag

- 30 Tage haben folgende Monate:

September, April, Juni und November.

Die restlichen Monate haben 31 Tage, abgesehen

von Februar, welcher 28 Tage und beim Schaltjahr 29 Tage hat.

Wieviele Sonntage fallen auf den ersten des Monats zwischen 1900 und 2000 auf(1 Jan 1901 bis 31 Dez. 2000)?

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

5 Lösung(en)

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

#define true 1==1
#define false !true


int day(int month, int year){

        int x, y, c;

        switch(month) {
                case 1:
                case 5:
                        x = 0; break;
                case 8:
                        x = 1; break;
                case 3:
                case 11:
                        x = 2; break;
                case 6:
                case 2:
                        x = 3; break;
                case 9:
                case 12:
                        x = 4; break;
                case 4:
                case 7:
                        x = 5; break;
                case 10:
                        x = 6; break;
        }

        y = month == 1 || month == 2 ? (year + 99) % 100 : year % 100;
        c = month != 1 && month != 2 ? year / 100 : (year % 100 == 0 ? year / 100 - 1 : year/100);

        return (1 + x + y + y/4 + c/4 -2*c) % 7;
}

int main(int argc, char *argv[]){

        int count = 0;

        for (int j=1901; j<=2000; j++){
                for (int m=1; m<=12; m++){
                        if(day(m, j) == 0){
                                printf("01.%02d.%d\n", m, j);
                                count++;
                        }
                }
        }

        printf("%d Sonntage fallen auf den ersten des Monats zwischen 01.01.1901 und 31.12.2000\n", count);

        return 0;
}
                

Lösung von: André Trobisch (HS Mittweida)

import datetime

def sonntage_1901_2001():
    sonntage = 0
    for jahr in range(1901, 2001):
        for monat in range(1, 13):
            tag = datetime.date(jahr, monat, 1)
            if tag.weekday() == 6:
                sonntage += 1
    return sonntage   

print(sonntage_1901_2001()) --> 171
                

Lösung von: Houssein Fofana ()

'15.3.2017 - PowerBASIC 10

''mit Schleifen seit 1.1.1900 anstelle von integrierten Datumsfunktionen...


#COMPILE EXE
#DIM ALL

FUNCTION PBMAIN () AS LONG

    DIM zwDatum AS STRING
    DIM zwJahr AS INTEGER
    DIM zwMonat AS INTEGER
    DIM zwTag AS INTEGER
    DIM i AS LONG
    DIM Sonntage AS INTEGER

    zwTag = 1
    zwMonat = 1
    zwJahr = 1900
    Sonntage = 0
    i = 1

    DIM Schaltjahr AS INTEGER

    DO UNTIL zwDatum = "20001231"
        INCR i

        'Jahre durchgehen
        INCR zwTag
                IF zwTag > DaysInMonth (zwMonat, zwJahr) THEN
                INCR zwMonat
                zwTag = 1
                IF zwMonat = 13 THEN
                    INCR zwJahr
                    zwMonat = 1
                END IF
        END IF

        zwDatum = FORMAT$(zwJahr) & FORMAT$(zwMonat,"00") & FORMAT$(zwTag,"00")

        'Sonntage am 1. des Monats seit 01.01.1901
        IF zwJahr > 1900 AND _
           zwTag = 1 AND _
          i MOD 7 = 0 _
          THEN INCR Sonntage

    LOOP

    MSGBOX STR$(Sonntage) & " Sonntage",,EXE.NAME$

END FUNCTION

'-----------------------------------------

FUNCTION DaysInMonth(D_Month AS INTEGER, Year AS INTEGER) AS INTEGER

   LOCAL Days AS INTEGER

   SELECT CASE D_Month
      CASE 1, 3, 5, 7, 8, 10, 12
         Days = 31
      CASE 4, 6, 9, 11
         Days = 30
      CASE 2
         Days = 28
         IF Year MOD 4 = 0 THEN
            IF Year MOD 100 = 0 THEN
               IF Year MOD 400 = 0 THEN Days = 29
            ELSE
               Days = 29
            END IF
         END IF
   END SELECT
   FUNCTION = Days

END FUNCTION

                

Lösung von: Markus Sägesser (keine)

package Aufgaben.Sonntage;

public class Sundays {

	public static void main(String[] args) 
	{
		// Zählvariable für Wochentage, Steuervariable für eine Schleife und Zählvariable für Anzahl Sonntage
		int wochentag = 0, tagmodifier = 0, anzahlSonntage = 0;
		
		// iteriere über alle Jahre zwischen 1900 und 2000
		for(int jahr = 1900; jahr < 2000; jahr++)
		{
			// iteriere über alle Monate des jeweiligen Jahres
			for(int monat = 0; monat < 12; monat++)
			{
				// setze die Steuervariable zur Anpassung der Tage im Monat für die innere Schleife, basierend auf dem aktuellen Monat
				switch (monat)
				{
				//30-tägige Monate: April, Juni, September und November
				case 3: 
				case 5:
				case 8:
				case 10: tagmodifier = 1; break;
				
				//Februar: 29 Tage im Schaltjahr, 28 sonst
				case 1: tagmodifier = (jahr % 4 == 0) ? 2: 3; break;
				
				// alle anderen Monate: modifier zurücksetzen
				default: tagmodifier = 0; break;
				}
				
				// iteriere über alle Tage des aktuellen Monats
				for(int tag = 0; tag < 31-tagmodifier; tag++ )
				{					
					// wenn der Wochentag ein Sonntag ist und der Tag der erste des Monats ist... 
					if(wochentag % 7 == 6 && tag == 0)
					{
						//...zähle einen Sonntag drauf
						anzahlSonntage++;
					}
					// zähle den Wochentag für die nächste Iteration der inneren Schleife hoch
					wochentag++;
				}
			}
			
			
		}

		System.out.println("Anzahl Sonntage zwischen 1. Januar 1900 und 31. Dezember 2000: " + anzahlSonntage);
	}

}

                

Lösung von: Name nicht veröffentlicht

'28.05.2017 - Powerbasic 10

'Mir war langweilig, daher noch Version 2 mit integrierten Datumsfunktionen

#COMPILE EXE
#DIM ALL

FUNCTION PBMAIN () AS LONG

    DIM Jahr AS INTEGER
    DIM Monat AS INTEGER
    DIM Pruef AS IPOWERTIME
    LET Pruef = CLASS "PowerTime"
    DIM Sonntage AS INTEGER


    FOR Jahr = 1901 TO 2000
        FOR Monat = 1 TO 12
            Pruef.NewDate(Jahr, Monat, 1)
            IF pruef.DayOfWeek = 0  THEN INCR Sonntage
        NEXT Monat
    NEXT Jahr

    MSGBOX STR$(Sonntage) & " Sonntage",,EXE.NAME$

END FUNCTION

                

Lösung von: Markus Sägesser (keine)

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.25
Schwierigkeit: Leicht
Webcode: juck-x0i7
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen