1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

С Пасхой!

Тема в разделе "ПОЗДРАВЛЕНИЯ", создана пользователем Mikl___, 8 апр 2018.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    2.775
    2476950.gif
    Сердечно поздравляю форумчан! Счастья всем!
     
    hiddy, CKAP, Minzdrav и 5 другим нравится это.
  2. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    507
    И я присоединяюсь к поздравлениям! Всем счастья и всех благ:angel:

    PS

    Как и всегда солнечно...)
     
    CKAP нравится это.
  3. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    126
    Всех с прошедшей пасхой.
    Код (C):
    1. /*=====================================================
    2. Дата православной и католической пасхи.
    3. По формуле Карла Фридриха Гаусса (1777-1855).
    4. Календарь и хронология. Климишин И.А. 1990, стр. 133
    5. (c) Intro  v1.02   5.04.2019     11.04.2019
    6. ======================================================*/
    7.  
    8. #include <stdio.h>
    9.  
    10. #ifndef __cplusplus
    11. #define     bool       char
    12. #define     true       1
    13. #define     false       0
    14. #endif
    15.  
    16. typedef unsigned char     BYTE;
    17. typedef const char*       LPCSTR;
    18. typedef struct _Sdate {
    19.    char   day;   /* 1-31 */
    20.    char   mon;   /* 0-11 */
    21. } Sdate;
    22.  
    23. bool   Str2Int(LPCSTR str, int* param)
    24. {
    25.    int     ppp, num, len;
    26.    LPCSTR   S0, S1;   /* указатель на начало и конец строки */
    27.    bool   minus = false;
    28.    if(!str)   return false;
    29.    S1 = S0 = str;
    30.    for(len=0; S1[1]; ++S1, ++len){
    31.      if(len>=4)   return false;
    32.    }
    33.    if(*S0=='-'){
    34.      minus = true;
    35.      ++S0;
    36.    }
    37.    if(S0>S1)   return false;
    38.    for(num=0, ppp=1; S1>=S0; --S1){
    39.      BYTE   digit = *S1-'0';
    40.      if(digit>=10)   return false;
    41.   num += digit*ppp;
    42.   ppp *= 10;
    43.    };
    44.    *param = minus ? (-num) : num;
    45.    return true;
    46. }
    47.  
    48. int   NewStyleDay(int year) /* Расхождение между новым и старым стилем, дней. */
    49. {
    50.    int   century = year/100;
    51.    return (century/4)*3 + century%4 - 2;
    52. }
    53.  
    54. Sdate   NumDay2Data(int day) /* номер дня от 1 марта в дату */
    55. {
    56.    Sdate   date;
    57.    int     mon = 2;/* March */
    58.    if(day>31){
    59.      day -= 31;
    60.      mon++;     /* April */
    61.    }
    62.    if(day>30){
    63.      day -= 30;
    64.      mon++;     /* May */
    65.    }
    66.    date.day = day;
    67.    date.mon = mon;
    68.    return date;
    69. }
    70.  
    71. int   GetEasterGauss(int year, int m, int n, bool is_catholic)
    72. {
    73.    int   a,b,c,d,e,day;
    74.    a = year % 19;
    75.    b = year % 4;
    76.    c = year % 7;
    77.    d = (19*a + m) % 30;
    78.    e = (2*b + 4*c + 6*d + n) % 7;
    79.    day = 22 + d + e;
    80.    if(is_catholic && (day>=56 && e==6)) day -= 7;
    81.    return day;
    82. }
    83.  
    84. int   GetOrthodoxEaster(int year)     /* православная пасха */
    85. {
    86.    return GetEasterGauss(year, 15, 6, false);
    87. }
    88.  
    89. int   GetCatholicEaster(int year)     /* католическая пасха */
    90. {
    91.    int   m,n,p,q,century;
    92.    century = year/100;
    93.    p = (century*8 + 13)/25;
    94.    q = century/4;
    95.    m = (century - p - q + 15) % 30;
    96.    n = (century - q + 4) % 7;
    97.    return GetEasterGauss(year, m, n, true);
    98. }
    99.  
    100. int   main(int argc, char *argv[])
    101. {
    102.    Sdate   old_s, new_s;
    103.    int     year, day;
    104.    if(argc!=2){
    105.      puts("Usage: easter year\n");
    106.      return 0;
    107.    }
    108.    if(!Str2Int(argv[1], &year)){
    109.      puts("ERROR! The integer is expected.\n");
    110.      return 1;
    111.    }
    112.    day = GetOrthodoxEaster(year);   /* old style */
    113.    old_s = NumDay2Data(day);
    114.    day += NewStyleDay(year);
    115.    new_s = NumDay2Data(day);
    116.    printf("Orthodox easter in %d:\n", year);
    117.    printf("Old style: %2d.%02d New style: %2d.%02d\n", old_s.day, old_s.mon+1, new_s.day, new_s.mon+1);
    118.    day = GetCatholicEaster(year);   /* new style */
    119.    new_s = NumDay2Data(day);
    120.    day -= NewStyleDay(year);
    121.    old_s = NumDay2Data(day);
    122.    printf("Catholic easter in %d:\n", year);
    123.    printf("Old style: %2d.%02d New style: %2d.%02d\n", old_s.day, old_s.mon+1, new_s.day, new_s.mon+1);
    124.    return 0;
    125. }
    Программка для расчёта даты пасхи, точно не знаю до какой даты вычисляется правильно, думаю до 3000 или 4000 года, при слишком большом значении, выдаёт ерунду.
    ЗЫ
    Рассчитано для компиляции и на старых системах, проверял на ТС1.0 эмулятор IBM XT dos5.
     
    Последнее редактирование: 2 май 2019
    CKAP нравится это.
  4. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    416
    ВО ИСТИНУ ВОСКРЕСЕ!
     
    Minzdrav нравится это.
  5. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.109
    И со Светлой Седмицей.
     
    q2e74 нравится это.