Загрузка...

С++ надо саппорт с заданием

Тема в разделе C/C++ создана пользователем Identify 17 мар 2023. (поднята 18 мар 2023) 376 просмотров

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

    [IMG]
     
    17 мар 2023 Изменено
  2. Daemon
    Daemon 17 мар 2023 1680 8 янв 2021
    Вам надо именно динамический массив (std::vector) или массив переменной длины (new type[count])?
     
    1. Daemon
      nullptr, он то здесь причем, где вы там динамику увидели?
    2. Identify Автор темы
      Daemon, динамический
  3. lethe1337
    lethe1337 23 мар 2023 7 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;
    }
     
    23 мар 2023 Изменено
    1. Посмотреть предыдущие комментарии (19)
    2. Daemon
      lethe1337, что невнятного в тз?
    3. Daemon
      lethe1337,
      "std::vector это последовательный контейнер, инкапсулирующий массивы переменного размера."
      "Память вектора обрабатывается автоматически, расширяясь по мере необходимости. Векторы обычно занимают больше места, чем статические массивы, поскольку больше памяти выделяется для обработки будущего роста."
      https://ru.cppreference.com/w/cpp/container/vector
    4. lethe1337
      Daemon, может ли размер быть изменен после ввода размерности N x M. также далее по тексту задачи нигде не подразумевается, что размер будет изменен
    5. Посмотреть следующие комментарии (8)
  4. lethe1337
    lethe1337 23 мар 2023 7 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;
    }
     
    23 мар 2023 Изменено
Top
Загрузка...