🗊Презентация Операторлар, мәліметтер қорымен жұмыс

Нажмите для полного просмотра!
Операторлар, мәліметтер қорымен жұмыс, слайд №1Операторлар, мәліметтер қорымен жұмыс, слайд №2Операторлар, мәліметтер қорымен жұмыс, слайд №3Операторлар, мәліметтер қорымен жұмыс, слайд №4Операторлар, мәліметтер қорымен жұмыс, слайд №5Операторлар, мәліметтер қорымен жұмыс, слайд №6Операторлар, мәліметтер қорымен жұмыс, слайд №7Операторлар, мәліметтер қорымен жұмыс, слайд №8Операторлар, мәліметтер қорымен жұмыс, слайд №9Операторлар, мәліметтер қорымен жұмыс, слайд №10Операторлар, мәліметтер қорымен жұмыс, слайд №11Операторлар, мәліметтер қорымен жұмыс, слайд №12Операторлар, мәліметтер қорымен жұмыс, слайд №13Операторлар, мәліметтер қорымен жұмыс, слайд №14Операторлар, мәліметтер қорымен жұмыс, слайд №15Операторлар, мәліметтер қорымен жұмыс, слайд №16Операторлар, мәліметтер қорымен жұмыс, слайд №17Операторлар, мәліметтер қорымен жұмыс, слайд №18

Вы можете ознакомиться и скачать презентацию на тему Операторлар, мәліметтер қорымен жұмыс. Доклад-сообщение содержит 18 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1






Операторлар, мәліметтер қорымен жұмыс
Описание слайда:
Операторлар, мәліметтер қорымен жұмыс

Слайд 2





Операторларды анықтау:
Операторларды анықтау:
:– ор(Приоритет, Спецификатор, предикат атауы).
Приоритет – 1 мен 1200 аралығындағы сан. Приоритет көп болған сайын сан кіші. Спецификатор  х, у және f қолданады.
f – біздің предикат, біз анықтаймыз.
х – f приоритетінен міндетті түрде көп предикат.
у – f приоритетінен міндетті түрде көп немесе тең предикат
Берілу әдістері:
үш типті инфиксті операторлар: xfx    xfy    yfx
екі типті префиксті операторлар: fx    fy
екі типті постфиксные операторлар: xf    yf 
Мысал:
:– ор(500, yfx, –).
Описание слайда:
Операторларды анықтау: Операторларды анықтау: :– ор(Приоритет, Спецификатор, предикат атауы). Приоритет – 1 мен 1200 аралығындағы сан. Приоритет көп болған сайын сан кіші. Спецификатор х, у және f қолданады. f – біздің предикат, біз анықтаймыз. х – f приоритетінен міндетті түрде көп предикат. у – f приоритетінен міндетті түрде көп немесе тең предикат Берілу әдістері: үш типті инфиксті операторлар: xfx xfy yfx екі типті префиксті операторлар: fx fy екі типті постфиксные операторлар: xf yf Мысал: :– ор(500, yfx, –).

Слайд 3





Анықтаудың мұндай әдісі айтады: предикат «минус»  приоритет 500 бар және оның сол жағына оған тең предикат орналаса алады, ал оң жағынан тек одан кіші. Сонда, а – b – с  жазбасы  (а – b) – с ретінде интерпретацияланады.  Сол жақтағы суретте көрсетілгендей.
Анықтаудың мұндай әдісі айтады: предикат «минус»  приоритет 500 бар және оның сол жағына оған тең предикат орналаса алады, ал оң жағынан тек одан кіші. Сонда, а – b – с  жазбасы  (а – b) – с ретінде интерпретацияланады.  Сол жақтағы суретте көрсетілгендей.
Описание слайда:
Анықтаудың мұндай әдісі айтады: предикат «минус» приоритет 500 бар және оның сол жағына оған тең предикат орналаса алады, ал оң жағынан тек одан кіші. Сонда, а – b – с жазбасы (а – b) – с ретінде интерпретацияланады. Сол жақтағы суретте көрсетілгендей. Анықтаудың мұндай әдісі айтады: предикат «минус» приоритет 500 бар және оның сол жағына оған тең предикат орналаса алады, ал оң жағынан тек одан кіші. Сонда, а – b – с жазбасы (а – b) – с ретінде интерпретацияланады. Сол жақтағы суретте көрсетілгендей.

