показивач this – решени задаци

1. Написати на језику C++ класу углова задатих у радијанима. Предвидети:

  • стварање угла на основу задатог броја радијана (подразумевано 0)

  • стварање угла на основу задатог броја степени, минута и секунди

  • дохватање величине угла у радијанима

  • дохватање делова угла (целобројне степене, минуте и секунде) и то одвојено и одједном

  • додавање вредности другог угла текућем углу

  • множење угла реалним бројем

  • читање угла са главног улаза и писање на главном излазу у радијанима и у степенима

Написати на језику C++ програм који прочита два угла, израчуна њихову средњу вредност и испише добијени резултат.

// ugao.h - definicija klase uglova
#include
using namespace std;
const double FAKTOR=3.14159265358979323/180;
class Ugao
{
	double ugao;						 //ugao u radijanima
public:
	Ugao(double u=0)	{ugao=u;}//podrazumevani konstruktor i konstruktor konverzije
	Ugao(int stp, int min=0, int sek=0);	//konstruktor na osnovu stepeni
	double rad() const{return ugao;}			// radijani
	int stp()const{return ugao/FAKTOR;}			//stepeni
	int min()const{return int(ugao/FAKTOR*60)%60;}	//minuti
	int sek() const{return int(ugao/FAKTOR*3600)%60;}	//sekunde
	void razlozi(int& st, int& mi, int& se) const;	//sve tri komponente odjednom
	Ugao& dodaj (Ugao u); 	//dodavanje ugla
	Ugao& pomnozi(double a);	//mnozenje realnim brojem
	void citaj();				//citanje u radijanima
	void citajStep();						//citanje u stepenima
	void pisi() const; 			//pisanje u radijanima
	void pisiStep() const;					//pisanje u stepenima
};

#include"ugao.h"
Ugao::Ugao(int stp, int min, int sek)		{ ugao=((sek/60.+min)/60+stp)*FAKTOR;}
void Ugao::razlozi(int& st, int& mi, int& se) const
{
	st=stp();
	mi=min();
	se=sek();
}
Ugao& Ugao::dodaj (Ugao u)
{
	ugao+=u.ugao;
	return *this;
}	//dodavanje ugla
// pokazivac *this odnosi se na tekuci objekat, podrazumevan je tako da ne mora da se definise!
Ugao& Ugao::pomnozi(double a)
{
	ugao*=a;
	return *this;
}//mnozenje realnim brojem
void Ugao::citaj(){cin>>ugao;}				//citanje u radijanima
void Ugao::citajStep()						//citanje u stepenima
{		
	int stp, min, sek;
	cin>>stp>>min>>sek;
	*this=Ugao(stp, min, sek);	
}
void Ugao::pisi() const {cout<<ugao;}			//pisanje u radijanima
void Ugao::pisiStep() const{cout<<'('<<stp()<<':'<<min()<<':'<<sek()<<')';}		
	
//ispitivanje klase uglova
#include"ugao.h"
#include
using namespace std;
int main()
{	
	Ugao u1,u2;
	cout<<"prvi ugao [rad]?";u1.citaj();
	cout<<"drugi ugao [rad]?";u2.citaj();
	Ugao sr=Ugao(u1).dodaj(u2).pomnozi(0.5);
	cout<<"srednja vrednost= ";sr.pisi();
	cout<<' ';sr.pisiStep();
	cout<<endl;
	return 0;
}

2. Пројектовати на језику C++ класу уређених скупова реалних бројева. Предвидети:
– стварање празног скупа, скупа који садржи један број и као копија другог скупа,
– уништавање скупа,
– налажење уније, пресека и разлике два скупа,
– читање скупа преко главног улаза,
– писање скупа на главни излаз, и
– дохватање броја елемената скупа.
Саставити на језику C++ главни програм за проверу исправности претходне класе.

//skup.h - Definicija klase uređenih skupova.

