Преобразовать дату; перевод с C++ - C (СИ)
Формулировка задачи:
Я студент 1ого курса, получил задание преобразовать дату но нужно на языке с, может кто окажет помощь, буду очень благодарен
#include <iostream>
#include <cstdlib>
int main()
{
int day;
int month;
int year;
bool valid = true;
std::cout << "Enter day: ";
std::cin >> day;
std::cout << "Enter month: ";
std::cin >> month;
std::cout << "Enter year: ";
std::cin >> year;
if (month >= 1 && month <= 12)
{
if (day >= 1 && day <= 31)
{
if (!(year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)))
{
if (month == 2 && day > 28)
valid = false;
}
else
{
if (month == 2 && day > 29)
valid = false;
}
}
else
valid = false;
}
else
valid = false;
if (!valid)
std::cout << "Input error!" << std::endl;
else
{
std::cout << day << " ";
switch (month)
{
case 1:
std::cout << "yanvarya ";
break;
case 2:
std::cout << "fevralya ";
break;
case 3:
std::cout << "marta ";
break;
case 4:
std::cout << "aprelya ";
break;
case 5:
std::cout << "maya ";
break;
case 6:
std::cout << "iyunya ";
break;
case 7:
std::cout << "iyulya ";
break;
case 8:
std::cout << "avgusta ";
break;
case 9:
std::cout << "sentyabrya ";
break;
case 10:
std::cout << "octyabrya ";
break;
case 11:
std::cout << "noyabrya ";
break;
case 12:
std::cout << "decabrya ";
break;
}
std::cout << year << "g." << std::endl;
}
system("pause");
return 0;
}Решение задачи: «Преобразовать дату; перевод с C++»
textual
Листинг программы
#include <stdio.h>
#include <stdbool.h>
int main() {
const char* MonthsNames[] = {"January", "February", "March", "April",
"May", "June", "July", "August", "September",
"October", "November", "December"};
const int MonthsDays[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int day, month, year;
bool valid = true;
printf("day: ");
scanf("%d", &day);
printf("month: ");
scanf("%d", &month);
printf("year: ");
scanf("%d", &year);
--month;
valid = (0 <= month) && (month < 12)
&& (0 < day) && (day <= MonthsDays[month]);
if (valid && (month == 1)) {
valid = (day <= MonthsDays[month]
- !(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)));
}
if (valid) {
printf("%d %s %d.y\n", day, MonthsNames[month], year);
}
else {
fprintf(stderr, "input error!");
}
return 0;
}
Объяснение кода листинга программы
- Предоставлен код на языке C.
- Код включает объявления двух массивов:
MonthsNames[]иMonthsDays[]. - Массив
MonthsNames[]содержит названия месяцев. - Массив
MonthsDays[]содержит количество дней в каждом месяце. - В коде объявлены три переменные:
day,monthиyear, которые используются для ввода даты. - Переменная
validинициализируется значениемtrueи используется для проверки корректности введенных данных. - Код запрашивает у пользователя ввод дня, месяца и года.
- Значение месяца уменьшается на единицу, чтобы соответствовать нумерации с 0.
- Переменная
validпроверяется на соответствие условиям: месяц в диапазоне от 0 до 11, день в диапазоне от 1 до количества дней в месяце, и год не должен быть високосным для месяцев, которые имеют 28 или 29 дней. - Если все условия выполняются, код проверяет, является ли введенный месяц февралем.
- Если месяц - февраль, код проверяет, является ли год високосным и корректирует количество дней в феврале, если это необходимо.
- Если все проверки пройдены успешно, код выводит введенную дату в формате
день месяц.год. - Если обнаружена ошибка ввода, код выводит сообщение об ошибке в стандартный поток ошибок.
- Код возвращает 0, завершая выполнение программы.