Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
eugrita
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 534
#1

Работа с матрицами как с динамическими массивами

22.12.2017, 08:26. Просмотров 76. Ответов 4
Метки нет (Все метки)

Какая-то фигня. Думал, умею работать с динамическими массивами и матрицами.
Выделяю память для 2 квадратныз матриц, генерирую А. Копирую A в B оператором B:=A;
начинаю менять элемент матрицы А - cмотрю - одновременно меняется тот же элемент матрицы В
ПОЧЕМУ
Delphi
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
uses SysUtils,Windows;
type tp=array of array of Integer;
 var
 A,B:tp;
 n,i,j,xmax,nmax:Integer;
 procedure PRINT (X:tp; cap:string; n:integer);
 begin //печать квадратн матрицы  X[n,n] cap - имя
   Writeln(cap);
   for i:=0 to n-1  do begin
     for j:=0 to n-1 do
        write (X[i,j],' ');
       Writeln;
                      end;
 end;
 
 procedure setm(var X:tp; n:Integer);
 begin
   SetLength(X,n);
   for i:=Low(X) to High(X) do
     SetLength(X[i],n);
 end;
begin
  SetConsoleOutputCP(1251);
  Writeln('размерность N=?'); Readln(n);
  Setm(A,n);setm(B,n);
    randomize;
  for i:=0 to n-1  do
    for j:=0 to n-1 do  //генерация матрицы А
     begin
      A[i,j]:=Random(10);
      if i=j then A[i,i]:=1;
     end;
   B:=A;
   for i:=0 to n-1  do
     begin
        xmax:=-1000;
        for  j:=0 to n-1 do
          if A[i,j]> xmax then
            begin xmax:=A[i,j]; nmax:=j;end;
        B[i,i]:=A[i,nmax]; B[i,nmax]:=A[i,i];
     end;
  print(A,'A=',n);  print(B,'b=',n);
  Readln;
end.
:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2017, 08:26
Ответы с готовыми решениями:

Работа с динамическими массивами
Создать одномерный динамический массив произ-вольного размера. Ввести значения элементов массива....

Работа с динамическими массивами
Можно ли так делать? type TMass = array of Integer; function Funk1(a:TMass):TMass; var ...

Работа с двумерными динамическими массивами через функцию
Доброго времени суток читающим! Помогите разобраться пожалуйста, так как времени ужасно мало, уже...

Работа с двумерными динамическими массивами через функцию
Задание такое при нажатии button1 выводится двумерный массив размерностью m x n, при нажатии button...

Работа с массивами и матрицами
1.Реализуйте проект «Массив». Кнопка «Заполнить» формирует массив из десяти случайных целых чисел в...

4
Скандербег
931 / 890 / 294
Регистрация: 07.08.2012
Сообщений: 2,483
22.12.2017, 08:40 #2
B:=A; - это присвоение указателей. По простому, B после такого присвоения "смотрит" на A поэтому и показывает то что происходит в массиве А. Так сделано в Дельфи.
Так что без присвоения значений поэлементно не получится иметь два разных массива.
0
eugrita
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 534
22.12.2017, 08:47  [ТС] #3
Да, я это уже понял. Но только лишь поэлементно? Нельзя ли как-то с Copy?
0
Скандербег
931 / 890 / 294
Регистрация: 07.08.2012
Сообщений: 2,483
22.12.2017, 08:55 #4
Да, для динамических массивов можно использовать функцию Copy для копирования элементов в такой же массив по размерности.
В справке по этой функции всё сказано.
0
Massaraksh7
311 / 264 / 87
Регистрация: 27.05.2017
Сообщений: 1,350
22.12.2017, 09:13 #5
Для больших массивов память может выделяться не непрерывно, поэтому с Copy могут быть проблемы.
0
22.12.2017, 09:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2017, 09:13

Переписать программу так, чтобы она выполнялась с динамическими массивами
Переписать программы так, чтобы они выполнялась с динамическими массивами. 1) program odin;...

Работа с таймером и динамическими массивами
var Form1: TForm1; reg,r:TRegExpr; col, t,x:integer; myTele:array of string;...

Работа с компонентами как массивами
У меня есть 10 компонентов LabeledEdit и 1 Edit. В поле Edit пользователь вводит число от 1 до 10 и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru