Ласло Краус |
ПЈМП Други парцијални испит 11. 7. 2003. |
|---|
Пројектовати на језику Java пакет класа са следћим описом:
String садржи идентификациони број предмета.
String састоји се од резултата конверзије елемената низа у тип String међусобно раздвојених зарезима, унутар пара средњих заграда.
String је облика Kid(a,b,c), где су id - идентификациони број квадра, а a, b и c - дужине страница квадра.
Саставити на језику Java класу са главним програмом који прочита низ квадара, испише тај низ, затим учита посебан квадар и испише позицију тог квадра у низу. На располагању стоји класа Citaj у безименом пакету која садржи заједничке методе за читање свих стандардних типова података.
Концизно одговорити на следећа питања:
а) Да ли је за интерфејс INesto исправан израз INesto i=new Object();. Образложити.
б) Која је разлика у односима статичке угнеждене класе и нестатичке унутрашње (inner) класе према спољашњој класи?
в) У чему је разлика између појма ослушкивача (listener) и адаптера у пакету AWT?
Саставити потпрограм на симболичком машинском језику за IBM-PC за убацивање новог елемента у уређени низ 16-битних целих бројева тако да низ и даље буде уређен.
Саставити главни програм на симболичком машинском језику за IBM-PC који позива претходни потпрограм за један комплет података. Читање података и приказивање резултата довољно је назначити само у облику коментара.
Саставити потпрограм на симболичком машинском језику за IBM-PC, који може да се позива из програма писаног на језику C, за цикличко померање елемената низа 16-битних целих бројева за једно место улево. Користити велики меморијски модел (далеки позиви и далеки показивачи).
// Predmet.java
package predmeti;
public abstract class Predmet {
private static int ukId;
private int id = ++ukId;
public abstract boolean manji (Predmet p);
public boolean jednak (Predmet p) { return !manji(p) && !p.manji(this); }
public String toString () { return Integer.toString (id); }
}
// GNizPun.java
package predmeti;
public class GNizPun extends Exception {}
// Niz.java
package predmeti;
public class Niz {
private Predmet[] niz;
private int n;
public Niz (int k) { niz = new Predmet [k];}
public Niz () { this (10); }
public Niz dodaj(Predmet p) throws GNizPun {
if (n == niz.length) throw new GNizPun ();
int i=n-1;
while (i>=0 && p.manji(niz[i])) { niz[i+1] = niz[i]; i--; }
niz[i+1] = p; n++;
return this;
}
public int poz (Predmet p) {
int i=0;
while (i<n && niz[i].manji(p)) i++;
return (i<n && p.jednak(niz[i])) ? i : -1;
}
public String toString () {
StringBuffer s = new StringBuffer ('[');
for (int i=0; i<n; i++)
s.append (niz[i])
.append ((i<n-1)?',':']');
return s.toString ();
}
}
// Kvadar.java
package predmeti;
public class Kvadar extends Predmet {
private double a, b, c;
public Kvadar (double aa, double bb, double cc)
{ a = aa; b = bb; c = cc; }
public double V () { return a * b * c; }
public boolean manji (Predmet k) { return V() < ((Kvadar)k).V(); }
public String toString ()
{ return "K" + super.toString() + '(' + a + ',' + b + ',' + c + ')'; }
}
// Test.java
import predmeti.*;
public class Test {
public static void main (String[] varg) {
System.out.print ("n? ");
int n = Citaj.Int ();
Niz niz = new Niz (n);
try {
for (int i=0; i<n; i++) {
System.out.print ("niz[" +i +"]? ");
niz.dodaj (new Kvadar(Citaj.Double(), Citaj.Double(), Citaj.Double()));
}
System.out.println ("Uredjeni niz: " + niz);
System.out.print ("Trazi se? ");
Kvadar k = new Kvadar (Citaj.Double(), Citaj.Double(), Citaj.Double());
int p = niz.poz (k);
if (p >=0) System.out.println("poz= " + p);
else System.out.println("Nema tog kvadra");
} catch (Exception g) {
System.out.println (g);
}
}
}
; ubaci.asm
; bx==@niz cx==n
; dx==k
prog segment para public 'code'
assume cs:prog
public ubaci
ubaci proc near
push ax
push bx
push cx
jcxz dalje
add bx, cx
add bx, cx
opet: mov ax, [bx]-2
cmp ax, dx
ble dalje
mov [bx], ax
sub bx, 2
loop opet
dalje:mov [bx], dx
pop cx
pop bx
pop ax
inc cx
ret
ubaci endp
prog ends
end
; ubacit.asm
extrn ubaci:near
extrn exit_f:farpodat segment para public 'data'
niz dw 30 dup (?)
n dw ?
k 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
mov dx, k
call ubaci
mov k, cx
;;;; Prikaz rezultata.
call exit_f
prog ends
stek segment para stack 'stack'
dw 64 dup (?)
stek ends
end pocet
; void pomeri
; (short *a, short n) ;
pomeri_text segment para public 'code'
assume cs:pomeri_text
public _pomeri
a equ 6
n equ 10
_pomeri proc far
push bp
mov bp, sp
push ds
lds bx, [bp].a
mov cx, [bp].n
jcxz kraj
dec cx
jcxz kraj
mov dx, [bx]
opet: mov ax, [bx]+2
mov [bx], ax
add bx, 2
loop opet
mov [bx], dx
kraj: pop ds
pop bp
ret
_pomeri endp
pomeri_text ends
end
(⇒ почетак)
Copyright © 2004, Laslo Kraus
Последња ревизија: 23.2.2004.