Загрузка данных


Вот решение заданий для Варианта 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 обрезает лишнюю часть строки.