Professional Documents
Culture Documents
Republicii Moldova
Universitatea Tehnică a Moldovei
Catedra Informatica şi Ingineria Sistemelor
Raport
Lucrarea de laborator nr.3
La Programarea Orientată pe Obiecte
Varianta 10
A verificat: lector.univ.
Mariana Osovschi
Chişinău 2017
Lucrarea de laborator nr. 3
Tema: Supraîncarcarea operatorilor
Listingul programului :
#include <iostream>
#include <string>
#include <time.h>
class Time
{
int ore, min, sec;
void Convert()
{
ore = (ore >= 0) ? ore : 0;
min = (min >= 0) ? min : 0;
sec = (sec >= 0) ? sec : 0;
int GetAllInSec()
{
return (ore * 3600 + min * 60 + sec);
}
public:
Time() {
ore = min = sec = 0;
}
Time(int ore, int min, int sec)
{
this->ore = ore;
this->min = min;
this->sec = sec;
Convert();
}
void Init();
Convert();
return *this;
}
Convert();
return *this;
}
Convert();
return *this;
}
sec /= coef;
Convert();
return *this;
}
void Display()
{
string single_unit[3] = { "ora", "minuta", "secunda" };
string multi_units[3] = { "ore", "minute", "secunde" };
string numerotation[20] = { "", "una", "doua", "trei", "patru", "cinci", "sase",
"sapte", "opt", "noua", "zece", "unsprezece", "doisprezece", "treisprezece",
"paisprezece", "cincisprezece", "saisprezece", "nouasprezece", "optsprezece",
"nouasprezece" };
string out_ore = "", out_min = "", out_sec = "";
// Secundele
if (sec > 1)
{
if (sec >= 20)
{
out_sec += numerotation[sec / 10] + "zeci";
if (sec % 10 != 0)
out_sec += " si " + numerotation[sec % 10] + " " +
multi_units[2];
else out_sec += " " + multi_units[2];
}
else out_sec += numerotation[sec] + " " + multi_units[2];
}
else if (sec == 1) out_sec += "o " + single_unit[2];
else if (sec == 0) out_sec += "zero " + multi_units[2];
// Minutele
if (min > 1)
{
if (min >= 20)
{
out_min += numerotation[min / 10] + "zeci";
if (min % 10 != 0)
out_min += " si " + numerotation[min % 10] + " " +
multi_units[1];
else out_min += " " + multi_units[1];
}
else out_min += numerotation[min] + " " + multi_units[1];
}
else if (min == 1) out_min += "o " + single_unit[1];
else if (min == 0) out_min += "zero " + multi_units[1];
// Orele
if (ore > 1)
{
// De ordinul #-##
if (ore < 20) out_ore += numerotation[ore] + " " + multi_units[0];
else if (ore >= 20 && ore < 100)
{
out_ore += numerotation[ore / 10] + "zeci " + multi_units[0];
if (ore % 10 != 0)
out_ore += " si " + numerotation[ore % 10] + " " +
multi_units[0];
}
// De ordinul ###
else if (ore >= 100 && ore < 1000)
{
// De ordinul 100-199
if (ore >= 100 && ore < 200) out_ore += "o suta";
else out_ore += numerotation[ore / 100] + " sute";
out_ore[0] = toupper(out_ore[0]);
out_min[0] = toupper(out_min[0]);
out_sec[0] = toupper(out_sec[0]);
cout << out_ore << endl << out_min << endl << out_sec << endl;
}
};
void Time::Init()
{
cout << "Ore = "; cin >> ore;
cout << "Minute = "; cin >> min;
cout << "Secunde = "; cin >> sec;
Convert();
}
Convert();
}
void main()
{
Time ob1, ob2(2, 30, 140), ob3(0,-2,45);
Time ob5(1, 0, 0);
Time ob4(101, 30,5);
ob4 + ob5;
ob4.Display();
system("PAUSE");
}
Rezultatul programului: