Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2011, 23:35   #1
Milano
Новичок
Джуниор
 
Регистрация: 04.01.2011
Сообщений: 3
Вопрос проверить ввод данных

задача состоит в следующем: строку дд.мм.гггг преобразовать в строку дд месяц гггг

задачу решила на С
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char *a[]={"January","February","March","Apr il","May","June","Jule","August","S eptember","October","November","Dec ember"}; //массив месяцев
char *pt,s[20]; //строка
int i=0;
int b[3]; //массив, использую для расчета дней, месяца и года
printf("Vvedite daty:\n");
scanf("%s",s);
if(strlen(s)!=10 || (s[2] !='.' && s[5] != '.'))
{
printf("neverno\n"); 
return 1;
}
else
{
pt = strtok(s,"."); //делю строку этой функцией
while (pt!=NULL)//считываю данные
{
b[i]=atoi(pt);
i++;
pt = strtok(NULL,".");
}
if((b[0] > 0 && b[0] < 32)&&(b[1] > 0 && b[1] < 13)&&(b[2]>0))//проверка
{
printf("%2d %s %4d",b[0],a[b[1]-1],b[2]);
}
else
{
printf("neverno\n"); 
return 2;
}
}
printf("\n");
return 0;
}
но вот проблема: как проверить дни? ведь в каждом месяце то 30 дней то 31. и как проверить на високосный год. чтобы если верно, выводить февраль.
прошу помощи.
Milano вне форума Ответить с цитированием
Старый 06.01.2011, 23:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как проверить дни?
А зачем? Тебе же входная строка - дата. Чего ее проверять?
Впрочем можно описать массив
Код:
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
И переводя мм в число функцией atoi() проверять попадает ли он в рамки 1..12, если да то брать days[mm+1] где mm - номер месяца.
Насчет високосного
Код:
if(год%4) високосный
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.01.2011, 23:57   #3
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Только правильнее високосный год проверять так
if ((!(год%4) && (год%100)) || !(год%400))
Son Of Pain вне форума Ответить с цитированием
Старый 06.01.2011, 23:59   #4
Neser
Пользователь
 
Аватар для Neser
 
Регистрация: 26.12.2010
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Насчет високосного
Код:
if(год%4) високосный
Не все так просто коллега)
Чтобы компенсировать накопившуюся ошибку и избежать подобного смещения в будущем, в 1582 году римский папа Григорий XIII провёл реформу календаря. Чтобы средний календарный год лучше соответствовал солнечному, было решено изменить правило високосных лет. По-прежнему високосным оставался год, номер которого кратен четырём, но исключение делалось для тех, которые были кратны 100. Отныне такие годы были високосными только тогда, когда делились ещё и на 400.

Иными словами, год является високосным, если он кратен 4 и при этом не кратен 100, либо кратен 400. Год не является високосным, если он не кратен 4, либо кратен 100 и не кратен 400.

Последние годы столетий, оканчивающиеся на два нуля, в трёх случаях из четырёх не являются високосными. Так, годы 1700, 1800 и 1900 не были високосными, так как они кратны 100 и не кратны 400. Год 2000 — високосный, так как он кратен 400. 2100, 2200 и 2300 — невисокосные. В високосные годы вводится дополнительный день — 29 февраля.
KISS - Keep It Simple Stupid
Neser вне форума Ответить с цитированием
Старый 07.01.2011, 16:47   #5
Milano
Новичок
Джуниор
 
Регистрация: 04.01.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
И переводя мм в число функцией atoi() проверять попадает ли он в рамки 1..12, если да то брать days[mm+1] где mm - номер месяца.
Насчет високосного
Код:
if(год%4) високосный
можно прям код написать? что то у меня не проверяет никак
Milano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключение к сайту, ввод данных, отправка данных. Hichigo Общие вопросы C/C++ 0 20.07.2010 20:24
Как проверить наличие базы данных на сервере Oooleg Microsoft Office Excel 1 25.02.2010 18:11
Ввод данных. BlincAttack Общие вопросы .NET 5 16.10.2009 00:38
Ввод данных policedog Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 30.05.2009 21:53
Ввод данных Илья Кибель Помощь студентам 1 28.05.2008 11:12