Обробка виключних ситуацій.

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра САПР

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

Рік:
2011
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Об’єктно-орієнтоване програмування

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

Міністерство освіти та науки України Національний університет «Львівська політехніка» Кафедра САПР  Звіт до лабораторної роботи №11 З курсу «Об’єктно-орієнтоване програмування» На тему: «Обробка виключних ситуацій.» Одержати навики побудови алгоритмів лінійних обчислювальних процесів, навчитися складати алгоритми та програмувати процеси з розгалуженням, циклами, ітераційними циклами за допомогою мови Java. Одержати навички роботи із масивами. 2.ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ 2.1. ОПЕРАТОРИ МОВИ JAVA 15.1. Модель обробки "поставщик-споживач" Дуже часто зображення перед виведенням на екран підлягає обробці: змінюються кольори окремих пікселів або цілих частин зображення, виділяються і перетворюються якісь фрагменти зображення. В бібліотеці AWT застосовуються дві моделі обробки зображення. Одна модель реалізує давно відому в програмуванні спільну модель "поставщик-споживач" (Producer-Consumer). Згідно цієї моделі один обєкт, "поставщик", генерує сам або перетворює отриману із іншого місця продукцію, в даному випадку, набір пікселів, і передає іншим обєктам. Ці обєкти, "споживачі", приймають продукцію і теж перетворюють її при необхідності. Тільки після цього створюється обєкт класу Іmage і зображення виводиться на екран. У одного поставщика може бути декілька споживачів, котрі повинні бути зареєстровані поставщиком. Поставщик і споживач активно взаємодіють, звертаючись до методів один одного. В AWT ця модель описана в двох інтерфейсах: ImageProducer і ImageConsumer пакета java. awt. image. Інтерфейс ImageProducer описує пять методів: addConsumer(ImageConsumer ic) - реєструє споживача ic; removeConsumer (ImageConsumer ic) - скасовує реєстрацію; isConsumer( ImageConsumer ic) — логічний метод, перевіряє, чи зареєстрований споживач ic; startProduction (ImageConsumer ic) — реєструє споживача ic і починає поставку зображення всім зареєстрованим споживачам; requestTopDownLeftRightResend (ImageConsumer ic) — використовується споживаем для того, щоб затребувати зображення ще раз в порядку "зверху-вниз, зліва-направо" для методів обробки, застосовуючи саме такий порядок. З кожним екземпляром класу Іmage звязаний обєкт, реалізуючий інтерфейс ImageProducer. Його можна отримати методом getSource() класу Image. Найпростіша реалізація интерфейса ImageProducer - клас MemoryІmageSource — створює пікселі в оперативній памяті по масиву байтів або цілих чисел. Спочатку створюється масив pix, що містить колір кожної точки. Потім одним із шести конструкторів створюється обєкт класу MemoryІmageSource. Він може бути оброблений споживачем або прямо перетворений у тип Image методом createlmage (). В лістинзі 15.1 наведена проста программа, що виводить на екран квадрат розміром 100x100 пікселів. Лівий верхній кут квадрата синій, лівий нижній — червоний, правий верхній — зелений, а до центру квадрата кольори змішуються. Лістинг 15.1. Зображення, побудоване по точках import java.awt.*; import java.awt.event.*; import java.awt.image.*; class InMemory extends Frame { private int w = 100, h = 100; private int[] pix = new int[w * h]; private Image img; InMemory(String s) { super(s); int i = 0; for (int y = 0; y < h; y++){ int red = 255 * y / (h - 1); for (int x = 0; x < w; x++){ int green = 255 * x / (w - 1) ; pix[i++] = (255 << 24)|(red << 16)|(green << 8)| 128; } } setSize(250, 200); setVisible(true); } public void paint(Graphics gr){ if (img == null) img = createImage(new MemoryImageSource(w, h, pix, 0, w)); gr.drawImage(img, 50, 50, this); } public static void main(String[] args){ Frame f= new InMemory(" Зображення в памяті"); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent ev){ System.exit (0);} }); } } В лістинзі 15.1 в конструктор класу-постачальника MemoryІmageSource (w, h, pix, о, w) заноситься ширина w і висота h зображення, масив pix, зміщення в цьому масиві о і довжина рядка w. Споживачем служить зображення img, яке створюється методом createlmage () і виводится на екран методом drawlmage(img, 50, 50, this). Лівий верхній кут зображення img розташовується в точці (50, 50) контейнера, а останній аргумент this показує, що роль imageObserver відіграє сам класс InMemory. Це заставляє включить в метод paint() перевірку if (img == null), інакше зображення буде постійно перерисовуваться. Другий спосіб уникнути цього — перевизначити метод imageupdate(), про що говорилось в уроці 14, просто написавши в ньому return true. Рис. 15.1 демонструє виведення цієї програми. Рис. 15.1. Зображення, створене по точках 3. Текст програми import java.awt.*; import java.lang.*; import java.awt.event.*; import java.applet.Applet; import java.awt.datatransfer.*; public class proba extends Applet { public void init() { calf calWindow = new calf("Laboratorna №11"); calWindow.setSize(250, 300); calWindow.setVisible(true); calWindow.setResizable(false); } } class calf extends Frame implements WindowListener, ActionListener, KeyListener { String command, copy, arg, chg, txt; double result; String number = "123456789.0"; String operator = "/*-+="; TextField entrytext; Button numbut []; Button combut []; Panel companel, numpanel; public static void main(String[] arguments) { calf calWindow = new calf("№11"); calWindow.setSize(250, 300); calWindow.setVisible(true); } public calf(String title) { super(title); addWindowListener(this); addKeyListener(this); setBackground(Color.black); setLayout(new GridLayout(1, 1)); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints constraints = new GridBagConstraints(); setLayout(gridbag); constraints.weighty = 1; constraints.weightx = 1; constraints.fill = GridBagConstraints.BOTH; Font bigFont = new Font("Courier",Font.BOLD, 20); entrytext = new TextField(20); constraints.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints(entrytext,constraints); add(entrytext); entrytext.setFont(bigFont); entrytext.setEditable(false); entrytext.setForeground(Color.black); entrytext.setBackground(Color.white); entrytext.addKeyListener(this); entrytext.requestFocus(); constraints.weighty = 1; constraints.weightx = 1; companel = new Panel(); constraints.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints(companel,constraints); companel.setLayout(new GridLayout(1,3,5,5)); Font comsFont = new Font("Arial",Font.BOLD, 20); String[] coms = { "Back","CE","C" }; combut = new Button[3]; for (int i=0; i<=2; i++) { combut[i] = new Button(coms[i]); companel.add(combut[i]); combut[i].addActionListener(this); combut[i].setFont(comsFont); combut[i].addKeyListener(this); } add(companel); companel.addKeyListener(this); constraints.weighty = 5; constraints.weightx = 1; numpanel = new Panel(); constraints.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints(numpanel,constraints); numpanel.setLayout(new GridLayout(4,5,3,3)); String[] nums = { "7","8","9","/","sqrt","4","5","6", "*","%", "1","2","3","-","1/x", "0","+/-",".", "+","=" }; numbut = new Button[20]; for (int i=0; i<=19; i++) { numbut[i] = new Button(nums[i]); numpanel.add(numbut[i]); numbut[i].addActionListener(this); numbut[i].addKeyListener(this); if(operator.indexOf(nums[i]) > -1) { numbut[i].setForeground(Color.red); } else { numbut[i].setForeground(Color.blue); } } add(numpanel); numpanel.addKeyListener(this); command = "+"; copy = ""; chg = "N"; txt = ""; arg = ""; result = 0; } public void actionPerformed(ActionEvent e) //функціональні клавіші { if (e.getActionCommand() == "Back") back_space(); else if (e.getActionCommand() == "CE") entrytext.setText(""); else if (e.getActionCommand() == "C") { result = 0; command = "+"; entrytext.setText(""); } else { arg = e.getActionCommand(); txt = entrytext.getText(); if(number.indexOf(arg) > -1) { if (chg == "Y") txt = ""; txt = txt + arg; entrytext.setText(txt); chg = "N"; } else check_entry(); } } public void keyPressed(KeyEvent k){} public void keyReleased(KeyEvent k) //CE { int ikey = k.getKeyCode(); if (ikey == 127) entrytext.setText(""); } public void keyTyped(KeyEvent k) //Back { int ikey = k.getKeyChar(); if (ikey == 8) back_space(); else if (ikey == 10) { arg = "="; txt = entrytext.getText(); display_ans(); } else { txt = entrytext.getText(); char ckey = (char) ikey; arg = String.valueOf(ckey); if(number.indexOf(arg) > -1) { if (chg == "Y") txt = ""; txt = txt + arg; entrytext.setText(txt); chg = "N"; } else check_entry(); } } public void back_space() //Back { txt = entrytext.getText(); int l = txt.length(); if (l > 0) { txt = txt.substring(0,l-1); entrytext.setText(txt); } } public void display_ans() { entrytext.setText(compute_tot(txt,command)); chg = "Y"; command = "+"; result = 0; } public void check_entry() { if(arg.equals("=")) display_ans(); else if(arg.equals("%")) { entrytext.setText(compute_tot(txt,arg)); chg = "Y"; } else if(operator.indexOf(arg) > -1) { entrytext.setText(compute_tot(txt,command)); command = arg; chg = "Y"; } else if(arg == "sqrt") { entrytext.setText(compute_tot(txt,arg)); chg = "Y"; command = ""; } else if(arg == "+/-") { Double tnum = Double.valueOf(txt); double num = tnum.doubleValue(); num = num * -1; entrytext.setText(String.valueOf(num)); chg = "Y"; } else if(arg == "1/x") { entrytext.setText(compute_tot(txt,arg)); chg = "Y"; } } String compute_tot(String t, String c) { Double tnum = Double.valueOf(t); double num = tnum.doubleValue(); if (c.equals("+")) result = result + num; else if (c.equals("-")) result = result - num; else if (c.equals("*")) result = result * num; else if (c.equals("/")) result = result / num; else if (c.equals("%")) result = num / 100; else if (c.equals("+/-")) result = num * -1; else if (c.equals("1/x")) result = 1.000 / num; else if (c.equals("sqrt")) result = Math.sqrt(num); return String.valueOf(result); } public void windowClosing(WindowEvent we) { setVisible(false); System.exit(0); } public void windowClosed(WindowEvent we) {} public void windowDeiconified(WindowEvent we) {} public void windowIconified(WindowEvent we) {} public void windowOpened(WindowEvent we) {} public void windowActivated(WindowEvent we) {} public void windowDeactivated(WindowEvent we) {} } 4. Результати виконання програми  5 Висновок На даній лабораторній роботі я одержав навики побудови алгоритмів лінійних обчислювальних процесів, навчився складати алгоритми та програмувати процеси з розгалуженням, циклами, ітераційними циклами за допомогою мови Java. Одержав навички роботи із массивами.
Антиботан аватар за замовчуванням

03.05.2014 20:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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