Untitled

 avatar
unknown
c_cpp
a year ago
6.7 kB
4
Indexable
#include "RandomNumberGenerator.hpp"

#include <cmath>
#include <iostream>
#include <vector>

std::vector< int > getNumbers( int min, int max, int size = 100 )
{
    std::vector< int > result( size, 0 );

    RandomNumberGenerator rng( static_cast< unsigned int >( std::random_device{}() ) );

    for( int i = 0; i < size; ++i )
    {
        result[ i ] = rng.getRandomInt( min, max );
    }

    return result;
}

int findMaxElement( const std::vector< int >& vec )
{
    int max = vec[ 0 ];

    for( const auto& e : vec )
    {
        if( max < e )
        {
            max = e;
        }
    }

    return max;
}

int getNumberOfMaxElements( const std::vector< int >& vec, int maxElement )
{
    int result = 0;

    for( const auto& e : vec )
    {
        if( e == maxElement )
        {
            ++result;
        }
    }

    return result;
}

void printOddNumbers( const std::vector< int >& vec )
{
    for( const auto& e : vec )
    {
        if( e % 2 != 0 )
        {
            std::cout << e << ", ";
        }
    }

    std::cout << '\n';
}

void printOddIndexNumbers( const std::vector< int >& vec )
{
    for( int i = 1; i < vec.size(); i += 2 )
    {
        std::cout << vec[ i ] << ", ";
    }

    std::cout << '\n';
}

int countNumbersBetween5And15( const std::vector< int >& vec )
{
    int result = 0;

    for( const auto& e : vec )
    {
        if( e >= 5 and e < 15 )
        {
            ++result;
        }
    }

    return result;
}

void printNumbersBetween5And15( const std::vector< int >& vec )
{
    std::vector< int > result;

    for( const auto& e : vec )
    {
        if( e >= 5 and e < 15 )
        {
           result.push_back( e );
        }
    }

    for( const auto& e : result )
    {
        std::cout << e << ", ";
    }

    std::cout << '\n';
}

int findNearInputElement( const std::vector< int >& vec )
{
    int result = vec[ 0 ];

    int number;
    std::cout << "Enter the number: ";
    std::cin >> number;

    int minDifference = std::abs( vec[ 0 ] - number );

    for( const auto& e : vec )
    {
        int difference = std::abs( e - number );
        if( difference < minDifference )
        {
            result = e;
            minDifference = difference;
        }
    }

    return result;
}

int findSmallestIndex( const std::vector< int >& vec )
{
    int result = 0;

    int minElement = vec[ 0 ];

    for( int i = 1; i < vec.size(); ++i )
    {
        if( vec[ i ] < minElement )
        {
            minElement = vec[ i ];
            result = i;
        }
    }

    return result;
}

int beforeSmallest( const std::vector< int >& vec )
{
    int result;

    int smallestIndex = findSmallestIndex( vec );
    result = vec[ smallestIndex - 1 ];

    return result;
}

int afterSmallest( const std::vector< int >& vec )
{
    int result;

    int smallestIndex = findSmallestIndex( vec );
    result = vec[ smallestIndex + 1 ];

    return result;
}

std::vector< int > moreThan10Values( const std::vector< int >& vec )
{
    std::vector< int > result;

    for( const auto& e : vec )
    {
        if( e > 10 )
        {
            result.push_back( e );
        }
    }

    return result;
}

std::vector< int > baseOnVecAndVec2( const std::vector< int >& v1, const std::vector< int >& v2 )
{
    std::vector< int > result;

    int sum = 0;
    for( const auto& e1 : v1 )
    {
        sum += e1;
    }

    for( const auto& e2 : v2 )
    {
        result.push_back( sum + e2 );
    }

    return result;
}

void printElementsAtLeastThreeTimes( std::vector< int >& vec )
{
    // Sorting vector
    for( int i = 0; i < vec.size() - 1; ++i )
    {
        for( int j = 0; j < vec.size() - 1 - i; ++j )
        {
            if( vec[ j ] > vec[ j + 1 ] )
            {
                std::swap( vec[ j ], vec[ j + 1 ] );
            }
        }
    }

    std::cout << "Elements exist in vector at least three times:\n";
    int currentElement = vec[ 0 ];
    int count = 1;

    for( int i = 1; i < vec.size(); ++i )
    {
        if( vec[ i ] == currentElement )
        {
            ++count;
        }
        else
        {
            if( count >= 3 )
            {
                std::cout << currentElement << " ( exist: " << count << " )\n";
            }
            currentElement = vec[ i ];
            count = 1;
        }
    }

    if( count >= 3 )
    {
        std::cout << currentElement << " ( exist: " << count << " )\n";
    }
}

void printVector( const std::vector< int >& vec )
{
    for( const auto& e : vec )
    {
        std::cout << e << ", ";
    }

    std::cout << "\n\n";
}

int main()
{
    std::vector< int > vec = getNumbers( -50, 150, 100 );

    // Print random values in vector
    printVector( vec );

    // Max element
    int maxElement = findMaxElement( vec );
    std::cout << "Max element in vector: " << maxElement << '\n';

    // Count max elements
    int numberOfMaxElements = getNumberOfMaxElements( vec, maxElement );
    std::cout << "Number of max elements in vector: " << numberOfMaxElements << '\n';

    // Print odd numbers
    std::cout << "Odd numbers:\n";
    printOddNumbers( vec );

    // Print odd index numbers
    std::cout << "Odd index numbers:\n";
    printOddIndexNumbers( vec );

    // Count numbers between 5 and 15 <5, 15)
    int numbersBetween5And15 = countNumbersBetween5And15( vec );
    std::cout << "Numbers between 5 and 15 <5, 15): " << numbersBetween5And15 << '\n';

    // Print numbers between 5 and 15 <5, 15)
    std::cout << "Numbers between 5 and 15 <5, 15):\n";
    printNumbersBetween5And15( vec );

    // Near value element in numbers
    int nearValueElement = findNearInputElement( vec );
    std::cout << "Near value element: " << nearValueElement << '\n';

    // Before smallest element
    int beforeElement = beforeSmallest( vec );
    std::cout << "Predecessor smallest element: " << beforeElement << '\n';

    // Next smallest element
    int nextElement = afterSmallest( vec );
    std::cout << "Predecessor smallest element: " << nextElement << '\n';

    // More than 10 values vector
    std::vector< int > vec2 = moreThan10Values( vec );
    std::cout << "Numbers greater than 10:\n";
    printVector( vec2 );

    // Result of two vectors mix
    std::vector< int > vec3 = baseOnVecAndVec2( vec, vec2 );
    std::cout << "Mix of vec and vec2:\n";
    printVector( vec3 );

    printElementsAtLeastThreeTimes( vec );

    return 0;
}
Editor is loading...
Leave a Comment