Ласло Краус |
ПЈМП Други парцијални испит 16. 9. 1999. |
---|
>>
) и писање у неки излазни ток (оператор
<<
).Саставити главни програм на језику C++ који преко главног улаза прочита податке о одређеном броју предмета и после тога на главном излазу испише податке о предметима чије су тежине изнад просечне.
Саставити главни програм на симболичком машинском језику за IBM-PC који позива претходни потпрограм за један комплет података. Читање података и приказивање резултата довољно је назначити само у облику коментара.
_text
).Саставити главни програм на језику C++ који исписује табелу k! за 1≤k≤kmax.
// 990916.h
#include <iostream.h>
class Predmet {
double ro;
public:
Predmet (double aro=1) { ro = aro; }
virtual double v () const =0;
double q () const { return v () * ro; }
protected:
void citaj (istream &ad) { ad >> ro; }
void pisi (ostream &ad) const { ad << ro; }
friend istream & operator>> (istream &ad, Predmet &ap)
{ ap.citaj (ad); return ad; }
friend ostream & operator<< (ostream &ad, const Predmet &ap)
{ ap.pisi (ad); return ad ;}
};
class Sfera: public Predmet {
double r;
public:
Sfera (double aro=1, double ar=1): Predmet (ro) { r = ar; }
double v() const { return 4./3 * r*r*r * 3.14159; }
private:
void citaj (istream &ad) { Predmet::citaj (ad); ad >> r; }
void pisi (ostream &ad) const
{ ad << "sfera["; Predmet::pisi (ad); ad << ',' << r << ']'; }
};
class Kvadar: public Predmet {
double a, b, c;
public:
Kvadar (double aro=1, double aa=1, double ab=1, double ac=1)
: Predmet (aro) { a = aa; b = ab; c = ac; }
double v () const { return a * b * c; }
private:
void citaj (istream &ad ){ Predmet::citaj (ad); ad >> a >> b >> c; }
void pisi (ostream &ad) const {
ad << "sfera["; Predmet::pisi (ad);
ad << ',' << a << ',' << b << ',' << c << ']';
}
};
// 990916t.C
#include "990916.h"
#include <iostream.h>
#include <stdlib.h>
void main () {
Predmet *p[100]; double q=0; int i, n=0;
for ( ; ; ) {
char tip; cin >> tip;
if (tip == '.') break;
switch (tip) {
case 's': case 'S': p[n++] = new Sfera; break;
case 'k': case 'K': p[n++] = new Kvadar; break;
}
cin >> *p[n]; q += p[n]->q ();
}
q /= n;
for (int i=0; i<n; i++) if (p[i]->q () > q) cout << *p[i] << endl;
}
; si == &A
; cx == n
prog segmant para public 'code'
assume cs:prog
public radi
radi proc near;
jcxz kraj
push ax
push cx
push dx
push si
push di
mov di, si
cld
opet: lodsw
cmp al, ah
jle dalje
mov dl, al
mov al, ah
mov ah, dl
dalje:stosw
loop opet
pop di
pop si
pop dx
pop cx
pop ax
kraj: ret
radi endp
prog ends
end
extrn radi:near, 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
;;;; Prikaz rezultata.
call exit_f
prog ends
stek segment para stack 'stack'
dw 64 dup (?)
stek ends
end pocet
; void mnozi (char *a, short n, unsigned char k);
_text segment para public 'code'
assume cs:_text
public _mnozi
a equ 4
n equ 8
k equ 10
_mnozi proc near
push bp
mov bp, sp
push si
push di
lds si, [bp].a
les di, [bp].a
mov cx, [bp].n
mov dh, [bp].k
xor dl, dl ; prenos
mov bl, 10
opet: lodsb
mul dh
add al, dl
adc ah, 0
div bl
mov dl, al
mov al, ah
stosb
loop opet
pop di
pop si
pop bp
ret
_mnozi endp
_text ends
end
#include <iostream.h>
const short N = 60;
extern "C" void mnozi (char *a, short n, unsigned char k);
void main () {
char a[N]; short kmax;
cout << "kmax? "; cin >> kmax;
a[0] = 1;
for (int i=1; i<N; a[i++]=0);
for (unsigned char k=1; k<kmax; k++) {
mnozi (a, N, k);
cout << (int)k << ' ';
for (i=N-1; i>=0; cout << (int)a[i--]); cout << endl;
}
}
(⇒ почетак)
Copyright © 2001, Laslo Kraus
Последња ревизија: 15.7.2001.