Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2017, 13:42   #1
danil031997
Пользователь
 
Регистрация: 13.10.2013
Сообщений: 15
Вопрос Вычисление параметра массива

Постановка задачи:
“Вычислить значение Y = <P1><P2> + <P3>”
где <P1>, <P2>, <P3> – элементы выражения, представленные ниже.



Не могу разобраться в формулах, можете помочь с расшифрованием? Одно непонятно, как они взаимосвязаны между собой.
danil031997 вне форума Ответить с цитированием
Старый 13.01.2017, 13:48   #2
AnryKZKZ
Пользователь
 
Регистрация: 15.04.2014
Сообщений: 62
По умолчанию

Цитата:
Сообщение от danil031997 Посмотреть сообщение
Постановка задачи:
“Вычислить значение Y = <P1><P2> + <P3>”
где <P1>, <P2>, <P3> – элементы выражения, представленные ниже.



Не могу разобраться в формулах, можете помочь с расшифрованием? Одно непонятно, как они взаимосвязаны между собой.
Если я правильно понял - <P3> - это запись в формуле ниже после знака "+". Соответственно <P1><P2> - это сумма произведения (что до знака "+" в формуле)
AnryKZKZ вне форума Ответить с цитированием
Старый 13.01.2017, 13:55   #3
danil031997
Пользователь
 
Регистрация: 13.10.2013
Сообщений: 15
По умолчанию

Цитата:
Сообщение от AnryKZKZ Посмотреть сообщение
Если я правильно понял - <P3> - это запись в формуле ниже после знака "+". Соответственно <P1><P2> - это сумма произведения (что до знака "+" в формуле)
Уже лучше, как я понял, по первой формуле:

1. Цифра 2 - верхняя граница суммирования. i=n - индекс суммирования равен нижней границы суммирования n.
2. По второй формуле понял лишь условие, что элементы должны быть меньше нуля, k=i. Что значит наверху 1П?
3. В третьей формуле ищется максимальное, значения элементов больше нуля, k принимает значение от 1 до n. Как я понял, индекс "a" отвечает за двумерный массив. k,k - главная диагональ матрицы.

Последний раз редактировалось danil031997; 13.01.2017 в 14:01.
danil031997 вне форума Ответить с цитированием
Старый 13.01.2017, 14:04   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

какие же хитромудрые люди придумывают такие задания?!

если я правильно понял,
то
первая часть суммы - это сумма с индексом i=n, n-1, n-2, ... 2 произведений отрицательных элементов массива a с индексом k,i (где k от i до 1)

