Перевод из минут и секунд в секунды - C (СИ)
Формулировка задачи:
Задача: Напишите программу, которая переводит время из минут и секунд в секунды. Программа должна проверять правильность введенных пользователем данных и в случае, если данные неверные, выводить соответствующее сообщение.
Код:
Возможно ли сделать проверку на количество знаков после запятой и как? А также посмотрите, почему получаются такие результаты:
// Программа перевода времени из минут и секунд в секунды
// Прикрепление заголовочных файлов
#include <stdio.h> // Подключение функций стандартного ввода и вывода
#include <conio.h> // Подключение заголовочного файла, необходим для функции getch()
#include <locale.h> // Подключение заголовочного файла, необходим для локализации русского языка
void main() // Главная функция
{
float t; // Объявление переменной вещественного типа, обозначающую время в минутах и секундах
int ts, min, sek; // Объявление переменных целого типа, обозначающие время в секундах, число минут и число секунд соответственно
setlocale(0 , "rus"); // Добавление возможности вывода информации на русском языке
printf("\nВведите время (минут,секунд). Учтите, что величина должна быть положительной\n"); // Приглашение для пользователя с просьбой ввести время в минутах и секундах
scanf("%f", &t); // Ввод времени в минутах и секундах в переменную "t"
while (t < 0)
{
printf ("Ошибка! Время не может быть отрицательным. Введите время снова:\n");
scanf("%f", &t);
}
min = t; // Переменной "min" присваивается значение "t", но только целую часть (т.е. число минут)
sek = (t - min) * 100; // Из минут и секунд вычитаются минуты, остаются только секунды (число секунд), значение помещается в переменную "sek"
while (sek > 59)
{
printf ("Ошибка! Секунд не может быть больше 59. Введите время снова:\n");
scanf("%f", &t); // Ввод времени в минутах и секундах в переменную "t"
while (t < 0)
{
printf ("Ошибка! Время не может быть отрицательным. Введите время снова:\n");
scanf("%f", &t);
}
min = t; // Переменной "min" присваивается значение "t", но только целая часть (т.е. число минут)
sek = (t - min) * 100;
}
ts = min*60 + sek; // Вычисление секунд (окончательный результат) с помощью формулы и его помещение в переменную "ts"
printf("%i мин %i сек = %i сек", min, sek, ts); // Вывод результата программы (время в секундах) на экран
getch(); // Пауза, необходимая для ознакомления с результатом работы программы
}Решение задачи: «Перевод из минут и секунд в секунды»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
int main(void) {
double t;
printf("Time [min.sec]: ");
if ( scanf("%lf", &t) != 1 ) {
printf("Wrong input!\n");
return 1;
}
else if ( t < 0. ) {
printf("Negative value!\n");
return 1;
}
else {
double m, s;
s = modf(t, &m);
if ( s >= 0.6 ) {
printf("Wrong seconds value!\n");
return 1;
}
printf("Time in seconds: %.0f\n", s * 100 + m * 60);
}
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с плавающей точкой и для ввода-вывода данных
- Объявляем переменную типа double для хранения значения времени t
- Выводим приглашение для ввода времени в формате
мин.сек - Считываем значение времени из стандартного ввода с помощью функции scanf и сохраняем его в переменную t
- Проверяем корректность ввода: если scanf вернул значение меньше 1, значит ввод был некорректным и выводим сообщение об ошибке
- Проверяем, что значение времени t неотрицательное. Если оно меньше нуля, выводим сообщение об ошибке
- В случае корректного ввода времени, объявляем две переменные типа double: m для хранения минут и s для хранения секунд
- С помощью функции modf разбиваем значение t на минуты и секунды и сохраняем их в переменные m и s соответственно
- Проверяем, что значение секунд s не превышает 0.6 (т.е. 60 секунд). Если превышает, выводим сообщение об ошибке
- Выводим время в секундах, перемножая значение s на 100 и значение m на 60 и добавляя их вместе
- Завершаем работу программы