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

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

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

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

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

а) (Java) Да ли методе wait(), notify() и notifyAll() класе Object могу да се редефинишу у поткласама и зашто?

б) (C#) Навести врсте чланова класа по категоријама: (1) функционални чланови (2) чланови подаци (3) типови (угнежђени).

в) (C#) Шта исписује следећи програм?

      class X{ delegate void D(); int i;
        void m1() { i++; }   void m2() { i--; }   void m3() { i *= 2; }
        static void Main(string[] args){ X x = new X();
            D d1 = new D(x.m1), d2 = new D(x.m2), d3 = new D(x.m3);
            D d = d1 + d2; d += d1; d += d3 - d2; d();
            System.Console.WriteLine(x.i);
        }
      }

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

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

За дохватање знака из ниске знакова на располагању је метода niska.charAt(indeks), а за дохватање подниске од задате позиције метода niska.substring(index).


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

  • Испит траје 180 минута.
  • Рад се предаје искључиво у факултетској вежбанци за испите (-5 поена за неадекватну вежбанку). Није дозвољено имати поред себе друге листове папира.
  • Дозвољена је употреба Подсетника за AWT.
  • Водити рачуна о уредности. Решења задатака навести по гoрњем редоследу (-1 поен за лош редослед). Препоручује се рад обичном графитном оловком.

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

// Izvor.java

package rotoNovosti;

public class Izvor {
  static private long brojIzvora=0;
  private long id=brojIzvora++;

  private String naziv;

  public Izvor( String n) { naziv = n; }

  public long id() { return id; }

  public String naziv() { return naziv; }
}

// Vest.java package rotoNovosti; public class Vest { private Izvor izvor; private String sadrzaj; public Vest( Izvor i, String s) { izvor = i; sadrzaj = s; } public String toString() { return sadrzaj +"[" +izvor.naziv() +"]"; } public Izvor izvor() { return izvor; } public String sadrzaj() { return sadrzaj; } }
// Novosti.java package rotoNovosti; public class Novosti { public class PrazneNovosti extends Exception{} private static class Elem{ Vest vest; Elem sled; Elem( Vest v) { vest = v; } } private Elem prvi,posl; public void dodaj( Vest v) { Elem novi = new Elem( v); if (posl == null) prvi = novi; else posl.sled = novi; posl = novi; } public void izbaci() throws PrazneNovosti { if (prvi == null) throw new PrazneNovosti(); prvi = prvi.sled; if (prvi == null) posl = null; } public String toString() { String s=""; for (Elem tek=prvi; tek!=null; tek=tek.sled) s += tek.vest+ " - "; return s; } }
// Prikazivac.java package rotoNovosti; public interface Prikazivac { void prikazi( String s); }
// Rotor.java package rotoNovosti; public class Rotor extends Thread { public static final int T = 500; //ms private int perioda = T; private boolean radi = false; private Prikazivac prikazivac; private String tekst = ""; public Rotor(Prikazivac p) { prikazivac = p; } public void tekst( String t) { if (! radi) tekst = t; } public void perioda( int p) { perioda = p; } public void run () { prikazivac.prikazi( tekst); try { while (! interrupted()) { if (! radi) synchronized (this) { wait(); } sleep( perioda); if (tekst.length() > 0) tekst = tekst.substring(1) + tekst.charAt(0); prikazivac.prikazi(tekst); } } catch (InterruptedException g) {} } public void pocni() { start(); } public synchronized void kreni() { radi = true; notify(); } public void stani() { radi = false; } public void zavrsi() { interrupt (); } }
// GraPrikazivac.java package rotoNovosti; import java.awt.*; public class GraPrikazivac implements Prikazivac{ TextField prikaz; public GraPrikazivac( TextField p){ prikaz=p; prikaz.setEditable( false); prikaz.setBackground( Color.black); prikaz.setForeground( Color.white); } public void prikazi( String s) { prikaz.setText( s); } }
// Program.java package rotoNovosti; import java.awt.*; import java.awt.event.*; public class Program extends Frame { private Choice izbIzvor = new Choice(); private TextField tksVest = new TextField(); private Button dgmDodaj = new Button( "+"); private Button dgmUkloni = new Button( "-"); private TextField tksTiker = new TextField(); private TextField tksPerioda = new TextField( Integer.toString( Rotor.T)); private Button dgmKreni = new Button( "Kreni"); private Button dgmStani = new Button( "Stani"); private Izvor[] izvori = { new Izvor( "Tanjug"), new Izvor( "Beta"), new Izvor( "Fonet")}; private int izvorId; private Novosti novosti = new Novosti(); private GraPrikazivac gp = new GraPrikazivac( tksTiker); private Rotor rotor = new Rotor(gp); private void omoguci( boolean da) { izbIzvor.setEnabled( da); dgmDodaj.setEnabled( da); dgmUkloni.setEnabled( da); tksPerioda.setEnabled( da); dgmKreni.setEnabled( da); dgmStani.setEnabled( !da); } private void popuniProzor() { setLayout(new GridLayout( 5, 1)); for (int i=0; i<izvori.length; i++) izbIzvor.add( izvori[i].naziv()); add(izbIzvor); izbIzvor.addItemListener( new ItemListener() { public void itemStateChanged( ItemEvent e) { izvorId=izbIzvor.getSelectedIndex(); } }); add(tksVest); Panel plo = new Panel(); dgmDodaj.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent d) { String s = tksVest.getText(); if (s.length() > 0) { novosti.dodaj( new Vest( izvori[izvorId], s)); tksVest.setText( ""); tksTiker.setText( novosti.toString()); rotor.tekst( novosti.toString()); } } }); plo.add( dgmDodaj); add( plo); dgmUkloni.addActionListener( new ActionListener() { public void actionPerformed ( ActionEvent d) { try {novosti.izbaci(); } catch (Novosti.PrazneNovosti i){} tksTiker.setText( novosti.toString()); rotor.tekst( novosti.toString()); } }); plo.add( dgmUkloni); add( tksTiker); add( plo = new Panel()); plo.add( new Label( "T", Label.RIGHT)); plo.add(tksPerioda); dgmKreni.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent d) { try { rotor.perioda( Integer.parseInt( tksPerioda.getText())); omoguci( false); rotor.kreni(); } catch (NuberFormatException g) {} } }); plo.add(dgmKreni); dgmStani.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent d) { rotor.stani(); omoguci( true); } }); plo.add(dgmStani); } public Program () { super( "RotoNovosti"); setSize( 220, 180); setResizable( false); popuniProzor(); setVisible( true); omoguci( true); rotor.pocni(); addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent d) { rotor.zavrsi (); dispose (); } }); } public static void main( String[] varg) { new Program(); } }
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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