Форум программистов, компьютерный форум, киберфорум
Наши страницы
Hretgir
Войти
Регистрация
Восстановить пароль
Рейтинг: 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;

а про гавнокод я ещё завтра поравлю, и про события давних лет напомню - про ЮТ ПБ. удалил в торопях. а я это обещал более не удалять... да даже сейчас напишу: в детстве предложил резистор в качестве ячейки памяти для ПЗУ - прислали на рацуху свидетельство, потом журнал пришёл с программатором ПЗУ на фото, прикольно чё...
потом ещё, потом ещё...и всё стало гавном - любое изобретение моё в инетах - гавно. прошивайте дальше ПЗУ катушками, постройте себе заводы отдельные - для просветлённых личностей. государства отдельные. от вас только напряги и никакой пользы, вот например ошибку искал http://www.cyberforum.ru/lazarus/thread2204371.html. от вас ждать хорошего не стоит - мне это понятно, и вас никто не боится, с вашими параллельными угрозами.
Размещено в Без категории
Просмотров 974 Комментарии 26
Всего комментариев 26
Комментарии
  1. Старый комментарий
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    Бредовое высказывание) ваше поделие - произведение искусства, а авторы паскаля - имбецилы на вашем фоне
    вовсе не кажется - моя задача была обойти отсутствие оператора GOTO, о чём я и писал
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    Гордитесь собой.
    это больше у вас получается, вы даже прочтением текста не отягощаетесь, к вам ближе убеждение, утверждение и самовыражение. за последним вы собственно сюда и пожаловали, если нет - напишите у себя в блоге что-нибудь, а потом цитируйте, если будет что цитировать.
    Запись от Hretgir размещена 28.02.2018 в 14:42 Hretgir вне форума
    Обновил(-а) Hretgir 28.02.2018 в 14:46
  2. Старый комментарий
    Аватар для Avazart
    Цитата:
    а то что ты почитаешь - только от твоей личной точки зрения и ещё некоторой ГРУППЫ людей.
    Форматировать код, давать вменяемые имена и оформлять код в теги, это как бы не точка зрения, а проявление уважения к читателю.
    Запись от Avazart размещена 28.02.2018 в 20:56 Avazart вне форума
    Обновил(-а) Avazart 28.02.2018 в 20:59
  3. Старый комментарий
    Цитата:
    Сообщение от Avazart Просмотреть комментарий
    Форматировать код, давать вменяемые имена и оформлять код в теги, это как бы не точка зрения, а проявление уважения к читателю.
    Я ничего не продавал и не рекламировал, поэтому сначала научитесь уважать окружающих, тогда и дойдёт до того, что я буду уважать читателя, а пока - не нравится не читайте. У вас уже претензий в строках больше чем строк того кода.
    Для вас это много кода?
    Pascal
    1
    2
    3
    4
    5
    6
    
    Procedure EtapReadOpenProgect1;//
    begin
    inc(CounteR);
    CounteR1:=0;
    if CounteR = Finish then  CounteR1:=13;
    end;
    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;
    символов в ваших коментах уже намного больше. вы уже давно рекорды бьёте с вашим единомышленником. 18 строк, я посчитал их для вас, это причина ваших претензий - 18 строк кода.
    Запись от Hretgir размещена 01.03.2018 в 10:24 Hretgir вне форума
    Обновил(-а) Hretgir 01.03.2018 в 10:48
  4. Старый комментарий
    Аватар для Avazart
    Цитата:
    Я ничего не продавал и не рекламировал,
    Тогда удалите глупую запись в блоге и закроем разговор.

    Цитата:
    поэтому сначала научитесь уважать окружающих, тогда и дойдёт до того, что я буду уважать читателя,
    Я один не улавливаю логики в Ваших предложениях?

    Цитата:
    8 строк, я посчитал их для вас, это причина ваших претензий - 18 строк кода.
    Хорошо что считать умеете, осталось научится расставлять отступы.

    Кликните здесь для просмотра всего текста
    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    Procedure EtapReadOpenProgect1;
    begin
        inc(CounteR);
        CounteR1:=0;
        if CounteR = Finish then  
           CounteR1:=13;
    end;
     
     
    procedure ciclUpravlenija;
    begin
      while CounteR<Finish do
      begin
          ProcArr[0];//переходит в нужную позицию в списке строк
          while CounteR1<Etap do
          begin
             ProcArr[1];//вызов цикла до конца финала
          end;
      end;
      ProcArr[6];
    end;


    Ну и именовать переменные, использовать перечисления итд.

    Цитата:
    Для вас это много кода?
    Мне достаточно одной строчки:

    Pascal
    1
    
    procedure ciclUpravlenija;
    Человек пишущий транслитом ...
    Запись от Avazart размещена 01.03.2018 в 22:41 Avazart вне форума
    Обновил(-а) Avazart 01.03.2018 в 22:50
  5. Старый комментарий
    Цитата:
    Сообщение от Avazart Просмотреть комментарий
    Тогда удалите глупую запись в блоге и закроем разговор.
    Я его уже закрыл, на одном замечании - нужно было оставить использование оператора GOTO в рамках цикла, процедуры (локально), но я хныкать не стану - я уже придумал антидот от действий вершителей, потом ещё будут антидоты, вообще запись надо было назвать "Рецикл", это не рекурсия, почти рекурсия - но такое определение слишком абстрактное. Продолжайте бить рекорды в одиночку. Только я передумал - я возвращаю код на место, чтобы вам было не скучно быть рекорды.
    Запись от Hretgir размещена 02.03.2018 в 16:07 Hretgir вне форума
    Обновил(-а) Hretgir 02.03.2018 в 16:18
  6. Старый комментарий
    Слабенько ребята, слабенько, на известных порталах меня меня посильнее троллили. Ну ладно, хоть так, пойдёт .
    Запись от Hretgir размещена 16.03.2018 в 22:06 Hretgir вне форума
  7. Старый комментарий
    Аватар для Avazart
    Вы сами себе злобный троль, так что с этой задачей успешно сами справляетесь.
    Запись от Avazart размещена 16.03.2018 в 23:22 Avazart вне форума
  8. Старый комментарий
    Цитата:
    Сообщение от Avazart Просмотреть комментарий
    Вы сами себе
    а ты уже в своём глазу бревна не видишь. а мне ты напоминаешь мошку в моём глазу - это абстракция. с твоим поведением ты можешь не выкать - не притворяйся, всё равно палево, тебе только и не понятно этого, ну может попросишь кого ещё - мне по фигу, я втвоём блоге не отписываюсь, мне пофиг на тебя и кто здесь ещё появится.
    даже если ты за меня слово где-то хорошее скажешь - пусть тебе будет обязан только тот, кому ты его скажешь, но не я.
    и это касается всех, кого я знаю на этом форуме. пусть с ними будет так-же. я их не желаю знать и их дел.правильнее будет так - я не обязанным кому-либо за лестные отзывы, пусть эта категория людей останется обязаной сама перед собой и сама несёт ответственность за свои деяния и свои отзывы. меня спросили - я пояснил как мог, я не стал по скотски поступать, а дальше дело не моих рук, это уже сами...
    вот как мы разошлись на этом форуме со всеми форумчанами - пусть это и останется печатью наших отношений, а время расставит всё на свои места. я тут уже не участник, за мной одна схема только и всё.
    Запись от Hretgir размещена 18.03.2018 в 23:03 Hretgir вне форума
  9. Старый комментарий
    Аватар для magirus
    Цитата:
    на известных порталах меня меня посильнее троллили
    ты не задумывался, что ты тут просто нафиг никому не сдался, чтобы троллить тебя? слабоват ты...
    Запись от magirus размещена 19.03.2018 в 00:36 magirus вне форума
  10. Старый комментарий
    Аватар для Usaga
    Нафиг ты кому нужен, троллить тебя...
    Запись от Usaga размещена 19.03.2018 в 07:34 Usaga вне форума
  11. Старый комментарий
    Аватар для Avazart
    Цитата:
    и это касается всех, кого я знаю на этом форуме.
    Цитата:
    вот как мы разошлись на этом форуме со всеми форумчанами - пусть это и останется печатью наших отношений, а время расставит всё на свои места.
    Прям Д'Артаньян ...

    Цитата:
    мне пофиг на тебя и кто здесь ещё появится.
    С таким подходом пишите свои опусы на туалетной бумаге, а не на форуме.
    Запись от Avazart размещена 21.03.2018 в 20:04 Avazart вне форума
    Обновил(-а) Avazart 21.03.2018 в 20:08
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru