Косвенная рекурсия.
Запись от 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
Комментарии
-
Слабенько ребята, слабенько, на известных порталах меня меня посильнее троллили. Ну ладно, хоть так, пойдёт :).Запись от Hrethgir размещена 16.03.2018 в 22:06
-
Запись от Avazart размещена 16.03.2018 в 23:22
-
[QUOTE=Avazart;bt17836]Вы сами себе [/QUOTE]
а ты уже в своём глазу бревна не видишь. а мне ты напоминаешь мошку в моём глазу - это абстракция. с твоим поведением ты можешь не выкать - не притворяйся, всё равно палево, тебе только и не понятно этого, ну может попросишь кого ещё - мне по фигу, я втвоём блоге не отписываюсь, мне пофиг на тебя и кто здесь ещё появится.
[B]даже если ты за меня слово где-то хорошее скажешь - пусть тебе будет обязан только тот, кому ты его скажешь, но не я.[/B]
и это касается всех, кого я знаю на этом форуме. пусть с ними будет так-же. я их не желаю знать и их дел.правильнее будет так - я не обязанным кому-либо за лестные отзывы, пусть эта категория людей останется обязаной сама перед собой и сама несёт ответственность за свои деяния и свои отзывы. меня спросили - я пояснил как мог, я не стал по скотски поступать, а дальше дело не моих рук, это уже сами...
вот как мы разошлись на этом форуме со всеми форумчанами - пусть это и останется печатью наших отношений, а время расставит всё на свои места. я тут уже не участник, за мной одна схема только и всё.Запись от Hrethgir размещена 18.03.2018 в 23:03
-
Запись от magirus размещена 19.03.2018 в 00:36
-
Запись от Usaga размещена 19.03.2018 в 07:34
-
Запись от Avazart размещена 21.03.2018 в 20:04


