Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
99 / 99 / 14
Регистрация: 07.02.2013
Сообщений: 128
1

Реализация машины тьюринга

07.02.2013, 15:34. Показов 1565. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Имеется реализация машины Тьюринга на mulisp выражения (4-x)/2y
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
(defun delay (n)
 (loop
        ((eql n 0) "delay")
        (setq n (- n 1))
 )
)
(defun run()
    (setq *com* '(
    (1 "1" 2 "1" "r")     ;реализация вычитания 
    (2 "1" 2 "1" "r")  
    (2 "-" 3 "-" "r")  
    (3 "1" 3 "1" "r")  
    (3 ":" 4 ":" "l")  
    (4 "1" 5 "*" "l")  
    (5 "-" 6 "-" "l")  
    (4 "-" 20 "-" "l")  
    (5 "1" 5 "1" "l")  
    (6 "-" 6 "-" "l")  
    (6 "*" 6 "*" "l")  
    (6 "1" 7 "*" "r")  
    (7 "-" 8 "-" "r")  
    (7 "*" 7 "*" "r")  
    (8 "1" 8 "1" "r")  
    (8 "*" 9 "*" "l")  
    (9 "1" 5 "*" "l")  
    (9 "-" 20 "-" "l")  
 
    (20 "*" 20 "*" "l")  ; вывод результата вычитания после знака '=' 
    (20 " " 25 " " "r")  
    (20 "1" 21 "!" "r")  
    (21 "!" 21 "!" "r")  
    (21 "-" 21 "-" "r")  
    (20 "!" 20 "!" "r")  
    (21 ":" 21 ":" "r")  
    (21 "*" 21 "*" "r")  
    (21 "." 21 "." "r")  
    (21 "1" 21 "1" "r")  
    (21 "=" 21 "=" "r")  
    (21 " " 22 "1" "l")  
    (22 "1" 22 "1" "l")  
    (22 "=" 23 "=" "l") 
    (23 "1" 23 "1" "l")  
    (23 "." 23 "." "l")  
    (23 ":" 24 ":" "l")  
    (24 "*" 24 "*" "l")  
    (24 "-" 24 "-" "l")  
    (24 "!" 24 "!" "l")  
    (24 "1" 21 "!" "r")  
    (24 " " 25 " " "r")  
    (25 "!" 25 "1" "r")  
    (25 "*" 25 "1" "r")  
    (25 "-" 25 "-" "r")  
    (25 ":" 25 ":" "r")  
    (25 "1" 25 "1" "r")  
    (25 "." 25 "." "r")  
    (25 "=" 25 "=" "r")  
    (25 " " 26 "/" "l")  
    (26 "1" 26 "1" "l")  
    (26 "=" 26 "=" "l")  
    (26 "." 26 "." "l")  
    (26 ":" 31 ":" "r")  
 
    (31 "1" 32 "0" "r")  ; Умножение 
    (31 "." 40 "." "l")  
    (32 "1" 32 "1" "r")  
    (32 "." 33 "." "r")  
    (33 "1" 34 "0" "r")  
    (33 "=" 38 "=" "l")  
    (34 "1" 34 "1" "r")  
    (34 "=" 35 "=" "r")  
    (35 "1" 35 "1" "r")  
    (35 "/" 35 "/" "r")  
    (35 " " 36 "1" "l")  
    (36 "1" 36 "1" "l")  
    (36 "/" 36 "/" "l")  
    (36 "=" 37 "=" "l")  
    (37 "1" 37 "1" "l") 
    (37 "0" 33 "0" "r")  
    (38 "0" 38 "1" "l")  
    (38 "." 39 "." "l") 
    (39 "1" 39 "1" "l") 
    (39 "0" 31 "0" "r")  
    (40 "0" 40 "1" "l")  
    (40 ":" 50 ":" "r")  
    (50 "1" 50 "1" "r")  
    (50 "/" 50 "/" "r")  
    (50 "." 50 "." "r")  
    (50 "=" 50 "=" "r")  
    (50 " " 60 "~" "l")  
     
    
    (60 "1" 61 "*" "l") ; Деление 
    (60 "*" 60 "*" "l")  
    (61 "1" 61 "1" "l")  
    (61 "/" 62 "/" "l")  
    (62 "*" 62 "*" "l")  
    (62 "=" 80 "=" "r")  
    (80 "1" 80 "1" "r")  
    (80 "*" 80 "1" "r")  
    (80 "/" 80 "/" "r")  
    (80 "~" 80 "~" "r")  
    (62 "1" 63 "*" "r")  
    (63 "*" 63 "*" "r")  
    (63 "/" 64 "/" "r")  
    (64 "*" 64 "1" "r")  
    (64 "~" 66 "~" "r")  
    (66 " " 67 "1" "l")  
    (67 "1" 67 "1" "l")  
    (67 "~" 60 "~" "l")  
    (66 "1" 66 "1" "r")  
    (64 "1" 65 "1" "r")  
    (65 "1" 65 "1" "r")  
    (65 "*" 60 "*" "l")  
    (80 " " 200 "!" "e")  
))
    (m_turing)
)
 
