## Как написать программу на языке Си: пошаговое руководство
**1. Анализ задачи:**
* **Определите задачу:** Что именно нужно вычислить? Какие данные для этого требуются?
* В данном случае: расстояние от школы до дома.
* **Разбейте задачу на подзадачи:** Какие вычисления нужно выполнить, чтобы получить результат?
* В данном случае:
1. Получить координаты школы.
2. Получить координаты дома.
3. Вычислить расстояние между ними.
* **Определите типы данных:** Какие данные будут использоваться в программе?
* В данном случае:
* Координаты школы (вероятно, два числа - широта и долгота).
* Координаты дома (вероятно, два числа - широта и долгота).
* Расстояние (вероятно, число).
* **Определите алгоритм:** Как именно будут выполняться вычисления?
* В данном случае:
1. Ввести координаты школы.
2. Ввести координаты дома.
3. Используйте формулу для вычисления расстояния между двумя точками на сфере (например, формулу Гаверсинуса).
4. Вывести результат.
**2. Выбор библиотек:**
* Для этой задачи не требуются специальные библиотеки, но вам может пригодиться библиотека `math.h` для математических функций (например, для вычисления квадратного корня).
**3. Написание программы:**
```c
#include <stdio.h>
#include <math.h>
#define EARTH_RADIUS 6371.0 // Радиус Земли в километрах
double calculate_distance(double school_latitude, double school_longitude,
double home_latitude, double home_longitude) {
// Преобразовать градусы в радианы
double school_latitude_rad = school_latitude * M_PI / 180.0;
double school_longitude_rad = school_longitude * M_PI / 180.0;
double home_latitude_rad = home_latitude * M_PI / 180.0;
double home_longitude_rad = home_longitude * M_PI / 180.0;
// Вычислить разницу в широте и долготе
double delta_latitude = home_latitude_rad - school_latitude_rad;
double delta_longitude = home_longitude_rad - school_longitude_rad;
// Вычислить квадрат расстояния
double a = sin(delta_latitude / 2) * sin(delta_latitude / 2) +
cos(school_latitude_rad) * cos(home_latitude_rad) *
sin(delta_longitude / 2) * sin(delta_longitude / 2);
// Вычислить расстояние
double distance = 2 * EARTH_RADIUS * atan2(sqrt(a), sqrt(1 - a));
return distance;
}
int main() {
// Ввод координат школы
double school_latitude, school_longitude;
printf("Введите координаты школы (широта, долгота): "
;
scanf("%lf %lf", &school_latitude, &school_longitude);
// Ввод координат дома
double home_latitude, home_longitude;
printf("Введите координаты дома (широта, долгота): "
;
scanf("%lf %lf", &home_latitude, &home_longitude);
// Вычислить расстояние
double distance = calculate_distance(school_latitude, school_longitude,
home_latitude, home_longitude);
// Вывести результат
printf("Расстояние от школы до дома: %.2f км\n", distance);
return 0;
}
```
**4. Объяснение кода:**
* **#include <stdio.h>:** Подключает стандартную библиотеку ввода-вывода, которая используется для работы с консолью.
* **#include <math.h>:** Подключает математическую библиотеку, которая используется для математических функций.
* **#define EARTH_RADIUS 6371.0:** Определяет константу `EARTH_RADIUS`, которая хранит значение радиуса Земли в километрах.
* **double calculate_distance(...):** Определяет функцию `calculate_distance`, которая принимает координаты школы и дома в качестве параметров и возвращает расстояние между ними.
* **//