Слайд 4





Орындарымен ауыстырса:– ор(500, xfy, –).
Орындарымен ауыстырса:– ор(500, xfy, –).
Онда оң жақтағы сурет дұрыс боладыда алу логикасы сіз мектепте үйренген математикамен үйлеспейді.
Прологта математикалық амалдар дұрыс орындалуы үшін амалдардың келесі приоритеттері қолданылады
:-  ор(500, yfx, –).
:-  ор(500, yfx, +).
:-  ор(400, yfx, *).
-  ор(400, yfx, /). 
Сонда 2*а+b*с өрнегі келесі суреттегідей интерпретацияланады:
Описание слайда:
Орындарымен ауыстырса:– ор(500, xfy, –). Орындарымен ауыстырса:– ор(500, xfy, –). Онда оң жақтағы сурет дұрыс боладыда алу логикасы сіз мектепте үйренген математикамен үйлеспейді. Прологта математикалық амалдар дұрыс орындалуы үшін амалдардың келесі приоритеттері қолданылады :- ор(500, yfx, –). :- ор(500, yfx, +). :- ор(400, yfx, *). - ор(400, yfx, /). Сонда 2*а+b*с өрнегі келесі суреттегідей интерпретацияланады:

Слайд 5





Яғни алдымен приоритеті көп операциялар орындалады, соңынан приоритеті аз операциялар. Спецификаторлар операторлардың тізбектеле орындалу ретін көрсетеді.
Яғни алдымен приоритеті көп операциялар орындалады, соңынан приоритеті аз операциялар. Спецификаторлар операторлардың тізбектеле орындалу ретін көрсетеді.
Ендігі жерде біз бағдарламада анықтасақ:
:– ор(1000, fx, not).
Онда мына сұранысты орындай аламыз:
?– X = 2, not X == 3.
X = 2
yes
not предикатының тік жақшаға алынбағанына назар аударыңыз.
Үй тапсырмасы: келесі белгілі ереже үшін барлық предикаттарды анықтау керек:
Описание слайда:
Яғни алдымен приоритеті көп операциялар орындалады, соңынан приоритеті аз операциялар. Спецификаторлар операторлардың тізбектеле орындалу ретін көрсетеді. Яғни алдымен приоритеті көп операциялар орындалады, соңынан приоритеті аз операциялар. Спецификаторлар операторлардың тізбектеле орындалу ретін көрсетеді. Ендігі жерде біз бағдарламада анықтасақ: :– ор(1000, fx, not). Онда мына сұранысты орындай аламыз: ?– X = 2, not X == 3. X = 2 yes not предикатының тік жақшаға алынбағанына назар аударыңыз. Үй тапсырмасы: келесі белгілі ереже үшін барлық предикаттарды анықтау керек:

Слайд 6





 ~ (А & В)  <===>  ~А v ~В
 ~ (А & В)  <===>  ~А v ~В
