Завершил работу с кодом 0
#include <stdio.h>
#include <locale.h>
#include <math.h>
void gradus(double hours, double minutes) {
if (hours > 11) {
hours = hours - 12; //перевод в 12-ти часовой формат
}
double all_minutes = hours * 60 + minutes; //общее количество минут
double hour_hand_in_degrees, minute_hand_in_degrees;
hour_hand_in_degrees = all_minutes * 0.5; //считаем градусы, 1 минута=0.5гр
minute_hand_in_degrees = minutes * 6; //минуты в градусах
double modul = abs(hour_hand_in_degrees - minute_hand_in_degrees);
double final_time = 0; // время в секундах
while ((modul > 45.4) || (modul < 44.5)) {
hour_hand_in_degrees += 0.0083; //градусы часовой стрелки в секунду
minute_hand_in_degrees += 0.1; //градусы минутной стрелки в секунду
modul = abs(hour_hand_in_degrees - minute_hand_in_degrees);
if (modul > 360) {
modul -= 360;
}
final_time += 1; //шаг в одну секунду
}
printf("Через %f минут\n", final_time / 60); //перевод в минуты
}
int main(double hours, double minutes) {
gradus(hours, minutes);
setlocale(LC_ALL, "RUS");
printf("Введите часы: ");
scanf_s("%lf", &hours);
printf("Введите минуты: ");
scanf_s("%lf", &minutes);
}
Изначально программа была написана с использованием только одной функции main, но требуется всю смысловую часть заключить в отдельную функцию, а ввод, вывод и вызов функции уже в main. Так я и сделал, но теперь после ввода значений программа ничего не выводит, а выводит код 0, ну и какие-то символы и непонятное число. Изначальный код выглядел так и работал исправно:
#include <stdio.h>
#include <locale.h>
#include <math.h>
int main() {
setlocale(LC_ALL, "RUS");
double hours, minutes;
printf("Введите часы: ");
scanf_s("%lf", &hours);
printf("Введите минуты: ");
scanf_s("%lf", &minutes);
if (hours > 11) {
hours = hours - 12; //перевод в 12-ти часовой формат
}
double all_minutes = hours * 60 + minutes; //общее количество минут
double hour_hand_in_degrees, minute_hand_in_degrees;
hour_hand_in_degrees = all_minutes * 0.5; //считаем градусы, 1 минута=0.5гр
minute_hand_in_degrees = minutes * 6; //минуты в градусах
double modul = abs(hour_hand_in_degrees - minute_hand_in_degrees);
double final_time = 0; // время в секундах
while ((modul > 45.4) || (modul < 44.5)) {
hour_hand_in_degrees += 0.0083; //градусы часовой стрелки в секунду
minute_hand_in_degrees += 0.1; //градусы минутной стрелки в секунду
modul = abs(hour_hand_in_degrees - minute_hand_in_degrees);
if (modul > 360) {
modul -= 360;
}
final_time += 1; //шаг в одну секунду
}
printf("Через %f минут\n", final_time / 60); //перевод в минуты
return 0;
}
Программа принимает значения часов и минут и вычисляет, через какое время угол между стрелками составит 45 градусов.
Ответы (1 шт):
1-й ужас — int main(double hours, double minutes) {
Сигнатура main только int main() или int main(int, char**). Никаких double.
Так что как оно вообще скомпилировалось — непонятно. И что туда передано. Вы бы сами интереса для вывели эти значения на консоль и посмотрели...
Ну и ужас 2 -- вы сначала что-то вычисляете, а потом уже вводите данные. Вот и получаете какой-то странный вывод в первой строке (см. внимательно!), а потом, после ввода данные у вас же программа просто заканчивается...
Кракозябры у вас потому, что вы сначала вызываете функцию, и только после того, как она выводит свой вывод на консоль, определяете локаль.
gradus(hours, minutes);
setlocale(LC_ALL, "RUS");
Словом, продемонстрировано полное непонимание, из которого заключаю, что первоначальный код писали не вы...
int main() {
double hours, minutes;
setlocale(LC_ALL, "RUS");
printf("Введите часы: ");
scanf_s("%lf", &hours);
printf("Введите минуты: ");
scanf_s("%lf", &minutes);
gradus(hours, minutes);
}