вторая часть суммы - это поиск максимального значения корня K-й степени из положительных элементов главной диагонали (Akk - это как раз элемент с индексами k,k - это и есть главная диагональ.



если я правильно понял, то вычисление P1 P2 в коде на Паскаль будет выглядеть примерно так:
Код:
sum_p1:=0;
for i:=n downto 2 do begin
  p2 := 1.0;
  is_negative_found := false;
  for k:=i downto 1 do
    if a[k,i]<0 then begin
        is_negative_found := true;
        p2 := p2 * a[k,i];
    end;
  if is_negative_found 
      then sum_p1 := sum_p1 + p2;
end;

Последний раз редактировалось Serge_Bliznykov; 13.01.2017 в 14:10.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.01.2017, 14:13   #5
danil031997
Пользователь
 
Регистрация: 13.10.2013
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
если я правильно понял, то вычисление P1 P2 в коде на Паскаль будет выглядеть примерно так
За пример отдельное спасибо, постараюсь разобраться.

P.S: Разобрался, пишу на компонетном, p3 прикручивается как-то так?

Код:
PROCEDURE CalculateY(A: ARR_A): REAL;
VAR       i,k: INTEGER;
          sum_p1,p2,p3,max: REAL;
          is_negative: BOOLEAN;
BEGIN
 sum_p1:=0;
  FOR i:=N-1 TO 2 BY -1 DO
    p2:=1.0;  is_negative:= FALSE;
   FOR k:=i TO 1 BY -1 DO
    IF A[k,i]<0 THEN
     is_negative:= TRUE;
     p2:=p2*A[k,i];
    END;
    IF is_negative THEN
      sum_p1:= sum_p1+p2;
    END;
   END;
  END;
 max:=A[1,1];
  FOR i:=1 TO N-1 DO
   FOR k:=1 TO N-1 DO
    IF (i=k) & (A[i,k]>0) & (A[i,k]>max) THEN
     max:=M.Sqrt(A[k,k])*1/k;
    END;
   END;
  END;
  RETURN sum_p1+max;
END CalculateY;

Последний раз редактировалось danil031997; 13.01.2017 в 14:57.
danil031997 вне форума Ответить с цитированием
Старый 13.01.2017, 15:18   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от danil031997 Посмотреть сообщение
пишу на компонетном
афигеть. круто!

тогда скажите, а разве в этом вашем компонентном Паскале массивы нумеруются не от нуля?
судя по всему в формулах явно обычная (математическая индексация массива от 1 до N )
и почему N-1 ?!


и ещё.
Цитата:
Сообщение от danil031997 Посмотреть сообщение
Код:
IF (i=k) & (A[i,k]>0) & (A[i,k]>max) THEN
     max:=M.Sqrt(A[k,k])*1/k;
    END;
это, на мой взгляд, неверно.
нужно же искать максимальное значение КОРНЯ K-й степени.
либо гуглите функцию POWER() для вашего компилятора,
либо преобразовывайте вычисление корня через логарифмы (надеюсь, хотя бы функция логарифма есть в вашем паскале?)

да и два цикла тут ни к чему, одного за глаза хватит.
Код:
max := -1;
FOR k:=1 TO N-1 DO 
   IF (A[k,k]>0) THEN
      tmp := ВозвестиВСтепень(A[k,k], 1/k);
      IF tmp>max THEN
          max := tmp
      END;
   END;
END;

p.s. N в процедуре не описана, откуда берётся?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.01.2017, 16:05   #7
danil031997
Пользователь
 
Регистрация: 13.10.2013
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
тогда скажите, а разве в этом вашем компонентном Паскале массивы нумеруются не от нуля?
От нуля, но я не использую нулевой элемент, так как изначально нам сказали считать с 1. N - размер квадратной матрицы N*N.

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
и почему N-1 ?!
Если укажу просто N, начинаю вылетать за рамки массива.


Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
(надеюсь, хотя бы функция логарифма есть в вашем паскале?)
Спасибо, благо эта функция присутствует в компиляторе. Да и ещё POWER есть.

Последний раз редактировалось danil031997; 13.01.2017 в 16:09.
danil031997 вне форума Ответить с цитированием
Старый 13.01.2017, 16:17   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от danil031997 Посмотреть сообщение
Если укажу просто N, начинаю вылетать за рамки массива.
тогда матрицу сделайте N+1 (так логичнее, раз нулевой не используете, Вам нужно массив на 1 элемент больше)


Цитата:
Сообщение от danil031997 Посмотреть сообщение
Да и ещё POWER есть.
вот, вместо ВозвестиВСтепень и используйте Power()
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.01.2017, 16:21   #9
danil031997
Пользователь
 
Регистрация: 13.10.2013
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
вот, вместо ВозвестиВСтепень и используйте Power()
Я понял. Немного смущает отсутствие квадратного корня (функция Sqrt) по предыдущей формуле. Можно ещё спрошу, касательно прикреплённой формулы.
Она соответствует коду?

Код:
PROCEDURE F2(i,j: INTEGER): REAL;
BEGIN
 RETURN i*M.Power(M.Exp(i/j),1/j);
END F2;
До этого было так, но как я понял, неправильно:
Код:
PROCEDURE F2(i,j: INTEGER): REAL;
BEGIN
 RETURN i*M.Sqrt(M.Exp(M.Ln(i/j)))*(1/j);
END F2;
Изображения
Тип файла: jpg 2.jpg (1.7 Кб, 62 просмотров)

Последний раз редактировалось danil031997; 13.01.2017 в 16:30.
danil031997 вне форума Ответить с цитированием
Старый 13.01.2017, 16:40   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

простите, я не понял, а что это за формула с корнем из e ?!
но, для неё код
Код:
 RETURN i*M.Power(M.Exp(i/j),1/j);
соответствует.


если речь идёт о корне, который был в сообщении #1
то всё ещё проще:
Код:
M.Power(a[k,k],1/k);
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Язык Си. Вычисление параметра отбора матриц. Не хватает мощности. Помогите посчитать Ar2emiS Помощь студентам 19 10.11.2016 16:24
передача двумерного массива как параметра функции Yulia_sko.kz Помощь студентам 0 31.03.2012 15:15
шаблон массива с указателем в качестве параметра prc Общие вопросы C/C++ 5 30.01.2012 13:45
Создание подпрограм.Передача массива как параметра процедуре AbrahamLincoln Помощь студентам 5 20.09.2009 19:39