Ласло Краус |
ПЈМП Други парцијални испит 12. 7. 1998. |
---|
+=
),
дохватање броја оцена (унарни оператор +
), дохватање оцене са задатим
редним бројем (оператор []
) и израчунавање средње оцене (унарни
оператор ~
).Саставити главни програм на језику C++ који прочита податке о одређеном броју студената и после тога исписује њихова имена по опадајућем редоследу вредности средњих оцена.
Саставити главни програм на симболичком машинском језику за IBM-PC који позива претходни потпрограм за један комплет података. Читање података и приказивање резултата довољно је назначити само у облику коментара.
Саставити главни програм на језику C++ који чита потпрбне податке, позива претходни потпрограм и исписује резултате све док за дужину низа не прочита негативну вредност.
// 980712.h
class Student {
char *iime; long iind; int kap, br, *oc;
public:
Student (int kk);
~Student ();
void ime (const char *ii);
const char *ime () const { return iime; )
void ind (long ii) { iind = ii; );
long ind () const { return iind; }
Student & operator+= (int oo);
int operator+ () const { return br; }
int & operator[] (int i) const { return (i>=0 && i<br) ? oc[i] : 0; );
double operator~ () const;
};
// 980712.C
#include "980712.h"
#include <string.h>
#include <stdlib.h>
Student::Student (int kk) {
iime = 0; iind = br = 0;
if ((oc = new int[kap=kk]) == 0) exit(1);
}
Student::~Student () { delete [] iime; delete [] oc; }
void Student::ime (const char *ii) {
delete [] iime;
if ((iime = new char [strlen(ii)+1]) == 0) exit(2);
strcpy (iime, ii);
}
Student & Student::operator+= (int oo) {
if (br == kap) exit (3);
oc[br++] = oo; return *this;
}
double Student::operator~ () const {
double sr = 0;
if (br > 0) {
for (int i=0; i<br; sr+=oc[i++]);
sr /= br;
}
return br;
}
// 970814t.C
#include "980712.h"
#include <iostream.h>;
void main () {
Student *s[100]; int n; cin >> n;
for (int i=0; i<n; i++) {
Student *t = new Student (30);
char ime[50]; long ind; cin >> ime, ind;
t->ime (ime); t->ind (ind);
int br, oc; cin >> br;
for (int j=0; j<br; j++) { cin >> oc; *t += oc; }
for (j=i; j>0 && ~(*s[j-1])<~(*t); j--) s[j] = s[j-1];
s[j] = t;
}
for (i=0; i<n; i++) cout << s[i]->ime() << endl;
}
; si == &A
; di == &B
; cx == n
prog segment para public 'code'
assume cs:prog
public radi
radi proc near
push ax
push cx
push dx
push si
push di
jcxz kraj
cld
opet lodsw
mov dx, ax
add al, dh
sub ah, dl
neg ah
stosw
loop opet
kraj: pop di
pop si
pop dx
pop cx
pop ax
ret
radi endp
prog ends
end
extrn radi:near,exit_f:far
podat segment para public 'data'
a db 100 dup (?)
b 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 di, offset b
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 razvrst (short k, short *a, short na,
short *b, short *nb, short *c, short *nc);
pp_text segment para public 'code'
assume cs:pp_text
public _razvrst
k equ 6
a equ 8
na equ 10
b equ 12
nb equ 14
c equ 16
nc equ 18
_razvrst proc far
push bp
mov bp, sp
push si
push di
mov dx, [bp].k
mov bx, [bp].a
mov cx, [bp].na
mov si, [bp].b
mov di, [bp].c
jcxz kraj
opet: mov ax, [bx]
add bx, 2
cmp ax, dx
bgt veci
mov [si], ax
add si, 2
jmp dalje
veci: mov [di], ax
add di, 2
dalje:loop opet
kraj: sub si, [bp].b
shr si, 1
mov [bp].nb, si
sub di, [bp].c
shr di, 1
mov [bp].nc, di
pop di
pop si
pop bp
ret
_razvrts endp
pp_text ends
end
#include <iostream.h>
extern "C" void razvrst (short k, short *a, short na,
short *b, short &nb, short *c, short &nc);
main () { short k, a[100], na, b[100], nb, c[100], nc;
while(1) {
cout << "na? "; cin >> na;
if (na < 0) break;
cout << "A? "; for (int i=0; i<na; cin >> a[i++]);
cout << "k? "; cin >> k;
razvrst (k, a, na, b, nb, c, nc);
cout << "B= "; for (i=0; i<nb; cout << b[i++] << ' ');
cout << endl;
cout << "C= "; for (i=0; i<nc; cout << c[i++] << ' ');
cout << endl << endl;
}
}
(⇒ почетак)
Copyright © 2001, Laslo Kraus
Последња ревизија: 15.7.2001.