1. C++ / Говнокод #4924

    +173

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    #include <stdio.h>
    
    int leap(int);
    void instruct(void);
    
    int main(void) {
    
        int year, month, day, number;
        int jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov;
    
        jan = 31; feb = 28; mar = 31; apr = 30; may = 31; jun = 30;
        jul = 31; aug = 31; sep = 30; oct = 31; nov = 30;
    
        instruct();
        printf("\nВведите дату в формате DD.MM.YYYY: ");
        scanf("%d.%d.%d", &day, &month , &year);
    
        if (leap(year) == 1) {
            printf("\nГод високосный.\n");
            feb = 29;
        }
        if (leap(year) == 0)
            printf("\nГод не високосный.\n");
    
        switch (month) {
        case  1:
            number = day;
            break;
        case  2:
            number = jan + day;
            break;
        case  3:
            number = jan + feb + day;
            break;
        case  4:
            number = jan + feb + mar + day;
            break;
        case  5:
            number = jan + feb + mar + apr + day;
            break;
        case  6:
            number = jan + feb + mar + apr + may + day;
            break;
        case  7:
            number = jan + feb + mar + apr + may + jun + day;
            break;
        case  8:
            number = jan + feb + mar + apr + may + jun + jul + day;
            break;
        case  9:
            number = jan + feb + mar + apr + may + jun + jul + aug + day;
            break;
        case 10:
            number = jan + feb + mar + apr + may + jun + jul + aug + sep + day;
            break;
        case 11:
            number = jan + feb + mar + apr + may + jun + jul + aug + sep + oct + day;
            break;
        case 12:
            number = jan + feb + mar + apr + may + jun + jul + aug + sep + oct + nov + day;
            break;
        default:
            number = -1;
        }
    
        printf("%d.%d.%d  -  это день номер %d этого года.\n", day, month , year, number);
        return(0);
    }
    
    void instruct(void) {
        printf("Программа предназначена для определения дня года по заданной дате.\n");
        }
    
    int leap(int year) {
        if (year % 400 == 0)
            return(1);
        if (year % 100 == 0)
            return(0);
        if (year % 4 == 0)
            return(1);
        return(0);
    }

    Как вам такой свитч? а?)

    Запостил: Bkmz, 15 Декабря 2010

    Комментарии (13) RSS

    • это день номер -1 этого года.
      Ответить
    • очередная говнолаба?
      Ответить
    • забыл декабрь? 13-ю зарплату не получишь!

      /*
      ...
      */
      const int month_in_year = 12;
      const int feb = 1;
      int days_month[month_in_year] = {31,28,31,30,31,30,31,31,30,31,30,31};
      /*
      ...
      */
      days_month[feb] = (year%4 == 0 && (year %100 != 0 || year%400 == 0))? 29:28;
      printf("\nГод%sвисокосный.\n", (days_month[feb]==29)? " " : " не ");
                      
      if (month >= 1 || month <= month_in_year) {
              number= day;
              for (int i=0; i<month-1; i++)
                      number+= days_month[i];
      }
      else {
              printf("\nhttp://ru.wikipedia.org/wiki/Григорианский_календарь\n");
      /*
         goto exit(-1) or while(1)
      */    
      }           
      /*
      ...
      */
      Ответить
      • Кол-во дней в декабре не требуется для определения номера дня, так как это последний месяц в году. Т.е. если прибавить декабрь дата уже будет на следующий год. Ферштейн ?
        Ответить
      • За "http://ru.wikipedia.org/wiki/Григорианский_календарь" зачёт
        А код-то ваш подсчитает только количество дней в месяцах предшествующих месяцу даты, которую ввели. Он не выполнит то, что в ГК.
        Ответить
      • Круто! Отдельно порадовал учёт правила пропуска трёх високосных лет за четыре века. Программа явно рассчитана на тысячелетия!
        Ответить
        • на тысячелетия, не на тысячелетия, однако ж, дату любую можно ввести.
          Ответить
    • Я абсолютен и объективен!
      Ответить

    Добавить комментарий