Основи програмування на С ++ для початківців

Задачі та рішення: Покажчик на покажчик

1) Створити двовимірний масив 5х5, заповнити його випадковими числами від 10 до 99 і вивести на екран. Поміняти місцями максимальний елемент кожного рядка з першим елементом у відповідному рядку. Завдання вирішити за допомогою покажчиків.

2) Завдання на множення матриць. Користувач довільно задає розмірність двох матриць і заповнює значеннями вручну. Не забувайте, що необхідно виділити відповідні ділянки пам'яті для матриць, які буде заповнювати користувач і для третьої підсумкової матриці. Далі виведіть на екрані обидві заповнені матриці і підсумкову матрицю (їх відтворення).

Можливо хтось не знає, як множити матриці. Подивіться це коротке відео (автор: Пріходовскій М.А.)

15 думки про "Задачі та рішення: Покажчик на покажчик

  1. #include
    #include
    #include
    using namespace std;

    порожній логотип()
    {
    cout << "+————————————————-+" << endl;
    cout << "|Програма для арифметичних операцій з матрицями|" << endl;
    cout << "+————————————————-+" << endl << endl;
    }

    порожнеча DeleateMatrix(int **& matrix, ІНТ рядки, int cols)
    {
    for (int i = 0; i < рядки; i )
    {
    delete[] matrix[i];
    }
    delete[] matrix;
    матриця = nullptr;
    }

    порожнеча CreateMatrix(int **&matrix, ІНТ рядки, int cols)
    {
    матриця = new int * [рядки];
    for (int i = 0; i < рядки; i )
    {
    matrix[i] = new int[смещ_по_столбцам];
    }
    for (int i = 0; i < рядки; i )
    {
    for (int j = 0; j < смещ_по_столбцам; j )
    {
    matrix[i][j] = 0;
    }
    }
    }

    порожнеча InputMatrix(int **&matrix, ІНТ рядки, int cols)
    {
    for (int i = 0; i < рядки; i )
    {
    cout << i + 1 << " рядок: " << endl;
    for (int j = 0; j < смещ_по_столбцам; j )
    {
    cout <= k; k * = 10)
    {
    cout << " ";
    }
    cout << j + 1;
    cout <> matrix[i][j];
    }
    }
    }

    порожнеча OutputMatrix(int **& matrix, ІНТ рядки, int cols)
    {
    cout << endl;
    for (int i = 0; i < рядки; i )
    {
    for (int j = 0; j < смещ_по_столбцам; j )
    {
    if (J == 0)
    {
    cout << "{ ";
    }
    cout << matrix[i][j];
    if (j != cols – 1)
    {
    cout << "\t";
    }
    if (j == зб – 1)
    {
    cout << " }";
    }
    }
    cout << endl;
    }
    cout << endl;
    }
    int main()
    {
    setlocale(LC_ALL, "rus");
    while (true)
    {
    bool пауза = 0;
    помилка bool = false;
    char повторення = 0;

    int ** firstMatrix = 0;
    int firstRows = 0;
    int firstCols = 0;
    int ** resultMatrix = 0;
    int ** secondMatrix = 0;
    int secondRows = 0;
    int secondCols = 0;
    do {
    system("cls");
    логотип();
    помилка = хибне;
    cout <> firstRows;
    cout <> firstCols;
    CreateMatrix(firstMatrix, firstRows, firstCols);
    cout << endl;
    cout <> secondRows;
    cout <> secondCols;
    CreateMatrix(друга матриця, secondRows, secondCols);

    if (firstCols != secondRows)
    {
    cout << "\n\aОщибка! Кількість стовпців в першому матриці не дорівнює кількості рядків у другій матриці(натисніть будь-яку клавішу для продовження)" << endl;
    пауза = _getch();
    помилка = істина;
    }
    else if (repeat == 'R' || repeat == 'r' || repeat == 'К' || repeat == 'к')
    {
    cout << "\nПроверьте правильно ли вы ввели параметры матрицы." << endl
    << "Если вы неправильно ввели параметры, то натисніть клавішу R для того, щоб ввести параметри знову" << endl
    << "(натисніть будь-яку клавішу щоб продлжіть)" << endl;
    повторити = _getch();
    помилка = істина;
    }

    if (firstRows == 0 || firstCols == 0 || secondRows == 0 || secondCols == 0)
    {
    cout << "\n\aОщибка! Кількість рядків або стовпців не може дорівнювати нулю(натисніть будь-яку клавішу для продовження)" << endl;
    пауза = _getch();
    помилка = істина;
    }
    } while (error);
    do {
    помилка = хибне;
    system("cls");
    логотип();
    cout << "\nЗаполните первую матрицу" << endl;
    InputMatrix(firstMatrix, firstRows, firstCols);
    OutputMatrix(firstMatrix, firstRows, firstCols);
    cout << "\nПроверьте правильно ли вы ввели данные в матрицу." << endl
    << "Если вы неправильно ввели данные, то натисніть клавішу R для того, щоб ввести дані знову" << endl
    << "(натисніть будь-яку клавішу щоб продлжіть)" << endl;
    повторити = _getch();
    if (repeat == 'R' || repeat == 'r' || repeat == 'К' || repeat == 'к')
    {
    помилка = істина;
    }
    } while (error);
    do {
    помилка = хибне;
    system("cls");
    логотип();
    cout << "Первая матрица: " << endl;
    OutputMatrix(firstMatrix, firstRows, firstCols);
    cout << "Заполните вторую матрицу" << endl;
    InputMatrix(друга матриця, secondRows, secondCols);
    OutputMatrix(друга матриця, secondRows, secondCols);
    cout << "\nПроверьте правильно ли вы ввели данные в матрицу." << endl
    << "Если вы неправильно ввели данные, то натисніть клавішу R для того, щоб ввести дані знову" << endl
    << "(натисніть будь-яку клавішу щоб продлжіть)" << endl;
    повторити = _getch();

    if (repeat == 'R' || repeat == 'r' || repeat == 'К' || repeat == 'к')
    {
    помилка = істина;
    }
    } while (error);

    do {
    помилка = хибне;
    system("cls");
    логотип();
    cout << "Первая матрица: " << endl;
    OutputMatrix(firstMatrix, firstRows, firstCols);
    cout << "Вторая матрица: " << endl;
    OutputMatrix(друга матриця, secondRows, secondCols);
    cout << "Выберите арифметическую операцию, яку ви хочете виконати з цими матрицями" << endl << endl;
    cout << "1. множення(кількість рядків у першій Мотрони має дорівнювати кількості стовпців в другій матриці)" << endl;
    cout << "2. додавання(матриці повинні бути однакового розміру)" << endl;
    cout << "3. віднімання(матриці повинні бути однакового розміру)" << endl;
    CreateMatrix(resultMatrix, firstRows, secondCols);
    char вибір = _getch();
    system("cls");
    логотип();
    cout << "Первая матрица: " << endl;
    OutputMatrix(firstMatrix, firstRows, firstCols);
    cout << "Вторая матрица: " << endl;
    OutputMatrix(друга матриця, secondRows, secondCols);
    switch (вибір)
    {
    case '1':
    for (int i = 0; i < firstRows; i )
    {
    for (INT L = 0; L < secondCols; л ++)
    {
    for (int j = 0; j < firstCols; j )
    {
    resultMatrix[i][L] += firstMatrix[i][j] * друга матриця[j][L];
    }
    }
    }
    cout << "Результат умножения двух матриц: " << endl;
    break;
    case '2':
    if (firstRows != secondRows && firstCols != secondCols)
    {
    cout << "Ощибка! Матриці повинні бути однакового розміру(натисніть будь-яку клавішу для продовження)" << endl;
    }
    else
    {
    for (int i = 0; i < firstRows; i )
    {
    for (int j = 0; j < firstCols; j )
    {
    resultMatrix[i][j] = firstMatrix[i][j] + друга матриця[i][j];
    }
    }
    cout << "Результат сложения двух матриц: " << endl;
    }
    break;
    case '3':
    if (firstRows != secondRows && firstCols != secondCols)
    {
    cout << "Ощибка! Матриці повинні бути однакового розміру(натисніть будь-яку клавішу для продовження)" << endl;
    }
    else
    {
    for (int i = 0; i < firstRows; i )
    {
    for (int j = 0; j < firstCols; j )
    {
    resultMatrix[i][j] = firstMatrix[i][j] – друга матриця[i][j];
    }
    }
    cout << "Результат вычитания двух матриц: " << endl;
    }
    break;
    }
    OutputMatrix(resultMatrix, firstRows, secondCols);
    } while (error);
    DeleateMatrix(firstMatrix, firstRows, firstCols);
    DeleateMatrix(друга матриця, secondRows, secondCols);
    DeleateMatrix(resultMatrix, firstRows, secondCols);
    cout << "Нажмите любую клавишу чтобы продолжить" << endl; _getch();
    }
    return 0;

  2. Хто-небудь може підказати, чому якщо int maxRowValue = arr[i][0],
    видає помилку?

    #include <iostream>
    using namespace std;

    int main()
    {
    int size = 5;

    int ** arr = новий int *[size];

    for (int i = 0; i < size; i )
    {
    arr[i] = new int[size];
    }

    for (int i = 0; i < size; i )
    {
    for (int j = 0; j < size; j )
    {
    arr[i][j] = 10 + rand() % + 89;
    cout << arr[i][j] << "\t";
    }

    cout << endl;
    }

    cout << endl;

    for (int i = 0; i < size; i )
    {
    int maxRowValue = 0; /*arr[i][0];*/
    int * buf = 0;

    for (int j = 0; j < size; j )
    {
    if (arr[i][j] > maxRowValue)
    {
    maxRowValue = обр[i][j];
    buf = &(arr[i][j]);
    }
    }

    *buf = обр[i][0];
    arr[i][0] = maxRowValue;
    }

    for (int i = 0; i < size; i )
    {
    for (int j = 0; j < size; j )
    {
    cout << arr[i][j] << "\t";
    }

    cout << endl;
    }

    for (int i = 0; i < size; i )
    {
    delete[] arr[i];
    } delete[]arr;
    }

    1. #include <iostream>
      using namespace std;

      int main()
      {
      int size = 5;

      int ** arr = новий int *[size];

      for (int i = 0; i < size; i )
      {
      arr[i] = new int[size];
      }

      for (int i = 0; i < size; i )
      {
      for (int j = 0; j < size; j )
      {
      arr[i][j] = 10 + rand() % + 89;
      cout << arr[i][j] << "\t";
      }

      cout << endl;
      }

      cout << endl;

      for (int i = 0; i < size; i )
      {
      int maxRowValue = 0; /*arr[i][0];*/
      int * buf = 0;

      for (int j = 0; j < size; j )
      {
      if (arr[i][j] > maxRowValue)
      {
      maxRowValue = обр[i][j];
      buf = &(arr[i][j]);
      }
      }

      *buf = обр[i][0];
      arr[i][0] = maxRowValue;
      }

      for (int i = 0; i < size; i )
      {
      for (int j = 0; j < size; j )
      {
      cout << arr[i][j] << "\t";
      }

      cout << endl;
      }

      for (int i = 0; i < size; i )
      {
      delete[] arr[i];
      } delete[]arr;
      }

  3. #include
    #include
    #include
    using namespace std;

    int main (){
    const int SIZE = 5;
    srand(time(NULL));
    int arr[SIZE][SIZE];
    for(INT I = 0;i<SIZE;i ){
    for (int j = 0; j < SIZE; j ){
    arr[i][j]= 10 + rand() % 90;
    }
    }
    for(INT I = 0;i<SIZE;i ){
    for (int j = 0; j < SIZE; j ){
    cout << arr[i][j] << '\t';}
    cout << endl;}
    for(INT I = 0;i<SIZE;i ){
    INT J,k;
    int *макс;
    макс = &arr[i][0];
    int **перший;
    first = &max;
    for( J = 0;j *макс){
    макс.=&arr[i][j];}}
    k = **перший;
    *max = arr[i][0];
    arr[i][0] = k;
    }
    cout << endl << endl << endl;
    for(INT I = 0;i<SIZE;i ){
    for (int j = 0; j < SIZE; j ){
    cout << arr[i][j] << '\t';}
    cout << endl;}

    return 0;
    }

  4. Тільки заповнюється сама, #Життя СтрічокВажливі
    #include
    #include

    int main()
    {
    setlocale(LC_ALL, “rus”);
    srand(time(NULL));

    int rows1 = 0;
    int обидва = 0;
    int cols2 = 0;

    std::cout <> рядки1;
    std::cout <> обидва;
    std::cout <> cols2;

    int** dArray1 = новий int* [рядки1]; // Виділення пам'яті для першої матриці
    for (int i = 0; i < рядки1; i )
    {
    dArray1[i] = new int[обидва];
    }

    int** dArray2 = новий int* [обидва]; // Виділення пам'яті для другої матриці
    for (int i = 0; i < обидва; i )
    {
    dArray2[i] = new int[cols2];
    }

    int** dArray3 = новий int* [рядки1]; // Виділення пам'яті для третьої матриці
    for (int i = 0; i < рядки1; i )
    {
    dArray3[i] = new int[cols2];
    }

    for (int i = 0; i < рядки1; i ) // Заповнення першої матриці цифрами від 1 до 9
    {
    for (int j = 0; j < обидва; j )
    {
    dArray1[i][j] = 1 + rand() % 9;
    }
    }
    for (int i = 0; i < рядки1; i ) // Виведення першої матриці
    {
    for (int j = 0; j < обидва; j )
    {
    std::cout << dArray1[i][j] << " | ";
    }
    std::cout << "\n";
    }
    std::cout << "\n\n\n";

    for (int i = 0; i < обидва; i ) // Заповнення другої матриці цифрами від 1 до 9
    {
    for (int j = 0; j < cols2; j )
    {
    dArray2[i][j] = 1 + rand() % 9;
    }
    }
    for (int i = 0; i < обидва; i ) // Виведення другої матриці
    {
    for (int j = 0; j < cols2; j )
    {
    std::cout << dArray2[i][j] << " | ";
    }
    std::cout << "\n";
    }
    std::cout << "\n\n\n";

    for (int i = 0; i < рядки1; i )
    {
    for (int j = 0; j < cols2; j )
    {
    int buffer = 0;

    for (INT з = 0; c < обидва; C ++)
    {
    буфер += dArray1[i][c] * dArray2[c][j];
    }
    dArray3[i][j] = буфер;
    }
    }

    for (int i = 0; i < рядки1; i )
    {
    for (int j = 0; j < cols2; j )
    {
    std::cout << dArray3[i][j] << " | ";
    }
    std::cout << "\n";
    }

    for (int i = 0; i < рядки1; i ) {
    delete[] dArray1[i];
    }
    delete[] dArray1;

    for (int i = 0; i < обидва; i ) {
    delete[] dArray2[i];
    }
    delete[] dArray2;

    for (int i = 0; i < рядки1; i ) {
    delete[] dArray3[i];
    }
    delete[] dArray3;

    return 0;
    }

Залишити коментар до Віктор Скасувати відповідь

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *