Ласло Краус |
ПЈМП Други парцијални испит 9. 7. 2004. |
|---|
Пројектовати на језику Java пакет класа са следћим описом:
Sring је облика a*x^k, где су a и k вредности параметара монома.
Sring је облика a*exp(b*x), где су a и b вредности параметара експоненцијалне функције.
String је облика (fun)+…+(fun), где су fun резултати конверзије појединих садржаних функција у тип String.
Саставити на језику Java класу са главним програмом који направи један збир функција капацитета који се задаје као параметар главног програма, додаје неколико функција читајући потребне податке преко главног улаза, испише добијени збир функција и његов извод и после врши табелирање вредности збира функција и његовог извода за свако xmin≤x≤xCitaj у безименом пакету која садржи заједничке методе за читање свих стандардних типова података.
Концизно одговорити на следећа питања:
а) Шта у Јави означава модификатор final за (а) поље, (б) методу, (в) класу?
б) Објаснити модел делегиране (децентрализоване) обраде догађаја у Јави.
в) Којим редоследом у меморији процесора i8086 се ређају бајтови једног показивача? Ако је показивач А024:012B смештен на адресу N, навести одговарајући садржај бајтова меморије.
Саставити потпрограм на симболичком машинском језику за IBM-PC за замену редоследа елемената низа 16-битних целих бројева, тј. за замену првог елемента са последњим, другог са претпоследњим итд.
Саставити главни програм на симболичком машинском језику за IBM-PC који позива претходни потпрограм за један комплет података. Читање података и приказивање резултата довољно је назначити само у облику коментара.
Саставити потпрограм на симболичком машинском језику за IBM-PC, који може да се позива из програма писаног на језику C, за пребацивање елемената низа 16-битних целих бројева са непарним вредностима у други низ (пребачене елементе треба изоставити из почетног низа). Користити средњи меморијски модел (далеки позиви и блиски показивачи).
// 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));
}
}
; 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
; 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
(⇒ почетак)
Copyright © 2004, Laslo Kraus
Последња ревизија: 8.7.2004.