[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$ офис...