Загрузка данных
Вот решение заданий для Варианта 9 на языке C++.
Я разбил код на три части в соответствии с заданиями. В конце приведен полный готовый код, который можно скопировать и запустить.
Задание 1. Одномерный массив: Найти сумму элементов на четных позициях
Примечание: В программировании индексация обычно начинается с 0. Под "четными позициями" чаще всего подразумевают индексы 0, 2, 4... (т.е. 1-й, 3-й, 5-й элементы). Если вам нужны именно 2-й, 4-й элементы (индексы 1, 3, 5), измените условие i % 2 == 0 на i % 2 != 0.
```cpp
#include <iostream>
#include <vector>
using namespace std;
void task1() {
int n;
cout << "--- Задание 1 ---" << endl;
cout << "Введите размер массива: ";
cin >> n;
vector<int> arr(n);
cout << "Введите " << n << " элементов: ";
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
int sum = 0;
// Проходим по четным индексам (0, 2, 4...)
for (int i = 0; i < n; i += 2) {
sum += arr[i];
}
cout << "Сумма элементов на четных позициях: " << sum << endl;
}
```
Задание 2. Многомерный массив: Поменять местами два заданных столбца
```cpp
void task2() {
int rows, cols;
cout << "\n--- Задание 2 ---" << endl;
cout << "Введите количество строк и столбцов матрицы: ";
cin >> rows >> cols;
vector<vector<int>> matrix(rows, vector<int>(cols));
cout << "Введите элементы матрицы:" << endl;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cin >> matrix[i][j];
}
}
int col1, col2;
cout << "Введите номера двух столбцов для обмена (например, 1 и 3): ";
cin >> col1 >> col2;
// Переводим в индексы (если пользователь вводит с 1)
col1--;
col2--;
if (col1 >= 0 && col1 < cols && col2 >= 0 && col2 < cols) {
for (int i = 0; i < rows; i++) {
swap(matrix[i][col1], matrix[i][col2]);
}
cout << "Матрица после обмена:" << endl;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << matrix[i][j] << "\t";
}
cout << endl;
}
} else {
cout << "Некорректные номера столбцов!" << endl;
}
}
```
Задание 3. Последовательность символов: Удалить все пробелы из строки
```cpp
#include <string>
#include <algorithm> // для remove_if
void task3() {
cout << "\n--- Задание 3 ---" << endl;
cin.ignore(); // Очищаем буфер ввода перед чтением строки
string str;
cout << "Введите строку: ";
getline(cin, str);
// Используем идиому erase-remove для удаления всех пробелов
str.erase(remove(str.begin(), str.end(), ' '), str.end());
cout << "Строка без пробелов: " << str << endl;
}
```
Полный код программы (main.cpp)
```cpp
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
// Прототипы функций
void task1();
void task2();
void task3();
int main() {
setlocale(LC_ALL, "Russian"); // Для корректного отображения русского текста
task1();
task2();
task3();
return 0;
}
// --- Реализация функций ---
void task1() {
int n;
cout << "--- Задание 1: Сумма на четных позициях ---" << endl;
cout << "Введите размер массива: ";
cin >> n;
vector<int> arr(n);
cout << "Введите " << n << " элементов через пробел: ";
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
int sum = 0;
// Суммируем элементы с индексами 0, 2, 4 и т.д.
for (int i = 0; i < n; i += 2) {
sum += arr[i];
}
cout << "Результат: " << sum << endl << endl;
}
void task2() {
int rows, cols;
cout << "--- Задание 2: Обмен столбцов матрицы ---" << endl;
cout << "Введите количество строк и столбцов: ";
cin >> rows >> cols;
vector<vector<int>> matrix(rows, vector<int>(cols));
cout << "Введите элементы матрицы (" << rows * cols << " чисел):" << endl;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cin >> matrix[i][j];
}
}
int col1, col2;
cout << "Введите номера двух столбцов для обмена (нумерация с 1): ";
cin >> col1 >> col2;
// Преобразование в индексы (0-based)
col1--;
col2--;
if (col1 >= 0 && col1 < cols && col2 >= 0 && col2 < cols) {
for (int i = 0; i < rows; i++) {
swap(matrix[i][col1], matrix[i][col2]);
}
cout << "Матрица после обмена:" << endl;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << matrix[i][j] << "\t";
}
cout << endl;
}
} else {
cout << "Ошибка: введены неверные номера столбцов." << endl;
}
cout << endl;
}
void task3() {
cout << "--- Задание 3: Удаление пробелов из строки ---" << endl;
cin.ignore(); // Важно: очищаем поток от символа новой строки, оставшегося после cin >>
string str;
cout << "Введите строку: ";
getline(cin, str);
// Удаляем все символы ' ' из строки
str.erase(remove(str.begin(), str.end(), ' '), str.end());
cout << "Результат: " << str << endl;
}
```
Как это работает:
1. Task 1: Мы просто идем по массиву с шагом 2 (начиная с 0) и складываем значения.
2. Task 2: Мы используем функцию swap, чтобы поменять значения в ячейках [i][col1] и [i][col2] для каждой строки i.
3. Task 3: Мы используем алгоритм std::remove, который сдвигает все элементы, не равные пробелу, в начало, а затем erase обрезает лишнюю часть строки.