DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2013
Тип роботи:
Курсова робота
Предмет:
Теорія алгоритмів

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки, молоді та спорту України Полтавський національний технічний університет Ім. Юрія Кондратюка Факультет інформаційних та телекомунікаційних технологій і систем Курсова робота з дисципліни «Теория алгоритмів» ЗМІСТ Постановка задачі 3 Вступ 4 Теорія 5 Нормальний алгоритм Маркова 5 Десяткова система числення. 9 Шістнадцяткова система числення. 10 Приклади 12 Практична реалізація 13 Лістинг програми 14 Результати роботи програми 23 Висновки 25 Література 26 ПОСТАНОВКА ЗАДАЧІ Варіант 19 (Рак 202-ТН)  Скласти нормальний алгоритм Маркова для перетворення числа в десятковій системі числення в систему з основою 16 (наприклад Вхідні дані: 255 Вихідні дані: FF). Вимоги до програми: Можливість перегляду коду нормального алгоритму Маркова. Покрокова візуалізація роботи програми. Інтерфейс під Windows! Не консольний.   ВСТУП Вважається, що за допомогою нормальних алгоритмів Маркова (алгорифмів) можливо задати будь-який алгоритм. У межах даноії курсової роботи складемо нормальний алгоритм Маркова для перетворення числа з десяткової системи числення в систему з основою 16. Десятковою системою числення у повсякденному житті користується більша (якщо не вся) частина населення планети. Шістнадцяткову використовують в основному в обчислювальній техніці і програмуванні. Перед програмістами часто стоїть задача перетворення чисел з однієї системи числення в іншу. Для перевірки роботи нормального алгоритму Маркова напишемо емулятор на мові програмування високого рівня Java. Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем, приобретённой компанией Oracle). Приложения Java обычно компилируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) независимо от компьютерной архитектуры. Дата официального выпуска — 23 мая 1995 года. Для розробки своєї програми я використав середовище програмування Eclipse. Eclipse (вимовляється «і-клі́пс», від англійського «затемнення») — вільне модульне інтегроване середовище розробки програмного забезпечення. Розробляється і підтримується Eclipse Foundation. Написаний в основному на Java, і може бути використаний для розробкизастосунків на Java і, за допомогою різніх плагінів, на інших мовах програмування, включаючи Ada, C, C++, COBOL, Perl, PHP, Python, R, Ruby(включно з каркасом Ruby on Rails), Scala, Clojure та Scheme. Середовища розробки часто називають Eclipse ADT (Ada Development Toolkit) для Ada, Eclipse CDT для C/C++, Eclipse JDT для Java, Eclipse PDT для PHP. ТЕОРІЯ Нормальний алгоритм Маркова Для формалізації поняття алгоритму російський математик А.А. Марков запропонував використовувати асоціативні обчислення. Розглянемо деякі поняття асоціативного обчислення. Нехай є алфавіт (кінцевий набір різних символів). Складові його символи будемо називати літерами. Будь кінцева послідовність літер алфавіту (лінійний їх ряд) називається словом в цьому алфавіті. Розглянемо два слова N і М в деякому алфавіті А. Якщо N є частиною М, то говорять, що N входить в М. Задамо в деякому алфавіті кінцеву систему підстановки N - М, S - Т ,..., де N, M, S, Т, ... - Слова в цьому алфавіті. Будь-яку підстановку NM можна застосувати до деякого слова К наступним способом: якщо в К є одне або кілька входжень слова N, то будь-яке з них може бути замінено словом М, і, навпаки, якщо є входження М, то його можна замінити словом N. Наприклад, в алфавіті А = {а, b, с} є слова N = ab, М = bcb, К = abcbcbab, Замінивши в слові К слово N на М, одержимо bcbcbcbab або abcbcbbcb, і, навпаки, замінивши М на N, отримаємо aabcbab або аbсаbаb. Підстановка ab - bcb неприпустима до слова bacb, так як не ab, ні bcb не входить в це слово. До отриманих за допомогою допустимих підстановок слів можна знову застосувати допустимі підстановки і т.д. Сукупність усіх слів у даному алфавіті разом з системою допустимих підстановки називають асоціативним обчисленням. Щоб задати асоціативне числення, досить задати алфавіт і систему підстановки. Слова P1 і Р2 в деякому асоціативному обчисленні називаються суміжними, якщо одна з них може бути перетворено в інше однократним застосуванням допустимої підстановки. Послідовність слів Р, P1, Р2,..., М називається дедуктивної ланцюжком, що веде від слова Р до слова М, якщо кожне з двох поруч розташованих слів цього ланцюжка - суміжне. Слова Р і М називають еквівалентними, якщо існує ланцюжок від Р до М і назад. Приклад: Алфавіт Підстановки {а, b, с, d, е} ас - Сa, ad - da; eca - ae bc - cb; eda - be bd - db; edb - be Слова abcde і acbde - суміжні (підстановка bc - cb). Слова abcde - cadbe еквівалентні. Може бути розглянутий спеціальний вид асоціативного числення, в якому підстановки є орієнтованими: N → М (стрілка означає, що підстановку дозволяється проводити лише зліва направо). Для кожного асоціативного обчислення існує завдання: для будь-яких двох слів визначити, чи є вони еквівалентними чи ні. Будь-який процес виведення формул, математичні викладки і перетворення також є дедуктивними ланцюжками в деякому асоціативному численні. Побудова асоціативних числень є універсальним методом детермінованою переробки інформації і дозволяє формалізувати поняття алгоритму. Введемо поняття алгоритму на основі асоціативного обчислення: алгоритмом в алфавіті А називається зрозуміле точне розпорядження, що визначає процес над словами з А і допускає будь-яке слово в якості початкового. Алгоритм в алфавіті А задається у вигляді системи допустимих підстановки, доповненої точним приписом про те, в якому порядку потрібно застосовувати допустимі підстановки і коли настає зупинка. Приклад: Алфавіт: Система підстановки В: А = {а, b, с} cb - cc ССА - аb ab - bса Припис про застосування підстановки: у довільному слові Р треба зробити можливі підстановки, замінивши ліву частину підстановки на праву; повторити процес з знову отриманим словом. Так, застосовуючи систему підстановки В з розглянутого прикладу до слів babaac і bсaсаbс отримуємо: babaac → bbcaaac → зупинка bcacabc → bcacbcac → bcacccac → bсасаbс → нескінченні процес (зупинки немає), так як ми отримали вихідне слово. Запропонований А.А. Марковим спосіб уточнення поняття алгоритму заснований на понятті нормального алгоритму, який визначається наступним чином. Нехай заданий алфавіт А і система підстановки В. Для довільного слова Р підстановки з В підбираються в тому ж порядку, в якому вони слідують у В.. Якщо відповідної підстановки немає, то процес зупиняється. В іншому випадку береться перша з відповідних підстановки і проводиться заміна її правою частиною першого входження її лівій частині в Р. Потім всі дії повторюються для отриманого слова P1. Якщо застосовується остання підстановка з системи В, процес зупиняється. Такий набір приписів разом з алфавітом А і набором підстановки У визначають нормальний алгоритм. Процес зупиняється тільки у двох випадках: 1) коли відповідна підстановка не знайдена, 2) коли застосована остання підстановка з їх набору. Різні нормальні алгоритми відрізняються один від одного алфавітами і системами підстановки. Наведемо приклад нормального алгоритму, що описує додавання-натуральних чисел (представлених наборами одиниць). Приклад: Алфавіт: Система підстановки В: А = (+, 1) 1 + → + 1 + 1 → 1 1 → 1 Слово Р: 11 +11 +111 Послідовна переробка слова Р за допомогою нормального алгоритму Маркова проходить через наступні етапи: Р = 11 + 11 + 111 Р5 = + 1 + 111 111 Р1 = 1 + 111 + 111 Р6 = + + 1111111 Р2 = + 1111 + 111 = Р7 + 1111111 Р3 = + 111 + 1111 Р8 = 1111111 Р4 = + 11 + 11 111 Р9 = 1111111 Нормальний алгоритм Маркова можна розглядати як універсальну форму завдання будь-якого алгоритму. Універсальність нормальних алгоритмів декларується принципом нормалізації: для будь-якого алгоритму в довільному кінцевому алфавіті А можна побудувати еквівалентний йому нормальний алгоритм над алфавітом А, Роз'яснимо останнє твердження. У деяких випадках не вдається побудувати нормальний алгоритм, еквівалентний даному в алфавіті А, якщо використовувати в підстановках алгоритму тільки букви цього алфавіту. Однак, можна побудувати необхідний нормальний алгоритм, виробляючи розширення алфавіту А (додаючи до нього деяке число нових букв). У цьому випадку говорять, що побудований алгоритм є алгоритмом над алфавітом А, хоча він буде застосовуватися лише до слів у вихідному алфавіті A. Якщо алгоритм N заданий у деякому розширенні алфавіту А, то говорять, що N є нормальний алгоритм над алфавітом А. Домовимося називати той чи інший алгоритм нормалізуемих, якщо можна побудувати еквівалентний йому нормальний алгоритм, і ненормалізуемим в іншому випадку. Принцип нормалізації тепер може бути висловлений у видозміненій формі: всі алгоритми нормалізуемих. Даний принцип не може бути строго доведений, оскільки поняття довільного алгоритму не є строго визначеним і грунтується на тому, що всі Відомі в даний час алгоритми є нормалізуемих, а способи композиції алгоритмів, що дозволяють будувати нові алгоритми з вже відомих, не виводять за межі класу нормалізуемих алгоритмів. Нижче перераховані способи композиції нормальних алгоритмів. I. Суперпозиція алгоритмів. При суперпозиції двох алгоритмів А і В вихідна слово першого алгоритму розглядається як вхідний слово другий алгоритм В. Результат суперпозиції С може бути представлений у вигляді С (р) = В (А (р)), II. Об'єднання алгоритмів. Об'єднанням алгоритмів А і В в одному і тому ж алфавіті називається алгоритм С в тому ж алфавіті, що перетворює будь-яке слово р, міститься в перетині областей визначення алгоритмів А і В, у записані поруч слова А (р) і В (р). III. Розгалуження алгоритмів. Розгалуження алгоритмів є композицією D трьох алгоритмів А, В і С, причому область визначення алгоритму D є перетином областей визначення всіх трьох алгоритмів А, В і С, а для будь-якого слова р з цього перетину D (p) = А (р), якщо С (р) = е, D (p) = B (p), якщо С (р) = е, де е - порожній рядок. IV. Ітерація алгоритмів. Ітерація (повторення) являє собою таку композицію З двох алгоритмів А і В, що для будь-якого вхідного слова р відповідне слово С (р) утворюється в результаті послідовного багаторазового застосування алгоритму А до тих пір, поки не вийде слово, преобразуемое алгоритмом В. Нормальні алгоритми Маркова є не тільки засобом теоретичних побудов, але й основою спеціалізованої мови програмування, що застосовується як мова символьних перетворень при розробці систем штучного інтелекту. Це один з небагатьох мов, розроблених в Росії і що здобули популярність у всьому світі. Існує строгий доказ того, що за можливостями перетворення нормальні алгоритми Маркова еквівалентні машинам Тюринга. Десяткова система числення Десяткова система числення — це позиційна система числення із основою 10. Кожне число в якій записується за допомогою 10-ти символів, цифр - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Запис числа формується за загальним принципом: на n-й позиції (справа наліво від 0) стоїть цифра, що відповідає кількості n-х степенів десятки у цьому числі. Наприклад: 123456 = 1·105 + 2·104 + 3·103 + 4·102 + 5·101 + 6·100 Дробова частина числа формується за таким самим принципом, тільки позиція цифри в дробовій частині відраховується від коми зліва направо починаючи з 1 і береться зі знаком "-". Наприклад: 123,456 = 1·102 + 2·101 + 3·100 + 4·10-1 + 5·10-2 + 6·10-3 Шістнадцяткова система числення. Шістнадцяткова систе́ма чи́слення — це позиційна система числення, кожне число в якій записується за допомогою 16-ти символів. Цю систему часто називають також Hex (початкові літери англ. hexadecimal — шіснадцятковий). Спочатку планувалось вживати латинське sexa замість hexa, проте це слово сприймалось неоднозначно. Для запису чисел в цій системі окрім 10 арабських цифр (від 0 до 9) використовують 6 літер латинської абетки: A, B, C, D, E, F. Запис числа формується за загальним принципом: на n-й позиції (справа наліво від 0) стоїть цифра, що відповідає кількості n-х степенів шістнадцяти у цьому числі. Наприклад, число записане в десятковій системі як 1000, в hex записується як 3E8, де: 3x162 + 14x161 + 8x160 = 768 + 224 + 8 = 1000. Шістнадцяткова система числення широко вживана в інформатиці, оскільки значення кожного байту можна записати у вигляді двох цифр шістнадцятеричної системи. Таким чином значення послідовних байтів можна представити у вигляді списку двозначних чисел. В той же час запис 4 бітів можна представити однією шістнадцятковою цифрою. Для переводу десяткового числа в число з основою 16 я користувався такими правилами: #=>#0= L0>L 9$>8 8$>7 7$>6 6$>5 5$>4 4$>3 3$>2 2$>1 1$>0 L0$>L 0$>$9 &0=>1= &1=>2= &2=>3= &3=>4= &4=>5= &5=>6= &6=>7= &7=>8= &8=>9= &9=>A= &A=>B= &B=>C= &C=>D= &D=>E= &E=>F= &F=>+0= 0+>1 1+>2 2+>3 3+>4 4+>5 5+>6 6+>7 7+>8 8+>9 9+>A A+>B B+>C C+>D D+>E E+>F F+>+0 #+>#1 *+>*1 0#>$9*& 9#>8*& 8#>7*& 7#>6*& 6#>5*& 5#>4*& 4#>3*& 3#>2*& 2#>1*& 1#>0*& &1>1& &2>2& &3>3& &4>4& &5>5& &6>6& &7>7& &8>8& &9>9& &A>A& &B>B& &C>C& &D>D& &E>E& &0>0& &F>F& *># L#> L> => Необхідною умовою для запуску програми є наявність встановленої JRE версії 1.6 і вище. Приклади 1010=A16 1610=1016 100010=3E816 25510=FF16 ПРАКТИЧНА РЕАЛІЗАЦІЯ Для виконання завдання була розроблена програма, що отримує від користувача число в десятковій системі, а також набір правил Нормального алгоритму Маркова. Основна логіка програми зосереджена у класі Algoritm, що міститься у файлі Algoritm.java. Рядок ХХХ, введений користувачем перетворюється на рядок вигляду LXXX#=. Символ «L» позначає початок виразу, «=» кінець виразу, «#» відділяє десяткову від шістнадцяткової частини виразу. Правила можуть бути уведені за допомогою вікна додавання правил, а також завантажені з файлу та збережені у файл. Набір правил для перетворення числа з десяткової в шістнадцяткову систему збережений у файлі sixth. Алгоритм оснований на циклі віднімань одиниці від лівої частини виразу, де міститься число у десятковій системі, з одночасним додаванням одиниці до правої частини, де міститься результат у шістнадцядковій системі. Лістинг програми TMainClass.java import java.awt.FlowLayout; import java.awt.event.*; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; public class Root implements ActionListener { public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (UnsupportedLookAndFeelException e) { e.printStackTrace(); } SwingUtilities.invokeLater(new Runnable() { public void run() { new Root(); } }); } JFrame jfrm; JDialog jdRules; JDialog jdAddRule; JFileChooser jfc; static ArrayList<Rule> rulesList = new ArrayList<Rule>(); static Alogritm nam = new Alogritm(null); int[] rows; BufferedReader br; File file; FileReader readFile; FileWriter writeFile; JMenuBar jmb; JMenu jmFile; JMenuItem jmiNew; JMenuItem jmiOpen; JMenuItem jmiSave; JMenuItem jmiExit; JMenu jmHelp; JMenuItem jmiAbout; JPanel jPanOne; JLabel jlabOpOne; JLabel jlabOpTwo; JTextField jtextOpOne; JTextField jtextOpTwo; JTable jtabResult; JScrollPane jScroll; JButton jbRules; JButton jbStart; JTable jtabRules; ListSelectionModel lsmRow; JScrollPane jscrRules; JButton jbAdd; JButton jbDel; JButton jbOk; JTextField jtextRuleOne; JTextField jtextRuleTwo; JCheckBox jcboxFinal; JButton jbAddRuleCancel; JButton jbAddRuleOk; Root() { // Створення головного фрейму вікна, задання основних властивостей jfrm = new JFrame("Course work"); jfrm.setLayout(new FlowLayout()); jfrm.setSize(525, 575); jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // FileChooser jfc = new JFileChooser(); // Створення меню програми jmb = new JMenuBar(); jmFile = new JMenu("Файл"); jmiNew = new JMenuItem("Новий"); jmiOpen = new JMenuItem("Відкрити..."); jmiSave = new JMenuItem("Зберегти..."); jmiExit = new JMenuItem("Вийти"); jmFile.add(jmiNew); jmFile.add(jmiOpen); jmFile.add(jmiSave); jmFile.addSeparator(); jmFile.add(jmiExit); jmHelp = new JMenu("Допомога"); jmiAbout = new JMenuItem("Про програму..."); jmFile.addSeparator(); jmHelp.add(jmiAbout); jmb.add(jmFile); jmb.add(jmHelp); jmiNew.addActionListener(this); jmiOpen.addActionListener(this); jmiSave.addActionListener(this); jmiExit.addActionListener(this); jmiAbout.addActionListener(this); // Створення міток і полів для введення операндів: jPanOne = new JPanel(); jlabOpOne = new JLabel("Операнд:"); jtextOpOne = new JTextField(20); jlabOpOne.setDisplayedMnemonic('п'); jlabOpOne.setLabelFor(jtextOpOne); jPanOne.add(jlabOpOne); jPanOne.add(jtextOpOne); // Створення таблиці для відображення ходу алгоритму jtabResult = new JTable(new ResultTableModel()); jtabResult.getColumnModel().getColumn(0).setMaxWidth(50); jScroll = new JScrollPane(jtabResult); // Створення кнопок для запуску алгоритму та перегляду/зміни правил jbRules = new JButton("Правила..."); jbStart = new JButton("Старт"); jbRules.addActionListener(this); jbStart.addActionListener(this); // Створення діалогового вікна правил jdRules = new JDialog(jfrm, "Правила"); jdRules.setSize(525, 575); jdRules.setLayout(new FlowLayout()); jtabRules = new JTable(new RulesTableModel()); jscrRules = new JScrollPane(jtabRules); jtabRules.getColumnModel().getColumn(0).setMaxWidth(30); jtabRules.getColumnModel().getColumn(2).setMaxWidth(30); jtabRules.getColumnModel().getColumn(4).setMaxWidth(30); lsmRow = jtabRules.getSelectionModel(); lsmRow.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { } }); jbAdd = new JButton("Додати..."); jbDel = new JButton("Видалити"); jbOk = new JButton("OK"); jbAdd.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jdAddRule.setVisible(true); } }); jbDel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { rows = jtabRules.getSelectedRows(); for (int i = 0; i < rows.length; i++) { rulesList.remove(rows[i]); } jtabRules.setModel(new RulesTableModel()); jtabRules.getColumnModel().getColumn(0).setMaxWidth(30); jtabRules.getColumnModel().getColumn(2).setMaxWidth(30); jtabRules.getColumnModel().getColumn(4).setMaxWidth(30); } }); jbOk.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jdRules.setVisible(false); } }); jdRules.add(jscrRules); jdRules.add(jbAdd); jdRules.add(jbDel); jdRules.add(jbOk); // Створення діалогового вікна додавання правил jdAddRule = new JDialog(jdRules, "Додати правило"); jdAddRule.setSize(400, 140); jdAddRule.setLayout(new FlowLayout()); jtextRuleOne = new JTextField("Початковий рядок", 12); jtextRuleTwo = new JTextField("Кінцевий рядок", 12); jcboxFinal = new JCheckBox("Фінальна команда", false); jbAddRuleCancel = new JButton("Скасувати"); jbAddRuleOk = new JButton("Додати"); jbAddRuleCancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jdAddRule.setVisible(false); } }); jbAddRuleOk.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { addRule(); } }); jdAddRule.add(jtextRuleOne); jdAddRule.add(jtextRuleTwo); jdAddRule.add(jcboxFinal); jdAddRule.add(jbAddRuleCancel); jdAddRule.add(jbAddRuleOk); // Виведення вікна на екран jfrm.setJMenuBar(jmb); jfrm.add(jPanOne); jfrm.add(jScroll); jfrm.add(jbRules); jfrm.add(jbStart); jfrm.setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("Новий")) { newFile(); } if (e.getActionCommand().equals("Відкрити...")) { try { openFile(); } catch (IOException e1) { } } if (e.getActionCommand().equals("Зберегти...")) { try { saveFile(); } catch (IOException e1) { } } if (e.getActionCommand().equals("Вийти")) { System.exit(0); } if (e.getActionCommand().equals("Про програму...")) { JOptionPane.showMessageDialog(jfrm, "Автор Рак Богдан. Полтава 2011"); } if (e.getActionCommand().equals("Правила...")) { jdRules.setVisible(true); } if (e.getActionCommand().equals("Старт")) { startNAM(); } } public void addRule() { rulesList.add(new Rule(jtextRuleOne.getText(), jtextRuleTwo.getText(), jcboxFinal.isSelected())); jtabRules.setModel(new RulesTableModel()); jtabRules.getColumnModel().getColumn(0).setMaxWidth(30); jtabRules.getColumnModel().getColumn(2).setMaxWidth(30); jtabRules.getColumnModel().getColumn(4).setMaxWidth(30); } void newFile() { rulesList = new ArrayList<Rule>(); nam = new Alogritm(null); jtabRules.setModel(new RulesTableModel()); jtabResult.setModel(new ResultTableModel()); jtabRules.getColumnModel().getColumn(0).setMaxWidth(30); jtabRules.getColumnModel().getColumn(2).setMaxWidth(30); jtabRules.getColumnModel().getColumn(4).setMaxWidth(30); jtabResult.getColumnModel().getColumn(0).setMaxWidth(50); } void openFile() throws IOException { int openRes, num; String str, first, second; boolean isFinal; openRes = jfc.showOpenDialog(jfrm); if (openRes == JFileChooser.APPROVE_OPTION) { file = jfc.getSelectedFile(); if (file.exists()) { readFile = new FileReader(file); br = new BufferedReader(readFile); str = br.readLine(); num = Integer.parseInt(str); for (int i = 0; i < num; i++) { str = br.readLine(); first = str.substring(0, str.indexOf('>')); second = str.substring(str.indexOf('>') + 1, str.length() - 1); if (Integer.parseInt(str.substring(str.length() - 1)) == 1) { isFinal = true; } else { isFinal = false; } rulesList.add(new Rule(first, second, isFinal)); } jtabRules.setModel(new RulesTableModel()); jtabRules.getColumnModel().getColumn(0).setMaxWidth(30); jtabRules.getColumnModel().getColumn(2).setMaxWidth(30); jtabRules.getColumnModel().getColumn(4).setMaxWidth(30); jtabResult.getColumnModel().getColumn(0).setMaxWidth(50); readFile.close(); } } } void saveFile() throws IOException { int openRes; Integer num; String str, first, second; char isFinal; openRes = jfc.showSaveDialog(jfrm); if (openRes == JFileChooser.APPROVE_OPTION) { file = jfc.getSelectedFile(); writeFile = new FileWriter(file); num = rulesList.size(); writeFile.write(num.toString() + '\n'); for (int i = 0; i < num; i++) { first = rulesList.get(i).first; second = rulesList.get(i).second; if (rulesList.get(i).isFinal) isFinal = '1'; else isFinal = '0'; str = first + '>' + second + isFinal + '\n'; writeFile.write(str); } writeFile.close(); } } public void startNAM() { String str ='L' + jtextOpOne.getText() + "#="; nam = new Alogritm(str); jtabResult.setModel(new ResultTableModel(jtextOpOne.getText())); jtabResult.getColumnModel().getColumn(0).setMaxWidth(50); } } Rule.java public class Rule { public String first; public String second; public boolean isFinal; Rule(String s1, String s2, boolean fin) { first = s1; second = s2; isFinal = fin; } public String toString() { return first + "->" + second + " is final: " + isFinal; } } RulesTableModel.java import javax.swing.table.AbstractTableModel; public class RulesTableModel extends AbstractTableModel { String sTo = "->"; String colNames[] = { "№", "Початковий рядок", "->", "Кінцевий рядок", "*" }; public String getColumnName(int c) { return colNames[c]; } public int getRowCount() { return Root.rulesList.size(); } public int getColumnCount() { return 5; } public Object getValueAt(int rowIndex, int columnIndex) { if (columnIndex == 0) return rowIndex + 1; if (columnIndex == 1) { return Root.rulesList.get(rowIndex).first; } if (columnIndex == 2) return sTo; if (columnIndex == 3) { return Root.rulesList.get(rowIndex).second; } if (columnIndex == 4) { if (Root.rulesList.get(rowIndex).isFinal) return '*'; return ' ';
Антиботан аватар за замовчуванням

21.05.2013 18:05

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!