(defun m_turing()
    (prin1 "Input string->")(setq str (read))
    (clear-screen)
    (set-cursor 0 0)
    (write-string str)
    (terpri)
    (set-cursor 2 1)
    (write-string "^")
    (terpri)
    (delay 200000)
    (step 1 str 2)
)
(defun step (pos str sost)
    ((eql sost 200)(print "Rabota mashiny Turinga okonchena")
         (print"---------------------------------------------------------------------")
    )
    (setq sym (get_symbol pos str))
    (setq list-mt (tu pos sym sost))
    (set-cursor 0 pos)(write-string sym)
    (setq n_str (pack (change (second list-mt) pos (unpack str) 0)))
    (setq n_pos (analiz pos (caddr list-mt)))
    (set-cursor 0 0)
    (write-string n_str)
    (set-cursor 2 pos) (write-string " ")
    (set-cursor 2 n_pos)
    (write-string "^")
    (delay 200000)
    (step n_pos n_str (car list-mt))
)
(defun change (sym pos list n)
    ((eql n pos) (cons sym (cdr list)))
    (cons (car list) (change sym pos (cdr list) (+ n 1)))
)
 
(defun analiz(pos napr)
    ((string= napr "l") (- pos 1))
    ((string= napr "r") (+ pos 1))
    ((string= napr "e") pos)
)
(defun tu(pos sym sost)
    (setq l1 *com*)
    (loop
        (setq l2 (pop l1))
        ((and (eql (car l2) sost)
        (eql (cadr l2) sym))
        (cddr l2))
    )
)
(defun get_symbol(pos str)
    (char str pos)
)
Посоветуйте, пожалуйста, как это можно переделать под Common Lisp.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.02.2013, 15:34
Ответы с готовыми решениями:

Верно ли, что в записанном на ленте машины Тьюринга слове в алфавите 1,0 за каждой буквой 1 непосредственно следует букв
Верно ли, что в записанном на ленте машины Тьюринга слове в алфавите 1,0 за каждой буквой 1...

Реализация Машины Тьюринга
Всем привет. Интересует такой вопрос: Как реализовать Машину Тьюринга для преобразования чисел из...

