Elektrotehnicki fakultet, Beograd  Ласло Краус ПЈМП
Други парцијални испит
9. 7. 2004.

Аутори: Игор Тартаља (задаци) и Ласло Краус (задаци и решења)

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

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

Пројектовати на језику Java пакет класа са следћим описом:

Саставити на језику Java класу са главним програмом који направи један збир функција капацитета који се задаје као параметар главног програма, додаје неколико функција читајући потребне податке преко главног улаза, испише добијени збир функција и његов извод и после врши табелирање вредности збира функција и његовог извода за свако xminxxmax са кораком Δx. На располагању стоји класа Citaj у безименом пакету која садржи заједничке методе за читање свих стандардних типова података.

Поставка задатка 2 (10 поена) ( почетак)

Концизно одговорити на следећа питања:

а) Шта у Јави означава модификатор final за (а) поље, (б) методу, (в) класу?

б) Објаснити модел делегиране (децентрализоване) обраде догађаја у Јави.

в) Којим редоследом у меморији процесора i8086 се ређају бајтови једног показивача? Ако је показивач А024:012B смештен на адресу N, навести одговарајући садржај бајтова меморије.

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

Саставити потпрограм на симболичком машинском језику за IBM-PC за замену редоследа елемената низа 16-битних целих бројева, тј. за замену првог елемента са последњим, другог са претпоследњим итд.

Саставити главни програм на симболичком машинском језику за IBM-PC који позива претходни потпрограм за један комплет података. Читање података и приказивање резултата довољно је назначити само у облику коментара.

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

Саставити потпрограм на симболичком машинском језику за IBM-PC, који може да се позива из програма писаног на језику C, за пребацивање елемената низа 16-битних целих бројева са непарним вредностима у други низ (пребачене елементе треба изоставити из почетног низа). Користити средњи меморијски модел (далеки позиви и блиски показивачи).


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


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

// Fun.java
package funkcije;
public interface Fun {
  double vr(double x);
  Fun izv();
}

// Monom.java
package funkcije;
public class Monom implements Fun {
  private double a; private int k;
  public Monom () { a = k = 1; }
  public Monom (double aa, int kk ) { a = aa ; k = kk; }
  public double vr (double x) { return a * Math.pow (x, k); }
  public Fun izv () { return k!=0 ? new Monom (a*k,k-1) : new Monom (0,0); }
  public String toString() { return a + "*x^" + k; }
}

// Ekspon.java
package funkcije;
public class Ekspon implements Fun {
  private double a, b;
  public Ekspon () { a = b = 1; }
  public Ekspon (double aa, double bb) {a=aa; b=bb;}
  public double vr (double x) { return a * Math.exp (b * x); }
  public Fun izv () { return new Ekspon (a*b, b); }
  public String toString () { return a + "*exp(" + b + "*x)"; }
}

// ZbirFun.java
package funkcije;
public class ZbirFun implements Fun {
  private Fun[] niz;
  private int n;
  public ZbirFun (int k) { niz = new Fun [k]; }
  public ZbirFun () { this (2); }
  public ZbirFun dodaj (Fun f) throws GZbirFunPun {
    if (n == niz.length) throw new GZbirFunPun ();
    niz[n++] = f;
    return this;
  }
  public double vr (double x) {
    double s = 0;
    for (int i=0; i<n; s+=niz[i++].vr(x));
    return s;
  }
  public Fun izv () {
    ZbirFun rez = new ZbirFun (niz.length);
    for (int i=0; i<n; i++) rez.niz[i]=niz[i].izv();
    rez.n = n;
    return rez;
  }
  public String toString () {
    String s = "";
    for (int i=0; i<n; i++) {
      if (i > 0) s += "+";
      s += "(" + niz[i] + ")";
    }
    return s;
  }
}

// GZbirFunPun.java
package funkcije;
public class GZbirFunPun extends Exception {
  GZbirFunPun () { super ("Zbir funkcija je pun"); }
}

// Test.java
import funkcije.*;
public class Test {
  public static void main (String[] varg) {
    ZbirFun zbir = new ZbirFun (Integer.parseInt (varg[0]));
    try {
      for (boolean dalje=true; dalje; ) {
        Fun f = null;
        System.out.print ("Vrsta (M,E,*)? ");
        switch (Citaj.Char ()) {
          case 'M': case 'm':
            System.out.print ("a,k? ");
            zbir.dodaj (new Monom (Citaj.Double(), Citaj.Int()));
            break;
          case 'E': case 'e':
            System.out.print ("a,b? ");
            zbir.dodaj (new Ekspon (Citaj.Double(), Citaj.Double()));
            break;
          case '*': dalje = false; break;
          default: throw new Exception ("Nedozvoljeni izbor!");
        }
      }
    } catch (Exception g) { System.out.println(g); }
    Fun izv = zbir.izv ();
    System.out.println ("Fun: " + zbir);
    System.out.println ("Izv: " + izv);
    System.out.print ("xmin,xmax,dx? ");
    double xmin = Citaj.Double (), xmax = Citaj.Double (), dx = Citaj.Double ();
    for (double x=xmin; x<=xmax; x+=dx)
      System.out.println (x + "\t" + zbir.vr(x) + "\t" + izv.vr(x));
  }
}

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

; obrni.asm
; si==&niz      cx==n
prog  segment para public 'code'
      assume cs:prog
      public obrni
obrni proc near
      push si
      push di
      push ax
      push dx
      mov  di,si
      add  di,cx
      add  di,cx
opet: sub  di,2
      cmp  si,di
      jge  kraj
      mov  ax,[si]
      mov  dx,[di]
      mov  [di],ax
      mov  [si],dx
      add  si,2
      jmp  opet
kraj: pop  dx
      pop  ax
      pop  di
      pop  si
      retn
obrni endp
prog  ends
      end

; ubacit.asm
      extrn ubaci:near, exit_f:far
podat segment para public 'data'
niz   dw   30 dup (?)
n     dw   ?
podat ends
prog  segment para public 'code'
      assume cs:prog, ds:podat
pocet:mov  ax, podat
      mov  ds, ax
;;;;  Citanje podataka.
      mov  si,offset niz
      mov  cx, n
      call obrni
;;;;  Prikaz rezultata.
      call exit_f
prog  ends
stek  segment para stack 'stack'
      dw   64 dup (?)
stek  ends
      end  pocet

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

; void razvrst (short *a, short *m, short *b, short *n) ;
razvrst_text segment para public 'code'
      assume cs:razvrst_text
      public _razvrst
a     equ  6
m     equ  8
b     equ  10
n     equ  12
_razvrst proc far
      push bp
      mov  bp, sp
      push si
      push di
      mov  bx,[bp].m
      mov  cx,[bx]
      mov  si,[bp].a
      mov  di,si
      mov  bx,[bp].b
      jcxz kraj
      cld
opet: lods
      test ax,1
      je   par
      mov  [bx],ax
      add  bx,2
      jmp  dalje
par:  stos
dalje:loop opet
      sub  di,[bp].a
      shr  di,1
      mov  si,[bp].m
      mov  [si],di
kraj: sub  bx,[bp].b
      shr  bx,1
      mov  si,[bp].n
      mov  [si],bx
      pop  di
      pop  si
      pop  bp
      ret
_razvrst endp
pomeri_text ends
      end
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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