Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 81

Написать программу, позволяющую получить календарь любого года, месяца

01.04.2013, 17:40. Показов 4268. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите написать программу:

Написать программу, позволяющую получить календарь любого года, месяца в предположительных пределах 1900-2050 гг. с указанием дня недели, соответствующего данному числу данного месяца.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.04.2013, 17:40
Ответы с готовыми решениями:

Напечатайте календарь заданного месяца 2005 года, зная, что 1 января 2005 года — суббота
не могу понять что вообще делать в программе. Условие звучит так: Напечатайте календарь заданного месяца 2005 года, зная, что 1 января...

Прошу написать программу существования дня месяца и года
Это основа var a,b,c: integer; f: boolean; begin repeat writeln ('Введите день '); readln (a);

Напечатать календарь заданного месяца 2010 года
Помогите, пожалуйста, решить задачи. Все условия во вложенном файле. Заранее благодарна.

22
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
01.04.2013, 21:07
О, это супер! Календарь - обожаю, только подзабыл теорию. Это и в уме люди считают. Нужно знать день, на который выпадает первое января, и сдвиги месяцев относительно января. Поскольку https://www.cyberforum.ru/cgi-bin/latex.cgi?365 \equiv 1 \pmod{7}, каждый невисокосный год сдвигает первое января на один день. Даже книжку знаю. "Энциклопедия календаря" Куликова. Правда, на первой гуглостранице её нет. Сейчас буду бумажную искать.
0
 Аватар для kleoim
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 130
01.04.2013, 22:06
Это же элементарно Ватсон xD
0
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 81
01.04.2013, 22:10  [ТС]
kleoim, ну напиши раз так легко
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
01.04.2013, 22:18
Не, mikl25, лично я буду календарь обсуждать только если сами будете писать. Я уже даже книжку нашёл.
0
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 81
01.04.2013, 22:48  [ТС]
helter, как книга называется?

Добавлено через 27 минут
Эта книга только платная же.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
01.04.2013, 22:49
Сергей Куликов. Нить времён. Малая энциклопедия календаря. У меня бумажная, но сканера нет. :P

С юлианским проблем вообще нет, там просто каждый четвёртый год високосный, поэтому каждый невисокосный год сдвигает день на единицу, а високосный - на два. Соответственно, получается простая формула, действующая для любого года нашей эры:
Д = | (Г + Ч + М)/7 | = | (J + [J/4] + Ч + М)/7 |
где Д - день недели
Г - "годовой член" или "солнечная эпакта" (показывает сдвиг дней недели года относительно фиксированного года),
Ч - число месяца
М - "месячный член" (сдвиг дней в конкретном месяце относительно фиксированного дня в году)
J - номер года в нашей эре
[] - целая часть
|| - остаток от деления

Пример: дата рождения Пушкина по старому стилю - 26 мая 1799 года, это день недели
| (1799 + 499 + 26 + 5)/7 | = 4 (четверг)

Насчёт нового стиля здесь какие-то таблицы; мне кажется, проще делать поправку от юлианского.
0
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 81
01.04.2013, 22:55  [ТС]
helter, "Насчёт нового стиля здесь какие-то таблицы; мне кажется, проще делать поправку от юлианского."- согласен
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
01.04.2013, 22:58
Вся эта арифметика - только запутаешься. Григорианский чем, значиццо, отличается: не считаются високосными вековые годы, в которых число сотен не делится на 4.

В XX--XXI годах поправка одна - 13 дней, так что вам можно было бы не заморачиваться. Однако если легко можно сделать на все века, почему нет?
0
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 81
01.04.2013, 23:02  [ТС]
Мне это по учебе, нужно каким либо образом реализовать, слишком сложную не надо и простым способом пойдет
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
02.04.2013, 02:36
Да это просто арифметика. И программировать особо не надо, трудность в математику уходит.

Давайте вместе писать, потом сравним. У меня для старого стиля работает, для нового пока сбоит.

Месячные члены:
4 (3) 0 (6 = -1) 0 3 5 1 3 6 2 4 0 2
В скобках - январь и февраль високосного года.

Юлианский и григорианский календари совпадают с 1 марта 200 года по 29 февраля 300 года.

По идее этих данных хватает. У меня глючит на 1900 году (если верить нагугленному календарю). У Куликова ещё написано, что для григорианского в вековых годах (вида dd00) нужно для января и февраля считать поправки как для високосного, даже если они нет. Я это ещё не осознал, но видимо, это действительно так.