Задача по машине Поста и Тьюринга: Необходимо найти сумму чисел задданых в виде меток(для машины Поста) или единиц( для машины Тьюринга)
Необходимо найти сумму чисел задданых в виде меток(для машины поста) или единиц( для машины...

Отличия машины поста от машины тьюринга
Отличия машины поста от машины тьюринга?

4
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
07.02.2013, 20:18 2
Попробовал запустить в LispWorks. Единственная ошибка при загрузка - повторное определение функции step.
В трех местах заменил step на step$ - все загрузилось:

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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
(defun delay (n)
 (loop
        ((eql n 0) "delay")
        (setq n (- n 1))
 )
)
(defun run()
    (setq *com* '(
    (1 "1" 2 "1" "r")     ;реализация вычитания 
    (2 "1" 2 "1" "r")  
    (2 "-" 3 "-" "r")  
    (3 "1" 3 "1" "r")  
    (3 ":" 4 ":" "l")  
    (4 "1" 5 "*" "l")  
    (5 "-" 6 "-" "l")  
    (4 "-" 20 "-" "l")  
    (5 "1" 5 "1" "l")  
    (6 "-" 6 "-" "l")  
    (6 "*" 6 "*" "l")  
    (6 "1" 7 "*" "r")  
    (7 "-" 8 "-" "r")  
    (7 "*" 7 "*" "r")  
    (8 "1" 8 "1" "r")  
    (8 "*" 9 "*" "l")  
    (9 "1" 5 "*" "l")  
    (9 "-" 20 "-" "l")  
 
    (20 "*" 20 "*" "l")  ; вывод результата вычитания после знака '=' 
    (20 " " 25 " " "r")  
    (20 "1" 21 "!" "r")  
    (21 "!" 21 "!" "r")  
    (21 "-" 21 "-" "r")  
    (20 "!" 20 "!" "r")  
    (21 ":" 21 ":" "r")  
    (21 "*" 21 "*" "r")  
    (21 "." 21 "." "r")  
    (21 "1" 21 "1" "r")  
    (21 "=" 21 "=" "r")  
    (21 " " 22 "1" "l")  
    (22 "1" 22 "1" "l")  
    (22 "=" 23 "=" "l") 
    (23 "1" 23 "1" "l")  
    (23 "." 23 "." "l")  
    (23 ":" 24 ":" "l")  
    (24 "*" 24 "*" "l")  
    (24 "-" 24 "-" "l")  
    (24 "!" 24 "!" "l")  
    (24 "1" 21 "!" "r")  
    (24 " " 25 " " "r")  
    (25 "!" 25 "1" "r")  
    (25 "*" 25 "1" "r")  
    (25 "-" 25 "-" "r")  
    (25 ":" 25 ":" "r")  
    (25 "1" 25 "1" "r")  
    (25 "." 25 "." "r")  
    (25 "=" 25 "=" "r")  
    (25 " " 26 "/" "l")  
    (26 "1" 26 "1" "l")  
    (26 "=" 26 "=" "l")  
    (26 "." 26 "." "l")  
    (26 ":" 31 ":" "r")  
 
    (31 "1" 32 "0" "r")  ; Умножение 
    (31 "." 40 "." "l")  
    (32 "1" 32 "1" "r")  
    (32 "." 33 "." "r")  
    (33 "1" 34 "0" "r")  
    (33 "=" 38 "=" "l")  
    (34 "1" 34 "1" "r")  
    (34 "=" 35 "=" "r")  
    (35 "1" 35 "1" "r")  
    (35 "/" 35 "/" "r")  
    (35 " " 36 "1" "l")  
    (36 "1" 36 "1" "l")  
    (36 "/" 36 "/" "l")  
    (36 "=" 37 "=" "l")  
    (37 "1" 37 "1" "l") 
    (37 "0" 33 "0" "r")  
    (38 "0" 38 "1" "l")  
    (38 "." 39 "." "l") 
    (39 "1" 39 "1" "l") 
    (39 "0" 31 "0" "r")  
    (40 "0" 40 "1" "l")  
    (40 ":" 50 ":" "r")  
    (50 "1" 50 "1" "r")  
    (50 "/" 50 "/" "r")  
    (50 "." 50 "." "r")  
    (50 "=" 50 "=" "r")  
    (50 " " 60 "~" "l")  
     
    
    (60 "1" 61 "*" "l") ; Деление 
    (60 "*" 60 "*" "l")  
    (61 "1" 61 "1" "l")  
    (61 "/" 62 "/" "l")  
    (62 "*" 62 "*" "l")  
    (62 "=" 80 "=" "r")  
    (80 "1" 80 "1" "r")  
    (80 "*" 80 "1" "r")  
    (80 "/" 80 "/" "r")  
    (80 "~" 80 "~" "r")  
    (62 "1" 63 "*" "r")  
    (63 "*" 63 "*" "r")  
    (63 "/" 64 "/" "r")  
    (64 "*" 64 "1" "r")  
    (64 "~" 66 "~" "r")  
    (66 " " 67 "1" "l")  
    (67 "1" 67 "1" "l")  
    (67 "~" 60 "~" "l")  
    (66 "1" 66 "1" "r")  
    (64 "1" 65 "1" "r")  
    (65 "1" 65 "1" "r")  
    (65 "*" 60 "*" "l")  
    (80 " " 200 "!" "e")  
))
    (m_turing)
)
 
