Top.Mail.Ru
Ответы

Задача про температуру

Задача:
Напишите программу, которая запрашивает у пользователя ввод значения температуры
по Фаренгейту. Программа должна считывать значение температуры
как число типа double и передавать его в виде аргумента пользовательской функции
по имени Temperatures (). Эта функция должна вычислять эквивалентные
значения температуры 110 Цельсию и по Кельвину и отображать на экране
все три значения температуры с точностью до двух позиций справа от десятичной
точки. Функция должна идентифицировать каждое значение символом соответствующей
температурной шкалы. Вот формула перевода температуры по
Фаренгейту в температуру по Цельсию:

Температура по Цельсию = 5.0 / 9.0 х ( температура по Фаренгейту - 32.0)

В шкале Кельвина, которая обычно применяется в науке, О представляет абсолютный
нуль, т. е. минимальный предел возможных температур. Формула перевода
температуры по Цельсию в температуру по Фаренгейту имеет вид:

Температура по Кельвину = температура по Цельсию + 273. 1

Функция Temperatures () должна использовать const для создания символических
представлений трех констант, которые участвуют в преобразованиях. Чтобы
предоставить пользователю возможность многократного ввода значений температуры,
в функции main () должен быть организован цикл который завершается
при вводе символа q или другого нечислового значения. Воспользуйтесь тем фактом,
что функция scanf () возвращает количество прочитанных ею элементов,
поэтому она возвратит 1, если прочитает число, но не будет возвращать 1, когда
пользователь введет q. Операция == выполняет проверку на равенство, так что
ее можно применять для сравнения возвращаемого значения scanf () с 1.

Как я "почти" решил:

#include
#include

void Temperatures(double, double, double);

int main()
{

SetConsoleCP(1251);
SetConsoleOutputCP(1251);

const double fah, ces, kel;
printf("Введите значение температуры по Фаренгейту: ");
scanf("%f", &fah);
Temperatures(fah, ces, kel);
while (fah == ) // не знаю как организовать цикл при вводе нечислового
// значения
{
ces = 5.0 / 9.0 * (fah - 32.0);
kel = ces + 273.16;
printf("Введите значение температуры по Фаренгейту: ");
scanf("%f", &fah);
printf("Температура по Фаренгейту равна %.2f\n", fah);
printf("Температура по Цельсию равна %.2f\n", ces);
printf("Температура по Кельвину равна %.2f\n", kel);
}

getchar();
getchar();
return 0;
}
void Temperatures(double fah, double ces, double kel)
{
ces = 5.0 / 9.0 * (fah - 32.0);
kel = ces + 273.16;
return 0;
}
Подскажите, пожалуйста, как правильно решить задачу, очень прошу

По дате
По рейтингу
Аватар пользователя
Новичок
6лет
Аватар пользователя
Просветленный
6лет

Не, это слишком сложно для меня. Я не справлюсь #сарказм

Аватар пользователя
Просветленный
6лет

> не знаю как организовать цикл при вводе нечислового значения

Есть два варианта:
- сначала читать строку целиком (gets), потом из строки считывать число (sscanf). Функция atof, рекомендуемая в предыдущем ответе, не позволяет отличить ошибку от нулевого значения.
- проверять результат scanf. scanf возвращает число прочитанных переменных.

При втором способе scanf не будет считывать из входного потока другие символы, если они введены вместо числа. Поэтому перед повторным вводом надо очистить входной поток. Не знаю, как это сделать на Си. Может при помощи fread или gets.

Аватар пользователя
Просветленный
6лет

Перемести вывод в функцию А то у тебя функция работает впустую по сути и функция не должна ничего возвращать, даже 0.
Вообще можно сделать так, вводишь в main значения по фаренгейту и передаёшь значение в функцию Temperatures. Затем там пересчитываешь в цельсий и кельвины и выводишь там же.
А по поводу ввода, можно вводить строку и затем преобразовывать во float при помощи функции atof