Добавлено через 3 минуты
Для тестов старого стиля:
26.05.1799 - четверг
9.01.1905 - воскресенье
9.01.1904 - пятница
28.06.1175 - суббота (убит князь Андрей Суздальский, в летописи день недели отмечен)

Добавлено через 5 минут
А, это за счёт того, что разница только с первого марта увеличивается на день.

Всё, мне всё понятно, и у меня всё работает. Можете вопросы задавать.

Добавлено через 6 минут
А не, ни фига. Что-то я запутался, надо уже до завтра оставлять.

Добавлено через 1 час 1 минуту
Всё, у меня заработало. Вместо конверсии туда-сюда проще посчитать сразу в григорианском, вычислив число високосных годов с начала эры до данного года. Месячные члены можно и такие использовать:
1(0) 4(3) 4 0 2 5 0 3 6 1 4 6
То есть если 1 января невисокосного года - понедельник, то первое марта будет четверг и т. п. Это сдвинутая последовательность по отношению к той, которую я раньше выписывал. Восемнадцать строчек кода вместе с двумя пустыми, дерзайте.

Добавлено через 50 минут
Бонус! Предположим, что день недели вычисляет функция day. Предлагаю вашему вниманию следующую функцию:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
(defvar *month-names* '("Январь"
                        "Февраль"
                        "Март"
                        "Апрель"
                        "Май"
                        "Июнь"
                        "Июль"
                        "Август"
                        "Сентябрь"
                        "Октябрь"
                        "Ноябрь"
                        "Декабрь"))
(defvar *day-names* '("Пн" "Вт" "Ср" "Чт" "Пт" "Сб" "Вс"))
 
(defun month-calendar (y m)
  (labels ((make-row (day-name first-date month)
             (list day-name (loop for i from first-date by 7 upto (nth (- month 1) *month-days*)
                                  when (plusp i) collect i 
                                  else collect ""))))
    (let ((d (day y m 1))
          (day-count (nth (- m 1) *month-days*)))
      (format t "~A ~A~%" (nth (- m 1) *month-names*) y)
      (format t "~{~{~A ~{~2@A~^ ~}~%~}~}" (loop for n in *day-names*
                                                 for q upfrom (- 2 d)
                                                 collect (make-row n q m))))))
 
CL-USER> (month-calendar 2013 4)
Апрель 2013
Пн  1  8 15 22 29
Вт  2  9 16 23 30
Ср  3 10 17 24 31
Чт  4 11 18 25
Пт  5 12 19 26
Сб  6 13 20 27
Вс  7 14 21 28
Обратите внимание: format с тремя (!) вложенными циклами.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38189 / 21124 / 4307
Регистрация: 12.02.2012
Сообщений: 34,730
Записей в блоге: 14
02.04.2013, 11:02
Вот, как вариант (для 20-21-го веков, вроде бы работает):

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
;; Для HomeLisp
 
(defun ffix (x) 
   (LET ((xx (FIX x)))
          (IF (> 0 (- x xx)) (- xx 1) xx)))
 
==> ffix
 
(defun n-day (y m d)
  (let* ((a1 (\ y 100))
         (a2 (% y 100))
         (sigv 0)
         (sigv (if (and (zerop a2) (zerop (% a1 4))) 1 sigv))
         (sigv (if (and (<> a2 0) (zerop (% a2 4))) 1 sigv))
         (n (if (and (= 1 sigv) (<= m 2)) 1 0))          
         (n (if (and (zerop sigv) (<= m 2)) 2 n))
         (c (+ (ffix (* a2 365.25)) (ffix (* m 30.56)) 1 n))
         (c (if (>= y 2000) (1- c) c))
         (nn (% c 7))
         (res (cond ((= nn 5) 1)
                    ((= nn 6) 2)
                    ((= nn 0) 3)
                    ((= nn 1) 4)
                    ((= nn 2) 5)
                    ((= nn 3) 6)
                    ((= nn 4) 7))))
         (if (> d 1) 
             (dotimes (i (1- d) res)
               (setq res (1+ res)) 
               (when (> res 7) (setq res 1)))
             res)))
 
==> n-day
 
;; Проверка:
 
(n-day 1941 6 22)
 
==> 7 
 
(n-day 2013 4 1)
 
==> 1
 
(n-day 2013 3 31)
 
==> 7
1
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
02.04.2013, 21:17
Кстати, у меня баг: 29 февраля не отображается. Лучше использовать функцию для вычисления дней в данном месяце данного года. Мне ещё охота написать что-то эффектное, чтобы печатался календарь на год, тогда и поправлю.

Добавлено через 48 минут
Продолжаем форматно-календарную вакханалию!!!

Вот, вроде работает. Правда, получилось несколько рид-онли. Два вложенных мапкара...
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
(defvar *month-names* '("Январь"
                        "Февраль"
                        "Март"
                        "Апрель"
                        "Май"
                        "Июнь"
                        "Июль"
                        "Август"
                        "Сентябрь"
                        "Октябрь"
                        "Ноябрь"
                        "Декабрь"))
(defvar *day-names* '("Вс" "Пн" "Вт" "Ср" "Чт" "Пт" "Сб"))
 
(defun month-name (m)
  (nth (- m 1) *month-names*))
 
(defun day-name (d)
  (nth (mod d 7) *day-names*))
 
(defun month-days (y m)
  (let ((days (make-array '(12) :initial-contents
                          '(31 28 31 30 31 30 31 31 30 31 30 31))))
    (cond ((/= m 2) (svref days (- m 1)))
          ((and (= m 2) (leapp y)) 29)
          (t 28))))
 
(defun make-month-row (y m d)
  (let ((first-day (day y m 1)))
    (list (day-name d) (loop for i from (+ d (- first-day) 1) by 7 upto (month-days y m)
                             when (plusp i) collect i 
                             else collect ""))))
 
(defun month-calendar (y m &optional &key (title (lambda (y m)
                                                   (format t "~&~A ~A~%" (month-name m) y))))
    (funcall title y m)
    (format t "~{~{~A ~{~2@A~^ ~}~%~}~}" (mapcar (lambda (d)
                                                   (make-month-row y m d)) '(1 2 3 4 5 6 7))))
 
(defun year-calendar (y)
  (labels ((print-group (mths)
             (format t "~{~{~25A~}~%~}" (cons (mapcar #'month-name mths)
                                              (mapcar (lambda (d)
                                                        (mapcar (lambda (m)
                                                                  (format nil "~{~A ~{~2@A~^ ~}~}" (make-month-row y m d)))
                                                                mths))
                                                      '(1 2 3 4 5 6 7)))))
           (print-blank-line (len)
             (format t "~A~%" (make-array (list len) :element-type 'character :initial-element #\Space))))
    (format t "~&~75A~%" (format nil "~30@A" y))
    (print-blank-line 75)
    (print-group '(1 2 3))
    (print-blank-line 75)
    (print-group '(4 5 6))
    (print-blank-line 75)
    (print-group '(7 8 9))
    (print-blank-line 75)
    (print-group '(10 11 12))))
 
CL-USER> (year-calendar 2013)
                          2013                                             
                                                                           
Январь                   Февраль                  Март                     
Пн     7 14 21 28        Пн     4 11 18 25        Пн     4 11 18 25        
Вт  1  8 15 22 29        Вт     5 12 19 26        Вт     5 12 19 26        
Ср  2  9 16 23 30        Ср     6 13 20 27        Ср     6 13 20 27        
Чт  3 10 17 24 31        Чт     7 14 21 28        Чт     7 14 21 28        
Пт  4 11 18 25           Пт  1  8 15 22           Пт  1  8 15 22 29        
Сб  5 12 19 26           Сб  2  9 16 23           Сб  2  9 16 23 30        
Вс  6 13 20 27           Вс  3 10 17 24           Вс  3 10 17 24 31        
                                                                           
Апрель                   Май                      Июнь                     
Пн  1  8 15 22 29        Пн     6 13 20 27        Пн     3 10 17 24        
Вт  2  9 16 23 30        Вт     7 14 21 28        Вт     4 11 18 25        
Ср  3 10 17 24           Ср  1  8 15 22 29        Ср     5 12 19 26        
Чт  4 11 18 25           Чт  2  9 16 23 30        Чт     6 13 20 27        
Пт  5 12 19 26           Пт  3 10 17 24 31        Пт     7 14 21 28        
Сб  6 13 20 27           Сб  4 11 18 25           Сб  1  8 15 22 29        
Вс  7 14 21 28           Вс  5 12 19 26           Вс  2  9 16 23 30        
                                                                           
Июль                     Август                   Сентябрь                 
Пн  1  8 15 22 29        Пн     5 12 19 26        Пн  2  9 16 23 30        
Вт  2  9 16 23 30        Вт     6 13 20 27        Вт  3 10 17 24           
Ср  3 10 17 24 31        Ср     7 14 21 28        Ср  4 11 18 25           
Чт  4 11 18 25           Чт  1  8 15 22 29        Чт  5 12 19 26           
Пт  5 12 19 26           Пт  2  9 16 23 30        Пт  6 13 20 27           
Сб  6 13 20 27           Сб  3 10 17 24 31        Сб  7 14 21 28           
Вс  7 14 21 28           Вс  4 11 18 25           Вс  8 15 22 29           
                                                                           
Октябрь                  Ноябрь                   Декабрь                  
Пн     7 14 21 28        Пн     4 11 18 25        Пн  2  9 16 23 30        
Вт  1  8 15 22 29        Вт     5 12 19 26        Вт  3 10 17 24 31        
Ср  2  9 16 23 30        Ср     6 13 20 27        Ср  4 11 18 25           
Чт  3 10 17 24 31        Чт     7 14 21 28        Чт  5 12 19 26           
Пт  4 11 18 25           Пт  1  8 15 22 29        Пт  6 13 20 27           
Сб  5 12 19 26           Сб  2  9 16 23 30        Сб  7 14 21 28           
Вс  6 13 20 27           Вс  3 10 17 24           Вс  8 15 22 29           
NIL
Здесь две функции из домашнего задания: day и leapp, которая определяет, високосный год или нет. Я думаю, mikl25 их имплементирует.

Добавлено через 6 часов 24 минуты
А если первое выпадает на воскресенье, оно съедается, как показывает рассмотрение моего календаря. Там из-за того, что воскресенье вроде как день номер 0, а стоит в конце недели. Багфикс:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
(defun make-month-row (y m d)
  (flet ((positive-day-number (d)
           (if (zerop d) 7 d)))
    (let ((d (positive-day-number d))
          (start (- 1 (positive-day-number (day y m 1))))
          (ds (month-days y m)))
      (do ((res () (cons (if (plusp i) i "") res))
           (i (+ start d) (+ i 7)))
        ((> i ds) (list (day-name d) (nreverse res)))))))
                          2013                                             
                                                                           
Январь                   Февраль                  Март                     
Пн     7 14 21 28        Пн     4 11 18 25        Пн     4 11 18 25        
Вт  1  8 15 22 29        Вт     5 12 19 26        Вт     5 12 19 26        
Ср  2  9 16 23 30        Ср     6 13 20 27        Ср     6 13 20 27        
Чт  3 10 17 24 31        Чт     7 14 21 28        Чт     7 14 21 28        
Пт  4 11 18 25           Пт  1  8 15 22           Пт  1  8 15 22 29        
Сб  5 12 19 26           Сб  2  9 16 23           Сб  2  9 16 23 30        
Вс  6 13 20 27           Вс  3 10 17 24           Вс  3 10 17 24 31        
                                                                           
Апрель                   Май                      Июнь                     
Пн  1  8 15 22 29        Пн     6 13 20 27        Пн     3 10 17 24        
Вт  2  9 16 23 30        Вт     7 14 21 28        Вт     4 11 18 25        
Ср  3 10 17 24           Ср  1  8 15 22 29        Ср     5 12 19 26        
Чт  4 11 18 25           Чт  2  9 16 23 30        Чт     6 13 20 27        
Пт  5 12 19 26           Пт  3 10 17 24 31        Пт     7 14 21 28        
Сб  6 13 20 27           Сб  4 11 18 25           Сб  1  8 15 22 29        
Вс  7 14 21 28           Вс  5 12 19 26           Вс  2  9 16 23 30        
                                                                           
Июль                     Август                   Сентябрь                 
Пн  1  8 15 22 29        Пн     5 12 19 26        Пн     2  9 16 23 30     
Вт  2  9 16 23 30        Вт     6 13 20 27        Вт     3 10 17 24        
Ср  3 10 17 24 31        Ср     7 14 21 28        Ср     4 11 18 25        
Чт  4 11 18 25           Чт  1  8 15 22 29        Чт     5 12 19 26        
Пт  5 12 19 26           Пт  2  9 16 23 30        Пт     6 13 20 27        
Сб  6 13 20 27           Сб  3 10 17 24 31        Сб     7 14 21 28        
Вс  7 14 21 28           Вс  4 11 18 25           Вс  1  8 15 22 29        
                                                                           
Октябрь                  Ноябрь                   Декабрь                  
Пн     7 14 21 28        Пн     4 11 18 25        Пн     2  9 16 23 30     
Вт  1  8 15 22 29        Вт     5 12 19 26        Вт     3 10 17 24 31     
Ср  2  9 16 23 30        Ср     6 13 20 27        Ср     4 11 18 25        
Чт  3 10 17 24 31        Чт     7 14 21 28        Чт     5 12 19 26        
Пт  4 11 18 25           Пт  1  8 15 22 29        Пт     6 13 20 27        
Сб  5 12 19 26           Сб  2  9 16 23 30        Сб     7 14 21 28        
Вс  6 13 20 27           Вс  3 10 17 24           Вс  1  8 15 22 29
Мне прямо самому нравится, хотя код читается плоховато. Надо в вим команду сделать, чтобы календари рисовала.

mikl25, вы ещё решаете или уже переписали решение Catstail-а? Охота собрать в единое целое весь свой могучий календарный проект.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38189 / 21124 / 4307
Регистрация: 12.02.2012
Сообщений: 34,730
Записей в блоге: 14
02.04.2013, 21:20
Цитата Сообщение от helter Посмотреть сообщение
или уже переписали решение Catstail-а?
- а я еще не довел конечный вариант...
0
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 81
02.04.2013, 21:57  [ТС]
helter, решаю, че то как то не очень получается..
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
02.04.2013, 22:13
Давайте вместе делать. Я предлагаю в отличие от Catstail-а пойти арифметическим путём, потому что календарь есть арифметика вычетов и ничто иное.

Попробуйте сначала написать функцию, возвращающую день недели, если первое января приходится на понедельник. Это понятно как делать? В январе день будет остатком от деления на 7. Февраль сдвинут относительно января на одно и то же число. Я вам выше приводил сдвиги:
1 4 4 0 2 5 0 3 6 1 4 6
Если первое января - понедельник, то первое февраля - четверг, первое марта - четверг, первое апреля - воскресенье и т. д. Вот календарь на 1900 год для тестирования.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
                          1900                                             
                                                                           
Январь                   Февраль                  Март                     
Пн  1  8 15 22 29        Пн     5 12 19 26        Пн     5 12 19 26        
Вт  2  9 16 23 30        Вт     6 13 20 27        Вт     6 13 20 27        
Ср  3 10 17 24 31        Ср     7 14 21 28        Ср     7 14 21 28        
Чт  4 11 18 25           Чт  1  8 15 22           Чт  1  8 15 22 29        
Пт  5 12 19 26           Пт  2  9 16 23           Пт  2  9 16 23 30        
Сб  6 13 20 27           Сб  3 10 17 24           Сб  3 10 17 24 31        
Вс  7 14 21 28           Вс  4 11 18 25           Вс  4 11 18 25           
                                                                           
Апрель                   Май                      Июнь                     
Пн     2  9 16 23 30     Пн     7 14 21 28        Пн     4 11 18 25        
Вт     3 10 17 24        Вт  1  8 15 22 29        Вт     5 12 19 26        
Ср     4 11 18 25        Ср  2  9 16 23 30        Ср     6 13 20 27        
Чт     5 12 19 26        Чт  3 10 17 24 31        Чт     7 14 21 28        
Пт     6 13 20 27        Пт  4 11 18 25           Пт  1  8 15 22 29        
Сб     7 14 21 28        Сб  5 12 19 26           Сб  2  9 16 23 30        
Вс  1  8 15 22 29        Вс  6 13 20 27           Вс  3 10 17 24           
                                                                           
Июль                     Август                   Сентябрь                 
Пн     2  9 16 23 30     Пн     6 13 20 27        Пн     3 10 17 24        
Вт     3 10 17 24 31     Вт     7 14 21 28        Вт     4 11 18 25        
Ср     4 11 18 25        Ср  1  8 15 22 29        Ср     5 12 19 26        
Чт     5 12 19 26        Чт  2  9 16 23 30        Чт     6 13 20 27        
Пт     6 13 20 27        Пт  3 10 17 24 31        Пт     7 14 21 28        
Сб     7 14 21 28        Сб  4 11 18 25           Сб  1  8 15 22 29        
Вс  1  8 15 22 29        Вс  5 12 19 26           Вс  2  9 16 23 30        
                                                                           
Октябрь                  Ноябрь                   Декабрь                  
Пн  1  8 15 22 29        Пн     5 12 19 26        Пн     3 10 17 24 31     
Вт  2  9 16 23 30        Вт     6 13 20 27        Вт     4 11 18 25        
Ср  3 10 17 24 31        Ср     7 14 21 28        Ср     5 12 19 26        
Чт  4 11 18 25           Чт  1  8 15 22 29        Чт     6 13 20 27        
Пт  5 12 19 26           Пт  2  9 16 23 30        Пт     7 14 21 28        
Сб  6 13 20 27           Сб  3 10 17 24           Сб  1  8 15 22 29        
Вс  7 14 21 28           Вс  4 11 18 25           Вс  2  9 16 23 30
Добавлено через 7 минут
А потом, если не умеете, я вам расскажу, как засунуть это всё в пакет или даже сделать ASDF-систему.
0
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 81
02.04.2013, 22:14  [ТС]
helter, вы уже почти дописали свой календарь как я вижу.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
02.04.2013, 22:18
Мой вроде нормально работает. То есть сам календарь вчера заработал: я не стал связываться с юлианским, а просто посчитал високосные годы в григорианском (и с вами вместе охота то же сделать). А сегодня я глюки в распечатывании убирал.
0
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 81
02.04.2013, 22:20  [ТС]
helter, ASDF-систему, для чего вообще нужна? и что такое вообще?
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
02.04.2013, 22:45
Цитата Сообщение от mikl25 Посмотреть сообщение
helter, ASDF-систему, для чего вообще нужна? и что такое вообще?
Это форма организации кода. Вот напишете вы пару-тройку интересных функций, что с ними дальше делать, как пользоваться?

Во-первых, надо завернуть их в пакет. Пакет - это типа пространства имён. Стандартная вещь - в смысле, входит в стандарт. Работать в умолчательном пакете cl - это только для баловства.

Пакет - это хорошо, но это тоже абстрактная вещь. А вы ещё хотите, чтобы и Лисп узнал о существовании вашего пакета, чтобы можно было загрузить функции - с квалификацией ли, без ли. Именно для этого используют ASDF-системы. Это не входит в стандарт, но входит в мейнстрим.

ASDF-система определяется в файле с расширением .asd, в котором хранится основная организующая информация о проекте: из каких файлов состоит, что от чего зависит, что где лежит, от каких внешних библиотек зависит. С ASDF-системами работает пакет asdf, который или искаропки подключен, или quicklisp позаботится, чтобы он подключался.

С ASDF удобно работать не непосредственно, а через quicklisp - своего вида интерфейс. Пожалуй, quicklisp входит сейчас в джентльменский набор. Если вы засимлинчите свой проект в папку quicklisp/local-projects, можно будет загружать его командой навроде
(ql:quickload 'calendar)
Здесь calendar - название ASDF-системы, тёзки определяемого в ней пакета. По выполнении этой команды Лисп будет знать о существовании пакета 'calendar.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.04.2013, 22:45
Помогаю со студенческими работами здесь

Напечатайте календарь заданного месяца 1998 года
Составить программу решения задачи: Напечатайте календарь заданного месяца 1998 года, зная, что 1 января 1998 года – четверг.

Напечатать календарь заданного месяца 2010 года
помогите решить задачи. в паскали полный чайник. буду рад любой помощи. заранее спасибо вот собственно все задачи: 1 Напечатайте...

Написать программу, которая по введенному номеру месяца выводит время года
data segment mes1 db 10, 13, 'January$' mes1_e db 10, 13, 'Neverno$' mes2 db 10, 13, 'February$' mes3 db 10, 13, 'March$' ...

Написать программу, которая возвращает количество дней для M-го месяца года Y
. Написать программу, которая возвращает количество дней для M-го месяца года Y (1 ≤ M ≤ 12, Y &gt; 0 — целые числа). Вывести...

Написать программу, которая запрашивает у пользователя номер месяца и выводит соответствующее название времени года
Написать программу, которая запрашивает у пользователя номер месяца и выводит соответствующее название времени года. В случае, если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru