Ласло Краус |
ПЈМП Други парцијални испит 12. 7. 2001. |
---|
String
. У класи постоји и услужна метода за конверзију низа тачака у тип String
.
String
садржи идентификациони број линије.
String
, поред идентификационог броја садржи реч duz и координате крајњих тачака.
null
) или низ са мање од три тачке. Те ситуације се пријављују изузетком чији текст поруке указује на врсту проблема. Конверзија у тип String
, поред идентификационог броја садржи реч izlomljena и низ координата темена.
String
користи се реч poligon.
Citaj
у безименом пакету која садржи заједничке методе за читање свих стандардних типова података.
Саставити главни програм на симболичком машинском језику за IBM-PC који позива претходни потпрограм за један комплет података. Читање података и приказивање резултата довољно је назначити само у облику коментара.
// Tacka.java
package Linije;
public class Tacka {
private double x, y;
public Tacka () {}
public Tacka (double xx, double yy) { x = xx; y = yy; }
public double uzmiX () { return x; }
public double uzmiY () { return y; }
public String toString () { return "("+x+","+y+")"; }
public static String toString (Tacka[] niz) {
String s = "(";
for (int i=0; i<niz.length; i++)
{ s += niz[i]; if (i < niz.length-1) s +=","; }
return s + ")";
}
}
// Linija.java
package Linije;
public abstract class Linija {
private static int ukId = 0;
protected int id = ++ukId;
public abstract double duzina ();
public String toString() {return Integer.toString(id);}
}
// Duz.java
package Linije;
public class Duz extends Linija {
private Tacka A, B;
public Duz (Tacka P, Tacka Q) { A = P; B = Q; }
public Duz () {this(new Tacka(-1,-1), new Tacka(1,1));}
public double duzina () {
return Math.sqrt (Math.pow(A.uzmiX()-B.uzmiX(),2) +
Math.pow(A.uzmiY()-B.uzmiY(),2));
}
public String toString () { return super.toString()+"[duz: A"+A+", B"+B+"]"; }
}
// EIzlomljena.java
package Linije;
public class EIzlomljena extends Exception {
EIzlomljena (String poruka) { super (poruka); }
}
// Izlomljena.java
package Linije;
public class Izlomljena extends Linija {
protected Tacka[] temena;
public Izlomljena (Tacka[] tt) throws EIzlomljena {
if (tt == null) throw new EIzlomljena("Nema niza temena!");
if (tt.length < 3) throw new EIzlomljena ("Premalo temena!");
temena = tt;
}
public double duzina () {
double d = 0;
for (int i=0; i<temena.length-1; i++)
d += new Duz (temena[i], temena[i+1]).duzina();
return d;
}
public String toString () {
return super.toString() + "[izlomljena: " +
Tacka.toString(temena) + "]";
}
}
// Poligon.java
package Linije;
public class Poligon extends Izlomljena {
public Poligon(Tacka[]tt)throws EIzlomljena {super(tt);}
public double duzina () { return super.duzina() +
new Duz(temena[0],temena[temena.length-1]).duzina();
}
public String toString () { return id + "[poligon: " +
Tacka.toString(temena) + "]";
}
}
// Test.java
import Linije.*;
public class Test {
public static Linija citaj () throws EIzlomljena {
System.out.print ("Vrsta linije (D, I, P, *)? ");
char izb = Citaj.Char ();
switch (izb) {
case 'D': case 'd': {
System.out.print ("Prva tacka? ");
Tacka A=new Tacka(Citaj.Double(),Citaj.Double());
System.out.print ("Druga tacka? ");
Tacka B=new Tacka(Citaj.Double(),Citaj.Double());
return new Duz (A, B);
} case 'I': case 'i': case 'P': case 'p': {
System.out.print ("Broj temena? ");
int n = Citaj.Int ();
Tacka[] temena = new Tacka [n];
for (int i=0; i<n; i++) {
System.out.print ((i+1) + ". teme? ");
temena[i] = new Tacka (Citaj.Double(), Citaj.Double());
}
return(izb=='I'||izb=='i')? new Izlomljena(temena)
: new Poligon(temena);
} default: return null;
}
}
public static void main (String[] vpar) {
Linija[] linije = new Linija [Integer.parseInt(vpar[0])];
try {
for (int i=0; i<linije.length; linije[i++]=citaj());
System.out.println ("===================");
for (int i=0; i<linije.length; i++)
System.out.println (linije[i] + " d = " + linije[i].duzina());
System.out.println ("===================");
double maxDuz = linije[0].duzina();
int maxInd = 0;
for (int i=1; i<linije.length; i++) {
double d =linije[i].duzina();
if (d > maxDuz) { maxDuz = d; maxInd = i; }
}
System.out.println ("Najduza linija: " +
linije[maxInd]);
} catch (EIzlomljena g) { System.out.println (g); }
}
}
; zbir.asm
; di == adresa prvog sabirka i rezultata.
; si == drugog sabirka.
prog segment para public 'code'
assume cs:prog
public zbir
zbir proc near
push ax
push si
push di
mov ax, [si]
add [di], ax
mov ax, [si]+2
adc [di]+2, ax
mov ax, [si]+4
adc [di]+4, ax
mov ax, [si]+6
adc [di]+6, ax
pop di
pop si
pop ax
ret
zbir endp
prog ends
end
; zbirt.asm
extrn zbir:near, exit_f:far
podat segment para public 'data'
a dw 4 dup (?)
b dw 4 dup (?)
podat ends
prog segment para public 'code'
assume cs:prog, ds:podat
pocet:mov ax, podat
mov ds, ax
;;;; Citanje podataka.
mov di, offset a
mov si, offset b
call zbir ; a += b
;;;; Prikaz rezultata.
call exit_f
prog ends
stek segment para stack 'stack'
dw 64 dup (?)
stek ends
end pocet
; void bitovi (char *niz, short k, short v) ;
prog segment para public 'code'
assume cs:prog
public _bitovi
niz equ 6
k equ 10
v equ 12
_bitovi proc far
push bp
mov bp, sp
push ds
lds bx, [bp].niz
mov ax, [bp].k
mov cx, ax
shr ax, 3
add bx, ax
and cx, 7
mov al, 1
shl al, cl
test word ptr[bp].v,1
jz nula
jedan:or [bx], al
jmp dalje
nula: xor al, 0ffh
and [bx], al
dalje:pop ds
pop bp
ret
_bitovi endp
prog ends
end
(⇒ почетак)
Copyright © 2002, Laslo Kraus
Последња ревизија: 18.2.2002.