Форум программистов, компьютерный форум, киберфорум
Hrethgir
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Косвенная рекурсия.

Запись от Hrethgir размещена 26.02.2018 в 21:53
Показов 5551 Комментарии 26

Чтобы долго не умничать попробую вкратце.
Пишу калькулятор, формулы вводятся обычным текстом, потом они переводятся в команды и прочее, в общем суть не в этом, суть в том, что работаю пока над частью открытия и сохранения проекта, и в общем у меня вообще всё будет делать одна процедура, так как я иду по пути написания самомодифицирующихся программ, потому что собираюсь позднее написать нейросеть работающую с обратным волновым алгоритмов в купе с прямым.
Суть не в этом, ООП конечно это нечто - пришлось изобрести косвенную рекурсию, так как оператор Break , или команда или что-бы это не было - для меня её применение выглядит криво, однобоко, в общем как-то крабовато. Это как-бы запись - реплика на исключение оператора GOTO. Реплика такая, что кто-то не осилил, и думал что сделал то, что не осилит никто (убрал оператор GOTO) - он снова не осилил, не смог два раза. Я всё равно переизобрёл оператор GOTO, потому что прямая рекурсия - не сработала-бы, программа выдала-бы ошибку. Ладно - жуткая портянка, слабонервным - не читать.
Втюхаю я сейчас конечно сюда портянку такую страшную, в общем в неё вникать не надо - главное обозресть процедуру
[PASCAL]procedure ciclUpravlenija;
begin
while CounteR<Finish do
begin
ProcArr[0];//переходит в нужную позицию в списке строк
while CounteR1<Etap do
begin
ProcArr[1];//вызов цикла до конца финала
end;
end;
ProcArr[6];
end;[/PASCAL]
Эта процедура будет управлять вообще любым процессом выполнения любой задачи поставленной пользователем, мне так надо - я делаю так.
А вот реализация косвенной рекурсии в строке с условным оператором - когда вызывается из внешнего цикла эта процедура
[PASCAL]Procedure EtapReadOpenProgect1;//
begin
inc(CounteR);
CounteR1:=0;
if CounteR = Finish then CounteR1:=13;//if CounteR = Finish then CounteR1:=Etap;
end;[/PASCAL]
Я убрал лишний код, потому как он сбивает с толку, надеюсь 18 строк кода осилить - не составит труда крутым программистам.
Теперь возвращаю - слишком много возмущений по поводу кода - надо вернуть, вообще он на стадии реструктуризации открытия и сохранения проекта, потому как апгрейды проще будет делать если структуру файла и массива немного изменить, я размещаю как есть на стадии реструктуризации - боюсь что опция редактировать сообщение временна
[SPOILER][PASCAL]procedure TForm1.OpenSaveProject;
var
stroka:string;
CounteR, CounteR1,Finish,Etap, Elements:integer;
LSinAr:TStringList;
LSinAr1:TStringList;
a,b:integer;

procedure Zaglishka;
begin
end;
{%REGION открытие проекта}

procedure After;
begin
LSinAr.Free;
//proectInform.Free;
end;


Procedure AddListInArr;//при открытиии проекта----------------------
begin
//
LSinAr.Add(stroka);
if LSinAr.Count=Etap then
begin
SetLength(ListArr[a],b+1);
ListArr[a,b]:=TStringList.Create;
ListArr[a,b].Assign(LSinAr);////////////////////////////////////////////////////
Memo1.Lines.Add(IntToStr(LSinAr.Count)+'размер');
Memo1.Lines.AddStrings(LSinAr);
//отладка///////////////////////////////////////////////////////////////////
inc(a);
// b:=0;//......................................................................
LSinAr.Free;
LSinAr:=TStringList.Create;
end;
inc(CounteR);
inc(CounteR1);
end;

