Added main.cpp, mylib.cpp and mylib.h

This commit is contained in:
Sarnavskiy Alexey 2021-12-02 15:23:09 +03:00
commit 4dc24e3d6e
3 changed files with 226 additions and 0 deletions

159
main.cpp Normal file
View File

@ -0,0 +1,159 @@
/*
1. Создайте проект из 2х cpp файлов и заголовочного (main.cpp, mylib.cpp, mylib.h)
во втором модуле mylib объявить 3 функции: для инициализации массива (типа float),
печати его на экран и подсчета количества отрицательных и положительных элементов.
Вызывайте эти 3-и функции из main для работы с массивом.
2. Описать макрокоманду (через директиву define), проверяющую, входит ли переданное
ей число (введенное с клавиатуры) в диапазон от нуля (включительно) до переданного
ей второго аргумента (исключительно) и возвращает true или false, вывести на экран
«true» или «false».
3. Задайте массив типа int. Пусть его размер задается через директиву препроцессора
#define. Инициализируйте его через ввод с клавиатуры. Напишите для него свою функцию
сортировки (например Пузырьком). Реализуйте перестановку элементов как макрокоманду
SwapINT(a, b). Вызывайте ее из цикла сортировки.
4.* Объявить структуру Сотрудник с различными полями. Сделайте для нее побайтовое
выравнивание с помощью директивы pragma pack. Выделите динамически переменную этого
типа. Инициализируйте ее. Выведите ее на экран и ее размер с помощью sizeof.
Сохраните эту структуру в текстовый файл.
5.* Сделайте задание 1 добавив свой неймспейс во втором модуле (первое задание тогда
можно не делать).
*/
#include <iostream>
#include "mylib.h"
#include <fstream>
void BubbleSort(int*, size_t);
int main()
{
/* ********************** TASK #1 ********************** */
// 5th task was made instead of the 1st
/* ********************** TASK #2 ********************** */
std::cout << "\t\tTASK #2\n\n";
unsigned int iRightBoundary = 0U;
unsigned int iUserNumber = 0U;
std::cout << "\tEnter your number: ";
std::cin >> iUserNumber;
std::cout << "\tEnter the right range boundary: ";
std::cin >> iRightBoundary;
std::cout << "Answer is:\t" << std::boolalpha << CHECK_RANGE(iUserNumber, iRightBoundary);
std::cout << std::noboolalpha << std::endl;
system("pause");
system("cls");
/* ********************** TASK #3 ********************** */
std::cout << "\t\tTASK #3\n\n";
size_t iArraySize = 0U;
std::cout << "Enter array size: ";
DEFINE_NUMBER(iArraySize);
int* aInts_3 = new (std::nothrow) int[iArraySize];
if (iArraySize > 0 && aInts_3 != nullptr)
{
for (size_t i = 0U; i < iArraySize; i++)
{
PRINT_MSG(i, iArraySize);
DEFINE_NUMBER(aInts_3[i]);
}
std::cout << "\n\tArray before sort: \n";
PrintIntArray(aInts_3, iArraySize);
BubbleSort(aInts_3, iArraySize);
std::cout << "\n\tArray after sort: \n";
PrintIntArray(aInts_3, iArraySize);
delete[] aInts_3;
}
else
{
std::cerr << "Something wrong with array allocation!\n";
return -1;
}
system("pause");
system("cls");
/* ********************** TASK #4 ********************** */
std::cout << "\t\tTASK #4\n\n";
S_Employee* empl = new S_Employee;
std::cout << "\tEnter data about employee:\n";
std::cout << "1. ID: ";
std::cin >> empl->ID;
std::cout << "2. Age: ";
std::cin >> empl->age;
std::cout << "3. Mark: ";
std::cin >> empl->mark;
std::cout << "4. Child Quantity: ";
std::cin >> empl->ChildQuantity;
std::cout << std::endl;
std::cout << "\tSize of structure: " << sizeof(S_Employee) << std::endl;
std::cout << "ID: " << empl->ID << "\n"
<< "Age: " << empl->age << "\n"
<< "Mark: " << empl->mark << "\n"
<< "Child Quantity: " << empl->ChildQuantity << std::endl;
std::ofstream fout("Employee.txt");
if (!fout)
{
std::cerr << "Something wrong with file creating!\n";
return -2;
}
fout << "ID: " << empl->ID << "\n"
<< "Age: " << empl->age << "\n"
<< "Mark: " << empl->mark << "\n"
<< "Child Quantity: " << empl->ChildQuantity << "\n";
fout.close();
delete empl;
system("pause");
system("cls");
/* ********************** TASK #5 ********************** */
std::cout << "\t\tTASK #5\n\n";
float* aFloats = new (std::nothrow) float[iArraySize];
if (iArraySize > 0 && aFloats != nullptr)
{
size_t PositiveNumbers = 0U;
size_t NegativeNumbers = 0U;
MyNamespace::InitArray(aFloats, iArraySize);
MyNamespace::PrintArray(aFloats, iArraySize);
PositiveNumbers = MyNamespace::PosQuanArray(aFloats, iArraySize);
NegativeNumbers = iArraySize - PositiveNumbers;
std::cout << "Quantity of positive numbers: " << PositiveNumbers << std::endl;
std::cout << "Quantity of negative numbers: " << NegativeNumbers << std::endl;
delete[] aFloats;
}
system("pause");
system("cls");
return 0;
}
void BubbleSort(int* pArr, size_t size)
{
for (size_t j = 1U; j < size; j++)
{
for (size_t i = 0U; i < size - j; i++)
{
if (pArr[i] > pArr[i + 1])
{
SwapINT(pArr[i], pArr[i + 1]);
}
}
}
}

34
mylib.cpp Normal file
View File

@ -0,0 +1,34 @@
#include <iostream>
#include "mylib.h"
void MyNamespace::InitArray(float* pArr, size_t size)
{
std::srand(time(0));
for (size_t i = 0U; i < size; i++)
{
pArr[i] = (float)rand() / 1000.0 + (float)(rand() % 1000 - 500);
}
}
void MyNamespace::PrintArray(float* pArr, size_t size)
{
for (size_t i = 0U; i < size; i++)
{
std::cout << "Array[" << i << "]: " << pArr[i] << std::endl;
}
}
size_t MyNamespace::PosQuanArray(float* pArr, size_t size)
{
size_t PositiveNumbers = 0U;
for (size_t i = 0U; i < size; i++)
{
if (pArr[i] >= 0.0)
{
PositiveNumbers++;
}
}
return PositiveNumbers;
}

33
mylib.h Normal file
View File

@ -0,0 +1,33 @@
#pragma once
#define CHECK_RANGE(a, b) (a >= 0 && a < b) ? true : false
#define DEFINE_NUMBER(number) std::cin >> number
#define PRINT_MSG(a, ARRAY_SIZE) std::cout << "Enter the " << a << " element of the array[" << ARRAY_SIZE << "]: "
#define SwapINT(a, b) \
int c = a; \
a = b; \
b = c
#define PrintIntArray(arr, size) \
for (size_t i = 0U; i < size; i++) \
std::cout << "Array [" << i << "]:\t" << arr[i] << std::endl
#pragma pack(push, 1)
struct S_Employee
{
char mark; // mark for professional exam as letters
short int ID;
short int age;
short int ChildQuantity;
};
#pragma pack(pop)
namespace MyNamespace
{
void InitArray(float *, size_t);
void PrintArray(float*, size_t);
size_t PosQuanArray(float*, size_t);
}