Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 7
1

Функция меняет значение параметра

09.06.2016, 13:14. Просмотров 920. Ответов 10
Метки нет (Все метки)

Здравствуйте, проблема в том что при вызове функции из процедуры она меняет значение параметра (массива) в процедуре. Тем самым процедура работает не верно.
Функция
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
Function Dec(A1:mas):real;
var i,j,z,i2,j2,p,zn:integer;
    C:mas;
    op:real;
  begin
    zn:=0;
    for i:=0 to High(A1[0])-1 do
      begin
        p:=0;
        for j:=i+1 to High(A1) do
          begin
            if A1[i,i] = 0 then
              while (p <= High(A1)-i) and (A1[i,i]=0) do
                begin
                  p:=p+1;
                  IzVec('str',i+1,A1,C);
                  for i2:=i to High(A1)-1 do
                    for j2:=i to High(A1) do
                      A1[i2,j2]:=A1[i2+1,j2];
                  for i2:=0 to High(A1) do
                    A1[High(A1),i2]:=C[0,i2];
                end;
                for z:=High(A1[0]) downto 0 do
                  A1[j,z]:=A1[j,z]-(A1[i,z]*(A1[j,i]/A1[i,i]));
          end;
        zn:=zn+p;
      end;
    op:=1;
    for i:=0 to High(A1) do
      op:=op*A1[i,i];
    if zn mod 2 <> 0 then op:=-op;
    Dec:=op;
  end;
Процедура
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Procedure Obrat(A:mas; var B:mas);
var i,j,z,i2,j2,p,pl:integer;
    C,D,A1:mas;
  begin
    if dec(A) <> 0 then begin
    setlength(B,length(A),length(A[0]));
    for i:=0 to High(B) do
      for j:=0 to high(A[0]) do
        B[i,j]:=0;
    for i:=0 to High(B) do
      B[i,i]:=1;
    for pl:=0 to 1 do
      begin
        for i:=0 to High(A[0])-1 do
          begin
            p:=0;
            for j:=i+1 to High(A) do
              begin
                if A[i,i] = 0 then
                  while (p <= High(A)-i) and (A[i,i]=0) do
                    begin
                      p:=p+1;
                      IzVec('str',i+1,A,C);
                      IzVec('str',i+1,B,D);
                      for i2:=i to High(A)-1 do
                        for j2:=i to High(A) do
                          begin
                            A[i2,j2]:=A[i2+1,j2];
                            B[i2,j2]:=B[i2+1,j2];
                          end;
                      for i2:=0 to High(A) do
                        begin
                          A[High(A),i2]:=C[0,i2];
                          B[High(A),i2]:=D[0,i2];
                        end;
                    end;
                if A[i,i] <> 1 then
                  for z:=High(A[0]) downto 0 do
                    begin
                      B[i,z]:=B[i,z]/A[i,i];
                      A[i,z]:=A[i,z]/A[i,i];
                    end;
                for z:=High(A[0]) downto 0 do
                  begin
                    B[j,z]:=B[j,z]-(B[i,z]*(A[j,i]/A[i,i]));
                    A[j,z]:=A[j,z]-(A[i,z]*(A[j,i]/A[i,i]));
                  end;
              end;
          end;
        setlength(A1,length(A[0]),length(A));
        for i2:=0 to High(A) do
          for j2:=0 to High(A[0]) do
            A1[j2,i2]:=A[i2,j2];
        A:=A1;
        for i2:=0 to High(B) do
          for j2:=0 to High(B[0]) do
            A1[j2,i2]:=B[i2,j2];
        B:=A1;
 
 
        if A[High(A),High(A[High(A)])] <> 1 then
          for z:=High(A[0]) downto 0 do
            begin
              B[High(A),z]:=B[High(A),z]/A[High(A),High(A[High(A)])];
              A[High(A),z]:=A[High(A),z]/A[High(A),High(A[High(A)])];
            end;
      end;
end;
end;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2016, 13:14
Ответы с готовыми решениями:

