Ласло Краус |
ПЈМП Други парцијални испит 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.