Procedure AddListArrFromIn;
begin
if a=Elements then begin
a:=0;
inc(b);
// AddListArrFromIn;//вот эта строка до изменений почему-то не давала сбоев, а должна была давать//закоментил, чудеса
end;
ProcArr[5];
end;
Procedure EtapReadOpenProgect;//при открытиии проекта-----------------------------
begin
Etap:=StrToInt(proectInform[CounteR]);///////////////////////////////////////////////////////////////////
inc(CounteR);
CounteR1:=0;
end;
Procedure StrocaReadOpenProgect;//при открытиии проекта----------------------------
begin
stroka:=proectInform[CounteR];
end;
{%ENDREGION}

{%REGION сохранение проекта}

procedure After1;
begin
proectInform.SaveToFile(opendirectory+'/info.txt');
LSinAr.Free;
proectInform.Free;
end;

Procedure AddListInArr1;//при сохранении проекта
begin

end;

Procedure AddListArrFromIn1;
begin
// ProcArr[5];
end;
Procedure StrocaReadOpenProgect1;//
var
LSinArcount:integer;
begin
LSinAr.Assign(ListArr[CounteR1,CounteR]);
//отладка
Memo1.Lines.Add('СОХРАНЕНИЕ');/////////////////////////////////////////
Memo1.Lines.AddStrings(LSinAr);
LSinArcount:=LSinAr.Count;
stroka:=IntToStr(LSinArcount);//proectInform[CounteR];
proectInform.Add(stroka);
proectInform.AddStrings(LSinAr);
LSinAr.Free;
LSinAr:=TStringList.Create;
//отладка
inc(CounteR1);
end;
Procedure EtapReadOpenProgect1;//
begin
inc(CounteR);
CounteR1:=0;
if CounteR = Finish then CounteR1:=13;
end;

{%ENDREGION}

