[Options] Title=5. TAL für Streckesegelflug ASVÖ NÖ und ASVÖ Wien 2008 in Wr. Neustadt Site=Wr. Neustadt PeriodFrom=39641 PeriodTo=39649 Class=Offen ClassIndex=6 AvtoSaveFlight=False AvtoSaveTime=0 TakeoffAlt=697m TaskPicWidth=700 TaskPicHeight=500 TaskPicCompression=90 TaskPicBorder=12 NeedLegs=False StrictName=False UseBinFiles=False CommentPrefix=0 [Warnings] HighEnl=300 AsViolate=True MinFinAlt=0m MaxFinAlt=10000m MaxAlt=0m AltTimeout=0 StartGsp=0km/h FixRate=15 [SearchPath] i:\ [Pilots] "Andreas","Dumberger",*,"","DG 200","D-4511","EO","Offen",108,"ASKÖ FS-Wien",0,"",1,"","" "Walter","Felber",*,"ZA73,","Ventus 2","OE-5603","DS","Offen",114,"ASKÖ FS-Wien",0,"",1,"","" "Stephan","Haupt",*,"Z5KF,","PIK 20 D","D-1976","RR","Offen",106,"ASKÖ FS-Wien",0,"",1,"","" "Michael","Klopf",*0,"ZE59,","Duo Discus","OE-5657","TU","Offen",110,"USFC Tulln",0,"",1,"","" "Kurt","Lasinger",*0,"ZE29,","Ventus 2","D-5328","CW","Offen",114,"USFC Mariazell",0,"",1,"","" "Irmgard","Paul",*0,"G1AX,","DG 200","D-7868","II","Offen",108,"ASKÖ FS-Wien",0,"",1,"","" "Andreas","Pockberger",*0,"Z5HC,","Kestrel 17m","D-2086","TX","Offen",112,"FTG Wien",0,"",1,"","" "Felix","Pöschl",*0,"","Speed Astir II","OE-5335","35","Offen",106,"FAS",0,"",1,"","" "Georg","Schiffleithner",*0,"ZC81,","Ventus 17.6m","D-2086","TA","Offen",116,"USFC Tulln",0,"",1,"","" "Karl","Schiffleithner",*0,"Z5BQ,","LS 8/18m","D-2239TW","","Offen",114,"USFC Tulln",0,"",1,"","" [Script0] Program Racing_Task; // Racing Task mit oder ohne Index-Wertung // Angepasst an ACC 2006 Ausschreibung Hinsichtlich 5% Streckenabzug bei Aussenlandung // in diesem Fall ist bei der Auswertung der String AL in das "Scorer Entry Dialog Feld TAG" einzutragen // Version 3.0, Date 11.04.2006 R.Hu. // Feldkirchen und Zell am See 2007 9.4.2007 R.Hu. // angepasst an Sporting Code 2006 (H0 = kleinstes Handicap) const With_Handicap = true; // To diable handicapped scoring change 'TRUE' against 'FALSE' const Dm = 100000; // Minimum Handicapped Distance to validate the Day [meters] const Malus = 0; // % Streckenabzug (Malus) für echte Aussenlandungen oder Motor an (Feld TAG "AL") const Bonus = 0; // % Distanzgutschrift (Bonus) DFistanzaufgaben bei Ldg. am Startflugplatz (Feld TAG "FP") // ist Bonus oder Malus = 0 wird Bonus und Malus nicht berücksichtigt var Dt, n1, n2, N, D0, V0, T0, H0, Pm, Pdm, Pvm, Pn, F, Day : Double; D, H, Dh, M, T, Dc, Pd, V, Vh, Pv, S : double; PmaxDistance, PmaxTime : double; i, x : integer; tx1, tx2, txt3 : string; Pflg : boolean; Function CalcH( Hi: double ): double; //Handicap calculation - if disabled CalcH=1 begin IF With_Handicap THEN CalcH := H0/Hi ELSE CalcH := 1.0; end; Function MinValue( a,b,c : double ) : double; var m : double; begin m := a; If b < m Then m := b; If c < m Then m := c; MinValue := m; end; begin // Calculation of basic parameters N := 0; // Number of pilots having had a competition launch N1 := 0; // Number of pilots with Marking distance greater than Dm - normally 100km H0 := 255; // Lowest Handicap of all competitors in the class IF With_Handicap THEN tx1 := 'mit Index berechnet' else tx1 := 'ohne Index berechnet'; IF Malus = 0 THEN tx2 := '' ELSE tx2 := ', '+InttoStr(malus)+'% Streckenabzug bei Aussenldg.'; // IF Bonus = 0 THEN tx3 := '' ELSE tx2 := ', '+InttoStr(bonus)+'% Bonus(km) bei Ldg. am Startflp.'; for i:=0 to GetArrayLength(Pilots)-1 do begin If not Pilots[i].isHC Then begin If Pilots[i].Hcap < H0 Then H0 := Pilots[i].Hcap; // Lowest Handicap of all competitors in the class end; end; If H0=0 Then Exit; for i:=0 to GetArrayLength(Pilots)-1 do begin If not Pilots[i].isHC Then begin If Pilots[i].dis*CalcH(Pilots[i].Hcap) >= Dm Then n1 := n1+1; // Competitors who have achieved at least Dm If Pilots[i].takeoff > 0 Then N := N+1; // Number of competitors in the class having had a competition launch that Day end; end; If N=0 Then Exit; if n1/N > 0.25 then Pflg:= true else Pflg:= false; // wenn n1/N grösser 25% dann Punkte berechnen // Anpassung an Klubklasse STM 2004 und AAC 2006 Ausschreibung for i:=0 to GetArrayLength(Pilots)-1 do begin if Pilots[i].finish <= 0 Then begin M := 0.0; If Pilots[i].Tag = 'FP' Then M := Pilots[i].dis / 100 * Bonus; // nur bei Distanzaufgaben If Pilots[i].Tag = 'AL' Then M := Pilots[i].dis / 100 * Malus; // Aussenldg. oder Loggerldg. kein Fpl.! end; Pilots[i].dis := Pilots[i].dis + M; end; // Ende Anpassung an Klubklasse STM 2004 Ausschreibung D0 := 0; T0 := 0; V0 := 0; for i:=0 to GetArrayLength(Pilots)-1 do begin If not Pilots[i].isHC Then begin // Find the highest Corrected distance If Pilots[i].dis*Calch(Pilots[i].Hcap) > D0 Then D0 := Pilots[i].dis*CalcH(Pilots[i].Hcap); // Find the highest finisher's speed of the day // and corresponding Task Time If Pilots[i].finish >= 0 Then begin If Pilots[i].speed*CalcH(Pilots[i].Hcap) > V0 Then begin V0 := Pilots[i].speed*CalcH(Pilots[i].Hcap); T0 := Pilots[i].finish-Pilots[i].start; end; end; end; end; If D0=0 Then Exit; // Maximum available points for the Day PmaxDistance := (5*D0/1000)-250; PmaxTime := (400*T0/3600.0)-200; If T0 <= 0 Then PmaxTime := 1000; Pm := MinValue( PmaxDistance, PmaxTime, 1000.0 ); // Day Factor F := 1.25* n1/N; If F>1 Then F := 1; // Number of competitors who have achieved at least 2/3 of best speed for the day V0 n2 := 0; for i:=0 to GetArrayLength(Pilots)-1 do begin If not Pilots[i].isHC Then begin If Pilots[i].speed*CalcH(Pilots[i].Hcap) > (2.0/3.0*V0) Then begin n2 := n2+1; end; end; end; Pvm := 2.0/3.0 * (n2/N) * Pm; // maximum available Speed Points for the Day Pdm := Pm-Pvm; // maximum available Distance Points for the Day for i:=0 to GetArrayLength(Pilots)-1 do begin // For any finisher If Pilots[i].finish > 0 Then begin Pv := Pvm * (Pilots[i].speed*CalcH(Pilots[i].Hcap) - 2.0/3.0*V0)/(1.0/3.0*V0); If Pilots[i].speed*CalcH(Pilots[i].Hcap) < (2.0/3.0*V0) Then Pv := 0; Pd := Pdm; end Else //For any non-finisher begin Pv := 0; Pd := Pdm * (Pilots[i].dis*CalcH(Pilots[i].Hcap)/D0); end; // Pilot's score Pilots[i].Points := Round( F*(Pd+Pv) - Pilots[i].Penalty ); end; // Data which is presented in the score-sheets for i:=0 to GetArrayLength(Pilots)-1 do begin Pilots[i].sstart :=Pilots[i].start; Pilots[i].sfinish:=Pilots[i].finish; Pilots[i].sdis :=Pilots[i].dis; Pilots[i].sspeed :=Pilots[i].speed; end; // IF n1/N <= 0.25 THEN tx1 := '!!! Keine Wertung n1 kleiner gleich 25% von N !!!'; IF not Pflg THEN tx1 := '!!! n1 kleiner gleich 25% von N, Tag neutralisieren !!!'; // Info fields, also presented on the Score Sheets Info1 := 'Maximale Punkte: '+IntToStr(Round(Pm)); Info2 := 'Tagesfaktor = '+FormatFloat('0.000',F); Info4 := tx1; // Info4 := tx2; Info3 := 'N = '+IntToStr(Round(N))+'; n1 = '+IntToStr(Round(n1))+'; n2 = '+IntToStr(Round(n2))+'; 2/3 V0 = '+FormatFloat('0.0',(2.0/3.0*V0)*3.6); //+'; F = '+FormatFloat('0.000',F)+'; Pmax = '+IntToStr(Round(Pm)); end. //----------------------------------------------------------------------------------------------------------- [Script1] Program Speed_Task; // Racing Task mit oder ohne Index-Wertung // Angepasst an ACC 2006 Ausschreibung Hinsichtlich 5% Streckenabzug bei Aussenlandung // in diesem Fall ist bei der Auswertung der String AL in das "Scorer Entry Dialog Feld TAG" einzutragen // Version 3.0, Date 11.04.2006 R.Hu. const With_Handicap = true; // To diable handicapped scoring change 'TRUE' against 'FALSE' const Dm = 100000; // Minimum Handicapped Distance to validate the Day [meters] const Malus = 0; // % Streckenabzug (Malus) für echte Aussenlandungen oder Motor an const Bonus = 0; // % Distanzgutschrift (Bonus) bei Ldg. am Startflugplatz (Distanzaufgaben) var Dt, n1, n2, N, D0, V0, T0, H0, Td, Pm, Pdm, Pvm, Pn, F, Day: Double; D, H, Dh, M, T, Dc, Pd, V, Vh, Pv, S : double; PmaxDistance, PmaxTime : double; i, x : integer; tx1, tx2, tx3 : string; Pflg : boolean; Function MinValue( a,b,c : double ) : double; var m : double; begin m := a; If b < m Then m := b; If c < m Then m := c; MinValue := m; end; Function CalcH( Hi: double ): double; //Handicap calculation - if disabled CalcH=1 begin IF With_Handicap THEN CalcH := H0 / Hi ELSE CalcH := 1.0; end; begin IF With_Handicap THEN tx1 := 'mit Index berechnet' else tx1 := 'ohne Index berechnet'; IF Malus = 0 THEN tx2 := '' ELSE tx2 := ', '+InttoStr(malus)+'% Streckenabzug bei Aussenldg.'; // IF Bonus = 0 THEN tx3 := '' ELSE tx2 := ', '+InttoStr(bonus)+'% Bonus(km) bei Ldg. am Startflp.'; // Calculation of basic parameters N := 0; // Number of pilots having had a competition launch N1 := 0; // Number of pilots with Marking distance greater than Dm - normally 100km H0 := 255; // Highest Handicap of all competitors in the class Td := 0; // Designated time IF with_handicap THEN tx1 := 'mit Index berechnet' ELSE tx1 := 'ohne Index berechnet'; for i:=0 to GetArrayLength(Pilots)-1 do begin If not Pilots[i].isHC Then // Highest Handicap of all competitors in the class begin If Pilots[i].Hcap < H0 Then H0 := Pilots[i].Hcap; end; end; If H0=0 Then Exit; for i:=0 to GetArrayLength(Pilots)-1 do begin If not Pilots[i].isHC Then begin If Pilots[i].dis*CalcH(Pilots[i].Hcap) >= Dm Then n1 := n1+1; // Competitors who have achieved at least Dm If Pilots[i].takeoff > 0 Then N := N+1; // Number of competitors in the class having had a competition launch that Day If Pilots[i].tstart > 0 Then Td := Pilots[i].tfinish-Pilots[i].tstart; // Calculate designated time end; end; If N=0 Then Exit; if n1/N > 0.25 then Pflg:= true else Pflg:= false; // wenn n1/N grösser 25% dann Punkte berechnen // Outlanding Penalty (Distance reduction) // Anpassung an Klubklasse STM 2004 und AAC 2006 Ausschreibung for i:=0 to GetArrayLength(Pilots)-1 do begin if Pilots[i].finish <= 0 Then begin M := 0.0; // If Pilots[i].Tag = 'F' Then M := Pilots[i].dis / 100 * Bonus; // nur bei Distanzaufgaben If Pilots[i].Tag = 'AL' Then M := Pilots[i].dis / 100 * Malus; end; Pilots[i].dis := Pilots[i].dis + M; end; // Ende Anpassung an Klubklasse STM 2004 Ausschreibung D0 := 0; // Größte korr. Distanz T0 := 0; // Kleinste Zeit V0 := 0; // Größte korr. Geschwindigkeit for i:=0 to GetArrayLength(Pilots)-1 do begin If not Pilots[i].isHC Then begin // Find the highest Corrected distance If Pilots[i].dis*CalcH(Pilots[i].Hcap) > D0 Then D0 := Pilots[i].dis*CalcH(Pilots[i].Hcap); // Find the highest finisher's speed of the day // and corresponding Task Time If Pilots[i].speed*CalcH(Pilots[i].Hcap) = V0 Then // in case of a tie, lowest Task Time applies begin If (Pilots[i].finish-Pilots[i].start) < T0 Then begin V0 := Pilots[i].speed*CalcH(Pilots[i].Hcap); T0 := Pilots[i].finish-Pilots[i].start; end; end Else begin If Pilots[i].speed*CalcH(Pilots[i].Hcap) > V0 Then begin V0 := Pilots[i].speed*CalcH(Pilots[i].Hcap); T0 := Pilots[i].finish-Pilots[i].start; If T0 < Td Then // If marking time is shorter than Designated time, Designated time must be used for computations T0 := Td; end; end; end; end; If D0=0 Then Exit; // Maximum available points for the Day PmaxDistance := (5*D0/1000)-250; // Distanz in Meter PmaxTime := (400*T0/3600.0)-200; // Zeit in Sekunden If T0 <= 0 Then PmaxTime := 1000; Pm := MinValue( PmaxDistance, PmaxTime, 1000.0 ); // Day Factor F := 1.25* n1/N; If F>1 Then F := 1; // if n1/N > 0.25 then Pflg:= true else Pflg:= false; // wenn n1/N grösser 25% dann Punkte berechnen // Number of competitors who have achieved at least 2/3 of best speed for the day V0 n2 := 0; for i:=0 to GetArrayLength(Pilots)-1 do begin If not Pilots[i].isHC Then begin If Pilots[i].speed*CalcH(Pilots[i].Hcap) > (2.0/3.0*V0) Then n2 := n2+1; end; end; Pvm := 2.0/3.0 * (n2/N) * Pm; // maximum available Speed Points for the Day Pdm := Pm-Pvm; // maximum available Distance Points for the Day for i:=0 to GetArrayLength(Pilots)-1 do begin // For any finisher If Pilots[i].finish > 0 Then begin Pv := Pvm * (Pilots[i].speed*CalcH(Pilots[i].Hcap) - 2.0/3.0*V0)/(1.0/3.0*V0); If Pilots[i].speed*CalcH(Pilots[i].Hcap) < (2.0/3.0*V0) Then Pv := 0; Pd := Pdm; If Pilots[i].dis*CalcH(Pilots[i].Hcap) < (2.0/3.0*D0) Then Pd := Pdm*Pilots[i].dis*CalcH(Pilots[i].Hcap)/(2.0/3.0*D0); end Else //For any non-finisher begin Pv := 0; Pd := Pdm * (Pilots[i].dis*CalcH(Pilots[i].Hcap)/D0); end; // Pilot's score Pilots[i].Points := Round( F*(Pd+Pv) - Pilots[i].Penalty ); end; // Data which is presented in the score-sheets for i:=0 to GetArrayLength(Pilots)-1 do begin Pilots[i].sstart:=Pilots[i].start; Pilots[i].sfinish:=Pilots[i].finish; Pilots[i].sdis:=Pilots[i].dis; Pilots[i].sspeed:=Pilots[i].speed; end; // IF n1/N <= 0.25 THEN tx1 := '!!! Keine Wertung n1 kleiner gleich 25% von N !!!'; IF not Pflg THEN tx1 := '!!! n1 kleiner gleich 25% von N, Tag neutralisieren !!!'; // Info fields, also presented on the Score Sheets Info1 := 'Maximale Punkte: '+IntToStr(Round(Pm)); Info2 := 'Tagesfaktor = '+FormatFloat('0.000',F); Info4 := tx1; Info3 := 'N = '+IntToStr(Round(N))+'; n1 = '+IntToStr(Round(n1))+'; n2 = '+IntToStr(Round(n2))+'; 2/3 V0 = '+FormatFloat('0.0',(2.0/3.0*V0)*3.6); //+'; F = '+FormatFloat('0.000',F)+'; Pmax = '+IntToStr(Round(Pm)); end. //----------------------------------------------------------------------------------------------------------- [Script2] Program Distance_Task; // Distanz Aufgabe mit oder ohne Index-Wertung // Angepasst an ACC 2006 Ausschreibung Hinsichtlich 5% Streckenabzug bei Aussenlandung // in diesem Fall ist bei der Auswertung der String AL in das "Scorer Entry Dialog Feld TAG" einzutragen // Landung am Wttbewerbflugplat 5% Streckenbonus String F in das "Scorer Entry Dialog Feld TAG" einzutrage // Version 3.0, Date 11.04.2006 R.Hu. // angepasst an Sporting Code 2006 (Ho = kleinstes Handicap) const With_Handicap = true; // To diable handicapped scoring change 'TRUE' against 'FALSE' const Dm = 100000; // Minimum Handicapped Distance to validate the Day [meters] const Malus = 0; // % Streckenabzug (Malus) für echte Aussenlandungen oder Motor an const Bonus = 0; // % Distanzgutschrift (Bonus) bei Ldg. am Startflugplatz (Distanzaufgaben) var Dt, n1, n2, N, D0, V0, T0, H0, Pm, Pdm, Pvm, Pn, F, Day: Double; D, H, Dh, M, T, Dc, Pd, V, Vh, Pv, S : double; PmaxDistance, PmaxTime : double; i : integer; tx1, tx2, tx3 : string; Pflg : boolean; Function MinValue( a,b,c : double ) : double; var m : double; begin m := a; If b < m Then m := b; If c < m Then m := c; MinValue := m; end; Function CalcH( Hi: double ): double; //Handicap calculation - if disabled CalcH=1 begin IF With_Handicap THEN CalcH := H0 / Hi ELSE CalcH := 1.0; end; begin N := 0; // Number of pilots having had a competition launch N1 := 0; // Number of pilots with Marking distance greater than Dm - normally 100km H0 := 255; // Highest Handicap of all competitors in the class IF With_Handicap THEN tx1 := 'mit Index berechnet' else tx1 := 'ohne Index berechnet'; IF Malus = 0 THEN tx2 := '' ELSE tx2 := ', '+InttoStr(malus)+'% Streckenabzug(km) bei Aussenldg.'; IF Bonus = 0 THEN tx3 := '' ELSE tx2 := ', '+InttoStr(bonus)+'% Bonus(km) bei Ldg. am Startflp.'; for i:=0 to GetArrayLength(Pilots)-1 do begin If not Pilots[i].isHC Then begin If Pilots[i].Hcap < H0 Then H0 := Pilots[i].Hcap; // Lowest Handicap of all competitors in the class end; end; If H0=0 Then Exit; for i:=0 to GetArrayLength(Pilots)-1 do begin If not Pilots[i].isHC Then begin If Pilots[i].tdis*CalcH(Pilots[i].Hcap) >= Dm Then n1 := n1+1; // Competitors who have achieved at least Dm If Pilots[i].takeoff > 0 Then N := N+1; // Number of competitors in the class having had a competition launch that Day end; end; If N=0 Then Exit; if n1/N > 0.25 then Pflg:= true else Pflg:= false; // wenn n1/N grösser 25% dann Punkte berechnen // Outlanding Penalty (Distance reduction) // Anpassung an STM 2005 Ausschreibung Punkt 23.4 und 23.5 // Bei Konkurrenten die nicht auf einem Flugfeld landen ist im Fenster Flugleistung // des betreffenden Piloten im Feld "Zeichen:" der String AL einzutragen, // bei Piloten die nach erfüllter Aufgabe am Startflugplatz landen der String FP . for i:=0 to GetArrayLength(Pilots)-1 do begin if Pilots[i].finish <= 0 Then begin M := 0.0; If Pilots[i].Tag = 'FP' Then M := Pilots[i].dis / 100 * Bonus; If Pilots[i].Tag = 'AL' Then M := Pilots[i].dis / 100 * Malus; end; Pilots[i].dis := Pilots[i].dis + M; end; D0 := 0; for i:=0 to GetArrayLength(Pilots)-1 do // Find the highest Corrected distance begin If not Pilots[i].isHC Then begin If Pilots[i].tdis*CalcH(Pilots[i].Hcap) > D0 Then D0 := Pilots[i].tdis*CalcH(Pilots[i].Hcap); end; end; If D0 = 0 Then Exit; // Maximum available points for the Day PmaxDistance := (5*D0/1000)-250; // max. Pkt. für die Distanz (D0 = Meter) Pm := MinValue( PmaxDistance, 1000.0, 1000.0 ); // max. Punkte für den Tag // Day Factor F := 1.25* n1/N; If F>1 Then F := 1; for i:=0 to GetArrayLength(Pilots)-1 do begin Pilots[i].Points := Round( F*Pm*Pilots[i].tdis*CalcH(Pilots[i].Hcap)/D0 - Pilots[i].Penalty ); end; // Data which is presented in the score-sheets for i:=0 to GetArrayLength(Pilots)-1 do begin Pilots[i].sstart:=Pilots[i].tstart; // Abflugzeit Pilots[i].sfinish:=pilots[i].tfinish; // Endzeit Zeitablauf if (pilots[i].finish < pilots[i].tfinish) and (pilots[i].finish > 0) then pilots[i].sfinish := pilots[i].finish; // Endzeit Ende vor Zeitablauf if (pilots[i].phototime < pilots[i].tfinish) and (pilots[i].phototime > 0) then pilots[i].sfinish := pilots[i].phototime; // Endzeit bei Photolandung Pilots[i].sdis:=Pilots[i].tdis; // Distanz Pilots[i].sspeed:=0; // Geschwindigkeit = 0 (Distanzaufgaben haben keine Geschwindigkeit) end; // IF n1/N <= 0.25 THEN tx1 := '!!! Keine Wertung n1 kleiner gleich 25% von N !!!'; IF not Pflg THEN tx1 := '!!! n1 kleiner gleich 25% von N, Tag neutralisieren !!!'; // Info fields, also presented on the Score Sheets Info1 := 'Maximale Punkte: '+IntToStr(Round(Pm)); Info2 := 'Tagesfaktor = '+FormatFloat('0.000',F); Info4 := tx1; // Info4 := tx2+tx3; Info3 := 'N = '+IntToStr(Round(N))+'; n1 = '+IntToStr(Round(n1))+'; n2 = '+IntToStr(Round(n2))+'; 2/3 V0 = '+FormatFloat('0.0',(2.0/3.0*V0)*3.6); //+'; F = '+FormatFloat('0.000',F)+'; Pmax = '+IntToStr(Round(Pm)); end. //----------------------------------------------------------------------------------------------------------- [Starts]