2010-05-20 1 views
2
#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, и мне это нужно для проекта какао. этот код выводит календарь как непрерывный ряд строк до тех пор, пока последний месяц не ударит. soo вместо создания календаря в терминале, как я могу ввести календарь, серия NSMatrix зависит от введенного года.Как преобразовать этот код C Calendaer в синтаксис Objective-C и работать с матрицами

надежда Сомон может помочь мне с этим, благодаря или каждый помогает (вы быть в титрах готовой программы) :) (календарь лишь небольшая часть программы я решений и является одним из важных детали !!)

ответ

2

Я хотел бы предложить стандартный класс NSCalendar, который предоставляет это и многие другие функции.

Например, чтобы вычислить количество дней в месяц (или неделю) для данной даты, то вы можете использовать следующий метод:

- (NSRange)rangeOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date 

Некоторые классы, которые также могут быть полезны: NSDateComponents и NSDateFormatter.

Следует также отметить, что с код полностью действует в Objective-C, так что вы программа должна быть в состоянии работать нормально (кроме вас, возможно, придется изменить свой вход)

+0

Я смотрю на этот класс. но то, что они ищут, - это код, который нужно преобразовать в цель-c/какао. i can not just go NSCalender * calender = [[nscalendar alloc] init]; [self drawCalender: [NSCalender calenderFromClass: calender]]; Я должен использовать NSCalender, только полезно выбрать, какую дату вы используете, например, gregorian, julian или что-то еще. чем вы должны использовать nsdate для назначения какой даты вы используете из типа календаря. чем вы должны рассчитать, сколько дней в неделю и все такое. и вот что делает этот код, который у меня есть сейчас. как я могу преобразовать это в Objective-C –

0

Objective-C является надстройкой С. Так вы можете просто использовать свой код, по крайней мере, логическую часть. Конечно, вам нужно преобразовать вход (scanf) и выход (printf) для вызовов GUI.

Тем не менее, не изобретайте колесо. Вы можете использовать NSDatePicker, который является готовым интерфейсом для отображения и выбора даты. См. documentation.

+0

Я знаю, что objC является надмножеством c. Я не могу использовать выбор даты для того, что я собираюсь использовать календарь. Я все знаю, что я могу использовать NSDateComponets и NSDateFormatter, но я хочу использовать этот код с матрицей. soo, пожалуйста, ответьте на мой вопрос, не дайте мне способы создать каландр, используя другие вещи, с которыми я работал. –