Elektrotehnicki fakultet, Beograd  Ласло Краус ПЈМП
Други парцијални испит
25. 7. 2000.

Аутори: Игор Тартаља (задаци) и Ласло Краус (задаци и решења)

Задаци: 1 2 3 | Напоменe | Решења: 1 2 3

Поставка задатка 1 (60 поена) ( решење | почетак)

Возило има сопствену тежину. Путничко возило је возило у коме се налази известан број путника задате просечне тежине. Теретно возило је возило које је натоварено теретом одређене тежине. Пројектовати на језику Java пакет класа за унифицирану обраду набројаних врста возила. Предвидети иницијализацију задатим вредностима параметара, израчунавање укупне тежине возила, читање преко главног улаза и представљање у текстуалном облику за потребе исписивања. На располагању стоји класа Citaj у безименом пакету која садржи заједничке методе за читање свих стандардних типова података.

Саставити на језику Java класу са главним програмом који преко главног улаза прочита податке о дређеном броју возила и после тога на главном излазу испише податке о возилима која могу да пређу преко моста задате носивости.

Поставка задатка 2 (25 поена) ( решење | почетак)

Саставити на симболичком машинском језику за IBM-PC потпрограм којим се из низа 16-битних целих бројева изоставе сви елементи који су без остатка дељиви са 16 или са 33.

Саставити на симболичком машинском језику за IBM-PC главни програм који позива претходни потпрограм за један комплет података. Читање података и приказивање резултата довољно је назначити само у облику коментара.

Поставка задатка 3 (15 поена) ( решење | почетак)

Дугачки позитивни цели бројеви представљају се у облику низа бајтова чији елементи садрже по једну децималну цифру у бинарном облику. Саставити потпрограм на симболичком машинском језику за IBM-PC, који може да се позива из програма писаног на језику C, за додавање једног дугачког целог броја на други број исте дужине. Користити средњи меморијски модел (далеки позиви и блиски показивачи).

Напоменe ( почетак)


Решење задатка 1 ( поставка | почетак)

// Vozilo.java - Apstraktna klasa vozila.

package Vozila;

import Citaj;

abstract public class Vozilo {

  double sTezina;

  public Vozilo () {}

  public Vozilo (double sTez) { sTezina = sTez; }

  public double ukTezina ()   { return sTezina; }

  public void citaj () {
    System.out.print ("Sopstvena tezina? ");
    sTezina = Citaj.Double () ;
  }

  public String toString () { return "" + sTezina; }
}


// PVozilo.java - Klasa putnickih vozila.

package Vozila;

import Citaj;

public class PVozilo extends Vozilo {

  int brPutnika;

  double srTezina;

  public PVozilo () {}

  public PVozilo (double sTez, int brPut, double srTez) {
    super (sTez);
    brPutnika = brPut; srTezina = srTez;
  }

  public double ukTezina ()
    { return super.ukTezina () + brPutnika * srTezina; }

  public void citaj () {
    super.citaj ();
    System.out.print ("Broj putnika? ");
    brPutnika = Citaj.Int ();
    System.out.print ("Srednja tezina putnika? ");
    srTezina  = Citaj.Double ();
  }

  public String toString () {
    return "pVozilo (" + sTezina + "+" + brPutnika + "*" + srTezina +
           "=" + ukTezina () + ")";
  }
}

// TVozilo.java - Klasa teretnih vozila.

package Vozila;

import Citaj;

public class TVozilo extends Vozilo {

  double tezTereta;

  public TVozilo () {}

  public TVozilo (double sTez, double tezTer)
    { super (sTez); tezTereta = tezTer; }

  public double ukTezina ()
    { return super.ukTezina () + tezTereta; }

  public void citaj () {
    super.citaj ();
    System.out.print ("Tezina tereta? ");
    tezTereta = Citaj.Double ();
  }

  public String toString ()
    { return "tVozilo (" + sTezina + "+" + tezTereta+"="+ukTezina()+")"; }
}


// VozilaT.java - Ispitivanje klasa vozila.

import Vozila.*;

class VozilaT {

  public static void main (String[] argi) {
    Vozilo[] vozila = new Vozilo [100];
    Vozilo vozilo = null;
    int brVozila = 0;
    while (true) {
      System.out.print ("Vrsta vozila (P, T)? ");
      switch (Citaj.Char()) {
        case 'p': case 'P': vozilo = new PVozilo (); break;
        case 't': case 'T': vozilo = new TVozilo (); break;
        default :           vozilo = null;
      }
    if (vozilo == null) break;
      vozilo.citaj ();
      vozila[brVozila++] = vozilo;
    } while (vozilo != null);
    System.out.print ("\nNosivost mosta? ");
    double nosivost = Citaj.Double ();
    System.out.print ("\nMogu da predju most:\n");
    for (int i=0; i<brVozila; i++) {
      if (vozila[i].ukTezina () <= nosivost)
        System.out.println("  " + vozila[i]);
    }
  }
}

Решење задатка 2 ( поставка | почетак)

; izost.asm
; si == &A
; cx == n

prog  segment para public 'code'
      assume cs:prog
      public izost
izost proc near;
      jcxz kraj
      push ax
      push bx
      push dx
      push si
      push di
      mov  di, si
      mov  bx, 33
opet: mov  ax, [si]
      test ax, 15
      jz   dalje
      mov  ax, [si]
      cwd
      idiv bx
      cmp  dx, 0
      jz   dalje
      mov  ax, [si]
      mov  [di], ax
      add  di, 2
dalje:add  si, 2
      loop opet
      mov  cx, di
      pop  di
      pop  si
      pop  dx
      pop  bx
      pop  ax
      sub  cx, si
      shr  cx, 1
kraj: ret
izost endp
prog  ends

      end


; izostt.asm

      extrn izost:near
      extrn exit_f:far

podat segment para public 'data'
a     db    100 dup (?)
n     dw    ?
podat ends

prog  segment para public 'code'
      assume cs:prog, ds:podat
pocet:mov  ax, podat;
      mov  ds, ax
      mov  es, ax
;;;;  Citanje podataka.
      mov  si, offset a
      mov  cx, n
      call radi
      mov  n, cx
;;;;  Prikaz rezultata.
      call exit_f
prog  ends

stek  segment para stack 'stack'
      dw   64 dup (?)
stek  ends

      end  pocet

Решење задатка 3 ( поставка | почетак)

; dodaj.asm
; void dodaj (char *a, char *b, short n);
; a += b;

dodaj_text segment para public 'code'
      assume  cs:dodaj_text
      public _dodaj
a     equ  6
b     equ  8
n     equ  10
_dodaj proc far
      push bp
      mov  bp, sp
      push si
      push di
      mov  di, [bp].a
      mov  si, [bp].b
      mov  cx, [bp].n
      clc
      jcxz kraj
opet: mov  al, [di]
      adc  al, [si]
      cmp  al, 9
      jgt  pren
      clc
      jmp  dalje
pren: sub  al, 10
      stc
dalje:mov  [di], al
      inc  si
      inc  di
      loop opet
kraj: pop  di
      pop  si
      pop  bp
      ret
_dodaj endp
dodaj_text ends

      end
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

Copyright © 2001, Laslo Kraus
Последња ревизија: 15.7.2001.