Основы программирования на С++ для начинающих

Задачи и решения: Указатель на указатель

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

2) Задача на умножение матриц. Пользователь произвольно задает размерность двух матриц и заполняет значениями вручную. Не забывайте, что необходимо выделить соответствующие участки памяти для матриц, которые будет заполнять пользователь и для третьей итоговой матрицы. Далее отобразите на экране обе заполненные матрицы и итоговую матрицу (их воспроизведение).

Возможно кто-то не знает, как умножать матрицы. Посмотрите это короткое видео (автор: Приходовский М.А.)

Задачи и решения: Указатель на указатель
5 (100%) 5 votes

9 thoughts on “Задачи и решения: Указатель на указатель

  1. Вы неверно освобождаете память во втором задании, ведь a != c. Когда вводишь матрицы 3×2 и 2×3 выдаёт ошибку.
    Для второго массива нужно делать отдельный цикл, а первый и третий можно в один.

  2. Хех, первая задачка решается значительно тривиалнее, чем требуется в задании.. :]]

  3. Решила Задачу№1 используя указатели в поиске максимального значения. Прокоментируйте пожалуйста можно ли так делать и на сколько это валидно?
    P.S.: Сорри, я еще только учусь, поэтому такой вопрос ))

  4. Слишком ужасно?

  5. Я сделяль. :) Решение отличается от вашего, но программа должна работать корректно, несколько раз проверил.

  6. Поправьте меня, но в конце решения второй задачи, где освобождается память, неверно учитываются размеры массивов, что ведет к ошибке, т.к. кол-во рядов М2 (i в цикле) должно быть < с.

  7. Сергей! По первой задачке короче получилось:
    int main()
    {
    setlocale(LC_ALL, “ru”);
    srand(time(NULL));
    int const row = 3;
    int const col = 4;
    int **arr = new int*[row];
    for (int i = 0; i < row; i++)
    {
    arr[i] = new int[col];
    }
    for (int i = 0; i < row; )
    {
    for (int j = 0; j < col; j++)
    {
    arr[i][j] = 10 + rand() % 90;
    }
    i++;
    }
    for (int i = 0; i < row; )
    {
    for (int j = 0; j < col; j++)
    {
    cout << arr[i][j] << " | ";
    }
    cout << endl;
    i++;
    }
    int max = 0; // для записи максимального значения
    int buf = 0; // буфер для перестановки местами значений
    for (int i = 0; i < row; )
    {
    for (int j = 0; j max)
    {
    max = arr[i][j];
    arr[i][j] = buf;
    arr[i][0] = max;
    }
    }
    max = 0; // ну мне так показалось, для положительных чисел…
    i++;
    }
    cout << "———————————————————————" << endl;
    for (int i = 0; i < row; )
    {
    for (int j = 0; j < col; j++)
    {
    cout << arr[i][j] << " | ";
    }
    cout << endl;
    i++;
    }
    for (int i = 0; i < row; i++) delete[] arr[i];
    delete[] arr;
    return 0;
    }

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *