Определить возраст человека на сегодняшний день (по году и месяцу рождения) - C (СИ)
Формулировка задачи:
ПОМОГИТЕ Создать программу на Си которая определяет возраст человека на сегодняшний день. Известны только год и месяц рождения( например 1990,1), если номер месяцев совпадает считать что прошел год. Ввод с клавиатуры запрещен!
Решение задачи: «Определить возраст человека на сегодняшний день (по году и месяцу рождения)»
textual
Листинг программы
// Есть замечательный инклюдник time.h, где есть функции для работы с датой
#include <time.h>
#include <stdio.h>
int age(int birth_year, int birth_month)
{
// Желательно в интернете ознакомиться с описанием функций time и localtime
int now_year, now_month;
time_t now = time(NULL); // Так выбирается текущее системное время.
struct tm *t_now; // В этой структуре все разбито на поля год, день, месяц и т.д
int res;
tm = localtime(&now); // Так заполняется эта структура
// Некоторые поля структуры tm иногда содержат данные не совсем в привычном виде
now_year = t_now->tm_year + 1900;
now_month = t_now->tm_mon + 1;
// Прошло полных лет, скобки можно не ставить это просто для восприятия
res = (now_year - 1) - birth_year;
// Нынешний год неполный, сравниваем месяц
if(now_month >= birth_month) res ++;
return res;
}
// С клавиатуры нельзя - возьмем из командной строки
// Все проверки данных опускаем
// Пример: age 4 1981
int main(int argc, char *argv[])
{
int year, month;
sscanf(argv[1], "%d", &month);
sscanf(argv[2], "%d", &year);
printf("age is %d years\n", age(year, month));
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: time.h и stdio.h
- Определяется функция age, которая принимает два аргумента типа int - год и месяц рождения.
- Внутри функции объявляются следующие переменные: now_year, now_month, res, t_now, tm.
- Переменная now инициализируется вызовом функции time(NULL). Это позволяет получить текущее системное время.
- Вызывается функция localtime, которая преобразует системное время в структуру tm, содержащую поля год, месяц, день и т.д.
- Инициализируются переменные now_year и now_month, используя поля структуры tm.
- Переменная res инициализируется как разница между текущим годом (now_year) и годом рождения (birth_year), уменьшенным на 1.
- Если текущий месяц (now_month) больше или равен месяцу рождения (birth_month), то к переменной res добавляется 1.
- Возвращается значение переменной res.
- В функции main считываются два аргумента с командной строки - месяц и год.
- Вызывается функция age с переданными аргументами.
- Результат выводится на экран с помощью функции printf.
- Функция main возвращает 0, что означает успешное завершение работы программы.