Вычислить среднее значение параметра, исключив из данных его максимальное и минимальное значение
Даны результаты проведения N экспериментов (порядковый номер эксперимента и полученное в нем...

Процедура не меняет значение параметра
помогите пожалуйста. программа должна проверить является ли исходное число и число. полученное из...

Функция не меняет значение аргументов (за ее пределами)
Код: //заголовочный #ifndef HTPOTC_H #define HTPOTC_H class Rational{ public:...

Функция не меняет значение глобальной переменной
Функция не меняет значение переменной, а нужно чтобы меняло. В JavaScript я нуб. Описание функции...

10
4440 / 3683 / 1236
Регистрация: 14.04.2014
Сообщений: 17,188
Записей в блоге: 17
09.06.2016, 13:56 2
пишем перед параметром VAR - используем ТОТ ЖЕ массив
не пишем VAR - создается копия массива
все по книжкам
0
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 7
09.06.2016, 14:57  [ТС] 3
Цитата Сообщение от krapotkin Посмотреть сообщение
пишем перед параметром VAR - используем ТОТ ЖЕ массив
не пишем VAR - создается копия массива
все по книжкам
Я вроде как раз и не написал VAR, а массив изменился
0
834 / 729 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
09.06.2016, 16:33 4
Цитата Сообщение от llpb Посмотреть сообщение
проблема в том что при вызове функции из процедуры она меняет значение параметра (массива) в процедуре. Тем самым процедура работает не верно.
Это плохо.
Скорее всего где то логическая ошибка.
0
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 7
09.06.2016, 16:58  [ТС] 5
что значит логическая ошибка?
0
пофигист широкого профиля
4190 / 2729 / 774
Регистрация: 15.07.2013
Сообщений: 15,861
09.06.2016, 20:31 6
Цитата Сообщение от krapotkin Посмотреть сообщение
пишем перед параметром VAR - используем ТОТ ЖЕ массив
не пишем VAR - создается копия массива
все по книжкам
Которые были написаны до придумывания динамических массивов
0
4440 / 3683 / 1236
Регистрация: 14.04.2014
Сообщений: 17,188
Записей в блоге: 17
10.06.2016, 09:10 7
ну, автор не раскрыл тайну, что такое mas )))
поэтому думаем над #6 ))
0
1779 / 998 / 357
Регистрация: 29.05.2013
Сообщений: 4,575
10.06.2016, 10:14 8
А если так?
Delphi
1
Function Dec(const A1:mas):real;
0
пофигист широкого профиля
4190 / 2729 / 774
Регистрация: 15.07.2013
Сообщений: 15,861
10.06.2016, 13:17 9
Цитата Сообщение от Пытливый Посмотреть сообщение
А если так?
Не поможет.
0
4440 / 3683 / 1236
Регистрация: 14.04.2014
Сообщений: 17,188
Записей в блоге: 17
10.06.2016, 13:17 10
Лучший ответ Сообщение было отмечено llpb как решение

Решение

ну, для начала, мы уже истомились тут, с вопросом "массив-то динамический???"

а если массив динамический, передается ссылка
ссылка и так константа и не будет меняться, но указывает-то она на один и тот же массив
сделайте локальную копию массива вручную и пользуйтесь на здоровье
1
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 7
13.06.2016, 14:01  [ТС] 11
Большое спасибо) Сейчас попробую
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2016, 14:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Найти значение параметра, при котором достигает максимума функция
Помогите пожалуйста решить задачу:cry: Найти значение а, при котором достигает максимума функция ...

Функция, которая получает два параметра и возвращает результат деления первого параметра на второй
Тут такая задача: написать функцию, которая получает два параметра тип unsigned short int и...

Функция, которая принимает 2 параметра по ссылке, один на wchar, другой на string. передает значение строки wchar
Здравствуйте, всем. Уже 2 дня пытаюсь изменить найденную функцию. Функция, которая...

Как передать значение параметра функции одного экзешника значению параметра функции другому екзешнику?
Здравствуйте! Ребята подскажите по такому вопросу. У меня есть консольное приложение в...


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

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

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