class Skup
{
int vel; double *niz; // Veličina i elementi skupa.
void kopiraj (const Skup &); // Kopiranje skupa.
void brisi () { delete [] niz; niz = 0; vel = 0; } // Pražnjenje skupa. Ž
public:
Skup () { niz = 0; vel = 0; } // Stvaranje praznog skupa.
Skup (double a) { // Konverzija broja u skup.
niz = new double [vel = 1];
niz[0] = a;
}
Skup (const Skup &s) { kopiraj (s);} // Inicijalizacija skupom. i
~Skup () { brisi ();} // Uništavanje skupa.
void unija (const Skup &, const Skup &) ; // Unija dva skupa. д
void presek (const Skup &, const Skup &); // Presek dva skupa.
void razlika(const Skup&, const Skup &) ; // Razlika dva skupa.
void pisi () const; // Pisanje skupa. Ž
void citaj (); // Čitanje skupa. i
int velicina () const { return vel; } // Veličina skupa.
};
// skup.cpp – Definicije metoda klase uređenih skupova.
#include "skup.h"
#include <iostream>
using namespace std;
void Skup::kopiraj (const Skup & s) { // quiranje skupa. Ј
niz = new double [vel = s.vel];
for (int i=0; i<vel; i++) niz[i] = s.niz[i];
}
void Skup::unija (const Skup & s1, const Skup & s2) { // Unija dva skupa.
Skup s;
s.niz = new double [s1.vel+s2.vel]; s.vel = 0;
for (int i=0, j=0; i<s1.vel|| j<s2.vel;)
s.niz[s.vel++] = i==s1.vel ? s2.niz[j++]:
j==s2.vel ? s1.niz[i++]:
s1.niz[i]<s2.niz[j] ? s1.niz[i++]:
s1.niz[i]>s2.niz[j] ? s2.niz[j++]:
(j++, s1.niz[i++]);
brisi (); kopiraj (s);
}

void Skup::presek (const Skup & s1, const Skup & s2) { // Presek dva skupa.
Skup s;
s.niz = new double [s1.vel<s2.vel ? s1.vel : s2.vel]; s.vel = 0;
for (int i=0, j=0; i<s1.vel && j<s2.vel;)
if (s1.niz[i] < s2.niz[j]) i++;
else if (s1.niz[i] > s2.niz[j]) j++;
else s.niz[s.vel++] = s1.niz[i++], j++;
brisi (); kopiraj (s);
}

void Skup::razlika(const Skup & s1, const Skup & s2) { // Razlika dva skupa.
Skup s;
s.niz = new double [s1.vel]; s.vel = 0;
for (int i=0, j=0; i<s1.vel; )
if (j==s2.vel)s.niz[s.vel++]=s1.niz[i++];
else if (s1.niz[i] < s2.niz[j]) s.niz[s.vel++] = s1.niz[i++];
else if (s1.niz[i] > s2.niz[j]) j++;
else i++, j++;
brisi (); kopiraj (s);
}
void Skup::pisi () const { // Pisanje skupa.
cout<<'{';
for(int i=0; i<vel; i++){cout<<niz[i];if(i<vel-1)cout<<',';}
cout<<'}';
}


void Skup::citaj () { // Čitanje skupa.
brisi();
int vel; cin >> vel;
double broj;
for (int i=0; i<vel; i++) { cin >> broj; unija (*this, broj); }
}
// Ispitivanje klase uređenih skupova.
#include "skup.h"
#include <iostream>
using namespace std;
int main()
{
char jos;
do
{
Skup s1; cout << "niz1? "; s1.citaj ();
Skup s2; cout << "niz2? "; s2.citaj();
cout << "s1 ="; s1.pisi (); cout << endl;
cout << "s2 ="; s2.pisi (); cout << endl;
Skup s; s.unija (s1, s2); cout << "s1+s2="; s .pisi (); cout << endl;
s.presek (s1, s2); cout << "s1*s2="; s .pisi (); cout << endl;
s.razlika(s1, s2); cout << "s1–s2="; s .pisi (); cout << endl;

cout << "\nJos? "; cin >> jos;
}while (jos=='d'|| jos=='D');
return 0;
}

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се /  Промени )

Google photo

Коментаришет користећи свој Google налог. Одјавите се /  Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се /  Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се /  Промени )

Повезивање са %s