Procedure inCicle1;//внешний цикл
begin
ProcArr[2];
end;
Procedure inCicle2;//внутренний цикл
begin
ProcArr[3];//чтение строки
ProcArr[4];//запись строки
end;
procedure ciclUpravlenija;
begin
while CounteR<Finish do
begin
ProcArr[0];
while CounteR1<Etap do
begin
ProcArr[1];
end;
end;
ProcArr[6];
end;
{%REGION открытия проекта}
procedure preparationRead;
begin
SetLength(ProcArr,7);
ProcArr[0]:=@inCicle1;
ProcArr[1]:=@inCicle2;
ProcArr[2]:=@EtapReadOpenProgect;
ProcArr[3]:=@StrocaReadOpenProgect;
ProcArr[4]:=@AddListArrFromIn;
ProcArr[5]:=@AddListInArr;
ProcArr[6]:=@After;
Finish:=proectInform.count;
Elements:=StrToInt(proectInform[0]);
CounteR:=1;
SetLength(ListArr,Elements);
a:=0;
b:=0;
LSinAr:=TStringList.Create;
LSinAr1:=TStringList.Create;
end;
{%ENDREGION}
{%REGION сохранения проекта}
procedure preparationSave;
begin
proectInform:= TStringList.Create;
LSinAr:=TStringList.Create;
SetLength(ProcArr,7);
ProcArr[0]:=@inCicle1;
ProcArr[1]:=@inCicle2;
ProcArr[2]:=@EtapReadOpenProgect1;
ProcArr[3]:=@StrocaReadOpenProgect1;
ProcArr[4]:=@AddListArrFromIn1;
ProcArr[5]:=@AddListInArr1;
ProcArr[6]:=@After1;
Finish:=Length(ListArr[1]);
Etap:=13;
CounteR:=-1;
CountProc:=0;
SetLength(ListArr,13);
a:=0;
b:=0;
end;
{%ENDREGION}
begin
if SelectDirectoryDialog1.Execute then
begin
with SelectDirectoryDialog1 do
begin
proectInform:=TStringList.Create;
opendirectory:=FileName;
proectInform.LoadFromFile(opendirectory+'/info.txt');
stroka:= proectInform[0];
end;
SetLength(ProcArr,2);
ProcArr[0]:=@preparationRead;
ProcArr[1]:=@preparationSave;
ProcArr[CountProc];
ciclUpravlenija;
end;
end; [/PASCAL][/SPOILER]
а про гавнокод я ещё завтра поравлю, и про события давних лет напомню - про ЮТ ПБ. удалил в торопях. а я это обещал более не удалять... да даже сейчас напишу: в детстве предложил резистор в качестве ячейки памяти для ПЗУ - прислали на рацуху свидетельство, потом журнал пришёл с программатором ПЗУ на фото, прикольно чё...
потом ещё, потом ещё...и всё стало гавном - любое изобретение моё в инетах - гавно. прошивайте дальше ПЗУ катушками, постройте себе заводы отдельные - для просветлённых личностей. государства отдельные. от вас только напряги и никакой пользы, вот например ошибку искал [url]https://www.cyberforum.ru/lazarus/thread2204371.html[/url]. от вас ждать хорошего не стоит - мне это понятно, и вас никто не боится, с вашими параллельными угрозами.
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 26
Комментарии
  1. Старый комментарий
    Слабенько ребята, слабенько, на известных порталах меня меня посильнее троллили. Ну ладно, хоть так, пойдёт :).
    Запись от Hrethgir размещена 16.03.2018 в 22:06 Hrethgir вне форума
  2. Старый комментарий
    Аватар для Avazart
    Вы сами себе злобный троль, так что с этой задачей успешно сами справляетесь.
    Запись от Avazart размещена 16.03.2018 в 23:22 Avazart вне форума
  3. Старый комментарий
    [QUOTE=Avazart;bt17836]Вы сами себе [/QUOTE]
    а ты уже в своём глазу бревна не видишь. а мне ты напоминаешь мошку в моём глазу - это абстракция. с твоим поведением ты можешь не выкать - не притворяйся, всё равно палево, тебе только и не понятно этого, ну может попросишь кого ещё - мне по фигу, я втвоём блоге не отписываюсь, мне пофиг на тебя и кто здесь ещё появится.
    [B]даже если ты за меня слово где-то хорошее скажешь - пусть тебе будет обязан только тот, кому ты его скажешь, но не я.[/B]
    и это касается всех, кого я знаю на этом форуме. пусть с ними будет так-же. я их не желаю знать и их дел.правильнее будет так - я не обязанным кому-либо за лестные отзывы, пусть эта категория людей останется обязаной сама перед собой и сама несёт ответственность за свои деяния и свои отзывы. меня спросили - я пояснил как мог, я не стал по скотски поступать, а дальше дело не моих рук, это уже сами...
    вот как мы разошлись на этом форуме со всеми форумчанами - пусть это и останется печатью наших отношений, а время расставит всё на свои места. я тут уже не участник, за мной одна схема только и всё.
    Запись от Hrethgir размещена 18.03.2018 в 23:03 Hrethgir вне форума
  4. Старый комментарий
    Аватар для magirus
    на известных порталах меня меня посильнее троллили
    ты не задумывался, что ты тут просто нафиг никому не сдался, чтобы троллить тебя? слабоват ты...
    Запись от magirus размещена 19.03.2018 в 00:36 magirus вне форума
  5. Старый комментарий
    Аватар для Usaga
    Нафиг ты кому нужен, троллить тебя...
    Запись от Usaga размещена 19.03.2018 в 07:34 Usaga вне форума
  6. Старый комментарий
    Аватар для Avazart
    и это касается всех, кого я знаю на этом форуме.
    вот как мы разошлись на этом форуме со всеми форумчанами - пусть это и останется печатью наших отношений, а время расставит всё на свои места.
    Прям Д'Артаньян ...

    мне пофиг на тебя и кто здесь ещё появится.
    С таким подходом пишите свои опусы на туалетной бумаге, а не на форуме.
    Запись от Avazart размещена 21.03.2018 в 20:04 Avazart вне форума
 
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru