evo tekst zadatka
Definisati klasu Dvojka koja omogućava manipulaciju jednim uređenim parom. Prvi element para je cjelobrojni podatak, a drugi element para je string sa proizvoljnim ("neograničenim") brojem znakova.
Klasa Dvojka treba da ima:
a) podrazumijevani konstruktor koji kreira praznu dvojku, čiji je cjelobrojni podatak jednak nuli, a string prazan;
b) konstruktor koji prima jedan cijeli broj i jedan string pa inicijalizuje dvojku;
c) odgovarajući konstruktor kopije;
d) odgovarajući destruktor.
Za klasu Dvojka treba preklopiti sljedeće operatore:
a) operator>> - sa odgovarajućeg ulaza učitava jednu dvojku u obliku: broj string. Omogućiti kaskadno pozivanje.
b) operator<< - na zadatom izlazu ispisuje dvojku u obliku: (broj,string). Omogućiti kaskadno pozivanje.
c) operator= - jednom objektu klase Dvojka dodjeljuje drugi objekat iste klase, pri čemu onemogućava samododjeljivanje (tj. onemogućava dodjelu x=x).
d) operator== - vraća rezultat poređenja dvije dvojke. Za dvije dvojke možemo da kažemo da su jednake ako su im odgovarajuće cjelobrojne komponente jednake. Ako su dvojke jednake vraća istinu, inače vraća laž.
e) operator() - kao rezultat vraća string sadržan u datom uređenom paru.
Definisati klasu Mapa koja omogućava manipulaciju jednostavnom kodnom mapom. Svaka mapa sadrži neograničen niz dvojki. Osim toga, mapa ima još jedan podatak član koji sadrži trenutni broj dvojki u mapi.
Klasa Mapa treba da ima:
a) konstruktor koji kreira praznu mapu,
b) odgovarajući destruktor,
c) prijateljsku funkciju getKapacitet() koja vraća trenutni broj dvojki u mapi.
Za klasu Mapa treba preklopiti sljedeće operatore:
a) operator<< - na zadatom izlazu ispisuje sve dvojke koje se trenutno nalaze u mapi, pri čemu treba omogućiti kaskadno pozivanje.
b) operator+= - omogućava da se u mapu doda nova dvojka (mapa += novaDvojka). Ako u mapi već postoji ista dvojka (tj. dvojka sa istom cjelobrojnom komponentom), ne treba dodati novu dvojku, već postojeću zamijeniti novom.
c) operator() - vraća string iz odgovarajuće dvojke u mapi, čija je cjelobrojna komponenta jednaka argumentu funkcije, odnosno prazan string ako u mapi ne postoji dvojka sa tim cjelobrojnim kodom.
Napisati program u kojem treba:
a) formirati praznu mapu, a zatim sa standardnog ulaza učitati n (n>0) dvojki i napuniti mapu.
b) na standardnom izlazu ispisati mapu.
c) sa standardnog ulaza učitavati cijele brojeve i ispisivati odgovarajuće stringove iz mape, sve dok u mapi postoji dvojka čija je cjelobrojna komponenta jednaka učitanom cijelom broju, kao što je ilustrovano u primjeru.
primjer izvrsavanja programa
n=4
1. dvojka: 2 dva
2. dvojka: 12 dva
3. dvojka: 13 trinaest
4. dvojka: 12 dvanaest
Sadrzaj mape:
(2,dva)
(12,dvanaest)
(13,trinaest)
Unesite broj: 13
Odgovarajuci string: trinaest
Unesite broj: 2
Odgovarajuci string: dva
Unesite broj: 100
Ne postoji odgovarajuci string u mapi!
KRAJ!
Code:
#ifndef klasa
#define klasa
#include <iostream.h>
#include <cstring>
class dvojka
{
friend istream &operator>>(istream &, dvojka &d );
friend ostream &operator<<(ostream &, const dvojka &d);
private:
int b;
char* s;
public:
dvojka();
dvojka(int , char* );
dvojka(const dvojka&);
~dvojka();
dvojka &operator=(dvojka &);
char *operator()(int);
//bool operator==(dvojka &);
};
#endif
#ifndef map
#define map
#include "dvojka.h"
#include <iostream.h>
class Mapa
{
friend ostream &operator<<(ostream &out, const Mapa &m);
friend int getKapacitet(Mapa &);
private:
dvojka *dvojke;
int br;
public:
Mapa();
~Mapa();
//char* operator()(int arg);
Mapa &operator+=(dvojka &);
};
#endif
#include <iostream.h>
#include "dvojka.h"
#include <cstring>
dvojka::dvojka()
{
b=0;
s=new char[0];
}
dvojka::dvojka(int a, char* k)
{
b=a;
int i,n=0;
while(k[n]) n++;
s=new char[n+1];
for(i=0;i<n;i++)
s[i]=k[i];
}
dvojka::dvojka(const dvojka &d)
{
s=new char[strlen(d.s)+1];
strcpy(s,d.s);
b=d.b;
}
dvojka::~dvojka()
{
delete[]s;
}
istream &operator>>(istream &in, dvojka &d)
{
char* tmp; int p;
tmp=new char[100];
in>>p>>tmp;
d.s=new char [strlen(tmp)+1];
strcpy(d.s,tmp);
d.b=p;
delete[]tmp;
}
ostream &operator<<(ostream &out, const dvojka &d)
{
out<<"("<<d.b<<","<<d.s<<")";
return out;
}
dvojka &dvojka::operator=(dvojka &d)
{
if(this==&d) return *this;
delete[]s;
s=new char[strlen(d.s)+1];
strcpy(s,d.s);
b=d.b;
return *this;
}
char *dvojka::operator()(int arg)
{
char* rez;
if(arg==b)
rez=new char[strlen(s)+1];
strcpy(rez,s);
return rez;
}
#include "mapa.h"
#include "dvojka.h"
#include <iostream.h>
Mapa::Mapa()
{
br=0;
dvojke=new dvojka[10];
}
Mapa::~Mapa()
{
delete[]dvojke;
}
Mapa &Mapa::operator+=(dvojka &d)
{
if(br==0)
{
br=1; *dvojke=d;
return *this;
}
dvojka *tmp; int i;
tmp=new dvojka[br+1];
for(i=0;i<br;i++)
{
tmp[i]=dvojke[i];
tmp[i]=d;
delete[]dvojke;
dvojke=tmp;
}
return *this;
}
int getKapacitet(Mapa &m)
{
return m.br;
}
ostream &operator<<(ostream &out, const Mapa &m)
{
int i;
dvojka d[10];
for(i=0;i<m.br;i++)
{
out<<d[i];
}
return out;
}
#include <iostream.h>
#include "dvojka.h"
#include "mapa.h"
using namespace std;
int main(int argc, char *argv[])
{
Mapa m;
dvojka *d;
int a,i,n;
do
{
cout<<"n=";
cin>>n;
} while (n<1);
d=new dvojka[10];
for(i=0;i<n;i++)
{
cout<<"\t"<<i+1<<". dvojka: ";
cin>>d[i];
m+=d[i];
}
cout<<endl<<"Sadrzaj mape:"<<endl;
cout<<m;
system("PAUSE");
return EXIT_SUCCESS;
}