Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/26: Рейтинг темы: голосов - 26, средняя оценка - 4.81
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176

Не заканчивается цикл

20.08.2023, 21:42. Показов 5145. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь перестроить циклы - не выходит с цикла.
Если раскомментирую второй из вне цикл, а цикл с параметром закоментирую - всё работает.
Вообще не понимаею в чём дело - всё должно работать.
Кликните здесь для просмотра всего текста
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
    repeat
//      repeat
        for finishYcount:=0 to finishY do
        begin
 
 
 
        asm
                 JMP     logic
        end;
        logic1:
          logic := @logic2;
        goto logic4;
        logic2:
          Edge := @Edge3;
        logic := @logic3;
        logic3:
        TracerY := y - steps1;
        if TracerY < 0 then
        begin
          formula1:= stepFrequent * y + znak *trunc(y / (SummSteps));
          TracerX := RazmerX - formula1;
          if TracerX < 0 then TracerX := 0;
          TracerY := 0;
        end else TracerX := 0;
        logic4:
          steps := stepsBig;
        upperCycle:
        repeat
          if steps = 0 then
          begin
            Biger:=stepRareC;
            BFcalc := x - stepRareC+1;
            steps := SummSteps;
          end
          else
          begin
            Biger:=stepFrequentC;
            BFcalc := x - stepFrequentC+1;
          end;
          if BFcalcP^ < finishP^ then Biger := Biger+(BFcalc-finish);
          for BFCount :=1 to Biger do begin
          //lowerCycle:
          //repeat
            //////////////////////////////////////////////////////////////////////////////////////////////////
            {%REGION 'Engine'}
            asm
                     JMP     p
            end;
            p1:
            StringGrid1.Cells[px^, py^] := IntToStr(pTracerX^) + ',' + IntToStr(pTracerY^) + ',' + '1';
            //запись правого столбца
            p := @p3;
            goto p4;
            p2:
            y1:=y+1;
            //автоматическое забивание координат в местах скоса трассы
            p := @p3;
            goto p5;
            p3:
              y1:=y;
              p5:
              x1:=x-xInc;
             StringGrid1.Cells[px^, py^] := IntToStr(px1^) + ',' + IntToStr(py1^) + ',' + '0';
            //автоматическое забивание координат трассы на прямых участках
            p4:
              x:=x+xInc;
            {%ENDREGION}
 
          end;
 
          asm
                   JMP     Edge
          end;
          Edge1:
            //подсчёт шагов в первой строке - других расчётов для первой строки не требуется и знание этого значения нужно для последней строки
            Inc(steps1);
          goto Edge3;
          Edge2:
            //трассировку начальной ячейки каждого шага последней обрабатываемой строки кроме правого столбца
          if RazmerX > RazmerY then begin
                  Dec(steps1);
          TracerX := x - ( znak*sign(trunc((1+sign(y-trunc(y/(SummSteps))*(SummSteps)-steps)/2))) +  formula1)+1;
                                       if TracerX<1 then begin
                                       TracerY := y - steps1;
                                       TracerX := 0;
                                       if TracerY < 0 then TracerY := 0;
                                       end;
         end else begin
           Dec(steps1);
            TracerY := y - steps1;
            TracerX := 0;
          end;
          p := @p1;
          goto Edge4;
          Edge3:
            p := @p2;
          Edge4:
            Dec(steps);
 
        until x < 0;////////////////////////////////////////////////////////
        Inc(y);
        p := @p1;
        x := xRazmerX;
//      until y > finishY;
        end;
      Edge := @Edge2;
      finishY:=1;
    until y > yRazmerY;