(defun m_turing()
    (prin1 "Input string->")(setq str (read))
    (clear-screen)
    (set-cursor 0 0)
    (write-string str)
    (terpri)
    (set-cursor 2 1)
    (write-string "^")
    (terpri)
    (delay 200000)
    (step$ 1 str 2)
)
(defun step$ (pos str sost)
    ((eql sost 200)(print "Rabota mashiny Turinga okonchena")
         (print"---------------------------------------------------------------------")
    )
    (setq sym (get_symbol pos str))
    (setq list-mt (tu pos sym sost))
    (set-cursor 0 pos)(write-string sym)
    (setq n_str (pack (change (second list-mt) pos (unpack str) 0)))
    (setq n_pos (analiz pos (caddr list-mt)))
    (set-cursor 0 0)
    (write-string n_str)
    (set-cursor 2 pos) (write-string " ")
    (set-cursor 2 n_pos)
    (write-string "^")
    (delay 200000)
    (step$ n_pos n_str (car list-mt))
)
(defun change (sym pos list n)
    ((eql n pos) (cons sym (cdr list)))
    (cons (car list) (change sym pos (cdr list) (+ n 1)))
)
 
(defun analiz(pos napr)
    ((string= napr "l") (- pos 1))
    ((string= napr "r") (+ pos 1))
    ((string= napr "e") pos)
)
(defun tu(pos sym sost)
    (setq l1 *com*)
    (loop
        (setq l2 (pop l1))
        ((and (eql (car l2) sost)
        (eql (cadr l2) sym))
        (cddr l2))
    )
)
(defun get_symbol(pos str)
    (char str pos)
)
Дальше - сам... убери clearscreen и setcursor.
0
99 / 99 / 14
Регистрация: 07.02.2013
Сообщений: 128
07.02.2013, 21:37  [ТС] 3
После удаления clearscreen и setcursor и запуске на выполнение с нужной строкой появилась ошибка: The call (#<Function EQL 201B5E82> T NIL (2 "1" "r")) does not match definition (#<Function EQL 201B5E82> SYSTEM::A SYSTEM::B).
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
(defun delay (n)
 (loop
        (if (eql n 0) "delay")
        (setq n (- n 1))
 )
)
 (defun run()
    (setq *com* '(
    (1 "1" 2 "1" "r")     ;реализация вычитания 
    (2 "1" 2 "1" "r")  
    (2 "-" 3 "-" "r")  
    (3 "1" 3 "1" "r")  
    (3 ":" 4 ":" "l")  
    (4 "1" 5 "*" "l")  
    (5 "-" 6 "-" "l")  
    (4 "-" 20 "-" "l")  
    (5 "1" 5 "1" "l")  
    (6 "-" 6 "-" "l")  
    (6 "*" 6 "*" "l")  
    (6 "1" 7 "*" "r")  
    (7 "-" 8 "-" "r")  
    (7 "*" 7 "*" "r")  
    (8 "1" 8 "1" "r")  
    (8 "*" 9 "*" "l")  
    (9 "1" 5 "*" "l")  
    (9 "-" 20 "-" "l")  
 
    (20 "*" 20 "*" "l")  ; вывод результата вычитания после знака '=' 
    (20 " " 25 " " "r")  
    (20 "1" 21 "!" "r")  
    (21 "!" 21 "!" "r")  
    (21 "-" 21 "-" "r")  
    (20 "!" 20 "!" "r")  
    (21 ":" 21 ":" "r")  
    (21 "*" 21 "*" "r")  
    (21 "." 21 "." "r")  
    (21 "1" 21 "1" "r")  
    (21 "=" 21 "=" "r")  
    (21 " " 22 "1" "l")  
    (22 "1" 22 "1" "l")  
    (22 "=" 23 "=" "l") 
    (23 "1" 23 "1" "l")  
    (23 "." 23 "." "l")  
    (23 ":" 24 ":" "l")  
    (24 "*" 24 "*" "l")  
    (24 "-" 24 "-" "l")  
    (24 "!" 24 "!" "l")  
    (24 "1" 21 "!" "r")  
    (24 " " 25 " " "r")  
    (25 "!" 25 "1" "r")  
    (25 "*" 25 "1" "r")  
    (25 "-" 25 "-" "r")  
    (25 ":" 25 ":" "r")  
    (25 "1" 25 "1" "r")  
    (25 "." 25 "." "r")  
    (25 "=" 25 "=" "r")  
    (25 " " 26 "/" "l")  
    (26 "1" 26 "1" "l")  
    (26 "=" 26 "=" "l")  
    (26 "." 26 "." "l")  
    (26 ":" 31 ":" "r")  
 
    (31 "1" 32 "0" "r")  ; Умножение 
    (31 "." 40 "." "l")  
    (32 "1" 32 "1" "r")  
    (32 "." 33 "." "r")  
    (33 "1" 34 "0" "r")  
    (33 "=" 38 "=" "l")  
    (34 "1" 34 "1" "r")  
    (34 "=" 35 "=" "r")  
    (35 "1" 35 "1" "r")  
    (35 "/" 35 "/" "r")  
    (35 " " 36 "1" "l")  
    (36 "1" 36 "1" "l")  
    (36 "/" 36 "/" "l")  
    (36 "=" 37 "=" "l")  
    (37 "1" 37 "1" "l") 
    (37 "0" 33 "0" "r")  
    (38 "0" 38 "1" "l")  
    (38 "." 39 "." "l") 
    (39 "1" 39 "1" "l") 
    (39 "0" 31 "0" "r")  
    (40 "0" 40 "1" "l")  
    (40 ":" 50 ":" "r")  
    (50 "1" 50 "1" "r")  
    (50 "/" 50 "/" "r")  
    (50 "." 50 "." "r")  
    (50 "=" 50 "=" "r")  
    (50 " " 60 "~" "l")  
     
    
    (60 "1" 61 "*" "l") ; Деление 
    (60 "*" 60 "*" "l")  
    (61 "1" 61 "1" "l")  
    (61 "/" 62 "/" "l")  
    (62 "*" 62 "*" "l")  
    (62 "=" 80 "=" "r")  
    (80 "1" 80 "1" "r")  
    (80 "*" 80 "1" "r")  
    (80 "/" 80 "/" "r")  
    (80 "~" 80 "~" "r")  
    (62 "1" 63 "*" "r")  
    (63 "*" 63 "*" "r")  
    (63 "/" 64 "/" "r")  
    (64 "*" 64 "1" "r")  
    (64 "~" 66 "~" "r")  
    (66 " " 67 "1" "l")  
    (67 "1" 67 "1" "l")  
    (67 "~" 60 "~" "l")  
    (66 "1" 66 "1" "r")  
    (64 "1" 65 "1" "r")  
    (65 "1" 65 "1" "r")  
    (65 "*" 60 "*" "l")  
    (80 " " 200 "!" "e")  
))
    (m_turing)
)
 
