Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions HomeWork3/Igor Vyhovanets Third Hometask 1.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#include <iostream>
#include <cstring>

int main(int argc, char* argv[]) {
std::cout << "This program reverses string that user inputs" << std::endl;

if (argc != 2) {
std::cout << "Wrong number of parameters" << std::endl;
std::cout << "Usage: ./reverse <string>" << std::endl;
return 0;
}

const size_t kMaxLength = 100;
const size_t kLength = strlen(argv[1]);

if (kLength > kMaxLength) {
std::cout << "Error! Input string should be less than " << kMaxLength << " characters" << std::endl;
return 0;
}

char reversed[kMaxLength + 1]{}; // string should contain termination zero (+1 byte)
char *pReversed = reversed;

// Reverse the string
for (auto *begin = argv[1], *end = begin + kLength, *limit = end; begin < limit; ++begin) {
*pReversed++ = *--end;
}

std::cout << "Initial string: " << argv[1] << std::endl;
std::cout << "Reversed string: " << reversed << std::endl;

return 0;
35 changes: 35 additions & 0 deletions HomeWork3/Igor Vyhovanets Third Hometask 6.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#include <iostream>
#include <cstring>

int main(int argc, char *argv[]) {

std::cout << "This program transforms string to lower case" << std::endl;

const size_t kMaxLength = 100;
char inputString[kMaxLength]{}, outputString[kMaxLength]{};

std::cout << "Enter a string (max " << kMaxLength << " symbols): ";
std::cin >> inputString;

size_t length = strlen(inputString);

if (length > kMaxLength) {
std::cout << "Error! Too long string. Exiting." << std::endl;
return 0;
}

std::cout << "Input string: " << inputString << std::endl;

const char kDiff = 'A'-'a';

for (size_t i = 0; i < length; i++) {
outputString[i] = inputString[i];
if (inputString[i] >= 'A' && inputString[i] <= 'Z') {
outputString[i] -= kDiff;
}
}

std::cout << "Output string: " << outputString << std::endl;

return 0;
}
51 changes: 51 additions & 0 deletions HomeWork3/Igor Vyhovanets Third Hometask2.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#include <iostream>

void print_array(const unsigned int array[], const size_t size) {
std::cout << '[';
for (size_t i=0; i<size; i++) {
std::cout << array[i];
if (i != size-1) {
std::cout << ", ";
}
}
std::cout << ']' << std::endl;
}

void insert_element (unsigned int * const parray, const size_t size, const unsigned int element) {

// Iterate all array and find position where larger elements start
auto *begin = parray, *end = begin + size - 1;
while (*begin < element && *begin != 0 && begin <= end) {
++begin;
}

// Move all larger elements to the right
while (begin < end) {
*end = *(end-1);
--end;
}

// Insert new element
*begin = element;
}

int main(int argc, char **argv) {
const size_t kArraySize = 20;
unsigned int array[kArraySize]{};

std::cout << "This program inserts elements in array" << std::endl;

for (size_t i = 0; i < kArraySize; i++) {
unsigned int element;
do {
std::cout << "Insert element (" << i << ") of (" << kArraySize << "), greater than 0: ";
std::cin >> element;
} while (element == 0);

insert_element(array, kArraySize, element);

print_array(array, kArraySize);
}

return 0;
}
101 changes: 101 additions & 0 deletions HomeWork3/Igor Vyhovanets Third Hometask3.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <random>

void print_array(const int array[], const size_t size) {
std::cout << '[';
for (size_t i=0; i<size; i++) {
std::cout << array[i];
if (i != size-1) {
std::cout << ", ";
}
}
std::cout << ']' << std::endl;
}

void remove_element (int * const parray, const size_t size, const int element) {
bool shiftTriggered{};
for (auto *begin = parray, *end = begin + size - 1; begin < end; ++begin) {
// If we achieved wanted number then remove it and shift rest of the numbers to the left
if (*begin == element) {
shiftTriggered = true;
}
if (shiftTriggered) {
*begin = *(begin+1);
*(begin+1) = 0;
}
}
}

bool is_array_empty(int *const parray, const size_t size) {
for (auto *begin = parray, *end = begin + size; begin < end; begin++) {
if (*begin != 0) {
return false;
}
}
return true;
}

enum {
METHOD_1_BY_HAND = 1,
METHOD_2_WITH_RAND,
METHOD_3_WITH_MT19937
};

int main(int argc, char **argv) {

std::cout << "This program removes elements from array" << std::endl;

std::cout << std::endl << "Choose method of array initializing: " << std::endl;
std::cout << " 1: By hand" << std::endl << " 2: With rand()" << std::endl << " 3: With mt19937" << std::endl;

const size_t kArraySize = 20;
int array[kArraySize]{};
const int kMaxRandomNumber = 20;

int method;
do {
std::cin >> method;
} while (method < METHOD_1_BY_HAND || method > METHOD_3_WITH_MT19937);

// Start RNG
std::random_device device;
std::mt19937 generator(device());
std::uniform_int_distribution<int> distribution(0,kMaxRandomNumber);
srand(time(0));

switch (method) {
case METHOD_1_BY_HAND:
for (size_t i = 0; i < kArraySize; i++) {
std::cout << "array[" << i << "]: ";
std::cin >> array[i];
}
break;
case METHOD_2_WITH_RAND:
for (size_t i = 0; i < kArraySize; i++) {
array[i] = rand() % kMaxRandomNumber;
}
break;
case METHOD_3_WITH_MT19937:
for (size_t i = 0; i < kArraySize; ++i) {
array[i] = distribution(generator);
}
break;
default:
std::cout << "Unknown error, exiting" << std::endl;
return 0;
}

print_array(array, kArraySize);

while ( !is_array_empty(array, kArraySize) ) {
int number;
std::cout << "Enter number to delete: ";
std::cin >> number;
remove_element(array, kArraySize, number);
print_array(array, kArraySize);
}

return 0;
}
34 changes: 34 additions & 0 deletions HomeWork3/Igor Vyhovanets Third Hometask4.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#include <iostream>
#include <cstring>

int main(int argc, char* argv[]) {
std::cout << "This program reverses string that user inputs" << std::endl;

if (argc != 2) {
std::cout << "Wrong number of parameters" << std::endl;
std::cout << "Usage: ./reverse <string>" << std::endl;
return 0;
}

const size_t kMaxLength = 100;
const size_t kLength = strlen(argv[1]);

if (kLength > kMaxLength) {
std::cout << "Error! Input string should be less than " << kMaxLength << " characters" << std::endl;
return 0;
}

char reversed[kMaxLength + 1]{}; // string should contain termination zero (+1 byte)

// Reverse the string
// Reduce number of iterations by copying 2 chars at a time (from start and end)
for (size_t i = 0; i <= kLength / 2; i++) {
*(reversed + i) = *(argv[1] + kLength - i - 1);
*(reversed + kLength - i - 1) = *(argv[1] + i);
}

std::cout << "Initial string: " << argv[1] << std::endl;
std::cout << "Reversed string: " << reversed << std::endl;

return 0;
}
30 changes: 30 additions & 0 deletions HomeWork3/Igor Vyhovanets Third Hometask5.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#include <iostream>

int main(int argc, char *argv[]) {
std::cout << "This progtam checks char array and outputs digit from it" << std::endl;

const size_t kMaxArrayLen = 100;
char array[kMaxArrayLen]{};

std::cout << "Enter string (max " << kMaxArrayLen << " elements): ";
std::cin >> array;

std::cout << "Digits in array: ";
bool isNumFound = false;
char *ptr = array;

while (*ptr != '\0') {
if (*ptr >= '0' && *ptr <= '9') {
if (!isNumFound) {
isNumFound = true;
std::cout << '[';
}
std::cout << *ptr << ", ";
}
++ptr;
}

std::cout << ((isNumFound) ? "\b\b]" : "none") << std::endl;

return 0;
}
Loading