Ласло Краус |
ПЈМП Први парцијални испит 9. 3. 2000. |
---|
+skal
).
niz1=niz2
), дохватање
капацитета низа (+niz
), дохватање вредности неког
елемента низа (niz[ind]
, грешка је ако је индекс
изван дозвољеног опсега или ако је дато место празно), стављање
податка на прво слободно место у низу (niz+=pod
,
грешка је ако у низу нема слободног места), избацивање податка са
датог места у низу (niz-=ind
, грешка је ако је
индекс изван дозвољеног опсега) и пражњење садржаја низа
(~niz
). Грешке сигнализирати изузецима.
а) Графички представити генераторску функцију g(u) такву да се за задату вредност u генерише псеудослучајан број r према задатој расподели.
б) Одредити вредност r за генерисани број u = 0.8.
A
, B
, C
и D
кодирају се са по два бита 00
, 01
,
10
и 11
. Извршити компресију низа симбола
ABCB
CABC
BDBC
ADBC
применом LZW поступка.
а) Да ли безбедност криптосистема треба да се заснива на тајности алгоритма кодирања и зашто?
б) Шта су супституциони кодери? Навести пример супституционог кодирања поруке: "Положио".
в) Да ли је шифровање тајним кључем погодно за чување тајних података и зашто?
г) Да ли се JPEG компресија може успешно применити више пута на податке који су већ компримовани JPEG методом? Какве су последице?
д) Зашто се при JPEG компресији вредности пиксела не представљају у RGB формату?
// p1999_00_1a.h
#include <iostream.h>
class Podat {
public:
virtual ~Podat () {}
virtual Podat *kopija () const = 0;
private:
virtual void pisi (ostream &dd) const = 0;
friend ostream & operator<< (ostream &dd, const Podat &pp)
{ pp.pisi (dd); return dd; }
};
class Skal: public Podat {
double vredn;
public:
Skal (double vv=0) { vredn = vv; }
Podat *kopija () const { return new Skal (*this); }
double operator+ () const { return vredn; }
private:
void pisi (ostream &dd) const { dd << vredn; }
};
class Niz: public Podat {
Podat **niz; int kap;
void kopiraj (const Niz &nn);
void brisi () { ~*this; delete [] niz; }
public:
Niz (double kk=10);
Niz (const Niz &nn) { kopiraj (nn); }
~Niz () { brisi (); }
Podat *kopija () const { return new Niz (*this); }
Niz & operator= (const Niz &nn) {
if (this != &nn) { brisi (); kopiraj (nn); }
return *this;
}
int operator+ () const { return kap; }
Podat & operator[] (int ind) {
if (ind < 0 || ind >= kap) throw 1;
if (niz[ind] == 0) throw 2;
return *niz[ind];
}
Niz & operator+= (const Podat &pp);
Niz & operator-= (int ind) {
if (ind < 0 || ind >= kap) throw 1;
delete niz[ind]; niz[ind = 0;
return *this;
}
void operator~ ();
private:
void pisi (ostream &dd) const ;
};
// p1999_00_1a.cpp
#include "p1999_00_1a.h"
Niz::Niz (double kk) {
niz = new Podat* [kap = kk];
for (int i=0; i<kap; niz[i++]=0);
}
void Niz::kopiraj (const Niz &nn) {
niz = new Podat* [kap = nn.kap];
for (int i=0; i<kap; i++)
niz[i] = nn.niz[i] ? nn.niz[i]->kopija() : 0;
}
Niz & Niz::operator+= (const Podat &pp) {
for (int i=0; i<kap && niz[i]; i++);
if (i == kap) throw 3;
niz[i] = pp.kopija ();
return *this;
}
void Niz::operator~ () {
for (int i=0; i<kap; i++) { delete niz[i]; niz[i] = 0; }
}
void Niz::pisi (ostream &dd) const {
dd << '[';
for (int i=0; i<kap; i++) {
if (niz[i]) dd << *niz[i];
if (i < kap-1) dd << ',';
}
dd << ']';
}
// p1999_00_1at.cpp
#include "klase.h"
#include <iostream.h>
void main () {
while (1) {
try {
cout << "\nBroj podataka? "; int n; cin >> n;
if (n < 0) break;
Niz a (n);
for (int i=0; i<n; i++) {
cout << "Vrsta i vrednost podatka (Skalar, Niz)? ";
char vrs; cin >> vrs;
switch (vrs) {
case 's': case 'S': {
double s; cin >> s;
a += Skal (s); break;
}
case 'n': case 'N': {
int n; cin >> n; Niz b (n);
for (int i=0; i<n; i++) {
double s; cin >> s;
b += Skal (s);
}
a += b; break;
}
}
}
cout << "Niz podataka: " << a << endl;
} catch (int g) { cout << "\n*** " << g << " ***\n"; }
}
}
0000
0101
0101
1001
1000
1101
1110
1000
10
(34 бита).
(⇒ почетак)
Copyright © 2001, Laslo Kraus
Последња ревизија: 15.7.2001.