Ласло Краус |
ПЈМП Други парцијални испит 30. 6. 2002. |
|---|
Пројектовати на језику Java пакет класа са следћим описом:
String садржи вредност константе.
String садржи име променљиве. Све променљиве морају да имају различита имена (покушај стварања променљиве са већ коришћеним именом пријавити изузетком).
String је облика (a+b), (a*b) и (a^b), где су a и b резултати конверзије операнада у тип String.
Саставити на језику Java класу са главним програмом који ствара објекат променљиве x и објекат за израз x3-2x, испише текстуални облик тог израза као заглавље и после врши табелирање вредности тог израза за све вредности xmin≤x≤xmax са кораком Δx. Параметри табелирања се достављају као параметри главног програма.
Саставити потпрограм на симболичком машинском језику за IBM-PC за налажење најмање и највеће вредности у низу 16-битних целих бројева.
Саставити главни програм на симболичком машинском језику за IBM-PC који позива претходни потпрограм за један комплет података. Читање података и приказивање резултата довољно је назначити само у облику коментара.
Код неког 16-битног генератора псеудослучајних бројева наредни број се формира од претходног броја тако да се комплемент водећа три бита ставља иза осталих битова почетног броја. На пример: од броја 0101111000011100 даје нови број 1111000011100101. Саставити потпрограм на симболичком машинском језику за IBM-PC, који може да се позива из програма писаног на језику C, за остваривање описаног генератора псеудослучајних бројева у облику void slbr(short *k). Користити компактни меморијски модел (блиски позиви и далеки показивачи, сегмент за код је _text).
// Izraz.java
package izrazi;
public interface Izraz {
double vrednost ();
}
// Konst.java
package izrazi;
public class Konst implements Izraz {
private final double vrednost;
public Konst (double v) { vrednost = v; }
public double vrednost () { return vrednost; }
public String toString () { return Double.toString(vrednost); }
}
// GImePostoji.java
package izrazi;
public class GImePostoji extends Exception {}
// Prom.java
package izrazi;
public class Prom implements Izraz {
private String ime;
private double vrednost;
private static class Elem {
Prom prom; Elem sled;
Elem (Prom p) {prom = p; }
}
private static Elem prvi, posl;
public static Prom nadji (String i) {
for (Elem tek=prvi; tek!=null; tek=tek.sled)
if (tek.prom.ime.equals(i)) return tek.prom;
return null;
}
public Prom (String i, double v)
throws GImePostoji {
if (nadji (i) != null) throw new GImePostoji ();
ime = i; vrednost = v;
Elem novi = new Elem (this);
if (prvi == null) prvi = novi;
else posl.sled = novi;
posl = novi;
}
public Prom (String i) throws GImePostoji { this (i, 0); }
public double vrednost () { return vrednost; }
public void postavi (double v) { vrednost = v; }
public String toString () { return ime; }
}
// Zbir.java
package izrazi;
public class Zbir implements Izraz {
private Izraz a, b;
public Zbir (Izraz aa, Izraz bb) { a=aa; b=bb; }
public double vrednost () { return a.vrednost () + b.vrednost (); }
public String toString () { return "(" + a + '+' + b + ')'; }
}
// Proizv.java
package izrazi;
public class Proizv implements Izraz {
private Izraz a, b;
public Proizv (Izraz aa, Izraz bb) { a=aa; b=bb; }
public double vrednost () { return a.vrednost () * b.vrednost (); }
public String toString () { return "(" + a + '*' + b + ')'; }
}
// Stepen.java
package izrazi;
public class Stepen implements Izraz {
private Izraz a, b;
public Stepen (Izraz aa, Izraz bb) { a=aa; b=bb; }
public double vrednost () { return Math.pow(a.vrednost(),b.vrednost()); }
public String toString () { return "(" + a + '^' + b + ')'; }
}
// Test.java
import izrazi.*;
public class Test {
public static void main (String[] vpar) {
double xmin = Double.parseDouble(vpar[0]),
xmax = Double.parseDouble(vpar[1]),
dx = Double.parseDouble(vpar[2]);
Prom x = null;
try { x = new Prom ("x"); } catch (GImePostoji g) {}
Izraz poli = new Zbir (
new Stepen (x, new Konst (3)),
new Proizv (new Konst (-2), x)
);
System.out.println ("x\t " + poli);
for (double xx=xmin; xx<=xmax; xx+=dx) {
x.postavi (xx);
System.out.println (xx+"\t"+poli.vrednost());
}
}
}
; minmax.asm
; bx==&niz ax==min
; cx==n dx==max
prog segment para public 'code'
assume cs:prog
public minmax
minmax proc near
push bx
push cx
jcxz kraj
mov ax, [bx]
mov dx, ax
dec cx
jcxz kraj
opet: add bx, 2
cmp ax, [bx]
lge max
mov ax, [bx]
jmp dalje
max: cmp dx, [bx]
jge dalje
mov dx, [bx]
dalje:loop opet
kraj: pop cx
pop bx
ret
minmax endp
prog ends
end
; minmaxt.asm
extrn minmax:near
extrn exit_f:far
podat segment para public 'data'
niz dw 30 dup (?)
n dw ?
min dw ?
max dw ?
podat ends
prog segment para public 'code'
assume cs:prog, ds:podat
pocet:mov ax, podat
mov ds, ax
;;;; Citanje podataka.
mov bx,offset niz
mov cx, n
call minmax
mov min, ax
mov max, dx
;;;; Prikaz rezultata.
call exit_f
prog ends
stek segment para
stack 'stack'
dw 64 dup (?)
stek ends
end pocet
; void slbr (short *k) ;
_text segment para public 'code'
assume cs:_text
public _slbr
k equ 4
_slbr proc near
push bp
mov bp, sp
push ds
lds bx, [bp].k
mov ax, [bx]
rol ax, 3
xor ax, 7
mov [bx], ax
pop ds
pop bp
ret
_slbr endp
_text ends
end
(⇒ почетак)
Copyright © 2003, Laslo Kraus
Последња ревизија: 2.3.2003.