Загрузка...

C++ need support with task

Thread in C/C++ created by Identify Mar 17, 2023. (bumped Mar 18, 2023) 375 views

  1. Identify
    Identify Topic starter Mar 17, 2023 Переебал бабку кувалдой 765 Jul 5, 2019
    Разработать программу с единственным циклом и ветвлением в теле цикла.

    [IMG]
     
  2. Daemon
    Daemon Mar 17, 2023 1680 Jan 8, 2021
    Вам надо именно динамический массив (std::vector) или массив переменной длины (new type[count])?
     
    1. Daemon
      nullptr, он то здесь причем, где вы там динамику увидели?
    2. Identify Topic starter
      Daemon, динамический
  3. lethe1337
    lethe1337 Mar 23, 2023 7 May 14, 2020
    Если есть вопросы дай знать=)
    C
    #include <iostream>
    #include <fstream>

    using namespace std;

    void createArray(int**& arr, int p, int t) {
    arr = new int* [p];
    for (int i = 0; i < p; i++) {
    arr[i] = new int[t];
    }
    }

    void fillArray(int** arr, int p, int t) {
    for (int i = 0; i < p; i++) {
    for (int j = 0; j < t; j++) {
    cout << "Введите arr[" << i << "][" << j << "]: ";
    cin >> arr[i][j];
    }
    }
    }

    void printArray(int** arr, int p, int t, ofstream& out) {
    for (int i = 0; i < p; i++) {
    for (int j = 0; j < t; j++) {
    cout << arr[i][j] << " ";
    out << arr[i][j] << " ";
    }
    cout << endl;
    out << endl;
    }
    }

    void deleteArray(int**& arr, int p) {
    for (int i = 0; i < p; i++) {
    delete[] arr[i];
    }
    delete[] arr;
    arr = nullptr;
    }

    double averageNonNegative(int** arr, int p, int t, int* nonNegCount) {
    double sum = 0.0;
    int count = 0;
    for (int i = 0; i < p; i++) {
    int rowNonNegCount = 0;
    for (int j = 0; j < t; j++) {
    if (arr[i][j] >= 0) {
    sum += arr[i][j];
    count++;
    rowNonNegCount++;
    }
    }
    nonNegCount[i] = rowNonNegCount;
    }
    if (count == 0) {
    return 0;
    }
    return sum / count;
    }

    int main() {
    int** arr = nullptr;
    int p, t;
    cout << "Введите размерность матрицы (p, t): ";
    cin >> p >> t;

    createArray(arr, p, t);
    fillArray(arr, p, t);

    ofstream outFile("output.txt");
    printArray(arr, p, t, outFile);

    int* nonNegCount = new int[p];
    double avg = averageNonNegative(arr, p, t, nonNegCount);

    cout << "Среднее арифметическое неотрицательных элементов: " << avg << endl;
    outFile << "Среднее арифметическое неотрицательных элементов: " << avg << endl;

    for (int i = 0; i < p; i++) {
    cout << "Количество неотрицательных элементов в строке " << i << ": " << nonNegCount[i] << endl;
    outFile << "Количество неотрицательных элементов в строке " << i << ": " << nonNegCount[i] << endl;
    }

    deleteArray(arr, p);
    delete[] nonNegCount;
    outFile.close();

    return 0;
    }
     
    1. View previous comments (20)
    2. Daemon
      lethe1337,
      "std::vector это последовательный контейнер, инкапсулирующий массивы переменного размера."
      "Память вектора обрабатывается автоматически, расширяясь по мере необходимости. Векторы обычно занимают больше места, чем статические массивы, поскольку больше памяти выделяется для обработки будущего роста."
      https://ru.cppreference.com/w/cpp/container/vector
    3. lethe1337
      Daemon, может ли размер быть изменен после ввода размерности N x M. также далее по тексту задачи нигде не подразумевается, что размер будет изменен
    4. lethe1337
      Daemon, я знаю что такое вектор, но конструкция с new int[n] также является динамическим массивом
    5. View the next comments (7)
  4. lethe1337
    lethe1337 Mar 23, 2023 7 May 14, 2020
    После дискуссии под предыдущим кодом, переделал в вектора, также добавил проверку на то, существует ли текстовик, если нет - создает его.

    C
    #include <iostream>
    #include <fstream>
    #include <vector>
    #include <windows.h>

    using namespace std;

    void createArray(vector<vector<int>>& arr, int p, int t) {
    arr.resize(p, vector<int>(t));
    }

    void fillArray(vector<vector<int>>& arr, int p, int t) {
    for (int i = 0; i < p; i++) {
    for (int j = 0; j < t; j++) {
    cout << "Введите arr[" << i << "][" << j << "]: ";
    cin >> arr[i][j];
    }
    }
    }

    void printArray(vector<vector<int>>& arr, int p, int t, ofstream& out) {
    for (int i = 0; i < p; i++) {
    for (int j = 0; j < t; j++) {
    cout << arr[i][j] << " ";
    out << arr[i][j] << " ";
    }
    cout << endl;
    out << endl;
    }
    }

    void deleteArray(vector<vector<int>>& arr) {

    arr.clear();

    }


    double averageNonNegative(vector<vector<int>>& arr, int p, int t, vector<int>& nonNegCount) {
    double sum = 0.0;
    int count = 0;
    for (int i = 0; i < p; i++) {
    int rowNonNegCount = 0;
    for (int j = 0; j < t; j++) {
    if (arr[i][j] >= 0) {
    sum += arr[i][j];
    count++;
    rowNonNegCount++;
    }
    }
    nonNegCount[i] = rowNonNegCount;
    }
    if (count == 0) {
    return 0;
    }
    return sum / count;
    }

    int main() {
    SetConsoleOutputCP(CP_UTF8);
    vector<vector<int>> arr;
    int p, t;
    cout << "Введите размерность матрицы (p, t): ";
    cin >> p >> t;

    createArray(arr, p, t);
    fillArray(arr, p, t);

    ofstream outFile("output.txt");
    if (!outFile.is_open()) {
    outFile.open("output.txt");
    }
    printArray(arr, p, t, outFile);

    vector<int> nonNegCount(p);
    double avg = averageNonNegative(arr, p, t, nonNegCount);

    cout << "Среднее арифметическое неотрицательных элементов: " << avg << endl;
    outFile << "Среднее арифметическое неотрицательных элементов: " << avg << endl;

    for (int i = 0; i < p; i++) {
    cout << "Количество неотрицательных элементов в строке " << i << ": " << nonNegCount[i] << endl;
    outFile << "Количество неотрицательных элементов в строке " << i << ": " << nonNegCount[i] << endl;
    }

    outFile.close();

    return 0;
    }
     
Top
Loading...