Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

Posts Tagged ‘LaTeX

Як встановити пакет LaTeX, та як зробити так щоб зноски починали нумеруватись на кожній сторінці заново?

with 6 comments

Спочатку відповім на друге запитання, бо воно простіше. В заголовку документа прописуємо:

\usepackage{perpage}
\MakePerPage[1]{footnote}

Друга команда вказує на те що зноскам варто на кожній сторінці починати нумерацію з 1.

При компіляції документа може вилізти така помилка:

! LaTeX Error: File `perpage.sty' not found

Це означає що вам бракує встановленого пакета bigfoot.

Потрібно завантажити архів, розпакувати його, та запустити команду latex bigfoot.ins. Вона розпакує з файлу bigfoot.dtx інші файли.

Далі нам потрібен лише perpage.sty. Його треба скопіювати кудись, а щоб дізнатись куди, для TeX Live потрібно виконати таку команду:

bunyk@xubuntyk:~/bigfoot$ texhash
texhash: /usr/local/share/texmf: directory not writable. Skipping...
texhash: /var/lib/texmf: directory not writable. Skipping...
texhash: /var/lib/texmf: directory not writable. Skipping...
texhash: /var/lib/texmf: directory not writable. Skipping...
texhash: Done.

Я вибрав /usr/local/share/texmf і створив там шлях tex/latex/bigfoot. Куди й кинув файл perpage.sty (повний шлях /usr/local/share/texmf/tex/latex/bigfoot/perpage.sty).

Далі потрібно запустити:

bunyk@xubuntyk:~/bigfoot$ sudo texhash

Це все, документ скомпілювався і я досяг чого хотів, а якщо хочете, можете читати більше про встановлення пакетів.

Advertisements

Written by bunyk

Травень 6, 2013 at 16:07

Оприлюднено в Кодерство, Розмітка

Tagged with

Шаблон курсової/дипломної для кубика

with 5 comments

Підтримуючи цьогорічну моду, і нарешті реалізуючи минулорічні плани, я нарешті зробив шаблон курсової в стилі “тільки додай води” (змісту в сенсі). Можливо комусь згодиться.

Стандарти правда дотримані не до кінця, мої побажання теж. Але з допомогою добрих людей вийшло краще ніж минулого разу.

Зразок (pdf)

Так як wordpress не хоче аби в нього грузили всякі zip-архіви які можуть містити чорт-зна що, картинка окремо (її то в вимогах до оформлення не згадують, але ж гарно), зразок pdf окремо, а код вставлений прямо в пост (нижче).

Якщо код який ви будете вставляти в текст міститиме кирилицю – краще вставляйте його через verbatim (тільки слідкуйте аби не було довгих рядків). Якщо ж кирилиці не буде – не буде ніяких проблем, використовуйте середовище lstlisting.
Прочитати решту цього запису »

Written by bunyk

Червень 20, 2011 at 16:46

Оприлюднено в Конспекти, Розмітка

Tagged with ,

Як робити комп’ютерні презентації?

with 14 comments

В цій публікації мова піде про те як робити презентації за допомогою інструментів HTML та JavaScript, і націлена вона більше на розробників. Якщо вас цікавить загальний процес – читайте новішу публікацію: Як зробити презентацію краще?

Деякі речі, як наприклад вставляти гарно підсвічений код в звичайних програмах для створення презентацій робити дуже важко. Я рився і рився в цьому безмежному павутинні, аж поки не наткнувся на пораду “роби скріншоти ide”. Порада непогана. Папка з картинками – назручніший формат презентації для демонстрації (правда не для наступного редагування), бо може демонструватись будь-яким пристроєм, аж до DVD-плеєра, з мобільним телефоном включно. Я навіть таким чином зробив презентацію прямо на захисті курсової. І ніхто навіть не здогадався що я вдома її взагалі не робив :).

Потім я подумав про txt2tags, html, та переходи між слайдами за посиланням. А якщо додати JavaScript? Коли я про це подумав, то наткнувся на http://www.zackgrossbart.com/hackito/present/. Скрипти в документі – хороша ідея. ПЗ для його відтворення ніби поставляється разом з ним. Ну, і я почав робити свою презентацію.
Прочитати решту цього запису »

Written by bunyk

Серпень 26, 2010 at 12:30

Оприлюднено в Інструменти, Розмітка

Tagged with , ,

Нарешті я зверстав курсову

with 3 comments

Ура. Залишилось тільки скласти презентацію до захисту.

Її текст (1.2 Мб)
Її код з файлами (2 Мб)
Прочитати решту цього запису »

Written by bunyk

Травень 31, 2010 at 01:11

Оприлюднено в Інструменти, Розмітка

Tagged with ,

Конспекти: БД, ЧМ.

leave a comment »

Вчора я купив собі 10 метрів подовжувача, тому мав можливість сидіти на лекції де захочу, з включеним ноутбуком. Тому мені вдалось записати дві лекції.

Правда запис був майже не успішний, бо на лекції з БД, я нічого не розумів. Треба підтягувати теорію. Правда записувати було легко, так як там був майже один текст.

Прочитати решту цього запису »

Written by bunyk

Жовтень 29, 2009 at 16:14

Оприлюднено в Конспекти

Tagged with , ,

Конспекти 2. Спроба експорту.

with 8 comments

Сьогодні я вирішив повторити вчорашній експеримент. Хоча на парі було холодно, пальці мерзли, і набиралось важко. Але все таки, я навіть деколи встигав набирати з майже з тою швидкістю з якою він (Викладач) говорить. (Він давав фору, коли писав по дошці ключові слова). Швидкість формул в мене трохи більша.

Правда це все через те, що я пишу в дивному псевдокоді. Але зате його потім можна легко перетворити в будь-який інший формат.

Правда не зовсім легко, бо мій псевдокод не сильно формальний, і ще багато речей треба робити руками. Але дещо було швидко:
:'<,'>s/!def/<strong>Означення<\/strong>
:'<,'>s/|=/\models
:'<,'>s/.../\ldots

Як приблизно воно має виглядати:


Системне програмування

вівторок, 27 жовтня 2009 10:50:06 +0200

Мінімізація скінченних автоматів (детермінованих)

  1. Існує алгоритм вилучення тупикових станів
  2. вилучення недосяжних станів
  3. Побудови мінімального автомата

Означення
Два стани називаються k-еквівалентними, якщо для ланцюжка
x, |x| \leq k
(q_1,x) \models ^* (q_1,\varepsilon)
(q_2,x) \models ^* (q_{f_2},\varepsilon)
або ні.

Тобто якщо за k-кроків ми попадаємо в заключні конфігурації, або не в заключні (але одночасно).

Алгоритм побудови класів еквівалентних станів для скінченного автомата

0. Спочатку розбиваємо всі стани на два класи Q\setminus F, F

i. На і-тому кроці ми отримаємо систему множин.
і+1. На наступному кроці ми кажемо що стани залишаються еквівалентні, якщо для будь-якого символа вони переходять в стани з одного класу. Інакше вони потрапляють в різні класи еквівалентності.

(n-2) еквівалентність дає можливість побудувати систему станів.

Програмування скінченних автоматів (детермінованих)

Нагадаємо діаграму переходів скінченного автомата для цілочислових констант. //(Знайти малюнок!)

Нехай слово знаходиться у вхідному файлі. Тоді достатньо написати функцію з таким фрагментом коду:
(розписує код для скінченного автомата, який там намальований)

int g=0; int c;
while ((c=getchar())!=eof)
	switch(q)
	{
		case 0: if(c&gt;='1'&amp;&amp;c&lt;='9') { q=3; break; }
						if (c== '\emptyset') {q=1; break; }
						myerror();
		....
		case 3: if(c&gt;='0'&amp;&amp;c&lt;=9) {q=3; break; }
		ну, і так далі.
				
	}
	if(q=='1'||q=='3' ... )  // ok
		else ; //error

Цей стиль програмування має великий плюс – ми читаємо тільки по одному символу, і тільки раз. За допомогою getchar.

Далі, якщо ми навчились програмувати маленькі автомати, для нашої лаболаторної потрібно розробити лексичний аналізатор.

Методика програмування лексичних аналізаторів на основі скінченних автоматів

Коли ми виписуємо класи лексем, то множина всіх лексем – об’єднання цих класів.

Малюнок1.

Таким чином ми можемо зобразити діаграму переходів ДСкА який розпізнає лексеми мови C. ПРограма такого автомата виливається в 200-300 рядків тексту. За дві години програмується, якщо на побудову автомата було потрачено годину.

Провівши розмову про програмууання скінченних автоматів переходимо до того, як автоматизувати процес програмування лексичного аналізатора. Через метасистеми. Але для цього треба трохи теорії.

Скінченні автомати та праволінійні граматики

Означення
G= називається праволінійною, якщо P: A_i \to \omega A_j A_i, A_j \in N
A_i \to \omega\ \ \omega \in \Sigma^*

Для довільної праволінійної граматики G можна побудувати автомат M, такий що L(M)=L(G).
Твердження конструктивне, тому пробуємо довести:

A_i \to \omega A_i

\omega = a_1, a_2, \ldots a_p

A_i \to a_1,\underbrace{a_2,\ldots,a_p,A_j}_{B_1}
A_i \to a_1B_1
B_1 \to a_2 B_2
\ldots
B_{p-1} \to a_pA_j

де B_1,\ldots, B_n – нові нетермінали.

A_i \to a_1,a_2, ... a_p
A_2 \to a_1B_1
B_p \to \varepsilon

Тепер, спробуємо побудувати скінченний автомат. Як імена станів скінченного автомата M візмемо нетермінали перетвореної граматики. Тобто якщо взяти діаграму переходів, то всі вершини – нетермінали.

\sigma: A_i \to aB_j То на діаграмі переходів це буде A_j \xrightarrow{a} B_j B_j \in (A_j,a)

A_j \to \varepsilon => A_i \in F

S-аксіома – ім’я початкового стану на діаграмі.

Тепер треба показати, що за n кроків безпосереднього виведення ланцюжка, ми відпрацюєм нашим автоматом. Є ланцюжок \omega \in L(G) тепер спробуємо з конфігурації (q_0, \omega) \models * (q_1,\varepsilon)

вівторок, 27 жовтня 2009 11:20:49 +0200 перерва вівторок, 27 жовтня 2009 11:26:46 +0200

(q_0, a \omega) \models  (A_j,\omega) =>

S => a A_j => \ldots => \omega

А якщо \omega виводиться, то існує скінченна послідовність кроків, яка приведе в заключний стан.

для довільного СкА M можна побудувати праволінійну граматику G, таку що, L(M) = L(G), і навпаки.

Тобто ми показали, що механізм на синтез за потужністю еквівалентний механізму на аналіз.

Зображення скінченних автоматів та граматик страждає тим, що ми повинні виписувати формальні множини, що таке множина станів, конкретизувати поняття. Можна спробувати ці множини позначати якимись виразами. В ТП, ці вирази називаються регулярними.

Регулярні множини та вирази

Означення
Рeгулярна множина – це \emptyset , {\varepsilon}, {a}, // це я вже записав на CybWiki. Як виявилось після леції, регулярні множини, і регулярні мови це одне і те ж.

Регулярні вирази позначають регулярні множини. Таким чином що порожня множина позначається нулем. // теж CybWiki Ура Карнаух!

Вирази зустрічаются в алгебрах, тому ведем мову про Алгебру регулярних виразів. Сигнатура – \{+,\cdot,^*\}.

Тотожності в алгебрі регулярних виразів

За тотожностями можна оптимізувати регулярні вирази.

  1. P+0=0+p=p
  2. p+p=p
  3. p+q=q+p
  4. (r+q)p=rp+qp
  5. p*+p=p*
  6. 0*=\varepsilon

Рівняння в алгебрі регулярних виразів

Називається рівняння виду: X=aX+b, де a,b – РВ. Воно може мати нескінченну кількість розв’язків, або 1, який не залежить від виду a,b. Той що не залежить від виду називаєься мінімальним. Його вид: X=a*b. Перевіримо що це розв’язок підставивши в рівняння:

a^*b = (aa^*b+b) = (aa^*+ \varepsilon ) b = (\varepsilon +a( \varepsilon +a + a^2 \ldots ))b = a^*b

Системи рівнянь в алгебрі регулярних виразів:
\begin{cases} X_1=a_{11}X_1+a_{12}X_2+....+b_1 \\ X_2=a_{21}X_1+a_{22}X_2+....+b_2 \\ \ldots\end{cases}

Де a_{i,j} , b_i – регулярні вирази. Розв’язується методом Гауса. // Жах! поки не взнаю нащо воно треба, записувати не буду. Крім того я ж знаю метод Гауса.

Існує теорія неруxомої точки та мінімального рішення. //Прогуглити

Давайте візьмемо праволінійну граматику
A_j \to \omega A_j
A_i \to \omega
, і випишемо її в такому вигляді:
S \to a_{11} S | a_{12} A_1 | \ldots A_{1n} A_n-1 | \omega_1
Якщо правила S \to a_{1j} A_i відсутньє, то a_1j=0

Вертикальна риска означає або. Тобто об’єднання мов, або додавання регулярних виразів. Тому ми можемо праволінійну граматику виписати в вигляді системи регулярних рівнянь.

Розв’язок системи рівнянь по змінній S дає нам регулярний вираз, який позначає множину слів які породжуються праволінійною граматикою. // Ну от я знаю нащо воно треба

Залишилось від регулярного виразу дійти до скінченного автомата.

СкА=>Праволійні граматики => Регулярні вирази => СкА

Обчислення (інтерпритація) регулярних виразів. В результаті виходить автомат.
Їх зручно обчислювати коли вони в формі ПОЛІЗ.
Наприклад (a+b*)c
a b * + c \cdot
НУ, і як завжди через стек: // я пам’ятаю

В стеку знаходяться автомати. // гг. Треба ще вивчити як робляться операції на автоматах.

вівторок, 27 жовтня 2009 12:09:52 +0200


Вихідний код:

(підсвітка C++, поки не написав свою)

Системне програмування
вівторок, 27 жовтня 2009 10:50:06 +0200

= Мінімізація скінченних автоматів (детермінованих) =

#Існує алгоритм вилучення тупикових станів
#вилучення недосяжних станів
#Побудови мінімального автомата

!def
Два стани називаються k-еквівалентними, якщо для ланцюжка
x, |x| \leq k
(q_1,x) |=* (q_1,\epsilon)
(q_2,x) |=* (q_{f_2},\epsilon)
або ні.

Тобто якщо за k-кроків ми попадаємо в заключні конфігурації, або не в заключні (але одночасно).

== Алгоритм побудови класів еквівалентних станів для скінченного автомата ==
0. Спочатку розбиваємо всі стани на два класи Q\setminus F, F

i. На і-тому кроці ми отримаємо систему множин
і+1. На наступному кроці ми кажемо що стани залишаються еквівалентні, якщо для будь-якого символа вони переходять в стани з одного класу. Інакше вони потрапляють в різні класи еквівалентності.

(n-2) еквівалентність дає можливість побудувати систему станів.

== Програмування скінченних автоматів (детермінованих) ==
Нагадаємо діаграму переходів скінченного автомата для цілочислових констант. //(Знайти малюнок!)

Нехай слово знаходиться у вхідному файлі. Тоді достатньо написати функцію з таким фрагментом коду:

(розписує код для скінченного автомата, який там намальований)

int g=0; int c;
while ((c=getchar())!=eof)
    switch(q)
    {
        case 0: if(c>=‘1’&&c<=‘9’) { q=3; break; }
                        if (c== ‘\emptyset’) {q=1; break; }
                        myerror();
        ….
        case 3: if(c>=‘0’&&c<=9) {q=3; break; }
        ну, і так далі.
                
    }
    if(q==‘1’||q==‘3’ … )  // ok
        else ; //error

Цей стиль програмування має великий + – ми читаємо тільки по одному символу, і тільки раз. getchar.

Далі, якщо ми навчились програмувати маленькі автомати, для нашої лаболаторної потрібно розробити лексичний аналізатор.

== Методика програмування лексичних аналізаторів на основі скінченних автоматів ==
Коли ми виписуємо класи лексем, то множина всіх лексем – об’єднання цих класів.

Малюнок1.

Таким чином ми можемо зобразити діаграму переходів ДСкА який розпізнає лексеми мови C. ПРограма такого автомата виливається в 200300 рядків тексту. За дві години програмується, якщо на побудову автомата було потрачено годину.

Провівши розмову про програмууання скінченних автоматів переходимо до того, як автоматизувати процес програмування лексичного аналізатора. Через метасистеми. Але для цього треба трохи теорії.

= Скінченні автомати та праволінійні граматики =
!def
G=<N,\Sigma,P,S> називається праволінійною, якщо P: A_i -> \omega A_j A_i, A_j \in N
A_i -> \omega \omega \in \Sigma^*

Для довільної праволінійної граматики G можна побудувати автомат M, такий що L(M)=L(G).
Твердження конструктивне, тому пробуємо довести:

A_i \to \omega A_i

\omega = a_1, a_2, \ldots a_p

$$A_i \to a_1,\underbrace{a_2,\ldots,a_p,A_j}{B_1}
A_i \to a_1B_1
B_1 \to a_2 B_2
\ldots
B_{p-1} \to a_pA_j$$

де B_1,\ldots, B_n – нові нетермінали.

$A_i \to a_1,a_2, … a_p
A_2 \to a_1B_1
B_p \to \epsilon$

Тепер, спробуємо побудувати скінченний автомат. Як імена станів скінченного автомата M візмемо нетермінали перетвореної граматики. Тобто якщо взяти діаграму переходів, то всі вершини – нетермінали.

$\sigma: A_i \to aB_j$ То на діаграмі переходів це буде $ A_j \xrightarrow{a} B_j$
        B_j \in (A_j,a)

A_j \to \epsilon => A_i \in F

S-аксіома – ім’я початкового стану на діаграмі.

Тепер треба показати, що за n кроків безпосереднього виведення ланцюжка, ми відпрацюєм нашим автоматом. Є ланцюжок \omega \in L(G) тепер спробуємо з конфігурації (q_0, \omega) |=* (q_1,\epsilon)

вівторок, 27 жовтня 2009 11:20:49 +0200
перерва
вівторок, 27 жовтня 2009 11:26:46 +0200

(q_0, a \omega) |= (A_j,\omega) =>

S => a A_j => … => \omega

А якщо \omega виводиться, то існує скінченна послідовність кроків, яка приведе в заключний стан.

для довільного СкА M можна побудувати праволінійну граматику G, таку що, L(M) = L(G), і навпаки.

Тобто ми показали, що механізм на синтез за потужністю еквівалентний механізму на аналіз.

Зображення скінченних автоматів та грамати страждає тим, що ми повинні виписувати формальні множини, що таке множина станів, конкретизувати поняття. Можна спробувати ці множини позначати якимись виразами. В ТП, ці вирази називаються регулярними.

= Регулярні множини та вирази =
!def
Рeгулярна множина – це \emptyset , {\epsilon}, {a}, // це я вже записав на CybWiki

Регулярні вирази позначають регулярні множини. Таким чином що порожня множина позначається нулем.  // теж CybWiki Ура Карнаух!

Вирази зустрічаются в алгебрах, тому ведем мову про Алгебру регулярних виразів. Сигнатура – {+,\cdot,*}.

== Тотожності в алгебрі регулярних виразів ==
За тотожностями можна оптимізувати регулярні вирази.

#P+0=0+p=p
#p+p=p
#p+q=q+p
#(r+q)p=rp+qp
#p*+p=p*
#0*=\epsilon

== Рівняння в алгебрі регулярних виразів ==
Називається рівняння виду: X=aX+b, де a,b – РВ. Воно може мати нескінченну кількість розв’язків, або 1, який не залежить від виду a,b. Той що не залежить від виду  називаєься мінімальним. Його вид: X=a*b. Перевіримо що це ррозв’язок підставивши в рівняння:

a*b=(aa*b+b)=(aa*+\epsilon)b=(\epsion+a(\epsilon+a+a^2...))b=a*b

Системи рівнянь в алгебрі регулярних виразів
X_1=a_{11}X_1+a_{12}X_2+….+b_1
X_2=a_{21}X_1+a_{22}X_2+….+b_2
….

Де a_{i,j} , b_i – регулярні вирази. Розв’язується методом Гауса. // Жах! поки не взнаю нащо воно треба, записувати не буду. Крім того я ж знаю метод Гауса.

Існує теорія нерузомої точки та мінімального рішення.  //Ооо, як замерзли пальці. Я вже мимо клавші попадаю

давайте візьмемо праволінйну граматику
A_j \to \omega A_j
A_i \to \omega
, і випишемо її в такому вигляді:
S \t a_11 S | a_12 A_1 | … A_1n A_n-1 | \omega_1
Якщо правила S \to a_1j A_i відсутньє, то a_1j=0

Вертикальна риска означає або. Тобто об’єднання мов, або додавання регулярних виразів. Тому ми можемо праволінійну граматику виписати  в вигляді системи регулярних рівнянь.

Розв’язок системи рівнянь по змінній S дає нам регулярний вираз, який позначає множину слів які породжуються праволінійною граматикою. // Ну от я знаю нащо воно треба

Залишилось від регулярного виразу дійти до скінченного автомата.

СкА=>Праволійні граматики => Регулярні вирази => СкА

Обчислення (інтерпритація) регулярних виразів.  В результаті виходить автомат.
Їх зручно обчислювати коли вони в формі ПОЛІЗ.

Наприклад (a+b*)c
a b * + c \cdot
НУ, і як завжди через стек: // я пам’ятаю

В стеку знаходяться автомати. // гг. Треба ще вивчити як робляться операції на автоматах.

вівторок, 27 жовтня 2009 12:09:52 +0200

Written by bunyk

Жовтень 27, 2009 at 15:59

Матаналіз семестр 4. Код конспекту. (!трафік)

with one comment

PDF – версія тут.

\documentclass[final]{book}

\usepackage[utf8]{inputenc}
\usepackage[ukrainian]{babel}
\usepackage{indentfirst}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{graphicx}

\usepackage{tikz}

%Звідки брати ілюстрації
\graphicspath{{/home/bunyk/images/}}

%Набір теорем, які використовуються в конспекті
\theoremstyle{plain}
\newtheorem{theo}{Теорема}
\newtheorem*{lema}{Лема}
\newtheorem*{follows}{Наслідок}
\theoremstyle{definition}
\newtheorem{defi}{Означення}
\newtheorem{exam}{Приклад}
\newtheorem{task}{Задача}
\newtheorem*{solu}{Розв’язання}
\theoremstyle{remark}
\newtheorem{ask}{Запитання}
\newtheorem{rem}{Зауваження}

\begin{document}
Прочитати решту цього запису »

Written by bunyk

Вересень 28, 2009 at 19:13

Оприлюднено в Кодерство, Розмітка

Tagged with