commit 4dc24e3d6efc1c7273a2a27bea9d57f3ba23c85c Author: Sarnavskiy Alexey Date: Thu Dec 2 15:23:09 2021 +0300 Added main.cpp, mylib.cpp and mylib.h diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..b1db9c7 --- /dev/null +++ b/main.cpp @@ -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 +#include "mylib.h" +#include + +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]); + } + } + } +} + diff --git a/mylib.cpp b/mylib.cpp new file mode 100644 index 0000000..3f700d2 --- /dev/null +++ b/mylib.cpp @@ -0,0 +1,34 @@ +#include +#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; +} diff --git a/mylib.h b/mylib.h new file mode 100644 index 0000000..b7b8e10 --- /dev/null +++ b/mylib.h @@ -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); +} \ No newline at end of file