مسابقهٔ برنامه‌نویسی شرکت متراژ در نمایشگاه کار دانشگاه صنعتی شریف

محاسبهٔ فاصلهٔ خانه فربد با خانهٔ همسایگانش


فربد طول و عرض جغرافیایی خانه‌اش را می‌داند. فربد به متراژ رفته و طول و عرض جغرافیایی املاک همسایگانش را هم می‌بیند. به فربد کمک کنید تا بتواند برمبنای طول و عرض جغرافیایی خانهٔ خود و همسایگانش فاصلهٔ خانهٔ خود با هر کدام از آن‌ها را برحسب کیلومتر حساب کند.

عددی که به عنوان عرض جغرافیایی یا Latitudes بیان می‌شود عددی در بازهٔ ۰ تا ۹۰ و عددی که به عنوان طول جغرافیایی یا Longitudes بیان می‌شود عددی در بازهٔ ۰ تا ۱۸۰ است. در این سوال از امکان اعشاری بودن این اعداد صرف نظر کنید.

برای محاسبهٔ فاصلهٔ دو نقطه از کرهٔ زمین برحسب طول و عرض جغرافیایی از الگوریتم haversine استفاده کنید.

a = sin²(Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin²(Δλ/2)
c = 2 ⋅ atan2( √a, √(1−a) )
d = R ⋅ c
Plain text

در فرمول بالا φ برابر عرض جغرافیایی یا Latitudes و λ برابر طول جغرافیایی یا Longitudes هست.

پیاده‌سازی این الگوریتم در پایتون برای یک مثال خاص به این شکل خواهد بود:

from math import sin, cos, sqrt, atan2, radians

# approximate radius of earth in km
R = 6373.0

# example lat and long
lat1 = radians(52.2296756)
lon1 = radians(21.0122287)
lat2 = radians(52.406374)
lon2 = radians(16.9251681)

dlon = lon2 - lon1
dlat = lat2 - lat1

a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
c = 2 * atan2(sqrt(a), sqrt(1 - a))

distance = R * c
Python

ورودی🔗

در خط اول ورودی طول و عرض جغرافیایی خانهٔ فربد را بگیرید. این دو عدد با یک فاصله از هم جدا شده.

در خط سوم عدد n به معنی تعداد املاک موجود را از کاربر بگیرید.

در n خط بعد در هر خط، اطلاعات یک ملک را از کاربر بگیرید.

اطلاعات هر ملک شامل شمارهٔ id خانه، طول جغرافیایی ملک، عرض جغرافیایی ملک و مساحت ملک است.

خروجی🔗

خروجی برنامه باید در n خط چاپ شود.

در هر خط از خروجی شمارهٔ id خانه و فاصله خانهٔ فربد با آن خانه که با یک فاصله از هم جدا شدند چاپ شود. دقت کنید که ترتیب چاپ شدن فاصله‌ها در هر خط به همان ترتیبی باشد که کاربر به برنامه ورودی داده‌است یعنی لازم نیست برحسب id خانه‌ها مرتب شود. همچنین اعدادی که در خروجی چاپ می‌کنید با دو رقم اعشار باشد و گرد شده باشد.

مثال🔗

ورودی نمونه ۱🔗

170 20
6
3 160 85 40
1 175 25 70
4 160 86 40
2 176 25 100
5 169 21 400
6 40 10 300
Plain text

خروجی نمونه ۱🔗

3 7238.69
1 756.99
4 7348.11
2 830.09
5 152.4
6 13611.73
Plain text
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.