Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Произвед. эл-тов в диапазоне 
:(
    Опции темы
Alex103
Дата 7.12.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 5.1.2005
Где: Украина, г. Харьк ов

Репутация: нет
Всего: нет



Добрый день уважаемые форумчане. 

Задача состиит в том что нужно в одномерном массиве A[i] посчитать произведение чисел в диапазоне от наименьшего до наибольшего и найти их количество.

Вот мои мысли:

Код

Procedure Proc2(var A,Anew:arr1;  N:integer);
Var
     Amin,Amax:real;
    i,k1,k2,k:integer;        // счетчик
begin
      k1:=0;
      k2:=0;
      // поиск минимального элемента массива А
    Amin:=A[0];
    for i:=0 to N-1 do
            if A[i]<Amin then begin
          Amin:=A[i];
          inc(k1);
        end;
         // поиск максимального элемента массива А
    Amax:=A[0];
    for i:=0 to N-1 do
            if A[i]>Amax then begin
        Amax:=A[i];
        inc(k2);
        end;

    for i:=0 to N-1 do
    begin
         if(i)then
             Anew[i]:=power(A[i],3)
     else
             Anew[i]:=Amin;
    end;
end;

Наведите на мысль пожалуйста


--------------------
Мой адресс не дом и не улица, мой адресс WWW
PM MAIL WWW ICQ YIM   Вверх
Prokter
Дата 7.12.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 17.7.2007

Репутация: нет
Всего: нет



А для чего "Anew[i]:=power(A[i],3)"??? я как понимаю это же возведение в степень... 
Может так:

Код

// А - сам массив, N - количество эл-в массива, P - произведение, Kol - их кол-во
Procedure Proc2(A:arr1; N:integer; var P : Real; var Kol : integer); 
var
  a_min, a_max : Real;
  k_min, k_max, i : integer;
begin

  a_min:= A[0];
  k_min:=0;
  a_max:= A[0];
  k_max:=0;

  // нахождение мин и макс элементы в массиве
  for i:= 1 to N-1 do
  begin
    if a_min > A[i] then 
    begin
      a_min:= A[i];
      k_min:=i;
    end;

    if a_max < A[i] then
    begin
      a_max:= A[i];
      k_max:=i;
    end;
  end;

  // вычисление произведения..
  P:= 1;
  if k_min > k_max then
    for i:= k_min to k_max do
      P:= P*A[i]
  else
    for i:= k_max to k_min do
      P:= P*A[i]

  // вычисление количества..
  Kol:= abs(k_min - k_max)+1;
end;

PM MAIL   Вверх
Alex103
Дата 7.12.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 5.1.2005
Где: Украина, г. Харьк ов

Репутация: нет
Всего: нет



У меня постоянно вылетает значение произведения равное 1

Мне кажется надо подкоректировать код так 

Код

........
  P:= 1;
  if k_min > k_max then begin
    for i:= k_min to k_max do
      P:= P*A[i] end
  else
  begin
    for i:= k_max to k_min do
      P:= P*A[i];
      end;
.......

Но по-прежнему не работает. У меня вот такой массив:   0.9320 -0.7290  0.7457 -0.4794  0.0168 -0.4274 -0.9825 -0.3115 -0.5712 


--------------------
Мой адресс не дом и не улица, мой адресс WWW
PM MAIL WWW ICQ YIM   Вверх
volvo877
Дата 7.12.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Alex103 @  7.12.2007,  15:15 Найти цитируемый пост)
У меня вот такой массив:

Ты прежде, чем корректировать чужой код, привел бы свое описание типа arr1, а то переливаешь "из пустого в порожнее"... Может, у тебя там вообще вылет за границу массива происходит...
PM MAIL   Вверх
Alex103
Дата 7.12.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 5.1.2005
Где: Украина, г. Харьк ов

Репутация: нет
Всего: нет



Прошу прощения.

Вот мой код(отредактированый мной)

Код

// А - сам массив, N - количество эл-в массива, P - произведение, Kol - их кол-во
Procedure Proc2(A:arr1; N:integer; var P : Real; var Kol : integer);
var
  a_min, a_max : Real;
  k_min, k_max, i : integer;
begin

  a_min:= A[0];
  k_min:=0;
  a_max:= A[0];
  k_max:=0;

  // нахождение мин и макс элементы в массиве
  for i:= 1 to N-1 do
  begin
    if a_min > A[i] then 
    begin
      a_min:= A[i];
      k_min:=i;
    end;

    if a_max < A[i] then
    begin
      a_max:= A[i];
      k_max:=i;
    end;
  end;

  // вычисление произведения..
  P:= 1;
  if k_min > k_max then begin
    for i:= k_min to k_max do
      P:= P*A[i] end
  else
  begin
    for i:= k_max to k_min do
      P:= P*A[i];
      end;

  // вычисление количества..
  Kol:= abs(k_min - k_max)-1;
end;


Это сообщение отредактировал(а) Alex103 - 7.12.2007, 23:23


--------------------
Мой адресс не дом и не улица, мой адресс WWW
PM MAIL WWW ICQ YIM   Вверх
Alex103
Дата 8.12.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 5.1.2005
Где: Украина, г. Харьк ов

Репутация: нет
Всего: нет



Подскажите почему может не работать код??


--------------------
Мой адресс не дом и не улица, мой адресс WWW
PM MAIL WWW ICQ YIM   Вверх
hot_man
Дата 15.12.2007, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 5.12.2007
Где: Россия, Тольятти

Репутация: нет
Всего: нет



 Не пойму зачем это условие
 
  if k_min > k_max then begin
   
по мне проще написать без него

  for i:= k_min to k_max do
      P:= P*A[i] 

и все считается
или если уж с условием то 

 else
  begin
    for i:= k_max DOWNTO k_min do
      P:= P*A[i];
      end;

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0811 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.