вообще не пониаю.
Мне кажется я выбрал простейший путь переделки циклов, и даже тут какие-то непонятные совсем трудности. И приложу рабочий проект, если надо.
Вложения
Тип файла: zip generator_0-135_deg6.zip (108.9 Кб, 5 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.08.2023, 21:42
Ответы с готовыми решениями:

Почему не заканчивается цикл?
ребята что-то сделал не так помогите понять что именно procedure TForm1.Button1Click(Sender: TObject); var k,n,j,i:byte; ...

Цикл не заканчивается
Здраствуйте! Сейчас создаю цикл который считает по 144 байта + 10 байт заголовок для всего файла: header_size = 10 data_size = 144 ...

Цикл не заканчивается
Есть цикл: string l = File.ReadAllLines(path); for(int i = stat; i &lt; l.Length; i++) { try { //тут код ...

50
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
21.08.2023, 07:18  [ТС]
Не сказал бы. Ошибки вчера не нашёл. Сегодня буду искать после работы. Нужно найти. Читал код на ассемблере, в статье, получается что циклы с параметром быстрее чем с условиями.
0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
21.08.2023, 20:37  [ТС]
Проблема в том, что почему то, после смены значения ограничителя с 9, на 1 в этой строке
Pascal
1
finishY:=1;
- строка 108 в приведённом коде топик старта.
счётчик просто перестааёт увелчиваться, я проверил по итерациям.
Вчера вечером я думал что это мой глюк или я устал, но сейчас убелился что это именно так.
Я так понял, что тут может ответить только один человек. В том что что-то произошло с циклом понятно по тому как программа выдаёт ошибку - она делает всё верно, но не может выйти из цикла, хотя должна после первой итерации обработки последней строки карты, в строке 106, но не выходит. игрик при выоде должен равняться 10, а счётчик цикла 1 на выходе, но не выходит, а счётчик остаётся быть равным 1. Хотя сейчас ещё точку останова поставлю.

Добавлено через 11 минут
Когда я учился - это вполнилось всего один раз. Почему теперь от 0 то 1 выполняется два раза?
Бред какой-то.
0
21.08.2023, 20:42

Не по теме:

Этот код демонстрирует технику Voodoo-программирования?

0
21.08.2023, 20:45  [ТС]

Не по теме:

Цитата Сообщение от Storm Screamer Посмотреть сообщение
Этот код демонстрирует технику Voodoo-программирования?
это перевод программы с одного типа циклов на другой, просто я решил что легче всего это сделать в такой последовательности. До этого все циклы были с постусловием. Избавляюсь по максимуму от проверок условий. Читал листинги на ассемблере разных циклов, пишут что цикл с параметром быстрее чем цикл с предусловием или постусловием.

0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
21.08.2023, 21:50  [ТС]
Просто есть возможность ещё перед запуском всего этого, вычисляить сколько раз за заполнение строки прервётся самый внутренний цикл, и избавиться от
Pascal
1
       until x < 0;
101 строки кода в топик старте, заменив её с цикла с постусловием на цикл с параметром. В идеале это выравняет быстродействие кода при заполнении карты трассировки под любым углом, ну или минимизирует разницу в быстродействии.
0
Модератор
4114 / 2346 / 807
Регистрация: 15.11.2015
Сообщений: 9,328
21.08.2023, 21:53
Цитата Сообщение от Hretgir Посмотреть сообщение
Избавляюсь по максимуму от проверок условий.
Цикл (кроме бесконечного) невозможен без проверки условий.

Цитата Сообщение от Hretgir Посмотреть сообщение
пишут что цикл с параметром быстрее чем цикл с предусловием или постусловием.
И где тут цикл с параметром?
0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
21.08.2023, 22:07  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
И где тут цикл с параметром?
разве нет?
Цитата Сообщение от Hretgir Посмотреть сообщение
Pascal
1
for BFCount :=1 to Biger do begin
Для задач такого типа в языке Паскаль, имеется оператор
цикла с параметром. Этот оператор имеет вид:
for переменная:= выражение 1 to выражение 2 do оператор;
Конечно поменять второй изнутри цикл на цикл с параметром - не сама идея,идея ещё растворить между ними эту часть кода
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
 if steps = 0 then
          begin
            Biger:=stepRareC;
            BFcalc := x - stepRareC+1;
            steps := SummSteps;
          end
          else
          begin
            Biger:=stepFrequentC;
            BFcalc := x - stepFrequentC+1;
          end;
          if BFcalcP^ < finishP^ then Biger := Biger+(BFcalc-finish);
с строки 30-41 кода топик старта, разменяв
Pascal
1
until x < 0;
на два цикла, и избавившись от всех лишних проерок и расчётов, да и самого кода приведённого именно в этом сообщении. Именно эта часть и поглощает все ресурсы и мощностя, при этом являясь буквально паразитической на фоне альтернативного решения, которое гораздо быстрее и без лишних операций справится с её задачей. То-есть эта часть кода будет заменена просто двумя циклами с параметром, без какого-либо кода внутри, практически.
Разумеется эти два цикла - один вложенный и один внешний.
0
Модератор
4114 / 2346 / 807
Регистрация: 15.11.2015
Сообщений: 9,328
21.08.2023, 22:08
Hretgir, точно, не заметил.
0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
21.08.2023, 22:18  [ТС]
ничего, бывает.
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,608
22.08.2023, 01:29
Цитата Сообщение от Hretgir Посмотреть сообщение
пишут что цикл с параметром быстрее чем цикл с предусловием или постусловием.
Когда и кто это написал?
Да было когда-то так. Когда деревья были большими, трава зеленая, а оптимизатор ходил под табуретку.
0
22.08.2023, 03:58

Не по теме:

Цитата Сообщение от AzAtom Посмотреть сообщение
не заметил
Ничего удивительного. Я тоже долго выискивал глазами в этой каше заветный for, сдался и воспользовался поиском...

0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
22.08.2023, 05:29  [ТС]
А мне вот не понятно, то что при указании параметра на увеличение счётчика не может быть пропуска цикла нормального - тонкий намёк использовать уменьшение до нуля? Так то оно практичнее для таких случаев, когда счётчик используется только для его собственной работы, и больше ни для каких вычислений. Но это уже вечером.
0
 Аватар для Storm Screamer
4806 / 1394 / 116
Регистрация: 21.04.2013
Сообщений: 8,529
22.08.2023, 14:33
Цитата Сообщение от northener Посмотреть сообщение
Да было когда-то так.
Еще бы выяснить на сколько быстрее. Может быть на пару наносекунд...
0
23.08.2023, 01:47

Не по теме:

Цитата Сообщение от Storm Screamer Посмотреть сообщение
Еще бы выяснить на сколько быстрее. Может быть на пару наносекунд...
Когда деревья были очень большими, трава была очень зеленая, а оптимизатор ещё не родился, разница была заметна. Но это были времена Турбо Паскаля. Именно тогда порой ассемблерные вставки давали заметный рост скорости.

0
23.08.2023, 17:41

Не по теме:

Цитата Сообщение от northener Посмотреть сообщение
разница была заметна
Я как раз про то, что на современном железе и с современными компиляторами подобные манипуляции бессмысленны, они того не стоят. Это могло быть актуально на 286/386/486.

0
Модератор
4114 / 2346 / 807
Регистрация: 15.11.2015
Сообщений: 9,328
23.08.2023, 17:48
Лучший ответ Сообщение было отмечено northener как решение

Решение

То, что процессор мощный - не повод писать неоптимальные громоздкие программы, выполняющие элементарные действия по несколько секунд. Другой вопрос в том, что оптимизация делается, когда алгоритм отлажен и видно, что быстродействие низкое и его можно/нужно повысить.

А в условиях ТС вообще не понятно, что, и главное, зачем оптимизируется сейчас, ведь, он планирует переписать алгоритм не только на другом языке, но и для GPU, где все эти jmp под x86 идут лесом.
0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
23.08.2023, 21:10  [ТС]
Ну джампов останется только 2, тот что в центре движка, и тот что в области logic.
И сейчас не преследуется цель оптимизировать особо кроме как создать циклы нужные, некоторые заменить, и сделать все циклы безусловными выполняя предварительный расчёт всего один раз перед запуском движка. Джампы есть в GPU, я узнавал.От двух штук я не желаю избавляться. Собственно переделка циклов теперь только и связана будет с тем, что нужно переделать их все на безусловные. Поэтому я вообще считаю что выбрал наилегчайший путь - сначала написать убогий пусть даже код, но имея возможность отладить при этом каждую деталь, а уже потом, когда система проработана - максимально перенести всё в предварительные расчёты. При этом может исчезнуть и прыжок logic вместе со всей областью и остаться только один - в самом центре циклов. С отрывом и урывками очень сложно сразу прямо писать так как надо. Поэтому и предстоит ещё потом аж перевод на запуск под GPU.

Не будь лайфхака, который в общем-то все расчёты сводил-бы по объёму работ почти к нулю с возрастанием объёма обрабатываемых данных - конечно я не стал бы так мучаться, но раз он есть - нужно всё проработать и это будет полезный опыт.
0
Модератор
4114 / 2346 / 807
Регистрация: 15.11.2015
Сообщений: 9,328
24.08.2023, 02:33
Безусловные циклы - это новое слово в программировании. Можно взглянуть на такой? В свете данного алгоритма, конечно.
0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
24.08.2023, 07:26  [ТС]
Циклы с параметром, безусловные - моё личное видение их должного технического исполнения, поскольку я не уверен в том, что циклы с параметром именно безусловные, в тонкости работы процессора и ассемблера их организации не вникал, но понял что это что то около должного. В свете данного алгоритма конечно увидите, но это где-то в течении недели, так как у меня очень маленький таймпрайм, да и силы вечером те что остаются после дня.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.08.2023, 07:26
Помогаю со студенческими работами здесь

Цикл не заканчивается
Цикл не заканчивается,хотя должен быть конечным.Кол-во циклов должно быть до 25,н это не точно. Цикл должен заканчиваться ,когда одна из...

Почему не заканчивается цикл?
При вводе нужного предложения и символа ставлю чтобы i=49, так как считаю, что при следующем заходе работа цикла прекратится. Пробовал...

Почему цикл не заканчивается ?
Это участок моего кода, первый цикл с условием b!=&quot;0&quot; не срабатывает, почему это так работает и как можно исправить? Заранее спасибо;) ...

Цикл почему-то не заканчивается.
Значит идея такая пока не сгенерируется число =2 цикл будет повторяться. Но когда число =2 цикл все равно не заканчивается. Подскажите...

Почему цикл не заканчивается?
Здравствуйте! Не могу понять, почему программа не выходит из цикла. В чем здесь ошибка и как ее исправить? // УСЛОВИЕ: y = 1.3 *...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru