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

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

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

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

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

Міністерство освіти і науки, молоді та спорту України Полтавський національний технічний університет Ім. Юрія Кондратюка Факультет інформаційних та телекомунікаційних технологій і систем Курсова робота з дисципліни «Теория алгоритмів» ЗМІСТ Постановка задачі 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-

Коментарі

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

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

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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