Помогите с задачей.
Составить функцию, которая меняет местами пары соседних элементов в массиве: нулевой с первым, второй с третьим и т. д. С помощью этой функции преобразовать 2 линейных массива.
C/C++
С++ Составить функцию, которая меняет местами пары соседних элементов в массиве
#include <iostream>
#include <iomanip>
#include <random>
using namespace std;
void show(int* box, size_t n, size_t w) {
for (auto i = 0U; i < n; ++i) cout << setw(w) << box[i];
puts("");
}
void rotate(int* box, size_t n) {
for (auto i = 1U; i < n; i += 2) swap(box[i], box[i - 1]);
}
int main() {
uniform_int_distribution<> uid(10, 99);
mt19937 gen{ random_device()() };
const auto an = 12U;
const auto bn = 13U;
const auto w = 3U;
int av[an];
for (auto& x : av) x = uid(gen);
show(av, an, w);
rotate(av, an);
show(av, an, w);
puts("");
int bv[bn];
for (auto& x : bv) x = uid(gen);
show(bv, bn, w);
rotate(bv, bn);
show(bv, bn, w);
system("pause > nul");
}
#include <iomanip>
#include <random>
using namespace std;
void show(int* box, size_t n, size_t w) {
for (auto i = 0U; i < n; ++i) cout << setw(w) << box[i];
puts("");
}
void rotate(int* box, size_t n) {
for (auto i = 1U; i < n; i += 2) swap(box[i], box[i - 1]);
}
int main() {
uniform_int_distribution<> uid(10, 99);
mt19937 gen{ random_device()() };
const auto an = 12U;
const auto bn = 13U;
const auto w = 3U;
int av[an];
for (auto& x : av) x = uid(gen);
show(av, an, w);
rotate(av, an);
show(av, an, w);
puts("");
int bv[bn];
for (auto& x : bv) x = uid(gen);
show(bv, bn, w);
rotate(bv, bn);
show(bv, bn, w);
system("pause > nul");
}
void my_swap(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void swap_arr(int *arr, int size)
{
for (int i = 0; i < size - 1; i = i + 2)
my_swap(&arr[i], &arr[i + 1]);
}
void print_arr(int *arr, int size)
{
for (int i = 0; i < size; i++)
cout << arr[i] << ' ';
cout << endl;
}
int main()
{
int a[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
print_arr(a, 11);
swap_arr(a, 11);
print_arr(a, 11);
return 0;
}
P.S. Пример с одним массивом
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void swap_arr(int *arr, int size)
{
for (int i = 0; i < size - 1; i = i + 2)
my_swap(&arr[i], &arr[i + 1]);
}
void print_arr(int *arr, int size)
{
for (int i = 0; i < size; i++)
cout << arr[i] << ' ';
cout << endl;
}
int main()
{
int a[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
print_arr(a, 11);
swap_arr(a, 11);
print_arr(a, 11);
return 0;
}
P.S. Пример с одним массивом
Я бы лучше так сделала:
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std; int n;
void rotate(int *a) { int i, j, m = n / 2, t; for
(i = 0; i < m; i += 2) { j = 2 * i; t = a[j];
a[j] =a[j + 1]; a[j + 1] = t; } }
void print(int *a) { int i, j = 0; for (i = 0; i < n; i++) { cout << setw(5) << a[i]; ++j; if (j == 10) { j = 0;
cout << endl; } } if (n % 10) cout << endl; }
int main() { srand(time(NULL)); while (true) {
cout << "n = ?\b"; cin >> n; int *a = new int [n];
cout << "Array:" << endl; for (int i = 0; i < n; i++)
a[i] = rand() % 1999 - 999; print(a); rotate(a);
cout << "Transformed Array:" << endl; print(a);
delete [] a; } }

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std; int n;
void rotate(int *a) { int i, j, m = n / 2, t; for
(i = 0; i < m; i += 2) { j = 2 * i; t = a[j];
a[j] =a[j + 1]; a[j + 1] = t; } }
void print(int *a) { int i, j = 0; for (i = 0; i < n; i++) { cout << setw(5) << a[i]; ++j; if (j == 10) { j = 0;
cout << endl; } } if (n % 10) cout << endl; }
int main() { srand(time(NULL)); while (true) {
cout << "n = ?\b"; cin >> n; int *a = new int [n];
cout << "Array:" << endl; for (int i = 0; i < n; i++)
a[i] = rand() % 1999 - 999; print(a); rotate(a);
cout << "Transformed Array:" << endl; print(a);
delete [] a; } }

Похожие вопросы
- Написал функцию, которая добавляет элемент в конец массива, как можно улучшить? Нули не учитываются.
- Как работать с элементами динамического массива из функции?
- Рекурс.функцию, которая принимает 2х-мерный массив целых чисел и кол-во сдвигов и выполняет круговой сдвиг массива влево
- Написать РЕКУРСИВНУЮ функцию, которая принимает двухмерный массив целых чисел и выполняет круговой сдвиг массива ВЛЕВО.
- Функция, которая вставляет новый элемент до каждого вхождения заданного элемента
- Напишите рекурсивную функцию, которая принимает двухмерный массив целых чисел и количество сдвигов и выполняет
- Задан целочисленный массив размера N. Определить число элементов в массиве кратных 2.
- Создать функцию, которая возводит число в степень.Запрещено использовать функцию возведения в степень.
- C++. Где ошибка?Необходимо определенное количество раз выполнить поиск номера элемента в массиве по его значению.
- C++. Где тут есть ошибка?Нужно определенное количество раз выполнить поиск номера элемента в массиве по его значению.