Intervall-Training (Algorithmen)
Zwei Laufsportler (Peter und Paul) treffen sich im örtlichen Sportzentrum, um auf der 400-Meter-Bahn ein Intervall-Training zu absolvieren. Dabei rennt Peter im Uhrzeigersinn, Paul jedoch im Gegenuhrzeigersinn.
Damit die Aufgabe nun nicht all zu kompliziert wird, nehmen wir einfach an, dass die Runde für beide Läufer exakt 400 Meter ist (auch wenn dies in der Realität wohl nicht ganz möglich ist).
Würden Peter und Paul nun exakt gleich schnell laufen, würden sie sich also pro Runde exakt zweimal treffen. Einmal nach 200 und einmal nach 400 Meter. Die beiden möchten ja aber ein Intervalltraining absolvieren - und dass hier ist der Plan:
- Einer der beiden läuft "langsam" und der andere "schnell"
- Immer wenn sie sich das zweite Mal begegnet sind, wechseln sie (der "Schnelle" läuft dann "langsam" und der "Langsame" läuft dann "schnell")
Als Tempo legen sie folgendes fest:
- Schnell = Pace 4m30s (4 Minuten 30 Sekunden pro Kilometer)
- Langsam = Pace 5m30s (5 Minuten 30 Sekunden pro Kilometer)
Die beiden fragen sich nun:
- Wie weit ist die jeweilige Intervall-Einheit und wie lange dauert diese?
- Wie würden sich die Daten ändern, wenn sie ein anderes Tempo wählen würden (bsp. 5m00s und 6m00s)?
- Wie würden sich die Daten ändern, wenn sie den Tempowechsel erst nach 3 Begegnungen vornehmen würden?
Bonus-Frage:
- Wenn Peter mit einer Pace 4m30s läuft und Paul nach exakt 1 Minute treffen will (nach n Begegnungen), welches Tempo müsste dann Paul anschlagen
3 Kommentare
4 Lösung(en)
REPORT INTERVALL-TRAINING.
*************************************************************************************************
*Eingabemaske
*************************************************************************************************
SELECTION-SCREEN: BEGIN OF BLOCK b1.
PARAMETERS: rb_01 RADIOBUTTON GROUP r1.
PARAMETERS: rb_02 RADIOBUTTON GROUP r1.
PARAMETERS: rb_03 RADIOBUTTON GROUP r1.
PARAMETERS: lv_spee1 TYPE p DECIMALS 2.
PARAMETERS: lv_spee2 TYPE p DECIMALS 2.
SELECTION-SCREEN: END OF BLOCK b1.
*************************************************************************************************
*Typisierungen
*************************************************************************************************
DATA: lv_runde TYPE int4, "Gibt Rundenlänge an (in m)
lv_km TYPE int4, "Länge eines KM (in m)
lv_rz1 TYPE p DECIMALS 2, "Rundenzeit 1
lv_rz2 TYPE p DECIMALS 2, "Rundenzeit 2
lv_spee1s TYPE int4, "Geschwindigkeit 1 ( in s )
lv_spee1sa TYPE p DECIMALS 2, "Geschwindigkeit 1 ( in s ) !!Arbeitswert
lv_spee2s TYPE int4, "Geschwindigkeit 2 ( in s )
lv_spee2sa TYPE p DECIMALS 2, "Geschwindigkeit 2 ( in s ) !!Arbeitswert
lv_begegnungen TYPE int4, "Anzahl der Begegnungen
lv_gefbeg TYPE int4, "Anzahl der geforderten Begegnungen
lv_strecke TYPE p DECIMALS 2, "Gibt zurückgelegte Strecke an
lv_sekunden TYPE int4, "Gibt die benötigten Sekunden an
lv_mps1 TYPE p DECIMALS 2, "Meter pro Sekunde 1
lv_mps2 TYPE p DECIMALS 2, "Meter pro Sekunde 2
lv_zgs1 TYPE p DECIMALS 2, "Gibt zurückgelegte Strecke von A an
lv_zgs1a TYPE p DECIMALS 2, "Zurückgelegte Strecke A !! Arbeitswert
lv_zgs2 TYPE p DECIMALS 2, "Gibt zurückgelegte Strecke von B an
lv_zgs2a TYPE p DECIMALS 2. "Zurückgelegte Strecke A !! Arbeitswert
*************************************************************************************************
*Wertzuweisungen
*************************************************************************************************
lv_km = 1000.
lv_runde = 400.
*************************************************************************************************
*Prüfung, welche Aufgabe hat der Anwender gewählt?
*************************************************************************************************
IF rb_01 IS NOT INITIAL.
lv_gefbeg = 2.
lv_spee1 = '4.50'.
lv_spee2 = '5.50'.
ENDIF.
IF rb_02 IS NOT INITIAL.
lv_gefbeg = 2.
ENDIF.
IF rb_03 IS NOT INITIAL.
lv_gefbeg = 3.
lv_spee1 = '4.50'.
lv_spee2 = '5.50'.
ENDIF.
*************************************************************************************************
*Prüfung, ob Anwender Geschwindigkeiten ausgefüllt hat, wenn Aufg2 2 gewählt ist.
*************************************************************************************************
IF rb_02 IS NOT INITIAL.
IF lv_spee1 IS INITIAL.
MESSAGE 'Bitte tragen Sie eine Geschwindigkeit ein.' TYPE 'E'.
ENDIF.
IF lv_spee2 IS INITIAL.
MESSAGE 'Bitte tragen Sie eine Geschwindigkeit ein.' TYPE 'E'.
ENDIF.
ENDIF.
*************************************************************************************************
*Umrechnung der gegebenen Zeiten in Sekunden
*************************************************************************************************
lv_spee1s = TRUNC( lv_spee1 ) * 60. "Umrechung von Geschwindigkeit 1 in Sekunden
lv_spee1sa = FRAC( lv_spee1 ) * 60.
lv_spee1s = lv_spee1s + lv_spee1sa.
lv_spee2s = TRUNC( lv_spee2 ) * 60. "Umrechung von Geschwindigkeit 2 in Sekunden
lv_spee2sa = FRAC( lv_spee2 ) * 60.
lv_spee2s = lv_spee2s + lv_spee2sa.
*************************************************************************************************
*Berechnung der Meter pro Sekunde (MpS)
*************************************************************************************************
lv_mps1 = lv_km / lv_spee1s.
lv_mps2 = lv_km / lv_spee2s.
*************************************************************************************************
*Berechnung der zurückgelegten Strecke und Prüfung, ob ein Treffen stattfindet.
*************************************************************************************************
WHILE lv_begegnungen <> lv_gefbeg.
lv_zgs1a = lv_zgs1a + lv_mps1.
lv_zgs2a = lv_zgs2a + lv_mps2.
lv_strecke = lv_zgs1a + lv_zgs2a.
lv_sekunden = lv_sekunden + 1.
IF lv_strecke >= lv_runde.
lv_begegnungen = lv_begegnungen + 1.
lv_strecke = lv_strecke - lv_runde.
lv_zgs1 = lv_zgs1 + lv_zgs1a.
lv_zgs2 = lv_zgs2 + lv_zgs2a.
lv_zgs1a = 0.
lv_zgs2a = 0.
ENDIF.
ENDWHILE.
WRITE:/ 'Nach ', lv_sekunden, ' Sekunden treffen sich die Beiden zum ' , lv_begegnungen, ' Mal.'.
NEW-LINE.
WRITE:/ 'Zurückgelegte Distanz:'.
NEW-LINE.
WRITE:/ 'A :', lv_zgs1.
NEW-LINE.
WRITE:/ 'B :', lv_zgs2.
Lösung von: Name nicht veröffentlicht
round_length = 400 # Meter
meetings_per_change = 2 # Alle x Begegungen wird das Tempo gewechselt
pace_fast = [4, 30] # Schema: [Minuten, Sekunden]
pace_slow = [5, 30]
t_fast = pace_fast[0] * 60 + pace_fast[1] # Umrechnen in Sekunden
t_slow = pace_slow[0] * 60 + pace_slow[1]
v_fast = 1000 / t_fast # Umrechnen in Meter pro Sekunde
v_slow = 1000 / t_slow
'''
Zu loesende Gleichung:
Folgende Bedingung muss fuer das 1. Treffen erfuellt sein:
t * v_fast = round_length - (t * v_slow) | + (t*v_slow)
t * (v_fast + v_slow) = round_length | : (v_*)
t = round_length / (v_fast + v_slow)
t ist die Zeit, nach der sich beide Laeufer das erste Mal treffen.
=> t * meetings_per_change = t_change
'''
t_change = ((round_length / (v_fast + v_slow)) * meetings_per_change)
s_fast = t_change * v_fast
s_slow = t_change * v_slow
# Ausgabe:
print(('Gegeben: Rundenlaenge {0} Meter, schneller Pace {1}:{2}, ' +
'langsamer Pace {3}:{4}, Wechsel nach {5} Begegnungen.')
.format(round_length, pace_fast[0], pace_fast[1],
pace_slow[0], pace_fast[1], meetings_per_change))
print(('\nEin Intervall dauert {:0.2f} Sekunden, das sind ' +
'{:d} Minute(n) und {:0.2f} Sekunden.')
.format(t_change, int(t_change // 60), (t_change % 60)))
print(('Der schnellere Laeufer laeuft {:0.2f} Meter' +
', der langsamere {:0.2f} Meter.')
.format(s_fast, s_slow))
'''
Ein Loesen der Bonusaufgabe ist nach Umstellen der obigen Gleichung moeglich.
'''
Lösung von: Name nicht veröffentlicht
# -*- coding:utf-8 -*-
import math
bahn = 0.4 #km
treffenBisWechsel = 2
schnellInput = 4.5 #pace = 4 min 30 sek pro Kilometer
langsamInput = 5.5
schnell = schnellInput*60
langsam = langsamInput*60
#pacesAdded = 3600/(3600/langsam + 3600/schnell) -> Gleichung
pacesAdded = (langsam*schnell)/(langsam+schnell) # Sekunden pro Kilometer
sek = pacesAdded*bahn*treffenBisWechsel
print ("Dauer in Sekunden:", round(sek,3))
print ("Der Schnellere legt", round(sek/schnell*1000,3), "Meter zurück.")
print ("Der Langsamere legt", round(sek/langsam*1000,3), "Meter zurück.")
treffenNach = 60 #sek
n = 1 #Treffen sich bei Begegnung n
peterPace = 4.5*60 #sek/km
peterDistanz = treffenNach/peterPace #km
paulDistanz = bahn*n-(peterDistanz%bahn)
paulPace = 1/paulDistanz*treffenNach
print ("In der Bonusaufgabe läuft Paul mit einer Pace von", round(paulPace,3), "Sekunden.")
Lösung von: Tim Rieder (KSWE)
def PaceToV(ms): # Umrechnung der Pace in m/s // Angabe der Pace als dezimale Zeit
m = int(ms) # dezimale Minuten
s = (ms-int(ms))*60
v = 1000 / (60*m + s)
return v
def TreffZeit(p1,p2,dx): # Berechnung der Zeit bis zu erstem Treffen bei gegebener Pace und Strecke in sec
v1 = PaceToV(p1)
v2 = PaceToV(p2)
t = dx/(v1+v2)
return t
def WegbisnTreffen (p1, p2, dx, n): # Berechnung des zurückgelegten Weges bis zum n-ten Treffen
t = n * TreffZeit(p1, p2, dx) # Zeit bis zum n-ten Treffen
x1 = PaceToV(p1)*t # jeweils zurückgelegte Wege
x2 = PaceToV(p2)*t
return x1, x2
def Intervalltraining (p1, p2, dx, n):
print ("Streckenlänge:", dx,"m")
print ("Treffen bis zum Wechsel:", n, "m")
print ("Zeit bis zum Wechsel", round(TreffZeit(p1, p2, dx)*n,2), "s")
print ("Gelaufene Meter mit p1", int(WegbisnTreffen(p1, p2, dx, n)[0]), "m")
print ("Gelaufene Meter mit p1", int(WegbisnTreffen(p1, p2, dx, n)[1]), "m")
Lösung von: Name nicht veröffentlicht
Verifikation/Checksumme:
Faktoren:
- Tempo Peter: 4m30s
- Tenpo Paul: 5m30s
- Wechsel nach 2 Begegnungen
Auswertung einer einzelnen Intervall-Einheit:
- Peter ist 360 Meter mit einer Pace von 4m30s gelaufen
- Paul ist 440 Meter mit einer Pace von 5m30s gelaufen
- Dauer: 1 Minute 58.8 Sekunden
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 1.5 |
Schwierigkeit: | Mittel |
Webcode: | i5xk-ey82 |
Autor: | Valentin Marolf (AXA) |
Kommentare (3)
Könntest du diese Frage genauer beschreiben? Was bedeutet hier Einheit? Wer ist zuerst der schnelle und wer der langsame? Und müssten nicht 4 Minuten 30 Sekunden = 4,5 Minuten sein? Da steht 4,3.