jsa писал(а):За GoTo на лабах, домашках и курсовых просто ставила 2 и посылала переделывать. А переделанное оценивала например 5 , зачеркивала и писала 4 за GoTo
Ещё в младших классах понял, что доверять учителям нельзя, а некоторые, так просто врут с умным видом. Эта преподша умных программ не пишет, она как инструктор по плаванию не умеющая плавать - сдай ей что просит, а все возможности изучай самостоятельно.
jsa писал(а):И как оказалось в итоге, без GoTo код не превращается в какашку. Совсем. Наоборот стал более читаем. Прост. Логичен.
И как оказалось, после таких горе преподавателей бывшие ученики считают, что паскаль язык учебный, не предназначенный для серьёзных задач.
jsa писал(а):А вот с ним, даже ваш утрированный пример выглядит как бред. Совершенно не читабелен.
Отлично же читается! Проверенно годами применения. Проблема только в малом количестве кода, его ещё нужно писать и писать, а с гото структура программы готова к добавлению кода. А вот горе преподаватели совсем не пишут про элементарные вещи в программировании, в книжках про это кукиш. Зато они борются с гото и учат делать простые программы, которые уже кем-то реализованы, то есть нафиг не нужны.
jsa писал(а): - Код: Выделить всё
var q3,w3: byte;
begin
q3:=2;
w3:=3;
case q3 of
1: procedure_something_there_on_half_the_screen_1(q2, w3);
2: begin
if w3>10 and not(w3>11) then procedure_something_there_on_half_the_screen_2_1(q2, w3);
if w3<7 then procedure_something_there_on_half_the_screen_2_2(q2, w3);
end;
end;
У вас, извините, говно а не код для большой программы. Его тестировать надо чтобы быть уверенным в нормальной работе. И на каком основании слепили эту гадость?
- Код: Выделить всё
procedure_something_there_on_half_the_screen_1(q2, w3);
Оператор case управлял объёмом кода под 100Кб и вы решили отфутболить всё это в какую-то процедуру, развести там срач????
Добавлено спустя 1 час 9 минут 43 секунды:jsa писал(а):Вы через полгода сами забудете, что там навояли и не разберётся.Rad студия создана для облегчения труда архитекторов, что бы те могли напрягать простых кодеров.
Неправда ваша. Код с гото отлично читается, если соблюдать простые правила. Всё отлично продолжается. И более того, в сложном проекте нельзя всё время помнить все детали работы программы. Человеческой памяти не хватает на то чтобы помнить всегда. Озарение приходит к моменту окончания работы, а начинать её приходится с маленьким светильтников в замке без освещения. С гото всё чисто и конкрентно - вот тут написано и тут же реализация, а с РАД нужно помнить кучу интерфейсов, что они делают, чтобы прочитать код, без этого он куча хлама. Если повезёт, то по именам что-то можно угадать. А если в реализациях зарыт хак меняющий работу классов, то хренушки без чтения шпоргалки догадаешься что к чему, а прочитать её не факт что догадаешься - там много чего читать надо будет, до нужного места можешь в этот раз и не дочитаться. В результате, понимание работы займёт лишние дни.
Pavia писал(а):Это потому, что Вы языка не знаете. Указатели в паскале были с самого первого момента его появления. И тут всё в рамках стандарта.
А я и всех особенностей архитектур не знаю, не все имею чтобы протестировать. Потому не лезу с указателями куда не надо - не так напишешь и потом на другой тачке случится ошибка. Пусть указатели пишут по стандарту те, кто имеет возможность всё протестировать. Как работает написанный на них класс TForm, без ругани не описать. Если у коллектива так получилось, то уж лучше постараюсь обойти грабли.
Pavia писал(а):А пример есть у Вирта в его A2 (ОС Оберон)
Запускал её в виртуалке. Впечатления не слишком хорошие. Слишком в ней много английского. Это не есть хорошо.
Pavia писал(а):Перевел с Алгола 3 процедуры из 2-х разных источников ни одна Карл не заработала!
Доступ к памяти в защищённом режиме BP7 тоже в книжке с нерабочим примером. Сколько ни бился, фигня выходила. Пишет куда-то не туда, если много записать, то дос виснет. Для таких случаев принято в книжках писать не весь рабочий код, а его фрагмент, читатель когда будет набирать его в редакторе, станет достраивать недостающие куски и вину за его неработоспособность переложит на них, а автор останется чистеньким!
Добавлено спустя 20 минут 19 секунд:Alex2013 писал(а):И еще, какой это к черту "умный оптимизатор" если он не умеет учитывать возможность применения примитивного и главное совершенно ШТАТНОГО ОПЕРАТОРА
Тупые математики по формулам оптимизировали. У них такого оператора нет, вот и не умеют с ним работать - не вся логика доступна математике.
Добавлено спустя 9 минут 37 секунд:zub писал(а):Не надо иронии, вот твой коллега часто не знает что он пишет и что происходит, списывая все на мистику и какие то загадочные инки и деки.
У меня тоже был такой мистический фрагмент кода, который работал невозможным образом. Потом оказалось, что компилятор рядом с ним в упор не видел синтаксическую ошибку и компилировал вместе с ней, от чего рядом код работал неправильно. Зато с гото "формулы" короче и компилятору сложнее ошибиться при их интерпретации. Компилятор иногда длинные формулы неправильно интерпретирует, а с гото такого ни разу не замечал.
Добавлено спустя 15 минут 54 секунды:zub писал(а):>>нет в нормально написанной программе многоярусных циклов for которые надо прерывать
- Код: Выделить всё
FUNCTION CITALNIK(IMJA_FAILA_SOHRANKI5: ANSISTRING;VAR S5: ARRAY OF STRING; VAR Z5: ARRAY OF ANSISTRING;LIMIT: LONGINT): BOOLEAN;
VAR
DLINA_A2: LONGINT=1000;
QQ3,ADRESA3: ARRAY OF BYTE;
ADRESA2: ARRAY OF LONGINT;
M2,E2,C2,I2,R2,Y2,T2: LONGINT;
KOLP: LONGINT;
Z64,X64: INT64;
LABEL
1,2,5, 99,100;
BEGIN
CITALNIK:=FALSE;
KOLP:=LENGTH(S5);
Z64:=SYSUTILS.FILEOPEN(IMJA_FAILA_SOHRANKI5, fmOpenRead);
IF IN_2(Z64,-1,VINDOFAILOBAG) THEN GOTO 100;
X64:=SYSUTILS.FILESEEK(Z64,0,2);
SYSUTILS.FILESEEK(Z64,0,0);
IF X64>LIMIT THEN X64:=LIMIT;
IF X64<1 THEN GOTO 99;
SETLENGTH(QQ3,X64+200);
FOR M2:=X64 TO X64+200-1 DO QQ3[M2]:=0;
M2:=X64;
E2:=0;
SYSUTILS.FILEREAD(Z64,QQ3[1],X64);
SETLENGTH(ADRESA2,DLINA_A2+2);
SETLENGTH(ADRESA3,DLINA_A2+2);
ADRESA2[0]:=1;
ADRESA2[1]:=X64;
ADRESA3[1]:=0;
C2:=0;
FOR E2:=1 TO X64 DO BEGIN
IF QQ3[E2] IN [10,13]=FALSE THEN GOTO 5;
IF QQ3[E2+1]<>36 THEN GOTO 5;
INC(C2);
IF C2>DLINA_A2 THEN BEGIN
DLINA_A2:=DLINA_A2+2000;
SETLENGTH(ADRESA2,DLINA_A2+2);
SETLENGTH(ADRESA3,DLINA_A2+2);
END;
ADRESA2[0]:=C2;
ADRESA2[C2]:=E2;
ADRESA3[C2]:=0;
5:
END;
FOR I2:=0 TO KOLP-1 DO BEGIN
Z5[I2]:='';
FOR C2:=1 TO ADRESA2[0] DO BEGIN
IF ADRESA3[C2]=1 THEN GOTO 2;
E2:=ADRESA2[C2];
FOR R2:=1 TO LENGTH(S5[I2]) DO BEGIN
IF QQ3[E2+R2+1]<>ORD(S5[I2,R2]) THEN GOTO 2;
IF QQ3[E2+R2+1]=39 THEN BEGIN
Y2:=1;
ADRESA3[C2]:=1;
FOR T2:=R2+1 TO X64 DO BEGIN
IF QQ3[E2+T2+1] {=10} IN [10,13] THEN GOTO 1;
Z5[I2]:=Z5[I2]+CHR(QQ3[E2+T2+1]);
IF QQ3[E2+T2+1]=39 THEN GOTO 1;
INC(Y2);
END;
GOTO 1;
END;
END;
2:
END;
1:
END;
99:
CITALNIK:=TRUE;
100:
SYSUTILS.FILECLOSE(Z64);
END;
Добавлено спустя 9 минут 5 секунд:zub писал(а):Значение цикловой переменной не гарантируется вне цикла. поэтому такой код опасен, он может работать на данной платформе или на данной версии компилятора, но на следующей версии \ другой платформе вполне законно сломается
Для этого писать нужно так:
for a3:=1 to 100 do begin
if a3=x then goto 1;
if a3=100 then goto 1;
end;
1:
Для использования индексной переменной цикл for всегда должен завершаться через goto