Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/16: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Фрилансер
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
1

Цикл с параметром

24.07.2010, 19:13. Показов 3281. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Если в процессе цикла содержимое списка (List) не изменяется, то я бы рекомендовал инвариантное вычисление (List.Count-1) вынести за пределы цикла...
Код
cnt:=List.Count-1;
for i:=0 to cnt do
  begin
    //здесь тело цикла
  end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.07.2010, 19:13
Ответы с готовыми решениями:

Цикл с параметром
Приветствую всех!!! Дали много заданий...вот одно из них!помогите"......Нужно вычислить...

цикл с параметром for
1)Составить таблицу перевода суток (от 1 до 7) в часы, минуты, секунды.

Задача на цикл с параметром.Массивы
оч срочно,,,,, помогите , задача:6. Дана последовательность целых чисел a1, a2, ..., an....

Цикл с параметром: вычислить значение функции
F(k)=cos|2k|/1,12-cos⁡(3k-2)+6,15

27
3218 / 2361 / 540
Регистрация: 11.09.2009
Сообщений: 8,604
25.07.2010, 06:11 2
Mad_Dog, в любом цикле for число повторов цикла всегда вычисляется заранее. Почитайте Help.
1
Фрилансер
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
25.07.2010, 11:50  [ТС] 3
i8085, изучай объектно-ориентированное программирование, а конкретно вызов методов!!!
Вот это
Delphi
1
List.Count
есть ни что иное, как вызов метода Count объекта List, а не значение переменной List.Count. И этот метод будет вызываться при каждой итерации цикла!!! Так что удели свое время еще и оптимизации кода в программах...
0
Эксперт С++
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
25.07.2010, 12:20 4
Mad_Dog,
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{$apptype console}
 
function f:integer;
begin
writeln('f');
result := 5;
end;
 
var i : integer;
 
begin
for i := 1 to  f do
  ;
readln;
end.
1
Фрилансер
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
25.07.2010, 12:31  [ТС] 5
Хохол, и что это??? и к чему все это???
0
Эксперт С++
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
25.07.2010, 12:35 6
Начальное и конечное значение параметра цикла вычисляется один раз.
1
Фрилансер
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
25.07.2010, 12:41  [ТС] 7
Хохол, а где тут объекты и вызовы методов этих объектов????
0
Эксперт С++
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
25.07.2010, 12:42 8
Mad_Dog, а какая разница?
1
Фрилансер
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
25.07.2010, 12:46  [ТС] 9
Хохол, ты меня чуть не убил!!!
Посмотри следующий код и скажи ка мне будет ли он правильно работать:
Delphi
1
2
for j:=0 to ListBox.Items.Count-1 do
  ListBox.Items.Delete(j);
0
Эксперт С++
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
25.07.2010, 12:51 10
Mad_Dog,
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{$apptype console}
 
type SomeClass = class
public
  function f:integer;
end;
 
function SomeClass.f;
begin
writeln('f');
result := 5;
end;
 
var i : integer;
s : SomeClass;
 
begin
s := SomeClass.Create;
for i := 1 to  s.f do
  ;
readln;
end.
Не знаю, что вы понимаете под правильностью работы своего кода, но половина цикла в нем будет прогнана вхолостую.
1
Фрилансер
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
25.07.2010, 12:55  [ТС] 11
Я много занимался анализом подобных циклов и у меня есть опыт работы с такими вещами, поэтому впустую спорить не буду и останусь при своем мнении. А этот код вполовину впустую работать не будет, так как возникнет исключительная ситуация при выходе за границы цикла... Потому, что при удалении итемов значение ListBox.Items.Count уменьшается...
0
Эксперт С++
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
25.07.2010, 13:03 12
Ну значит про ваш код я наврал из-за незнания ListBox. А про подобные циклы - вы не можете запустить мой код и посмотреть, что он выведет?

