Elektrotehnicki fakultet, Beograd  Ласло Краус ИР2ОО2/СИ2ОО2
Испит
10. 6. 2013.

Аутори: Игор Тартаља, Ђорђе Ђурђевић и Ласло Краус

Задаци: 1 2 | Напоменe | Решења: 2

Поставка задатка 1 (укупно 30 поена) ( почетак)

Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:

а) (Java) Шта ради и чему служи метод run() класе Thread?

б) (C#) Да ли кључне речи checked и unchecked представљају операторе, односно наредбе и какво дејство производе?

в) (C#) Да ли су уграђени нумерички типови (int, long, …) примитивни подаци? Образложити.

Поставка задатка 2 (70 поена) ( решење | почетак)

Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):

(20 поена) Написати на језику Java програм који на графичкој корисничкој површи према слици приказује таблу за игру памћења, дугмад (Button) за контролу игре и индикатор (Label) трајања игре. Покренута игра не може поново да се покрене док се не прекине или заврши. Прекинута игра не може да се прекине. Док траје игра, употребом тајмера у трајању од 500 ms са понављањем, освежава се садржај индикатора трајања и проверава се да ли је игра завршена.

<< слика биће накнадно додата >>


Напоменe ( почетак)


Решење задатка 2 ( поставка | почетак)

// Obavestiv.java

package igraPmacenja;

public interface Obavestiv {
  void dogadjaj();
}

// Tajmer.java package igraPmacenja; public class Tajmer extends Thread{ private boolean zavrsen, radi, ponavlja; private Obavestiv obav; private long trajanje; public Tajmer(Obavestiv ob, boolean pon) { obav = ob; ponavlja = pon; start(); } public void run() { while (!zavrsen) { try { synchronized (this) { while (!radi) wait(); } sleep(trajanje); obav.dogadjaj(); if (!ponavlja ) radi = false; } catch (InterruptedException g) {} } } public synchronized void meri(long msek) { radi = true; trajanje = msek; interrupt(); notify(); } public void prekini() { radi = false; interrupt(); } public void zaustavi() { zavrsen = true; prekini(); } }
// Plocica.java package igraPmacenja; import java.awt.*; public class Plocica extends Button { private int vr; public Plocica() { sakrij(); } public void postaviVr(int v) { vr = v; } public int dohvatiVr() { return vr; } public void prikazi() { setLabel(""+vr); } public void sakrij() { setLabel("?"); } }
// Tabla.java package igraPmacenja; import java.awt.* ; import java.awt.event.*; public class Tabla extends Panel implements Obavestiv { private static final int brojParova = 10; private Plocica[] plocice = new Plocica[2*brojParova]; private Plocica[] aktivne = new Plocica[2]; private Tajmer tjmr = new Tajmer(this, false); private int brojUparenih; public Tabla() { setLayout(new GridLayout(4, 5)); setEnabled(false); DugmeAkcija dugmeAkcija = new DugmeAkcija(); for (int i=0; i<2*brojParova; i++) { add(plocice[i] = new Plocica()); plocice[i].addActionListener(dugmeAkcija); } } private class DugmeAkcija implements ActionListener { public void actionPerformed(ActionEvent d) { if (aktivne[0] == null ) { aktivne[0] = (Plocica)d.getSource(); aktivne[0].prikazi(); } else if (aktivne[1] == null ) { aktivne[1] = (Plocica)d.getSource(); aktivne[1].prikazi(); if (aktivne[0].dohvatiVr() != aktivne[1].dohvatiVr()) { tjmr.meri(1000); aktivne[0].setBackground(Color.RED); aktivne[1].setBackground(Color.RED); } else { aktivne[0].setBackground(Color.GREEN); aktivne[0].setEnabled(false); aktivne[1].setBackground(Color.GREEN); aktivne[1].setEnabled(false); aktivne[0] = null; aktivne[1] = null; brojUparenih++; } } } } public void novaIgra() { brojUparenih = 0; aktivne[0] = aktivne[1] = null; for (int i=0; i<plocice.length; i++) { plocice[i].postaviVr(i/2+1); plocice[i].setEnabled(true); plocice[i].setBackground(Color.WHITE); plocice[i].sakrij(); } for (int i=0; i<plocice.length; i++) { int j = (int)(Math.random() * plocice.length); int t = plocice[j].dohvatiVr(); plocice[j].postaviVr(plocice[i].dohvatiVr()); plocice[i].postaviVr(t); } setEnabled(true); } public boolean zavrseno() { return brojUparenih == brojParova; } public void dogadjaj() { for(int i = 0; i < aktivne.length; i++) { aktivne[i].setBackground(Color.WHITE); aktivne[i].sakrij(); aktivne[i] = null; } } public void prekini() { setEnabled(false); } public void kraj() { setEnabled(false); tjmr.zaustavi(); } }
// Program.java import igraPmacenja.*; import java.awt.*; import java.awt.event.*; public class Program extends Frame implements Obavestiv { private Tabla tabla = new Tabla(); private Button pocni = new Button("Pocni"); private Button prekini = new Button("Prekini"); private Label tekVreme = new Label(" "); private Tajmer tjmr = new Tajmer(this,true); private long pocetnoVreme; private void krajIgre() { tjmr.prekini(); tabla.prekini(); prekini.setEnabled(false); pocni.setEnabled(true); } public Program() { super("Igra pamcenja"); setSize(200, 200); add(tabla, "Center"); Panel p = new Panel(); add(p, "South"); p.add(pocni); p.add(prekini); p.add(tekVreme); prekini.setEnabled(false); pocni.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent d) { tabla.novaIgra(); tjmr.meri(500); prekini.setEnabled(true); pocni.setEnabled(false); pocetnoVreme = System.currentTimeMillis(); } }); prekini.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent d) { krajIgre(); } }); setVisible(true); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent d) { tabla.kraj(); tjmr.zaustavi(); dispose(); } }); } public void dogadjaj() { if (tabla.zavrseno()) krajIgre(); else { long vreme = System.currentTimeMillis(); long proteklo = vreme - pocetnoVreme; tekVreme.setText(""+(proteklo/1000)); } } public static void main(String[] varg) { new Program(); } }
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

Copyright © 2013, Laslo Kraus
Последња ревизија: 1.7.2013.