Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
 Средства работы с динамической памятью  [new]
tet2
Member

Откуда:
Сообщений: 5
Задано квадратную матрицу, все элементы которой равны единице. Написать функцию void func (int ** arr, int n), которая заполняет заштрихованную область матрицы (согласно варианту) нулями. Размер массива вводится с клавиатуры.
Здесь матрица полностью заполняется нулями, а нужно чтобы только заштрихованная область
#include<iostream>
#include<stdio.h>
#include<iomanip>

using namespace std;
void func(int ** arr, int n) {
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      arr[i][j] = 0;
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++)
      cout << setw(4) << arr[i][j];
    cout << endl;
  }
}
int main() {
  int ** arr, n;
  cout << "Enter order of matrix:";
  cin >> n;
  cout << "-----------------------------------------------------" << endl;
  arr = new int * [n];
  for (int i = 0; i < n; i++) {
    arr[i] = new int[n];
  }
  func(arr, n);
  for (int i = 0; i < n; i++) {
    delete[] arr[i];
  }
  delete[] arr;
  return 0;
}


Модератор: Дружище. Пользуйся тегами форматирования сорцов


К сообщению приложен файл. Размер - 745bytes


Сообщение было отредактировано: 17 мар 21, 01:37
16 мар 21, 22:30    [22295888]     Ответить | Цитировать Сообщить модератору
 Re: Средства работы с динамической памятью  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

Это потому что в func() ошибка. Она заполняет нулями все ячейки матрицы, а должна только
заштрихованные.

Posted via ActualForum NNTP Server 1.5

16 мар 21, 23:10    [22295902]     Ответить | Цитировать Сообщить модератору
 Re: Средства работы с динамической памятью  [new]
petrav
Member

Откуда:
Сообщений: 2861
Dimitry Sibiryakov

Это потому что в func() ошибка. Она заполняет нулями все ячейки матрицы, а должна только
заштрихованные.

А следующая ошибка в твоём посте. :) Ты должен был написать: сейчас я исправлю ошибку.

Вот такая трагическая последовательность (совокупность) ошибок.
16 мар 21, 23:22    [22295908]     Ответить | Цитировать Сообщить модератору
 Re: Средства работы с динамической памятью  [new]
tet2
Member

Откуда:
Сообщений: 5
Dimitry Sibiryakov,

Не подскажите как исправить?
16 мар 21, 23:59    [22295922]     Ответить | Цитировать Сообщить модератору
 Re: Средства работы с динамической памятью  [new]
Aklin
Member

Откуда: Прямо сейчас меня здесь нет
Сообщений: 61625
Не понятно, как имея массив и его размер, что из этого нужно заштриховывать.
И как это относится к "динамической памяти" ?
19 мар 21, 12:42    [22297235]     Ответить | Цитировать Сообщить модератору
 Re: Средства работы с динамической памятью  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Не хватает исходных данных. Задано N. Order Of Matrix. Порядок матрицы.
Это я так понимаю ее размер. А чтобы что-то заштриховать - нам нужен
размер бордюра или внутреннего прямоугольника. И непонятно - где
штриховка. Где серое? Или белое? И непонятно чем штриховать? Нулями?
По смыслу использования памяти, считается хорошей практикой предварительно
заполнять нулями в новых стандартах языка.
new int[n]();

Но чем тогда заполнять если всё и так уже покрашено нулями? Абсурд?

Вобщем в данной задаче - искажено задание или выдано не полностью.
Надо подходить к преподу и уточнять.
19 мар 21, 13:34    [22297265]     Ответить | Цитировать Сообщить модератору
 Re: Средства работы с динамической памятью  [new]
petrav
Member

Откуда:
Сообщений: 2861
Интересно, а сколько стоят такие/подобные задачи на каком-нибудь фриланс сайте? :)
19 мар 21, 13:59    [22297281]     Ответить | Цитировать Сообщить модератору
 Re: Средства работы с динамической памятью  [new]
Пётр Седов
Member

Откуда: Санкт-Петербург
Сообщений: 700
tet2, если не заморачиваться на скорость заполнения матрицы, то можно так:
void func(int** arr, int n) {
  const int border_thickness = 2; // толщина границы
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if ((border_thickness <= i) && (i < n - border_thickness)
        && (border_thickness <= j) && (j < n - border_thickness)) {
        // внутренняя часть
        arr[i][j] = 1;
      } else {
        // граница
        arr[i][j] = 0;
      }
    }
  }
  ...
}
21 мар 21, 03:34    [22297829]     Ответить | Цитировать Сообщить модератору
Все форумы / C++ Ответить