Загрузка...

Хелпаните с задачкой

Тема в разделе C/C++ создана пользователем нелепость 9 май 2023. 205 просмотров

  1. нелепость
    нелепость Автор темы 9 май 2023 Кружки - lolz.live/threads/6094870/ 7472 20 янв 2020
    Условие: Дана матрица А(n x m). Создать функцию, в которой получить из матрицы новый массив, куда переписать элементы под главной диагональю и на диагонали по строкам. С помощью функции найти новую величину равную произведению четных элементов, расположенных после наименьшего элемента полученного массива.
    Зелёным цветом выделено, что я сделал, помогите с остальной частью и добавить в код
    C
    #include <iostream>
    using namespace std;
    void input_matr(int**, int, int);
    int* getA(int**, int);
    int main() {
    setlocale(LC_CTYPE, "");
    srand(time(NULL));
    int n = 5, m = 5;
    int** A = new int* [n];
    for (int i = 0; i < n; i++)
    A[i] = new int[m];
    input_matr(A, n, m);
    // получаем новый массив, содержащий элементы на диагонали по строкам и под главной диагональю
    int* newArray = getA(A, n);

    // выводим новый массив на экран
    int size = n * (n - 1) / 2 + n;
    for (int i = 0; i < size; i++) {
    cout << newArray[i] << " ";
    }
    cout << endl;

    // освобождаем память
    for (int i = 0; i < n; i++)
    delete[] A[i];
    delete[] A;
    delete[] newArray;

    return 0;
    }

    void input_matr(int** A, int n, int m) {
    for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
    *(*(A + i) + j) = rand()%20+1;
    cout << *(*(A + i) + j) << "\t";
    }
    cout << "\n";
    }
    cout << endl;
    }
    int* getA(int** A, int n) {
    int size = n * (n - 1) / 2 + n; // размер нового массива
    int* newArray = new int[size]; // выделяем память для нового массива
    int k = 0; // индекс для нового массива
    // перебираем строки и столбцы матрицы
    for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
    // если элемент находится на диагонали по строкам или ниже нее, добавляем его в новый массив
    if (j <= i) {
    newArray[k] = A[i][j];
    k++;
    }
    }
    }
    return newArray;
    }
     
    9 май 2023 Изменено
  2. prostoktodd
    prostoktodd 9 май 2023 ... 2812 14 фев 2019
    попроси чат гпт
     
  3. ChatGPT
    ChatGPT 9 май 2023 2250 14 мар 2023
    нелепость, я добавил функцию `findProduct` для нахождения произведения четных элементов после наименьшего элемента полученного массива. Вот обновленный код:

    C

    #include <iostream>
    #include <limits>
    using namespace std;

    void input_matr(int**, int, int);
    int* getA(int**, int);
    int findProduct(int*, int);

    int main() {
    setlocale(LC_CTYPE, "");
    srand(time(NULL));
    int n = 5, m = 5;
    int** A = new int* [n];
    for (int i = 0; i < n; i++)
    A[i] = new int[m];
    input_matr(A, n, m);

    int* newArray = getA(A, n);

    int size = n * (n - 1) / 2 + n;
    for (int i = 0; i < size; i++) {
    cout << newArray[i] << " ";
    }
    cout << endl;

    int product = findProduct(newArray, size);
    cout << "Произведение четных элементов после наименьшего элемента: " << product << endl;

    for (int i = 0; i < n; i++)
    delete[] A[i];
    delete[] A;
    delete[] newArray;

    return 0;
    }

    void input_matr(int** A, int n, int m) {
    for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
    *(*(A + i) + j) = rand()%20+1;
    cout << *(*(A + i) + j) << "\t";
    }
    cout << "\n";
    }
    cout << endl;
    }

    int* getA(int** A, int n) {
    int size = n * (n - 1) / 2 + n;
    int* newArray = new int[size];
    int k = 0;
    for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
    if (j <= i) {
    newArray[k] = A[i][j];
    k++;
    }
    }
    }
    return newArray;
    }

    int findProduct(int* array, int size) {
    int minIndex = 0;
    int minValue = numeric_limits<int>::max();
    for (int i = 0; i < size; i++) {
    if (array[i] < minValue) {
    minValue = array[i];
    minIndex = i;
    }
    }

    int product = 1;
    for (int i = minIndex + 1; i < size; i++) {
    if (array[i] % 2 == 0) {
    product *= array[i];
    }
    }
    return product;
    }
    Теперь программа выводит произведение четных элементов после наименьшего элемента полученного массива. Удачи!
     
    1. Посмотреть предыдущие комментарии (1)
    2. ChatGPT
      нелепость, `int minValue = numeric_limits<int>::max();` используется для инициализации переменной `minValue` максимально возможным значением для типа `int`. Это делается для того, чтобы при поиске наименьшего элемента в массиве, любое значение из массива будет меньше или равно этому начальному значению.

      `numeric_limits` является шаблонным классом из стандартной библиотеки `<limits>`, который предоставляет информацию о свойствах числовых типов. В данном случае, `numeric_limits<int>::max()` возвращает максимальное значение, которое может быть представлено типом `int`.
    3. нелепость Автор темы
      ChatGPT, а если без лимитов?
    4. ChatGPT
      нелепость, если вы хотите инициализировать `minValue` без использования `numeric_limits`, вы можете просто присвоить ей значение первого элемента массива. Вот измененная функция `findProduct`:

      C

      int findProduct(int* array, int size) {
      int minIndex = 0;
      int minValue = array[0]; // Инициализация minValue первым элементом массива
      for (int i = 1; i < size; i++) { // Начинаем сравнение со второго элемента
      if (array[i] < minValue) {
      minValue = array[i];
      minIndex = i;
      }
      }

      int product = 1;
      for (int i = minIndex + 1; i < size; i++) {
      if (array[i] % 2 == 0) {
      product *= array[i];
      }
      }
      return product;
      }
      Теперь `minValue` инициализируется первым элементом массива, и цикл сравнения начинается со второго элемента. Это также будет корректно работать для нахождения наименьшего элемента в массиве.
  4. нелепость
    нелепость Автор темы 9 май 2023 Кружки - lolz.live/threads/6094870/ 7472 20 янв 2020
    Вопрос остаётся открытым
     
  5. LVV
    у тебя выше код, даже чат объяснил что такое numeric_limit(type)::max(), если не хочешь использовать стл, замени на 10^6.

    замена элементов, если не используете поинтеры, то замени: **(a+I)+j на a[j], также передавать в функцию массив можно без принтера: вместо int **arr как int a[][] или int a[n][m]

    и плюс: вместо динамического выделения (в задаче не просят), проще будет создать два простых массива или использовать стл: vector<type> name.
     
    9 май 2023 Изменено
Загрузка...
Top