Funkstreckenberechnung (Pascal) program Funkstrecken (input, output, Funkdatei); const Pi = 3.1415926536; var SLG, SLM, SBG, SBM, ELG, ELM, EBG, EBM: integer; (*Sendelängengrad, Sendelängenminute, Sendebreitengrad, Sendebreitenminute*) (*Empfglängengrad, Empfglängenminute, Empfgbreitengrad, Empfgbreitenminute*) SAZ, SLP, SBP, EAZ, ELP, EBP, Zwischen, Distanz: real; (*Senderichtazimutwinkel, Sendelängenbogenmaß, Sendebreitenbogenmaß*) (*Empfgrichtazimutwinkel, Empfglängenbogenmaß, Empfgbreitenbogenmaß*) (*Azimutzwischenrechenwert, Entfernung*) SLR, SBR, ELR, EBR, Speicher, Eigen: char; (*Sendelaengenrichtung, Sendebreitenrichtung, Empfangslaengenrichtung, Empfangsbreitenrichtung*) (*Flag zum Anhängen oder Überschreiben, Empfangsstandortveränderungs- und Endeflag*) Empfangsort, Sendeort: string[20]; (*Klarbezeichnungen*) Funkdatei: text; (*Die Datei zum Ausdrucken*) Verkehrt: boolean; (*Azimutplausibilität*) begin Eigen := 'j'; (*Flag zur Veraenderung der Empfangsposition*) writeln('Möchten Sie die neuen Daten an die alten Daten anhängen [a] oder'); writeln('möchten Sie mit den neuen Daten die alten überschreiben [u] ????'); repeat read(Speicher) until Speicher in ['a','u']; if Speicher = 'u' then rewrite(Funkdatei) else append(Funkdatei); writeln('Bitte geben Sie die nun abgefragten geografischen Koordinaten nach'); writeln('der UER-Notation ein. z. B. für Mönchengladbach als Längenposition'); writeln('6e16 und als Breitenposition 51n10, also immer Grad, Himmelsricht-'); writeln('ung und Minute hintereinander ohne Leerschritt, danach Returntaste'); writeln('Die Ausgaben der Richtazimut-Winkel (°) erfolgen im Uhrzeigersinn.'); while Eigen<>'e' do begin if Eigen='j' then begin readln; (*Return-Vernichter*) writeln('Name des Empfangsorts?'); read (Empfangsort); repeat writeln('Empfangslängenposition?'); read(ELG,ELR,ELM) until ELR in ['e','w']; if ELR = 'w' then begin ELG := ELG*(-1); (*Richtungsumkehrung*) ELM := ELM*(-1) end; repeat writeln('Empfangsbreitenposition?'); read(EBG,EBR,EBM) until EBR in ['n','s']; if EBR = 's' then begin EBG := EBG*(-1); (*Richtungsumkehrung*) EBM := EBM*(-1) end end; (*Beginn der Sendeorteingabe*) readln; (*Returnvernichter*) writeln('Name des Sendeorts?'); read (Sendeort); repeat writeln('Sendelängenposition?'); read(SLG,SLR,SLM) until SLR in ['e','w']; if SLR = 'w' then begin SLG := SLG*(-1); (*Richtungsumkehrung*) SLM := SLM*(-1) end; repeat writeln('Sendebreitenposition?'); read(SBG,SBR,SBM) until SBR in ['n','s']; if SBR = 's' then begin SBG := SBG*(-1); (*Richtungsumkehrung*) SBM := SBM*(-1) end; (*Umrechnung in das Bogenmass*) ELP := (ELG+ELM/60)*Pi/180; EBP := (EBG+EBM/60)*Pi/180; SLP := (SLG+SLM/60)*Pi/180; SBP := (SBG+SBM/60)*Pi/180; (*Beginn Haupergebnisrechnung*) Distanz := cos(SLP-ELP)* cos(SBP) * cos(EBP) + sin(SBP) * sin(EBP); Zwischen := (sin(SLP)*cos(ELP)-cos(SLP)*sin(ELP))*cos(EBP)*cos(SBP); EAZ := 180/Pi*arctan(Zwischen/(sin(SBP) - Distanz * sin(EBP))); SAZ := 180/Pi*arctan(Zwischen/(sin(SBP) * Distanz - sin(EBP))); Distanz := (20000/Pi)*(Pi/2- arctan(Distanz/sqrt(1-sqr(Distanz)))); (*Winkelplausibilitätsprüfung*) Verkehrt := false; if SBP 0) and (SAZ > 0) then Verkehrt:=true; if (EAZ>180) and (SAZ>180) and (EAZ<360) and (SAZ<360) then Verkehrt:=true; if Verkehrt then if abs(SBP) ',Sendeort,abs(SLG):4,SLR,abs(SLM):2); write (Funkdatei,abs(SBG):3,SBR,abs(SBM):2); writeln(Funkdatei); write (Funkdatei,'Empfangsazimut ',EAZ:3:0,'³ '); write (Funkdatei,'Sendeazimut ',SAZ:3:0,'³ ','Distanz ',Distanz:6:0,'km.'); writeln(Funkdatei); (*Start der Bildschirmausgabe*) writeln; write (Empfangsort,abs(ELG):4,ELR,abs(ELM):2,abs(EBG):3,EBR,abs(EBM):2); write (' <=> ',Sendeort,abs(SLG):4,SLR,abs(SLM):2,abs(SBG):3,SBR,abs(SBM):2); writeln; write ('Empfangsazimut ',EAZ:3:0,'³ '); write ('Sendeazimut ',SAZ:3:0,'³ ','Distanz ',Distanz:6:0,'km.'); writeln; write ('Empfangsstandort wechseln? Ja [j], Nein [n], Ende vom Programm [e]'); repeat read(Eigen) until Eigen in ['j','n','e'] end; writeln('Das Programm ist nun beendet. Sie können nun unter UNIX ihre'); writeln('"Funkdatei" ausdrucken.') end.