Как я могу преобразовать этот код 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, который представляет собой готовый класс пользовательского интерфейса, чтобы показать и выбрать дату. Смотрите документацию.

Другие вопросы по тегам