[00:10:43] <boris_ilov> MODULE AlgQuickSort;

TYPE
 Class* = RECORD
   less*: PROCEDURE(VAR c: Class; i, j: INTEGER): BOOLEAN;
   swap*: PROCEDURE(VAR c: Class; i, j: INTEGER);
   len*: INTEGER
 END;

PROCEDURE Do* (VAR c: Class);
 PROCEDURE sort (L, R: INTEGER);
   VAR i, j, m: INTEGER;
 BEGIN
   i := L; j := R;
   m := (L + R) DIV 2;
   REPEAT
     WHILE c.less(c, i, m) DO i := i + 1 END;
     WHILE c.less(c, m, j) DO j := j - 1 END;
     IF i <= j THEN
       c.swap(c, i, j);
       i := i + 1;
       j := j - 1
     END
   UNTIL i > j;
   IF L < j THEN sort(L, j) END;
   IF i < R THEN sort(i, R) END
 END sort;
BEGIN
 ASSERT(c.less # NIL);
 ASSERT(c.swap # NIL);
 sort(0, c.len - 1)
END Do;

END AlgQuickSort.
[00:10:56] <boris_ilov> MODULE AlgTest;
IMPORT QS := AlgQuickSort, In, Out;
CONST n = 10;
TYPE

 (* элемент коллекции *)
 Item = RECORD
   key: INTEGER
 END;

 (* коллекция *)
 Class = RECORD (QS.Class)
   a: ARRAY n OF Item
 END;

(* метод для обмена элеметов коллекции значениями *)
PROCEDURE swap(VAR c: QS.Class; i, j: INTEGER);
VAR temp: Item;
BEGIN
 temp := c(Class).a[i];
 c(Class).a[i] := c(Class).a[j];
 c(Class).a[j] := temp
END swap;

(* метод для сравнения элементов коллекции *)
PROCEDURE less(VAR c: QS.Class; i, j: INTEGER): BOOLEAN;
 RETURN c(Class).a[i].key < c(Class).a[j].key
END less;

PROCEDURE Do*;
VAR
 c: Class;
 i: INTEGER;
BEGIN
 (* инициализация класса *)
 c.swap := swap;
 c.less := less;
 c.len := n;
 (* заполняем коллекцию *)
 c.a[0].key := 4; c.a[1].key := 1;
 c.a[2].key := 9; c.a[3].key := 2;
 c.a[4].key := 3; c.a[5].key := 0;
 c.a[6].key := 6; c.a[7].key := 8;
 c.a[8].key := 7; c.a[9].key := 5;
 (* сортировка *)
 QS.Do(c);
 (* вывод результата на экран *)
 FOR i := 0 TO c.len - 1 DO
   Out.Int(c.a[i].key, 4)
 END;
END Do;

BEGIN

 In.Open;
 Out.Open;
 Do;
 In.Ln

END AlgTest.
[00:12:15] <boris_ilov> Jordan: Это к вопросу о сортировке
[00:12:49] <Jordan> Спасибо
[00:13:52] <boris_ilov> С непривычки пришлось целый час проколупаться
[00:14:08] <boris_ilov> но это чуть ли не первый мой код на Oberon-07
[00:14:29] <boris_ilov> и плюс не очень удобная IDE :)
[00:15:09] <Jordan> Уже скопировал в ББ для тестов
[00:15:33] <boris_ilov> компилить в https://sites.google.com/site/oberon07compiler/versii
[00:15:55] <boris_ilov> в жабаскриптовом не пробовал
[00:16:30] <boris_ilov> на ебероне с методами должно быть совсем шоколадно
[00:17:14] <Jordan> ББ норм компилит
[00:18:55] <boris_ilov> В ББ не интересно
[00:19:15] <boris_ilov> там на ООП можно красиво сделать
[00:19:44] <boris_ilov> куда интереснее на православном 07 :D
[00:20:25] <Jordan> А можно ли сделать одну процедуру sort как в си, и передавать ей, функцию сравнения. Не инициализировать во вне.
[00:20:52] <Jordan> Обернуть функцией, всё понял
[00:21:41] <boris_ilov> В обероне без наследования базового класса универсально не сделать
[00:22:45] <Jordan> А чей это компилятор?
[00:23:06] <boris_ilov> https://sites.google.com/site/oberonsystems/oberon-07-11/kompilator-ot-akron1
[00:23:28] <Jordan> акрон помню.
[00:24:12] <boris_ilov> акрону похвалы
[00:24:24] <boris_ilov> довольно сносный инструментик получился
[00:24:35] <boris_ilov> немного допилить редактор
[00:24:50] <boris_ilov> и научить его ошибки по человечьи показывать
[00:24:57] <boris_ilov> и будет совсем гуд
[00:25:42] <boris_ilov> ато я задолбался в файлик errors.txt лазить
[00:25:52] <boris_ilov> все грабли 07 собрал :D
[00:26:04] <Jordan> Он компилятор забросил?
[00:26:32] <boris_ilov> вроде нет
[00:26:35] <boris_ilov> ver 0.7.2 (2013-12-18)
[00:27:02] <boris_ilov> просто он ни куда не торопится похоже :)
[00:31:51] <boris_ilov> Jordan: Вообще кстати простое правило в Обероне. Обобщенная функция - это чаще всего функция принимающая рекорд
[00:32:37] <boris_ilov> Любая мутабельность параметров делается с помощью рекорда
[00:34:38] <boris_ilov> В данном случае обобщенная функция это PROCEDURE Do* (VAR c: Class);
[00:34:47] <Jordan> Похоже на мета классы delphi
[00:35:05] <boris_ilov> Ну это по сути и есть обычный класс
[00:35:17] <boris_ilov> только сделанный в рукопашную
[00:35:51] <boris_ilov> но, справеливости ради, не особо больше пришлось писать по сравнению с ООП
[00:36:19] <boris_ilov> тут по сути только инкапсуляция проигрывает...
[00:36:30] <boris_ilov> ибо все кишки на ружу торчат
[00:37:41] <boris_ilov> наружу*
[00:38:18] <boris_ilov> чет у меня грамотность сегодня хромает... свят... свят...
[06:58:50] <vlad2> Ну видишь, здесь не особо много и здесь не особо, а в итоге оно быстро накапливается и казалось бы для простой вещи появляется горка кода.
[09:58:49] <vlad2> И все-таки плюсовые стримы делали не для людей...
[10:43:37] <geniepro> vlad2: что там за проблема со стримами? )
[11:38:48] <vlad3> прочитав из стрема один раз, нельзя просто переставить позицию и прочитать еще раз
[11:38:57] <vlad3> точнее как бы можно, но оно не работает :)
[11:40:51] <vlad3> точнее работает, но не всегда :)
[11:44:18] <vlad3> Короче не для людей, а для архитекторов, которые взирают на все это и восхищаются ажурностью конструкции здания. В то время как нормальные люди долго ищут вход в здание, а потом падают в шахту лифта, потому что именно на 10 этаже нужно убедиться - а приехал ли лифт и если нет, то нажать особенную кнопку, чтоб приехал.
[12:10:53] <geniepro> vlad3> прочитав из стрема один раз, нельзя просто переставить позицию и прочитать еще раз
ну так стрим же -- прочитал -- потерял!
это же не блочное УВВ
[13:00:12] <kpmy> Вы никогда и ничего об этом не узнаете. Все, знакомые с Виртом и «причастные», считают себя высшей кастой. Читая «Алгоритмы и структуры данных» (на русском, перевод с английского под редакцией доктора физ-мат. наук, Ткачева Ф. В.), по самому тексту видно высокомерие этих людей. И попробуйте зарегистрироваться на форуме сайта (http://oberoncore.ru/), на котором большими буквами написано «Добро пожаловать». Посмеемся вместе.
[13:13:09] <kpmy> Кровавый оберонкор давит всех непричастных, о боже, боже,  мы все умрем.
[13:40:25] <geniepro> не так скоро, как хотелось бы ))
[14:05:59] <kpmy> в узбекистане все так хуево?
[14:06:53] <kpmy> Попробовал зарегистрироваться, все прошло успешно, администрация активировала мою учетку. Когда смеяться?
[14:07:10] <kpmy> смешные такие http://habrahabr.ru/post/212887/#comment_7323907
[14:36:03] <divan> kpmy: серьезно, вы странно размышляете :)
[14:36:38] <kpmy> ?
[14:37:00] <divan> я пришел на этот форум на третьем курсе, без проблем зарегистрировался
[14:37:18] <divan> надо нормальные ники при регистрации указывать
[14:37:56] <divan> сам веду несколько форумов и с такой же проблемой как Борис с Евгением знаком, хрен отличишь от ботов вот таких обиженных
[14:38:51] <divan> Алгоритмы и структуры данных — отличная книжка, классика, сам прочитал и студентам рекомендую, всем нравится.
[14:39:57] <divan> во я тупой :) это копипаста...
[15:10:48] <kpmy> :)
[18:06:43] <Jordan> Есть ещё смешнее.
[18:06:49] <Jordan> Предполагаю, что мы встретим много сопротивления со стороны тех, кто ничего не хочет менять и кого устраивает хаос «либерального программирования» или «попсы». Думаю, что рано или поздно эру «попсы» (С++ и прочее) должна сменить эра «классического» программирования. На мой взгляд, в дело перехода к «классике», стоит вложить силы. От этого во многом зависит то, как будет жить наше отечество.
[19:26:30] <vlad2> geniepro: если у стрима есть операция позиционирования, то значит он должен уметь позиционироваться
[19:59:27] <kpmy> Jordan кукаретик, уже написал сортировку на обероне?
[20:13:30] <Jordan> Сотировку вчера Борис постил, см логи. Куда делся тот разговорчивый Белый шум, а его место занял, злой занудный kpmy?
[21:12:40] <vlad2> Эх, нет единения в стане оберонщиков: http://zx.oberon2.ru/forum/viewtopic.php?p=1139#p1139
[23:43:57] <vlad2> Мда, непросто снести M$ офис...