Добавлено через 3 минуты
Делфи хелп:
For purposes of controlling execution of the loop, the expressions initialValue and finalValue are evaluated only once, before the loop begins.
Добавлено через 3 минуты
А ваш код, кстати, опровергает ваше же мнение. Раз происходит ошибка выхода за границы.
1
Фрилансер
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
25.07.2010, 13:03  [ТС] 13
А ты напиши в теле цикла операцию уменьшения значения верхней границы цикла и посмотри как она будет изменяться в отладчике... Именно это у меня и сделано (неявно). Ну все, я закончил флудильню... Я просто к тому, что инвариантные вычисления нужно выносить за пределы циклов. А вызов метода ListBox.Items.Count и есть то самое инвариантное вычисление... Значение ListBox.Items.Count может и не изменяться, но вычисляться оно будет каждый раз при проверке выхода параметра цикла за верхнюю границу... Просто нужно разбираться где это константа, а где занчение изменяемое и вычисляемое...
0
Эксперт С++
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
25.07.2010, 13:07 14
А ты напиши в теле цикла операцию уменьшения значения верхней границы цикла
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
{$apptype console}
 
var n,i : integer;
begin
n := 5;
for i := 1 to  n do
  begin
  writeln('boo');
  dec(n);
  end;
 
readln;
end.
Добавлено через 1 минуту
Ну почему же флудильня. Конструктивный спор, помогающий вам избавиться от (возможно, вредного) заблуждения. Разве что оффтоп немного.
1
Фрилансер
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
25.07.2010, 13:13  [ТС] 15
Да ты не путай переменные целочисленного типа в качестве верхней границы цикла и вызов метода объекта, возвращающий значение верхней границы цикла. Мы говорим о совершенно разных вещах, а ты мне доказываешь, что я заблуждаюсь...
0
Эксперт С++
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
25.07.2010, 13:18 16
Я не согласен со следующей фразой:
Цитата Сообщение от Mad_Dog Посмотреть сообщение
Вот это
Delphi
1
List.Count
есть ни что иное, как вызов метода Count объекта List, а не значение переменной List.Count. И этот метод будет вызываться при каждой итерации цикла!!!
Вы утверждаете, что метод будет вызываться при каждой итерации цикла. Я показал, что это не так.
1
Фрилансер
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
25.07.2010, 13:22  [ТС] 17
Ой, да ради Бога, продолжай заблуждаться и дальше...
0
Эксперт С++
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
25.07.2010, 13:24 18
Мда, упрямство редкостное. Ну, ради бога.
0
Фрилансер
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
25.07.2010, 13:25  [ТС] 19
Упрямство, основанное на собственном опыте...
0
Эксперт С++
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
25.07.2010, 13:28 20

Не по теме:

Черт, видимо я тоже упрямый.


Цитата Сообщение от Mad_Dog Посмотреть сообщение
Вот это
Delphi
1
List.Count
есть ни что иное, как вызов метода Count объекта List, а не значение переменной List.Count. И этот метод будет вызываться при каждой итерации цикла!!!
Можете ли вы привести из собственного опыта кусок кода, доказывающий это утверждение?
0
25.07.2010, 13:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.07.2010, 13:28
Помогаю со студенческими работами здесь

Задание. Цикл с параметром. Нужна подсказка
Есть задание. А Я никак не пойму как его делать и что требуется. Если не лень подскажите. Я не...

Цикл с параметром: определить, сколько чисел из последовательности принимает максимальное значение
Добрый день. Помогите пожалуйста с программой. Нужно составить программу используя цикл с...

Создать программу по всем 3 видам циклов...цикл с параметром,цикл с условием,цикл,и цикл с предусловием...
Найти сумму чисел 1 в квадрате до 10 c квадрате...операцию возведению в степень не использовать...

Цикл с предусловием, цикл с постусловием и цикл с параметром
Объясните пожалуйста как делать эти циклы. У меня не получается. Можете сделать как на фото, или на...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru