Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Рейтинг: 1.00. Голосов: 1.

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

Запись от Hretgir размещена 26.02.2018 в 21:53
Обновил(-а) Hretgir 04.03.2018 в 01:54

Чтобы долго не умничать попробую вкратце.
Пишу калькулятор, формулы вводятся обычным текстом, потом они переводятся в команды и прочее, в общем суть не в этом, суть в том, что работаю пока над частью открытия и сохранения проекта, и в общем у меня вообще всё будет делать одна процедура, так как я иду по пути написания самомодифицирующихся программ, потому что собираюсь позднее написать нейросеть работающую с обратным волновым алгоритмов в купе с прямым.
Суть не в этом, ООП конечно это нечто - пришлось изобрести косвенную рекурсию, так как оператор Break , или команда или что-бы это не было - для меня её применение выглядит криво, однобоко, в общем как-то крабовато. Это как-бы запись - реплика на исключение оператора GOTO. Реплика такая, что кто-то не осилил, и думал что сделал то, что не осилит никто (убрал оператор GOTO) - он снова не осилил, не смог два раза. Я всё равно переизобрёл оператор GOTO, потому что прямая рекурсия - не сработала-бы, программа выдала-бы ошибку. Ладно - жуткая портянка, слабонервным - не читать.
Втюхаю я сейчас конечно сюда портянку такую страшную, в общем в неё вникать не надо - главное обозресть процедуру
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
procedure ciclUpravlenija;
begin
while CounteR<Finish do
begin
ProcArr[0];//переходит в нужную позицию в списке строк
while CounteR1<Etap do
begin
ProcArr[1];//вызов цикла до конца финала
end;
end;
ProcArr[6];
end;
Эта процедура будет управлять вообще любым процессом выполнения любой задачи поставленной пользователем, мне так надо - я делаю так.
А вот реализация косвенной рекурсии в строке с условным оператором - когда вызывается из внешнего цикла эта процедура
Pascal
1
2
3
4
5
6
Procedure EtapReadOpenProgect1;//
begin
inc(CounteR);
CounteR1:=0;
if CounteR = Finish then  CounteR1:=13;//if CounteR = Finish then  CounteR1:=Etap;
end;
Я убрал лишний код, потому как он сбивает с толку, надеюсь 18 строк кода осилить - не составит труда крутым программистам.
Теперь возвращаю - слишком много возмущений по поводу кода - надо вернуть, вообще он на стадии реструктуризации открытия и сохранения проекта, потому как апгрейды проще будет делать если структуру файла и массива немного изменить, я размещаю как есть на стадии реструктуризации - боюсь что опция редактировать сообщение временна
Кликните здесь для просмотра всего текста
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
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;

а про гавнокод я ещё завтра поравлю, и про события давних лет напомню - про ЮТ ПБ. удалил в торопях. а я это обещал более не удалять... да даже сейчас напишу: в детстве предложил резистор в качестве ячейки памяти для ПЗУ - прислали на рацуху свидетельство, потом журнал пришёл с программатором ПЗУ на фото, прикольно чё...
потом ещё, потом ещё...и всё стало гавном - любое изобретение моё в инетах - гавно. прошивайте дальше ПЗУ катушками, постройте себе заводы отдельные - для просветлённых личностей. государства отдельные. от вас только напряги и никакой пользы, вот например ошибку искал Возникает ошибка при применении рекурсии. от вас ждать хорошего не стоит - мне это понятно, и вас никто не боится, с вашими параллельными угрозами.
Размещено в Без категории
Просмотров 955 Комментарии 26
Всего комментариев 26

Комментарии

  1. Старый комментарий
    Вчера не было ошибок - сегодня проблема, отладчик встал не с той ноги. Код выполняется, ошибка после выполнения всего кода. Комп перезагрузить попробовать.
    Запись от Hretgir размещена 27.02.2018 в 10:14 Hretgir вне форума
    Обновил(-а) Hretgir 27.02.2018 в 10:38
  2. Старый комментарий
    Аватар для Usaga
    Так в чём заключается ваша "косвенная рекурсия" и почему вы так уверены, что это авторы языка что-то не осилили, а не вы?
    Запись от Usaga размещена 27.02.2018 в 11:53 Usaga вне форума
  3. Старый комментарий
    Рекурсия в том, что я вызвал строку с началом цикла не делая этого напрямую-в обход (в общем я сделал для программы подлог, но об ээтом знаю только я - постороннему читателю эти строки могут просто вынести мозг, точнее - одна строка.), почему не осилили - они с этим боролись : с переходами GOTO, якобы текст проги без этого лучше читается, а на самом деле мои проги например станут ещё труднее читабельными, я справлюсь - а вот они вряд-ли. Поэтому я и пишу -"они не смогли".
    Вот этим
    Pascal
    1
    
    if CounteR = Finish then  CounteR1:=13;
    я заменил оператор GOTO, кто это поймёт? я понимаю, поймут-ли это авторы искоренения GOTO- тот ещё вопрос. я уже начи наю понимать - этого никто не понял, машина поняла только что ей делать. Стало легче читать код без GOTO? А это только начало. Дальше будут трюки намного интереснее. И не потому что я так хочу - просто кто-то решил что должно быть так, хорошо - пусть будет так, и он увидит насколько это хорошо он придумал.
    Запись от Hretgir размещена 27.02.2018 в 14:46 Hretgir вне форума
    Обновил(-а) Hretgir 27.02.2018 в 14:53
  4. Старый комментарий
    Аватар для Avazart
    Для того что бы читалось, нужно научится форматировать код и оформлять его теги для подсветки, называть переменные.
    Куда там до искоренения goto.
    Запись от Avazart размещена 28.02.2018 в 10:06 Avazart вне форума
    Обновил(-а) Avazart 28.02.2018 в 10:08
  5. Старый комментарий
    Аватар для Usaga
    GOTO нарушал структуру кода, делал его запутанным как клубок ниток. Поэтому данный оператор так невзлюбили. Если вы этот оператор заменили какой-то байдой неявной, то это ещё хуже. То, что ваши проги становятся ещё хуже при отказе от этого оператора - это проблема ваших навыков разработчика, а не клёвости оператора GOTO.

    Чем замудрённее и запутанее ваш код, тем хуже. Если вы адЪ в коде устраиваете, чтобы обойтись без GOTO, то это того тупо не стоит.
    Запись от Usaga размещена 28.02.2018 в 10:10 Usaga вне форума
  6. Старый комментарий
    Аватар для SSC
    Начинающие программисты они всегда более внимательные, сразу находят ошибки компиляторов и с какой ноги они начинают работать.
    А таким как Avazart, уже практически не дано увидеть ошибку компилятора, он пессимист, и сразу начинает винить руки и голову программиста. (Про Usaga не знаю, к сожалению не видел/или не помню его сообщений на форуме)

    Когда в 90 году переходил с Fortrana на С, тоже сначала оператора GOTO не хватало, а потом прошло, и даже в на Fortranе стал писать без GOTO. (Уже тогда была конструкция if-then-else-end)
    GOTO-шная болезнь она проходит, инкубационный период от 3 до 9 месяцев. Если через год "инфекция" не уйдет, то может стоит задуматься об отказе себе в программировании. Профессий много, можно всегда себе найти ту, где у Вас больший талант.
    Запись от SSC размещена 28.02.2018 в 11:07 SSC вне форума
  7. Старый комментарий
    Аватар для Avazart
    Цитата:
    А таким как Avazart,
    Такие как Avazart видят гавнокод и дальше не читают, и не важно что выдает компилятор.
    Запись от Avazart размещена 28.02.2018 в 13:19 Avazart вне форума
  8. Старый комментарий
    Цитата:
    Сообщение от Avazart Просмотреть комментарий
    Такие как Avazart видят гавнокод и дальше не читают, и не важно что выдает компилятор.
    этот гавнокод, как ты говоришь отталкивается от кибернетики (у него есть теория из кибернетики, ты её не знаешь, а всё что ты не знаешь - для тебя гавно, и кибернетика для тебя не наука), а то что ты почитаешь - только от твоей личной точки зрения и ещё некоторой ГРУППЫ людей. для меня отсутствие оператора GOTO - вообще не проблема, я нашёл ему замену отличную даже для циклов. можно было сделать процедурус прямой рекурсией, а смысл? в чём смысл? только в том, чтобы тебе это было приятнее читать? и там прямая рекурсия-выдала-бы ошибку, она не сработала-бы. поэтому сделано было так.
    Запись от Hretgir размещена 28.02.2018 в 13:24 Hretgir вне форума
    Обновил(-а) Hretgir 28.02.2018 в 13:29
  9. Старый комментарий
    Аватар для Usaga
    Какая разница от чего отталкивает говно, если оно говно? Оно же от "кибернетики" меньше пахнуть не станет.
    Запись от Usaga размещена 28.02.2018 в 13:25 Usaga вне форума
  10. Старый комментарий
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    Какая разница от чего отталкивает говно, если оно говно? Оно же от "кибернетики" меньше пахнуть не станет.
    гавно - это твое мнение, поскольку рождается в соответственном органе, и объяснений никаких не требует - конечный продукт не требующий никаких уточнений и объясниений - всё чётко и ясно: пожевал, переварил - не переварил, результат один.
    Запись от Hretgir размещена 28.02.2018 в 13:30 Hretgir вне форума
    Обновил(-а) Hretgir 28.02.2018 в 13:32
  11. Старый комментарий
    Аватар для Usaga
    Угу, ясно) Если уж моём мнение в органе родилось, то откуда выпал ваш код, тогда?)
    Запись от Usaga размещена 28.02.2018 в 13:39 Usaga вне форума
  12. Старый комментарий
    Аватар для Usaga
    Или у вас всё проще: свой "код" не пахнет?)
    Запись от Usaga размещена 28.02.2018 в 13:41 Usaga вне форума
  13. Старый комментарий
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    откуда выпал ваш код, тогда?)
    а ты разве не думал об этом когда писал слово -"гавнокод"? нет? ну значит у тебя действительно что-то не так.
    Запись от Hretgir размещена 28.02.2018 в 13:41 Hretgir вне форума
  14. Старый комментарий
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    всё проще: свой "код" не пахнет?)
    выше моё сообщение, цитата как раз тебя больше касается.
    Запись от Hretgir размещена 28.02.2018 в 13:42 Hretgir вне форума
  15. Старый комментарий
    Аватар для Usaga
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    пффффффф
    Usaga, в своем блоге на личности переходите, раз не можете без этого. Я не написал об авторах модернизации "GOTO DELETE" - ДВАЖДЫ НЕ СУМЕВШИЕ я написал - "дважды не смогли":
    а) я не перешёл на личности;
    б)-будет ещё третий, четвёртый, бесконечное множество
    раз, я смогу ещё много, на фоне адекватности сей коллегии, сия коллегия себя проявляет во всей красе-она даже в личные записи в инете гадить заходит, на 3DTooday - в личные дневники, отсюда у меня столько уверенности в себе. Там где не пост - можно зайти и задать вопрос, не более, я даже могу посмеяться над вашими кондидатами физикоматематических - но я этого не делаю в их дневниках, когда глупости их читаю - зашёл почитал, не хочу спорить - и ушёл. Я могу раскатать Фрейда в прах, но я этого не делаю - я не отбираю чужих аудиторий. Но если вот такие как вы будут просить настойчиво - я отберу у них всё, разом, и мне для этого ничего не надо делать, вы сами стремитесь своим хамством, чтобы потом просто отказаться от всего безвозвратно. Это не мои действия будут - а последствия ваших. Только ваша беда в том, что вы считаете что у вас кто-то хочет что-то отобрать, а не так: ваше ВСЁ будет потом выкинуто и раздавлено, оно никому не нужно, кроме вас, просто вы в своё всё записываете людей как ВЕЩИ, так что благодарных вам будет - большое множество оных, коих подобные вам уже записали в личное имущество.

    Комментарий от Usaga:
    Hretgir очень не красиво с вашей стороны редактировать чужие комментарии выдавая свою писанину за мою. Могли бы новый комментарий оставить.

    Я не переходил на личности. Мне было очень интересно, почему вы такого высокого мнения о своих решениях и такого низкого об авторах языка.

    Цитата:
    Но если вот такие как вы будут просить настойчиво - я отберу у них всё, разом, и мне для этого ничего не надо делать, вы сами стремитесь своим хамством, чтобы потом просто отказаться от всего безвозвратно
    Что вы отбирать собрались? Возможность созерцать ваш говнокод? Вы этим меня напугать хотите?

    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    Что вы отбирать собрались? Возможность созерцать ваш говнокод? Вы этим меня напугать хотите?
    к предмету темы имеют несколько строк которые ты не осилил
    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    procedure ciclUpravlenija;
    begin
    while CounteR<Finish do
    begin
    ProcArr[0];//переходит в нужную позицию в списке строк
    while CounteR1<Etap do
    begin
    ProcArr[1];//вызов цикла до конца финала
    end;
    end;
    ProcArr[6];
    end;
    Pascal
    1
    2
    3
    4
    5
    6
    
    Procedure EtapReadOpenProgect1;//
    begin
    inc(CounteR);
    CounteR1:=0;
    if CounteR = Finish then  CounteR1:=13;
    end;
    вы скоро сами себя лишите возможности коментов, сначала вас будет "пучить", а потом вам разорвёт орган где рождаются ваши гениальные мысли. и я к этому отношения иметь не буду - это последствия ваших-же действий, сознательных причём. вспоминается Маслоу...
    Цитата:
    ...Так постепенно, шаг за шагом человек приходит к потребности в саморазвитии — наивысшей из них.
    .
    Каждый видимо по своему к этому приходит...тут я ничего не могу поделать. 18 строк кода и сколько вони по случаю их появления в моём блоге..


    Снова от Usaga:
    Вы правы. Зачем вам про говнокод пишу. Что это изменит? Как обычны - ничего. Вы - молодец, двигаете прогресс! Продолжайте, пожалуйста, в том же духе.
    Запись от Usaga размещена 28.02.2018 в 14:02 Usaga вне форума
    Обновил(-а) Usaga 01.03.2018 в 18:09
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru