Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Schiffsglocke (Glasen) (Simulationen)

Schiffsglocken dienen in der Seefahrt hauptsächlich dazu, akustisch die Uhrzeit zu signalisieren. Die Einteilung des Tages geschieht hierbei aber nicht nach Stunden, sondern nach Schiffswachen.

Da eine Wache vier Stunden dauert, hat der gesamte Tag sechs Wachen. Innerhalb dieser Wachen wird die verstrichene Zeit an der Schiffsglocke geläutet, und zwar zu jeder halben Stunde. Das heißt: Ein Schlag der Glocke bedeutet das Ende der ersten halben Stunde einer Wache; zwei Schläge das Ende der ersten Stunde (also zweier Halbstunden); drei Schläge das Ende von anderthalb Stunden einer Wache; und so weiter.

Hierbei werden jeweils zwei Schläge an der Glocke zu einem Doppelschlag zusammengefasst. Eine 3 tönt also als zwei hintereinander ausgeführte Schläge, gefolgt von einer Pause plus einem Einzelschlag (•• •). Eine 4 tönt als zwei Doppelschläge, zwischen denen eine Pause liegt (•• ••).

Eine Wache endet bei 8 Schlägen (8 Halbstunden = 4 Stunden, Signal: •• •• •• ••) und läutet gleichzeitig den Beginn einer neuen Wache ein.

Bei aufkommenden Fragen konsultieren Sie bitte die entsprechende Seite bei Wikipedia: https://de.wikipedia.org/wiki/Glasenuhr

Der Tag beginnt bei 0:00 Uhr (8 Glasen) mit dem Ende der Hundswache und dem Beginn der Morgenwache.

Zur eigentlichen Aufgabe: 

Basteln Sie ein Programm, das eine Schiffsglocke zur Echtzeit simuliert. 

Wenn Sie keinen Zugriff auf ihre Systemzeit haben, schreiben Sie ein Programm, das eine eingegebene Uhrzeit in ein Signal verwandeln kann (akustisch oder visuell).

Ansonsten haben Sie die folgenden Freiheiten:

  • Ausgabe als akustisches Signal (mithilfe einer Audio-Datei über die Soundkarte des Rechners) oder als ASCII-Beep-Code (#7: BEL)
  • Ausgabe als visuelles Signal oder Text (»dingding ding«, »•• •«, Lichtzeichen oder was immer Sie wollen.
  • Anzeige des Namens der aktuellen Wache
  • Glasen nach Ortszeit oder koordinierter Weltzeit (UTC)
  • Extrafunktionen wie Warnsignale, Beerdigungs- oder Begrüßungsläuten, oder auch Einträge der Geburten an Bord (dies alles natürlich nur optional).

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

2 Lösung(en)

package ch.programmieraufgaben.simulation.glasen;


/**
 * Programmieraufgabe Schiffsglocke Code: jwpg-qcth
 * @version 0.1 (Aug 14, 2016)
 * @author Philipp Gressly Freimann 
 *         (philipp.gressly@santis.ch)
 */
public class Glasen {

	static final int ORTSZEIT = 2; // Mitteleuropäische Sommerzeit.

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


	void top() {
		int glasen = getGlasen();
		ausgabe(glasen);
	}


	int getGlasen() {
		double stunde = getStundeImTag();
		stunde = stunde + ORTSZEIT;
		int glase  = (int ) (2 * (stunde % 4.0));
		return glase;
	}


	/**
	 * Systemzeit, nicht ortzseit. 
	 * Für die Ortszeit muss die Zeitzone und 
	 * allfällige Sommerzeit noch hinzugefügt werden.
	 * Bsp: Mitteleuropa Sommerzeit  + 2; 

	 * @return Systemzeit in Stunden im aktuellen Tag.
	 */
	double getStundeImTag() {
		// Achtung: Dies ist die Systemzeit, nicht 
		// die umgerechnete Ortszeit!
		long millis       = System.currentTimeMillis();
		long millisImTag  = millis % (24L*60*60*1000);
		long secsImTag    = millisImTag  / 1000  ;
		long minutesImTag = secsImTag    /   60  ;
		double stunde     = minutesImTag /   60.0;
		return stunde;
	}


	void ausgabe(int glasen) {
		if(0 == glasen) {
			glasen = 8; // start == ende
		}
		while(glasen >= 2) {
			System.out.print("..");
			System.out.print(" ");
			glasen = glasen - 2;
		}
		if(1 == glasen) { // ungerade
			System.out.print(".");
		}
	}

} // end of class Glasen
                

Lösung von: Philipp Gressly Freimann (SANTIS Training AG)

/*----------------------------------------------------------------------------\*
| • Ausgabe akustisch über soundkarte und als text in der konsole
|   (dingding ding)
| • Anzeige des namens der aktuellen wache
| • Glasen nach ortszeit
| • keine extrafunktionen (erstmal)
\*----------------------------------------------------------------------------*/

var watches = [
      "Hundswache",
      "Morgenwache",
      "Vormittagswache",
      "Nachmittagswache",
      "Plattfußwache",
      "Abendwache"
    ],
    now = new Date();

// aktuelle wache anzeigen und
// auf die nächste volle halbstunde warten
(function() {
  var next = new Date();
  showWatch();
  if (next.getMinutes() <= 30) next.setMinutes(30);
  else {
    next.setMinutes(0);
    next.setHours(now.getHours() + 1);
  }
  setTimeout(strike, next - now);
})();

// Ausgabe der aktuellen wache
function showWatch() {
  console.log(watches[Math.floor(now.getHours() / 4)] +
    " (" + getBells() + ")");
}

// Bestimmung der aktuellen schläge
function getBells() {
  var bellTime = new Date(),
      hrs = bellTime.getHours() % 4,
      min = Math.floor(bellTime.getMinutes() / 30);
  if (hrs == 0 && min == 0) return 8;
  return hrs * 2 + min;
}

// Glasen
function strike() {
  var bells = getBells();
  console.clear();
  showWatch();
  soundBell(bells); consoleBell(bells);
  setTimeout(strike, 30 * 60 * 1000);
}

// glasen über soundkarte:
// abspielen einer mp3-datei (beispielsweise)
function soundBell(num) {
  var pause = 1700,
      i = 0;
  function ring() { new Audio("bell.mp3").play(); }   // einzelschlag
  function doubleRing() {                             // doppelschlag
    ring();
    setTimeout(ring, 400);
  }
  while (num > 1) {
    pause *= ++i;
    setTimeout(doubleRing, pause);
    num -= 2;
  }
  if (num == 1) setTimeout(ring, pause * i);
}

// glasen über die konsole
function consoleBell(num) {
  var msg = "";
  while (num > 1) {
    msg += "dingding ";
    num -= 2;
  }
  if (num == 1) msg += "ding";
  console.log(msg);
}                                                          // lissalanda@gmx.at

                

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

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: Mittel
Webcode: jwpg-qcth
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen