This repository has been archived on 2024-10-24. You can view files and clone it, but cannot push or open issues or pull requests.
BMTP/lab10/prj/ModulesMykhailenko/ModulesMykhailenko.cpp
2023-03-03 22:40:33 +02:00

188 lines
5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <cmath>
#include <ctime>
#include <string>
#include <fstream>
#include <codecvt>
#include <bitset>
#include <limits>
#include "ModulesMykhailenko.h"
using namespace std;
wstring characters = L".,!?:;)\" (₴ʼ'№%*_-+=\\/0123456789абвгґдеєжзиіїйклмнопрстуфхцчшщьюя";
float s_calculation(int x, int y, int z) {
return fabs(sin(fabs(y-pow(z,2)))+sqrt(x)-sqrt(pow(y*z, x)+(y/(2*M_PI))));
}
Deposit getPayment(float value, int months) {
Deposit deposit;
if (months == 6 || months == 12) {
float interest;
deposit.totalInterest = months == 12 ? 13 : 11/(float)2;
interest = deposit.totalInterest / 100 / months;
deposit.monthlyInterestPaid = round(value*interest*100)/100;
} else {
deposit.totalInterest = -1;
deposit.monthlyInterestPaid = -1;
}
return deposit;
}
Size getSize(int slovakSize) {
Size size;
if (slovakSize >= 6 && slovakSize <= 10) {
size.french = slovakSize - 4;
switch (slovakSize)
{
case 6:
size.international = "S";
break;
case 7:
size.international = "M";
break;
case 8:
size.international = "L";
break;
case 9:
size.international = "XL";
break;
case 10:
size.international = "XXL";
break;
default:
size.international = "Error";
}
} else {
size.french = -1;
size.international = "Error";
}
return size;
}
int t9_3(int number) {
unsigned int count = 0;
if (number > 0 || number <= 7483650) {
bool set = number & 1;
while (number) {
count += (number & 1) == set;
number >>= 1;
}
} else {
return -1;
}
return count;
}
bool validateCharacter(wchar_t character) {
for (int i = 0; i < characters.length(); i++)
if (character == characters.at(i))
return true;
return false;
}
int t10_1(string inputFile, string outputFile) {
wstring line;
wstring words[4] = {L"програма", L"модуль", L"студент", L"програміст"};
bool found = false;
int number = 0;
wifstream indata;
indata.open(inputFile);
ofstream outdata;
outdata.open(outputFile);
if (!indata || !outdata)
return 1;
indata.imbue(locale(locale(), new codecvt_utf8<wchar_t>));
while (getline(indata,line)) {
number += line.length();
for (int i = 0; i < line.length(); i++) {
line[i] = towlower(line[i]);
if (!validateCharacter(line[i]))
return 2;
}
if (!found) {
for (int i = 0; i < 4; i++) {
int index = line.find(words[i]);
if (index != wstring::npos && line.length()-words[i].length()-index == 0) { // слово у кінці
found = true;
goto out_found;
}
for (int j = 0; j < 9; j++) { // крапка, кома, знак оклику, знак питання, двокрапка, крапка з комою, закриваюча дужка, лапки, пробіл
wstring wordToFind = words[i] + characters.at(j);
if (line.find(wordToFind) != wstring::npos) {
found = true;
goto out_found;
}
}
}
}
out_found: continue;
}
outdata << "Розробник: Михайленко Станіслав" << endl << "Установа/організація: Центральноукраїнський національний технічний університет" << endl << "Місто: Кропивницький" << endl << "Країна: Україна" << endl << "Рік розробки: 2023" << endl << endl;
outdata << "Кількість символів у файлі: " << number << endl;
outdata << "У вхідному файлі " << ((found) ? "наявні" : "відсутні") << " слова \"програма\", \"модуль\", \"студент\", \"програміст\"." << endl;
return 0;
}
int t10_2(string file) {
wchar_t character;
time_t rawtime;
time(&rawtime);
int number = 0;
wifstream indata;
indata.open(file);
ofstream outdata;
outdata.open(file, ios_base::app);
if (!indata || !outdata)
return 1;
indata.imbue(locale(locale(), new codecvt_utf8<wchar_t>));
while (indata >> character) {
if (!validateCharacter(towlower(character)))
return 2;
for (int i = 0; i < 10; i++)
if (character == characters[i + 22]) // 0-9
number += 1;
}
outdata << endl << "Кількість цифр у файлі: " << number << endl;
outdata << "Дата й час дозапису: " << ctime(&rawtime);
return 0;
}
int t10_3(string file, int x, int y, int z, int b) {
wchar_t character;
time_t rawtime;
time(&rawtime);
int number = 0;
ofstream data;
data.open(file, ios_base::app);
if (!data)
return 1;
data << endl << "s = " << s_calculation(x, y, z) << endl;
if (b > 0) {
string binary = bitset<numeric_limits<int>::digits>(b).to_string();
binary.erase(0, binary.find_first_not_of('0'));
data << "b у двійковому коді: " << binary << endl;
}
else
data << "b — не натуральне число" << endl;
return 0;
}