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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2011, 04:12   #1
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию Работа цикла for

Доброго времени суток уважаемые эксперты! Есть следующий код:
Код:
{-----------------------------------------------}
for i := 2 to Count do
    begin
      for j := i to i + k - 1 do
        begin
          Proizv_x_i := Proizv_x_i + Pixels_y[j] * j;
          Sum_t := Sum_t + Pixels_x[j];
          Sum_y_t := Sum_y_t + Pixels_y[j];
          Sum_t_2 := Sum_t_2 + Pixels_x[j] * j;
        end;
{-----------------------------------------------}
По моим мыслям цикл
Код:
for j := i to i + k - 1 do
должен запускаться следующим образом, например, для i=6 он должен работать соответственно в пределах от 6 до 10 (k=5) Но он работает порядка 25 раз, т.е. перебирает все значения которые может принимать i в данном цикле. Подскажите почему? И как можно исправит?
StudeHt вне форума Ответить с цитированием
Старый 11.11.2011, 05:14   #2
Vladilen
 
Регистрация: 03.09.2010
Сообщений: 8
По умолчанию

Все правильно у тебя

Начинается первый цикл от 2 до Count
Внутри него второй цикл от i до i + k - 1

Так вот у тебя второй цикл повторится столько раз сколько у тебя Count-1

Тоесть у тебя первый цикл от 2 до 4

Так вот у тебя получится так:
Начинается цикл 1
Начинается цикл 2
Заканчивается цикл 2
Начинается цикл 2
Заканчивается цикл 2
Начинается цикл 2
Заканчивается цикл 2
Заканчивается цикл 1

Последний раз редактировалось Vladilen; 11.11.2011 в 05:16.
Vladilen вне форума Ответить с цитированием
Старый 11.11.2011, 05:45   #3
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию

Vladilen, наверное я плохо сформулировал свой вопрос.. Мне не нужно, чтобы второй цикл работал Count - 1 раз.. Мне нужно чтобы при каждом пробеге первого цикла значения во втором цикле пересчитывались ровно i + k - 1 раз, т.е. если
Код:
for i := 2 to Count do
например запустить до четырех, то мне нужно следующее (он должен пройти при первом пробеге 2 + 5 - 1 раз)
Код:
начался 1 цикл (i=2)
начался 2
закончился 2
начался 2
закончился 2
начался 2
закончился 2 
{и так 6 раз}
затем начались последующие за вторым циклом вычисления, сохранились, и опять начался первый цикл, а за ним второй, только теперь мне нужно чтобы он прошел 7 раз, потом также сохранил вычисления, и начался четвертый, а для него, уже 8 раз должен пробежать второй цикл

Приведу целый код процедуры (хотя в алгоритме наверное запутался, но отладить не могу из - за не понимания работы цикла):
Код:
for i := 2 to Count do
    begin
      for j := i to m + k - 1 do
        begin
          Proizv_x_i := Proizv_x_i + Pixels_y[j] * j;
          Sum_t := Sum_t + Pixels_x[j];
          Sum_y_t := Sum_y_t + Pixels_y[j];
          Sum_t_2 := Sum_t_2 + Pixels_x[j] * j;
        end;
      b[i] := (Proizv_x_i - ((1 / k) * Sum_t * Sum_y_t)) / (Sum_t_2 - (1 / k) * Power(Sum_t,2));
      a[i] := ((1 / k) * Sum_y_t) - ((1 / k) * b[i] * Sum_t);
      x_i[i] := a[i] + b[i] * i;
      if i < k then
        begin
          for l := 1 to k - 1 do
            Sum_x_i_1:= Sum_x_i_1 + x_i[l];
          x[i] := (1 / i) * Sum_x_i_1;
        end;
      if (i >= k) and (i <= Count - k + 1) then
        begin
          for l := i - k + 1 to i do
            Sum_x_i_2 := Sum_x_i_2 + x_i[l];
          x[i] := (1 / k) * Sum_x_i_2;
        end;
      if i > Count - k + 1 then
        begin
          for l := i - k + 1 to Count - k + 1 do
            Sum_x_i_3 := Sum_x_i_3 + x_i[l];
          x[i] := (1 / (Count - k + 1)) * Sum_x_i_3;
        end;
    end;

Последний раз редактировалось StudeHt; 11.11.2011 в 06:01.
StudeHt вне форума Ответить с цитированием
Старый 11.11.2011, 06:37   #4
Vladilen
 
Регистрация: 03.09.2010
Сообщений: 8
По умолчанию

Ну так ты хочешь: i + k - 1

А в представленном коде: m + k - 1

Что за m?
Vladilen вне форума Ответить с цитированием
Старый 11.11.2011, 11:05   #5
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию

Цитата:
Что за m?
Разумеется просто опечатка, там должно быть
Код:
for j := i to i + k - 1 do
StudeHt вне форума Ответить с цитированием
Старый 11.11.2011, 11:46   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Код:
for i := 2 to Count do
    begin
// если суммирование только по второму то переменне НАДО обнулять.
          Sum_t := 0;
          Sum_y_t := 0;
          Sum_t_2 := 0;
   
      for j := i to m + k - 1 do
        begin
          Proizv_x_i := Proizv_x_i + Pixels_y[j] * j;
          Sum_t := Sum_t + Pixels_x[j];
          Sum_y_t := Sum_y_t + Pixels_y[j];
          Sum_t_2 := Sum_t_2 + Pixels_x[j] * j;
        end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вложеные цикла pr0kazn1k Помощь студентам 10 21.12.2010 15:10
Переход от цикла к циклу не выходя из цикла (без multithreading) Qousio Общие вопросы C/C++ 2 16.05.2009 09:27
Странная работа цикла valerij Microsoft Office Excel 5 06.03.2009 16:40
Оператор цикла с предусловием While. Оператор цикла с пост условием Repeat McMilin Помощь студентам 7 11.11.2007 14:10
счётчик цикла Kivin13 Общие вопросы Delphi 3 11.09.2007 12:57