2.1 Используя функции, сформировать с помощью ДСЧ одномерный массив и
вывести его на печать.
2.2 Выполнить обработку одномерного массива в соответствии с вариантом,
используя функции (удалить из массива все числа Фибоначчи) результат вывести на печать.
При решении задачи объявлять статический одномерный массив на
100 элементов, но формировать массив из n элементов, n<100.
Ввод значений n, m, K осуществлять с клавиатуры.
C/C++
Функции и массивы С++
#include <algorithm>
#include <iostream>
#include <vector>
#include <random>
#include <iomanip>
using namespace std;
class Fibonacci {
public:
Fibonacci() {
fill();
}
bool contains(unsigned n) {
return find(box.begin(), box.end(), n) != box.end();
}
private:
vector<unsigned> box{ 0U, 1U };
void fill() {
unsigned n, m, sum;
while (true) {
sum = box[box.size() - 2] + box.back();
if (sum < box.back()) break;
box.push_back(sum);
}
}
};
void fill_random(unsigned* box, const size_t length, unsigned left, unsigned right) {
if (left > right) swap(left, right);
uniform_int_distribution<unsigned> uid(left, right);
mt19937 gen{ random_device()() };
for (size_t i = 0; i < length; ++i) box[i] = uid(gen);
}
void show(const char* msg, unsigned* box, const size_t length, const streamsize width) {
cout << msg;
for (size_t i = 0; i < length; ++i) cout << setw(width) << box[i];
puts("");
}
void remove_element(unsigned* box, size_t& length, unsigned* pos) {
if (box && length && pos) {
auto last = box + length - 1U;
if (pos != last) {
while (pos != last) {
*pos = *(pos + 1);
++pos;
}
}
--length;
}
}
int main() {
const size_t buffer = 100;
unsigned box[buffer];
cout << "n: ";
size_t n;
cin >> n;
if (n > buffer) n = buffer;
cout << "m, k: ";
unsigned m, k;
cin >> m >> k;
fill_random(box, n, m, k);
show("before:", box, n, 4);
Fibonacci fib;
auto end = box + n;
for (auto beg = box; beg != end; ++beg) {
if (fib.contains(*beg)) {
remove_element(box, n, beg);
--end;
--beg;
}
}
show(" after:", box, n, 4);
}
#include <iostream>
#include <vector>
#include <random>
#include <iomanip>
using namespace std;
class Fibonacci {
public:
Fibonacci() {
fill();
}
bool contains(unsigned n) {
return find(box.begin(), box.end(), n) != box.end();
}
private:
vector<unsigned> box{ 0U, 1U };
void fill() {
unsigned n, m, sum;
while (true) {
sum = box[box.size() - 2] + box.back();
if (sum < box.back()) break;
box.push_back(sum);
}
}
};
void fill_random(unsigned* box, const size_t length, unsigned left, unsigned right) {
if (left > right) swap(left, right);
uniform_int_distribution<unsigned> uid(left, right);
mt19937 gen{ random_device()() };
for (size_t i = 0; i < length; ++i) box[i] = uid(gen);
}
void show(const char* msg, unsigned* box, const size_t length, const streamsize width) {
cout << msg;
for (size_t i = 0; i < length; ++i) cout << setw(width) << box[i];
puts("");
}
void remove_element(unsigned* box, size_t& length, unsigned* pos) {
if (box && length && pos) {
auto last = box + length - 1U;
if (pos != last) {
while (pos != last) {
*pos = *(pos + 1);
++pos;
}
}
--length;
}
}
int main() {
const size_t buffer = 100;
unsigned box[buffer];
cout << "n: ";
size_t n;
cin >> n;
if (n > buffer) n = buffer;
cout << "m, k: ";
unsigned m, k;
cin >> m >> k;
fill_random(box, n, m, k);
show("before:", box, n, 4);
Fibonacci fib;
auto end = box + n;
for (auto beg = box; beg != end; ++beg) {
if (fib.contains(*beg)) {
remove_element(box, n, beg);
--end;
--beg;
}
}
show(" after:", box, n, 4);
}
Похожие вопросы
- Функции и массивы в С++
- Функции и массивы в С++
- Функции и массивы в С++
- Как работать с элементами динамического массива из функции?
- Массив функции c++ помогите
- Как в функции распечатать двумерный динамический массив в Си
- Рекурс.функцию, которая принимает 2х-мерный массив целых чисел и кол-во сдвигов и выполняет круговой сдвиг массива влево
- Написать РЕКУРСИВНУЮ функцию, которая принимает двухмерный массив целых чисел и выполняет круговой сдвиг массива ВЛЕВО.
- С++ Составить функцию, которая меняет местами пары соседних элементов в массиве
- Как массив передать в функцию и обратно? (Язык C)