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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2010, 23:45   #1
artem611
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 40
По умолчанию Программа работает не правильно

Надо,что бы ф-ция перемножала всевозможный набор из введенных чисел. Т.е. вводится, например 4 числа:10 9 8 7 Считаем:
(10-9)(10-8)(10-7)(9-10)(9-8)(9-7)(8-10)(8-9)(8-7)(7-10)(7-9)(7-8)
Я написал, ф-ию, которая эо делае, но что-то не могу найти там ошибку, хоя прога компилится нормально:
Код:
function f(S:integer):real;
begin
k:=1;
for i:=0 to S do
 for j:=0 to S do

if (i<>j) then
begin
if (j=S) then 
     begin
    sum:=(Ar[i]-Ar[j]);
    sum1:=k*sum;
    end 
 else
begin
sum:=(Ar[i]-Ar[j]);
           if (i<>(j+1)) then
                       begin
                       sum1:=sum*(Ar[i]-Ar[j+1])*k;
                       j:=j+1;
                       end
                                              else
                                                  begin
                                                  sum1:=sum*(Ar[i]-Ar[j+2])*k;
                                                 j:=j+2;
                                                  end;
k:=sum1;
end;
end;
f:=sum1;
end;
artem611 вне форума Ответить с цитированием
Старый 22.09.2010, 07:13   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а зачем там замудрённо то? и ещё, сильно удивило, для чего Вы S передаёте в функцию? А собственно величины берёте из глобальных переменных (массив AR я имею в виду)...

попробуйте так (функция приведена ПОЛНОСТЬЮ) но код я не проверял..:
Код:
  k:=1;
  for i:=0 to S do
     for j:=0 to S do 
         if (i<>j) then begin
           k := k * (Ar[i]-Ar[j]);

           {для наглядности выведем то, что мы умножаем, на экран}
           Write('(',Ar[i],' - ',Ar[j],')');
        end;
  f := k;
end;
А у Вас массив определён от нуля?
А какое S передаёте? Не забываете минус один от количества делать?

А ещё рекомендую Вам надо рассмотреть вариант, когда в последовательности чисел есть одинаковые...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.09.2010, 07:49   #3
artem611
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 40
По умолчанию

Спасибо,Сергей. Попробую Ваш код.
artem611 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поставил скрит но работает не правильно Николай999 HTML и CSS 0 27.08.2010 16:26
не пойму правильно ли работает программа серг Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 13.05.2010 14:58
Не правильно работает запрос ww01031977 Microsoft Office Access 12 21.04.2010 10:52
программа работает. правильно ли? getUp Общие вопросы C/C++ 10 26.03.2010 07:07
Не правильно работает программа Virus_L Помощь студентам 0 28.12.2009 22:52