Ол эквивалентті түрде оқылуы керек (not(және(А, В)), немесе(not(A, not(В)))
assert(X) – X дәйегін бағдарламаға қосады.
retract(X) – X дәйегін бағдарламадан жояды.
Қосудың екі модификациясы бар assertz – бағдарламаның соңына қосу, asserta – бағдарламаның басына қосу.
Қолдану мысалы:
?– assertz(data(1)).
yes
?– data(X).
X = 1
yes
Описание слайда:
~ (А & В) <===> ~А v ~В ~ (А & В) <===> ~А v ~В Ол эквивалентті түрде оқылуы керек (not(және(А, В)), немесе(not(A, not(В))) assert(X) – X дәйегін бағдарламаға қосады. retract(X) – X дәйегін бағдарламадан жояды. Қосудың екі модификациясы бар assertz – бағдарламаның соңына қосу, asserta – бағдарламаның басына қосу. Қолдану мысалы: ?– assertz(data(1)). yes ?– data(X). X = 1 yes

Слайд 7





?– listing.
?– listing.
data(1).
yes
?– retract(data(_)).
yes
?– listing.
Yes
Динамикалық предикатқа дұрыс жүгіну үшін оны динамикалық ретінде анықтау керек. Ол үшін бағдарламада шақыру керек dynamic(пpeдикaт_атауы/Apнocть_пpeдикaтa).
Фибоначчи сандарының мысалдары. Бағдарлама мәтіні:
:–dynamic(fibon/2).
Описание слайда:
?– listing. ?– listing. data(1). yes ?– retract(data(_)). yes ?– listing. Yes Динамикалық предикатқа дұрыс жүгіну үшін оны динамикалық ретінде анықтау керек. Ол үшін бағдарламада шақыру керек dynamic(пpeдикaт_атауы/Apнocть_пpeдикaтa). Фибоначчи сандарының мысалдары. Бағдарлама мәтіні: :–dynamic(fibon/2).

Слайд 8





fib(0, 1).
fib(0, 1).
fib(l, 1).
fib(N, V) :– N1 is N–1, N2 is N–2, (fibon(N1, V1); fib(N1, V1)), (fibon(N2, V2); fib(N2, V2)), V is V1+V2, asserta(fibon(N,V)).
Шешімді осылайша орындауда рекурсивті шақырулар саны fib айтарлықтай кемиді. Неге  fib орнына fibon мәліметтерді сақтау үшін? fibon қолданылады, себебі fib статикалық предикат ретінде анықталады, ал Пролог статикалық предикатқа өзгеріс енгізуге рұқсат етпейді. Өзгерістерді тек қана динамикалық предикаттарға енгізуге болады!
Предикат abolish(предикат_атауы_Арность_предиката) осы атаудағы және осы арндағы предикаттардың барлық кірулерді жояды.
retract арқылы осыған ұқсас предикаттың жоюлуын жазыңыз:
Описание слайда:
fib(0, 1). fib(0, 1). fib(l, 1). fib(N, V) :– N1 is N–1, N2 is N–2, (fibon(N1, V1); fib(N1, V1)), (fibon(N2, V2); fib(N2, V2)), V is V1+V2, asserta(fibon(N,V)). Шешімді осылайша орындауда рекурсивті шақырулар саны fib айтарлықтай кемиді. Неге fib орнына fibon мәліметтерді сақтау үшін? fibon қолданылады, себебі fib статикалық предикат ретінде анықталады, ал Пролог статикалық предикатқа өзгеріс енгізуге рұқсат етпейді. Өзгерістерді тек қана динамикалық предикаттарға енгізуге болады! Предикат abolish(предикат_атауы_Арность_предиката) осы атаудағы және осы арндағы предикаттардың барлық кірулерді жояды. retract арқылы осыған ұқсас предикаттың жоюлуын жазыңыз:

Слайд 9





retractAll(X).
retractAll(X).
retractAll(X) :– retract(X), retractAll(X).
retractAll(_).
X тің бағдарламаға барлық кірулерін жояды.
Тапсырма: Прологтағы статикалық айнымалыларды assert және retrtact қолдану арқылы анықтау.
Жұмыс тәртібі:
init(айнымалы атауы, мәні) – берілген мәні бар статикалық айнымалыны инициализациялау.
set(ИмяПеременной, Значение) – айнымалыға мәнді беру.
get(ИмяПеременной, Значение) – айнымалыдан мәнді алу.
Шешім:
init(Var, Val) :– assertz(variables(Var, Val)).
set(Var, Val) :– retract(variables(Var, _)),
Описание слайда:
retractAll(X). retractAll(X). retractAll(X) :– retract(X), retractAll(X). retractAll(_). X тің бағдарламаға барлық кірулерін жояды. Тапсырма: Прологтағы статикалық айнымалыларды assert және retrtact қолдану арқылы анықтау. Жұмыс тәртібі: init(айнымалы атауы, мәні) – берілген мәні бар статикалық айнымалыны инициализациялау. set(ИмяПеременной, Значение) – айнымалыға мәнді беру. get(ИмяПеременной, Значение) – айнымалыдан мәнді алу. Шешім: init(Var, Val) :– assertz(variables(Var, Val)). set(Var, Val) :– retract(variables(Var, _)),

Слайд 10





Санның квадратын есептеу бағдарламасы:
Санның квадратын есептеу бағдарламасы:
square :– repeat, nl, write('Enter X = '), read(X), (X = end, !; Y is X*X, write('X*X = '), write(Y), fail).
Пайдаланушы санды енгізеді  – олардың квадратын есептейді. Бұл жағдай пайдаланушы end енгізбейінше орындала береді сол кезде бағдарлама дұрыс аяқталады немесе санның орнына басқа нәрсе енгізгенде exception орындалады.
?– square.
Enter X = 23.
Х*Х = 529
Enter X = 45.
Х*Х = 2025
Enter X = end.
		yes
Описание слайда:
Санның квадратын есептеу бағдарламасы: Санның квадратын есептеу бағдарламасы: square :– repeat, nl, write('Enter X = '), read(X), (X = end, !; Y is X*X, write('X*X = '), write(Y), fail). Пайдаланушы санды енгізеді – олардың квадратын есептейді. Бұл жағдай пайдаланушы end енгізбейінше орындала береді сол кезде бағдарлама дұрыс аяқталады немесе санның орнына басқа нәрсе енгізгенде exception орындалады. ?– square. Enter X = 23. Х*Х = 529 Enter X = 45. Х*Х = 2025 Enter X = end. yes

Слайд 11





Дұрыс емес енгізуден қорғау үшін санды енгізгенде тексеру керек:
Дұрыс емес енгізуден қорғау үшін санды енгізгенде тексеру керек:
square :– repeat, nl, write('Enter X = '), read(X), (X = end, !; number(X), Y is X*X, write('X*X = '),write(Y), fail).
Сонда аламыз:
?– square.
Enter X = еr.
Enter X = 345.
Х*Х = 119025
Enter X = end.
Yes
Мұнда: number(X) – қосымша предикат, X сан болып табылатынын тексереді. Пролог тілінде оны қалай жазуға болады. (fail мен repeat орындаған секілді)?
Описание слайда:
Дұрыс емес енгізуден қорғау үшін санды енгізгенде тексеру керек: Дұрыс емес енгізуден қорғау үшін санды енгізгенде тексеру керек: square :– repeat, nl, write('Enter X = '), read(X), (X = end, !; number(X), Y is X*X, write('X*X = '),write(Y), fail). Сонда аламыз: ?– square. Enter X = еr. Enter X = 345. Х*Х = 119025 Enter X = end. Yes Мұнда: number(X) – қосымша предикат, X сан болып табылатынын тексереді. Пролог тілінде оны қалай жазуға болады. (fail мен repeat орындаған секілді)?

Слайд 12





Дұрыс емес енгізуден қорғау үшін санды енгізгенде тексеру керек:
Дұрыс емес енгізуден қорғау үшін санды енгізгенде тексеру керек:
square :– repeat, nl, write('Enter X = '), read(X), (X = end, !; number(X), Y is X*X, write('X*X = '),write(Y), fail).
Сонда аламыз:
?– square.
Enter X = еr.
Enter X = 345.
Х*Х = 119025
Enter X = end.
Yes
Мұнда: number(X) – қосымша предикат, X сан болып табылатынын тексереді. Пролог тілінде оны қалай жазуға болады. (fail мен repeat орындаған секілді)?
Описание слайда:
Дұрыс емес енгізуден қорғау үшін санды енгізгенде тексеру керек: Дұрыс емес енгізуден қорғау үшін санды енгізгенде тексеру керек: square :– repeat, nl, write('Enter X = '), read(X), (X = end, !; number(X), Y is X*X, write('X*X = '),write(Y), fail). Сонда аламыз: ?– square. Enter X = еr. Enter X = 345. Х*Х = 119025 Enter X = end. Yes Мұнда: number(X) – қосымша предикат, X сан болып табылатынын тексереді. Пролог тілінде оны қалай жазуға болады. (fail мен repeat орындаған секілді)?

Слайд 13





Бинарлы ағаштар.
Бинарлы ағаштар.
Бинарлы ағаш – бұл әр түйінінде максимум екі бұтағы бар ағаш.
Прологта бинарлы ағаштарды беру нұсқалары:
1 a(b(d),c(e,f)).
2 nil түсінігін енгіземіз – п бос ағаш. btree предикатымен ағашты белгілейміз, үш параметрлі: бірінші – түбірі, екінші – сол жақтағы ағаш, үшінші – оң жақтағы ағаш.
btree(a, btree(b, btree(d, nil, nil), nil), btree(с, btree(e, nil, nil), 				btree(f, nil, nil)))
Описание слайда:
Бинарлы ағаштар. Бинарлы ағаштар. Бинарлы ағаш – бұл әр түйінінде максимум екі бұтағы бар ағаш. Прологта бинарлы ағаштарды беру нұсқалары: 1 a(b(d),c(e,f)). 2 nil түсінігін енгіземіз – п бос ағаш. btree предикатымен ағашты белгілейміз, үш параметрлі: бірінші – түбірі, екінші – сол жақтағы ағаш, үшінші – оң жақтағы ағаш. btree(a, btree(b, btree(d, nil, nil), nil), btree(с, btree(e, nil, nil), btree(f, nil, nil)))

Слайд 14





Бағдарламаны жазудың екінші нұсқасы бұдан күрделірек, бірақ бағдарламаны жазуға ыңғайлы.
Бағдарламаны жазудың екінші нұсқасы бұдан күрделірек, бірақ бағдарламаны жазуға ыңғайлы.
Ағаштағы элементті іздеу бағдарламасын қарастырайық –  member бағдарламасының аналогы, бірақ ағаштарға арналған.
Оны in(Item, Tree) деп атайық.
Бірінші параметр ретінде – ізделінуші элемент, екінші параметр  – btree(...) ағаш түрі
in(Item, btree(Item, _, _)).
in(Item, btree(_, Left, _)) :– in(Item, Left).
in(Item, btree(_, _, Right)) :– in(Item, Right). 
Бірінші ереже – индукция базасы – бойынша: ізделінуші элемент ағаштың түбірінде орналасқан.
Екінші ереже бойынша: ізделінуші элемент ағаштың сол жақтағы бұтағында орналасқан. Үшінші ереже бойынша : ізделінуші элемент ағаштың оң жақтағы бұтағында орналасқан.
Описание слайда:
Бағдарламаны жазудың екінші нұсқасы бұдан күрделірек, бірақ бағдарламаны жазуға ыңғайлы. Бағдарламаны жазудың екінші нұсқасы бұдан күрделірек, бірақ бағдарламаны жазуға ыңғайлы. Ағаштағы элементті іздеу бағдарламасын қарастырайық – member бағдарламасының аналогы, бірақ ағаштарға арналған. Оны in(Item, Tree) деп атайық. Бірінші параметр ретінде – ізделінуші элемент, екінші параметр – btree(...) ағаш түрі in(Item, btree(Item, _, _)). in(Item, btree(_, Left, _)) :– in(Item, Left). in(Item, btree(_, _, Right)) :– in(Item, Right). Бірінші ереже – индукция базасы – бойынша: ізделінуші элемент ағаштың түбірінде орналасқан. Екінші ереже бойынша: ізделінуші элемент ағаштың сол жақтағы бұтағында орналасқан. Үшінші ереже бойынша : ізделінуші элемент ағаштың оң жақтағы бұтағында орналасқан.

Слайд 15





Сұраныс үшін трассировкасын жазыңыз:
Сұраныс үшін трассировкасын жазыңыз:
?– in(b, btree(a, btree(b, nil, nil)), nil).
Келтірілген бағдарлама тереңнен іздеуді орындайды. Бізде жай бинарлы ағаш емес, бинарлы сөздік деп ойлаңыз: ағаштың түйіндерінде сандар орналасқан, әрі сол жақ ағаштағы сандар  түбірдегілердегі сандарға тең немесе олардан кем, ал оң жақ түйіндеріндегі сандар міндетті түрде үлкен. Ағашқа элементтің кіруін іздеу бағдарламасын жетілдіруіміз керек.
Айта кету керек, индексациялау кезінде  Oracle МББЖ сі дәл осындай ағаштарды тұрғызады.
Описание слайда:
Сұраныс үшін трассировкасын жазыңыз: Сұраныс үшін трассировкасын жазыңыз: ?– in(b, btree(a, btree(b, nil, nil)), nil). Келтірілген бағдарлама тереңнен іздеуді орындайды. Бізде жай бинарлы ағаш емес, бинарлы сөздік деп ойлаңыз: ағаштың түйіндерінде сандар орналасқан, әрі сол жақ ағаштағы сандар түбірдегілердегі сандарға тең немесе олардан кем, ал оң жақ түйіндеріндегі сандар міндетті түрде үлкен. Ағашқа элементтің кіруін іздеу бағдарламасын жетілдіруіміз керек. Айта кету керек, индексациялау кезінде Oracle МББЖ сі дәл осындай ағаштарды тұрғызады.

Слайд 16





1 inS(Item, btree(Item, _, _)).
1 inS(Item, btree(Item, _, _)).
2 inS(Item, btree(Root, Left, _)) :– Item =< Root, in(Item, Left).
3 inS(Item, btree(Root, _, Right)) :– Item > Root, in(Item, Right).
Бинарлы ағашты мына тізім түрінде көрсетуге болады: btree2list(Tree, List).
1 btree2list(Tree, List):– btree2list(Tree, [], List).
2 btree2list(nil, List, List).
 3 btree2list(btree(Root, Left, Right), List, [Root | RList]) :– btree2list(Left, List, List1), btree2list(Right, List1, RList).
Бірінші ереже үш параметрлі предикатты шақыруды бағыттайды, оның параметрлерінің бірі бос тізім болып табылады. Екіншісі – индукция базасы. Үшіншісі – алдымен бір тізімнен нәтижені жинақтайды, одан кейін келесіден, соңынан оларға ағаш түбірін қосады.
Описание слайда:
1 inS(Item, btree(Item, _, _)). 1 inS(Item, btree(Item, _, _)). 2 inS(Item, btree(Root, Left, _)) :– Item =< Root, in(Item, Left). 3 inS(Item, btree(Root, _, Right)) :– Item > Root, in(Item, Right). Бинарлы ағашты мына тізім түрінде көрсетуге болады: btree2list(Tree, List). 1 btree2list(Tree, List):– btree2list(Tree, [], List). 2 btree2list(nil, List, List). 3 btree2list(btree(Root, Left, Right), List, [Root | RList]) :– btree2list(Left, List, List1), btree2list(Right, List1, RList). Бірінші ереже үш параметрлі предикатты шақыруды бағыттайды, оның параметрлерінің бірі бос тізім болып табылады. Екіншісі – индукция базасы. Үшіншісі – алдымен бір тізімнен нәтижені жинақтайды, одан кейін келесіден, соңынан оларға ағаш түбірін қосады.

Слайд 17





Трассировка режіміндегі Прологтағы жауап пен сұранысты қарастырамыз:
Трассировка режіміндегі Прологтағы жауап пен сұранысты қарастырамыз:
?– btree21ist(btree(a, nil, nil), R).
R=[a]
yes
Әрбір сұрақ белгісінің соңынан  «Enter» бағдарламасы басылады.
Описание слайда:
Трассировка режіміндегі Прологтағы жауап пен сұранысты қарастырамыз: Трассировка режіміндегі Прологтағы жауап пен сұранысты қарастырамыз: ?– btree21ist(btree(a, nil, nil), R). R=[a] yes Әрбір сұрақ белгісінің соңынан «Enter» бағдарламасы басылады.

Слайд 18





Үй тапсырмасы:  теңдестірілген бинарлы ағашты, яғни ағаштардың тереңдігінің айырмашылығы 1 ден көп емес бағдарламаны жазу керек. 
Үй тапсырмасы:  теңдестірілген бинарлы ағашты, яғни ағаштардың тереңдігінің айырмашылығы 1 ден көп емес бағдарламаны жазу керек. 
Сол жақ ағаш теңдестірілген, ал оң жақтағы ағаш теңдестірілмеген, яғни «с» бұтағы мен «f» бұтағының айырмасы 2 тең.
Описание слайда:
Үй тапсырмасы: теңдестірілген бинарлы ағашты, яғни ағаштардың тереңдігінің айырмашылығы 1 ден көп емес бағдарламаны жазу керек. Үй тапсырмасы: теңдестірілген бинарлы ағашты, яғни ағаштардың тереңдігінің айырмашылығы 1 ден көп емес бағдарламаны жазу керек. Сол жақ ағаш теңдестірілген, ал оң жақтағы ағаш теңдестірілмеген, яғни «с» бұтағы мен «f» бұтағының айырмасы 2 тең.



Похожие презентации
Mypresentation.ru
Загрузить презентацию