Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
1

Преобразовать матрицу по правилу

23.07.2016, 12:20. Показов 436. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана квадратная матрица А(). Требуется преобразовать
эту матрицу так, чтобы каждый ее элемент стал суммой
окружающих этот элемент других элементов включая и
сам элемент (максимум сумма 9-ти элементов, минимум
сумма 4-ох элементов).
Эта задача решена частично с привлечением дополнительной
матрицы В(). Код программы прилагается.
Можно ли решить эту задачу без дополнительной матрицы
неизвестно?
Были такие мысли
1. Хранить старый и новый элемент матрицы в виде дробного
числа. Целая часть - исходное значение элемента матрицы,
а дробная часть - новое значение матрицы. Но здесь есть свой
подводный камень! Если новое число будет оканчиваться на 0,
то мы потеряем этот Нуль. Бейсик его отбросит.
2. Теоретически можно ввести строковую матрицу или лучше
просто строку, для хранения новых значений???
3. Может все гораздо проще? Если элемент матрицы использован
то его можно занять? Как?

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
CLS
RANDOMIZE TIMER
 
n = 7
DIM A(n + 1, n + 1) AS INTEGER
DIM B(1 TO n, 1 TO n) AS INTEGER
 
FOR i = 1 TO n
FOR j = 1 TO n
   A(i, j) = 9 * RND
   PRINT A(i, j);
NEXT j: PRINT
NEXT i: PRINT
 
FOR i = 1 TO n
FOR j = 1 TO n
   FOR k = -1 TO 1
   FOR l = -1 TO 1
      B(i, j) = B(i, j) + A(i + k, j + l)
   NEXT l, k
NEXT j, i
 
FOR i = 1 TO n
FOR j = 1 TO n
   PRINT B(i, j);
NEXT j: PRINT
NEXT i
END
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2016, 12:20
Ответы с готовыми решениями:

Преобразовать матрицу по правилу
Дана действительная квадратная матрица порядка A(n). Преобразовать матрицу по правилу: строку с...

Преобразовать числовую строку по правилу
Дано число в виде строки S. Требуется каждый элемент этой строки заменить на 1. Если элемент...

Преобразовать массив по правилу: программа выдает нули
кажется что просто, но что бы не делал выводио нули =( вот я сделал преобрахование переменной Х в...

Получить матрицу по правилу
1 2 3 ... 9 10 0 1 2 ... 8 9 0 0 1 ... 7 8 . . . ... . . 0 0 0 ... 0 1

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32591 / 21060 / 8134
Регистрация: 22.10.2011
Сообщений: 36,332
Записей в блоге: 8
23.07.2016, 14:34 2
Цитата Сообщение от geh Посмотреть сообщение
Можно ли решить эту задачу без дополнительной матрицы неизвестно
Известно. Неизвестно, поддерживает ли QBasic средства, которые будут для этого использоваться (в частности - рекурсию). Вот так это делается:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
const
  n = 7;
 
var
  a : array[0 .. n + 1, 0 .. n + 1] of integer;
 
procedure f(ix : integer; s : integer);
var k, l : integer;
begin
  if ix < sqr(n) then
  begin
    s := 0;
    for k := -1 to 1 do
      for l := -1 to 1 do s := s + a[succ(ix div n) + k, succ(ix mod n) + l];
    f(succ(ix), 0);
  end;
  a[succ(ix div n), succ(ix mod n)] := s;
end;
 
var
  i, j : integer;
 
begin
  randomize;
  writeln('A');
  for i := 1 to n do
  begin
    for j := 1 to n do
    begin
      a[i, j] := random(20);
      write(a[i, j]:4);
    end;
    writeln;
  end;
 
  f(0, 0);
  writeln('new A');
  for i := 1 to n do
  begin
    for j := 1 to n do
      write(a[i, j]:4);
    writeln;
  end;
 
end.
Результат:
Код
A
  17  10   2  17   9   3  17
  19  19   6   9  10  19   4
  16  14   0   9  17  13   4
   5   0   7   5  18  18   2
   8   8  14  12   4   5   7
   6   0  12   5  13   3  10
  17  15   9  13  18   4   5
new A
  65  73  63  53  67  62  43
  95 103  86  79 106  96  60
  73  86  69  81 118 105  60
  51  72  69  86 101  88  49
  27  60  63  90  83  80  45
  54  89  88 100  77  69  34
  38  59  54  70  56  53  22
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
23.07.2016, 19:02  [ТС] 3
volvo
Большое спасибо за предоставленный Вами код!
Я его слегка модифицировал и написал новую программу
на QBasic.
примечание
В Вашей программе, в процедуре f() задается задается
параметр s. Есть ли в нем необходимость, если в
самой процедуре он обнуляется? То есть его проще
объявить в этой же процедуре? Возможно я ошибаюсь.


QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
DECLARE SUB f (ix!, a%())
CLS
RANDOMIZE TIMER
CLEAR , , 10000
 
CONST n = 7
DIM a(n + 1, n + 1) AS INTEGER
 
FOR i = 1 TO n
FOR j = 1 TO n
   a(i, j) = 9 * RND
   PRINT a(i, j);
NEXT j: PRINT
NEXT i: PRINT
 
CALL f(1, a())
 
FOR i = 1 TO n
FOR j = 1 TO n
   PRINT a(i, j);
NEXT j: PRINT
NEXT i
END
 
SUB f (ix, a() AS INTEGER)
   IF ix > n ^ 2 THEN EXIT SUB
        
   s = 0
   i = (ix - 1) \ n + 1
   j = (ix - 1) MOD n + 1
   FOR k = -1 TO 1
   FOR l = -1 TO 1
      s = s + a(i + k, j + l)
   NEXT l, k
 
   CALL f(ix + 1, a())
   a((ix - 1) \ n + 1, (ix - 1) MOD n + 1) = s
END SUB
Добавлено через 6 минут
Строку 37 надо было записать короче
QBasic/QuickBASIC
1
   a(i, j) = s
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2016, 19:02
Помогаю со студенческими работами здесь

Сформировать матрицу по правилу
составьте программу для данной матрице в qbasic оч нужно 1 0 ... 0 1 0 1 ... 1 0 . . ... . ....

Сформировать матрицу по правилу
Надо сформировать двумерный массив, у которого значения элементов равны 1, если сумма инндексов...

Сформировать матрицу по правилу
Привет всем! Помогите пожалуйста решить вот такую задачу в QBasic : Заранее спасибо!

Получить матрицу по правилу
А такое можете помочь???


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru