Как я могу преобразовать этот код C Calendaer в синтаксис Objective C и заставить его работать с матрицами
#define TRUE 1
#define FALSE 0
int days_in_month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char *months[]=
{
" ",
"\n\n\nJanuary",
"\n\n\nFebruary",
"\n\n\nMarch",
"\n\n\nApril",
"\n\n\nMay",
"\n\n\nJune",
"\n\n\nJuly",
"\n\n\nAugust",
"\n\n\nSeptember",
"\n\n\nOctober",
"\n\n\nNovember",
"\n\n\nDecember"
};
int inputyear(void)
{
int year;
printf("Please enter a year (example: 1999) : ");
scanf("%d", &year);
return year;
}
int determinedaycode(int year)
{
int daycode;
int d1, d2, d3;
d1 = (year - 1.)/ 4.0;
d2 = (year - 1.)/ 100.;
d3 = (year - 1.)/ 400.;
daycode = (year + d1 - d2 + d3) %7;
return daycode;
}
int determineleapyear(int year)
{
if(year% 4 == FALSE && year%100 != FALSE || year%400 == FALSE)
{
days_in_month[2] = 29;
return TRUE;
}
else
{
days_in_month[2] = 28;
return FALSE;
}
}
void calendar(int year, int daycode)
{
int month, day;
for ( month = 1; month <= 12; month++ )
{
printf("%s", months[month]);
printf("\n\nSun Mon Tue Wed Thu Fri Sat\n" );
// Correct the position for the first date
for ( day = 1; day <= 1 + daycode * 5; day++ )
{
printf(" ");
}
// Print all the dates for one month
for ( day = 1; day <= days_in_month[month]; day++ )
{
printf("%2d", day );
// Is day before Sat? Else start next line Sun.
if ( ( day + daycode ) % 7 > 0 )
printf(" " );
else
printf("\n " );
}
// Set position for next month
daycode = ( daycode + days_in_month[month] ) % 7;
}
}
int main(void)
{
int year, daycode, leapyear;
year = inputyear();
daycode = determinedaycode(year);
determineleapyear(year);
calendar(year, daycode);
printf("\n");
}
Этот код генерирует календарь введенного года в терминале. мой вопрос, как я могу преобразовать это в синтаксис Objective-C вместо этого синтаксиса C. Я уверен, что это простой процесс, но я довольно новичок в достижении цели - мне он нужен для проекта по какао. этот код выводит календарь в виде непрерывной последовательности строк до последнего месяца. Так, вместо создания календаря в терминале, как я могу ввести календарь, серия NSMatrixes зависит от предполагаемого года.
надеюсь, что кто-то может помочь мне с этим спасибо или каждый помогает (вы будете в кредитах готовой программы):) (календарь это лишь небольшая часть программы, которую я делаю, и это одна из важных частей!!)
2 ответа
Я бы предложил посмотреть на стандарт NSCalendar
класс, который предоставляет эту и многие другие функции.
Например, чтобы рассчитать количество дней в месяце (или неделе) для данной даты, вы можете использовать следующий метод:
- (NSRange)rangeOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date
Некоторые классы, которые также могут быть полезны: NSDateComponents
а также NSDateFormatter
,
Также обратите внимание, что код c полностью действителен для target-c, поэтому ваша программа должна иметь возможность нормально работать (за исключением того, что вам может потребоваться изменить ввод)
Objective-C является строгим надмножеством C. Поэтому вы можете просто использовать свой код, по крайней мере, логическую часть. Конечно, вам нужно преобразовать вход (scanf
) и вывод (printf
) для вызовов GUI.
Тем не менее, не изобретайте колесо. Ты можешь использовать NSDatePicker
, который представляет собой готовый класс пользовательского интерфейса, чтобы показать и выбрать дату. Смотрите документацию.