(defun m_turing()
    (prin1 "Input string->")(setq str (read))
 
  ; (terpri)
  ; (terpri)
  ;  (delay 200000)
    (step$ 1 str 1)
)
 (defun step$ (pos str sost)
    (if(eql sost 200)(print "Rabota mashiny Turinga okonchena")
         (print"---------------------------------------------------------------------")
    )
    (setq sym (get_symbol pos str))
    (setq list-mt (tu pos sym sost))
    (write-string sym)
    (setq n_str (pack (change (second list-mt) pos (unpack str) 0)))
    (setq n_pos (analiz pos (caddr list-mt)))
    (write-string n_str)
    (write-string " ")
  ;  (delay 200)
    (step$ n_pos n_str (car list-mt))
)
 (defun change (sym pos list n)
    ((eql n pos) (cons sym (cdr list)))
    (cons (car list) (change sym pos (cdr list) (+ n 1)))
)
 
(defun analiz(pos napr)
    ((string= napr "l") (- pos 1))
    ((string= napr "r") (+ pos 1))
    ((string= napr "e") pos)
)
 (defun tu(pos sym sost)
    (setq l1 *com*)
    (loop
        (setq l2 (pop l1))
        (eql t (and (eql (car l2) sost)
        (eql (cadr l2) sym))
 
        (cddr l2))
    )
)
 (defun get_symbol(pos str)
    (char str pos)
)
Миниатюры
Реализация машины тьюринга  
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
07.02.2013, 21:59 4
Ладно, займусь...
0
99 / 99 / 14
Регистрация: 07.02.2013
Сообщений: 128
12.02.2013, 10:07  [ТС] 5
Задача решена. Помощь больше не требуется.
0
12.02.2013, 10:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.02.2013, 10:07
Помогаю со студенческими работами здесь

Машины Тьюринга
Люди добрые, подскажите пожалуйста, а то завтра на зачет идти по Математической Логике) На...

Эмулятор машины Тьюринга
Здраствуйте, дорогие форумчане! Помогите решить задачу через эмулятор машины Тьюринга. 1)...

Алгоритм машины Тьюринга
Построить алгоритм для машины Тьюринга, вычисляющий остаток от деления числа 3 в алфавите {|,a0}

построение Машины Тьюринга
Добрый день!Помогите пожалуйста объяснить как построить машину Тьюринга Дана задача: Постройте...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru