Важная информация

User Tag List

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 21 по 30 из 48

Тема: Паскаль о котором не знали...

  1. #21
    Activist Аватар для ezswift
    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Поскажите, в чём беда...

    Реальность показывает, что ВСЁ в норме!
    Однако программа запускается не всегда.
    WHAT TO DO, HOW TO BE?

    zen
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  2. #22
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    364
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ezswift Посмотреть сообщение
    Опять-таки, я только в МГУшных статьях нарыл, какие-то приемлемые сведения...
    Ещё Дональда Кнута почитайте - там можно найти множество структур и алгоритмы к ним.

  3. #23
    Activist Аватар для ezswift
    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо, конечно, большое.
    Дайте пожалуйста ссылку на pdf, если есть.

    Но мы здесь не из-за программирования, а из-за Атари.
    Я вовсе не собираюсь заучивать алгоритмы, хотя приходилось этим заниматься для своих целей.

    Я столкнулся с тем, что несмотря на правильный алгоритм, в эмуляторе запуск программки получается нестабильным.
    Попробую на живой машине и на другом эмуляторе... Потом сообщу.

    - - - Добавлено - - -

    Кажется понял.
    Думаю, хромает эмуляция управления памятью в эмуляторе.
    В Алтирре всё запускается стабильно. Уря, товарищи!

    - - - Добавлено - - -

    Ну, что же?
    Пора предлагать структуру хендла окна...

    Это будет запись.
    В записи будет храниться описание конкретного окна.

    Предлагается следующее...
    _с - Капча окна
    _a - флаг активности
    _i - флаг инверсии
    _x, _y - координаты
    _w, _h - размеры
    _b - указатель на буфер на куче

    Структура оконной системы легче всего описывается стеком.
    Структура меню в окне лучше всего описывается двусвязным списком.

    Я может быть что-то упустил... подскажите, pls.
    Не беда.
    ... Надо добавить глобальное описание рамок окна. То есть псевдографика и её инверсия.
    ... Зато, строку меню добавить локально в хендл.

    zen
    Последний раз редактировалось ezswift; 18.07.2018 в 09:56.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  4. #24
    Activist Аватар для ezswift
    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот моя цитата из предыдущего поста:
    "Структура оконной системы легче всего описывается стеком."

    Вопрос в том, понимаете ли Вы, что Стек, Кью, Дек,Три - это РОЛИ.
    А вот Актёр = Список.

    Вы также можете понять, что ЛЮБАЯ роль = ОГРАНИЧЕНИЕ Актёра!!!
    Он САМ - сможет сыграть ВСЁ!

    Я это к тому, что ВСЕ динамические Ёрзания - это Роли!!!

    Есть Главная роль = Список!
    Есть Универсальная Главная роль = Многосвязный Список!

    А после этого идёт сценарий...

    По сценарию можно из Многосвязного списка создать ВСЕ нижеуказантые сущности...

    Стек = вход и выход с одной стороны!
    Кью = вход с одной, а выход с другой стороны!
    Дек = Куда хочешь заходи, откуда хочешь выходи!
    Три = Со входа ЗАХАДИ ДАРАГОЙ, а выхода два:
    - налево пойдёшь - БАШКА ЙОК
    - направо пойдёшь - ЖОПА СЫКТЫМ
    В общем, грустно.

    Я всё к тому, что ВСЕ роли надстраиваются над односвязным, либо над многосвязным списком!!!
    Но они = ПРОИЗВОДНЫЕ от списков!

    Реализуются, кстати, и массивами!
    Последний раз редактировалось ezswift; 26.07.2018 в 11:50.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  5. #25
    Activist Аватар для ezswift
    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Дек на двусвязном списке

    Наиболее универсальным линейным списком, является Двусвязный Список.

    Это - мультиконтейнер, с которым можно работать как с единым объектом.
    В то же время, так как такой мультиконтейнер программно абстрагирован от содержимого каждого узла, то приходится описывать также и содержимое узлов.

    Сначала давайте разберёмся с узлами списка.

    Вот прямая аналогия - вагон состава:
    1. Узлом списка является Платформа (node)
    2. Частью двусвязного списка Платформа становится ТОЛЬКО после того как к ней прикреплены передняя и задняя сцепки (prev, next). На платформе они антисимметричны!, то есть зацепление происходит только если применены разные сцепки.
    3. Контейнер может быть разного типа (сухогруз, цистерна...), но должен быть правильно описан.
    Нажмите на изображение для увеличения. 

Название:	цистерна.jpg 
Просмотров:	103 
Размер:	24.1 Кб 
ID:	65850

    Вот картинка схемы двусвязного узла:
    Аналогия почти совершенная.
    Нажмите на изображение для увеличения. 

Название:	DLL_Node.jpg 
Просмотров:	100 
Размер:	9.6 Кб 
ID:	65848

    Откуда ведётся доступ?
    Разумеется из кабин машинистов, то есть машиниств Тягача и машиниств Толкача.

    Зачем такое излишество? Это - для свободы доступа к любому узлу и для поддержания Целостности списка. (при длинном составе, возможен разрыв сцепок, поэтому аналогия прослеживается и здесь.)
    Даже, потеряв один адрес (толкача, например) мы можем методом траверсирования (от тягача) его просто восстановить. Это справедливо для любого звена списка.

    А вот сам двусвязный список:
    Как Вы видите, присутствует и тягач и толкач (header, trailer).
    Нажмите на изображение для увеличения. 

Название:	DLL_Full.jpg 
Просмотров:	100 
Размер:	16.8 Кб 
ID:	65849

    Роль создаваемых переменных - только коммуникативная.
    Это аналог радиосвязи от сортировочной станции (или от выпускающей станции) до машинистов.

    Теперь о различных функционалах списка.
    Идея такова: в заыисимости от задачи, создаётся переменная, которая упрощает (сильно ограничивает) доступ к элементам списка.
    То есть сам список может значительно больше, но задача этого не требует.

    1. Самый простой функционал - стек.
    Создаваемая для коммуникации переменная может доступаться только до header. И с header можно либо взять, либо положить туда какие-то значения.

    2. Следующий функционал - очередь посложнее, так как создаваемая для коммуникации переменная может доступаться и до trailer(только для того чтобы положить данные) и до header, чтобы снять оттуда данные.

    3. Следующий функционал - двунаправденная очередь.
    Это самый интересный функционал и сегодня я Вам продемонстрирую программку, которая с ним работает.
    Так как это всё же очередь, то создаваемая для коммуникации переменная может доступаться как до header, так и до trailer. Однако цель диктует расширение доступа то есть можно как положить, так и забрать данные как с header, так и с trailer.

    Во всех случаях описанных функционалов доступ к внутренним узлам невозможен, то есть траверсирования в чистом виде НЕТ! (А список это может!)

    Вот текст программки:
    Код:
    program deque;
    type
    (* Container type *)
      infoT = Char;
    
    (* Types for DLL *)
      linkT = ^nodeT;
    
      nodeT = Record
                   data: infoT;
                   next, prev: linkT;
                 End;
    
    (* Type for deque *)
      deqT = Record
               front,rear: linkT;
             End;
    
    (* Useful functions *)
    Function isEmpty(Var deq: deqT): Boolean;
    Begin
      isEmpty := (deq.front = nil);
    End;
    
    Procedure printDeq(Var deq: deqT);
      Var p: linkT;
    Begin
      WriteLn( 'Printing Deque ...' );
      writeln;
      If isEmpty(deq) Then
        Begin
          WriteLn('<empty>'); Exit;
        End;
      p := deq.front;
      While p <> nil Do
        Begin
          Write( p^.data, ' ' );
          p := p^.next;
        End;
      WriteLn;
    End;
    
    Procedure pushFront(Var deq: deqT; Ch: infoT);
      Var neo: linkT;
    Begin
      new(neo);
      neo^.next := deq.front;
      neo^.prev := nil;
      neo^.data := Ch;
      If deq.front <> nil Then
        deq.front^.prev := neo
      Else
        deq.rear := neo;
      deq.front := neo;
    End;
    
    Procedure pushRear(Var deq: deqT; Ch: infoT);
      Var neo: linkT;
    Begin
      new(neo);
      neo^.next := nil;
      neo^.prev := deq.rear;
      neo^.data := Ch;
      If deq.rear <> nil Then
        deq.rear^.next := neo
      Else
        deq.front := neo;
      deq.rear := neo;
    End;
    
    Function popFront(Var deq: deqT): infoT;
      Var toDelete: linkT;
    Begin
      popFront := #0;
      If isEmpty(deq) Then Exit;
      toDelete := deq.front;
      deq.front := toDelete^.next;
      If deq.front <> nil Then
        deq.front^.prev := nil
      Else
        deq.rear := nil;
      popFront := toDelete^.data;
      Dispose(toDelete);
    End;
    
    Function popRear(Var deq: deqT): infoT;
      Var toDelete: linkT;
    Begin
      popRear := #0;
      If isEmpty(deq) Then Exit;
      toDelete := deq.rear;
      deq.rear := toDelete^.prev;
      If deq.rear <> nil Then
        deq.rear^.next := nil
      Else
        deq.front := nil;
      popRear := toDelete^.data;
      Dispose(toDelete);
    End;
    
    Procedure initDeq(Var deq: deqT);
    Begin
      deq.front := nil;
      deq.rear := nil;
    End;
    
    Procedure killDeq(Var deq: deqT);
      var D: infoT;
    Begin
      While not isEmpty(deq) Do D := popFront(deq);
    End;
    
    Var mD: deqT;
    Begin
      initDeq(mD);
      pushFront(mD, 'A');
      pushFront(mD, 'B');
      pushRear(mD, 'F');
      pushRear(mD, 'G');
      writeln;
      writeln('Forward traversing');
      printDeq(mD);
      writeln;
      writeln('Backward traversing');
      writeln('Printing Deque ...');
      writeln;
      While not isEmpty(mD) Do
        WriteLn( popRear(mD) );
      killDeq(mD);
    End.
    А вот результат:
    Нажмите на изображение для увеличения. 

Название:	DEQ.png 
Просмотров:	118 
Размер:	10.6 Кб 
ID:	65851

    zen
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  6. #26
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,121
    Записей в дневнике
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    10 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    гм. нам читали эти лекции о списках на первом курсе. выглядело как rocket science.

  7. #27
    Activist Аватар для ezswift
    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Здравствуйте Шынни.

    Ну, честно скажу, что то, что тема сложна, то это заслуга препов.
    Методика преподавания - от простого к сложному.
    Всегда в первую очередь давали самый простой Односвязный список.
    В то же время, при нём присутствовали ВСЕ сложности, связанные со списками!

    Для чего нужно заглавное звено? Можно ли программировать без него.
    На чём можно строить Деки, Стеки и очереди?

    То есть, вроде просто, но жуть как сложно, так как Односвязный список НЕ УНИВЕРСАЛЕН.

    Начинали бы с двусвязного... Усложнение мизерное, но на нём сразу можно делать все функционалы.
    То есть выучил двусвязные и УЖЕ знаешь односвязные.

    Хочешь строить деревья - пожалуйста...

    Подпрограммы работы с Деком пригодны и для Стека и для Очереди.
    До сих пор интернет полон байками о том, что на двусвязном списке нельзя построить стек.
    МОЖНО!

    Для полной библиотеки Двухсвяхных списков нужно ещё маленько функций для доступа в середину списка.

    Всё остальное готово.

    zen
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  8. #28
    Guru Аватар для bigral
    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Шынни Посмотреть сообщение
    гм. нам читали эти лекции о списках на первом курсе. выглядело как rocket science.
    Думаю нам тоже это читали на первом курсе по "паскалю" но так как препод стоял у доски и шото мямлил себе под нос читая прямо с какой-то переводной книжки красного цвета про borland 5.5 то "в теме" ни одного человека на потоке не было (может и были но я их не знаю). Это я про наше образование.

    Но и про сам вопрос тоже не все так просто. Вот нам дают некую парадигму что можно добавить контейнер или вставить или убрать... выглядит все как сказка какая-то, особенно для меня который к тому времени уже знал как написанны игры под ZX. Я думал: ОГО, чувакам пофиг сколько кода и данных надо будет чтоб организовать "КУЧУ памяти" и потом ее обслуживать. А тем кто попридумывал эти списки про КУЧУ думать и не надо было она у них просто УЖЕ была и все тут. Не говоря уже о том что 99% алгоритмов в заумных книгах никогда не обсуждают вопросы лимитов адресного пространства или глубину машинного стека (просто подразумевается что стека должно хватить так же как и памяти). Кроме того не рассматривается НИКОГДА альтернатива... ну простой массив. Короче все эти заумные вещи которым учат (а их там сотни! ооп, патерны, рекурсионные алгоритмы) довольно бесполезные вещи когда надо написать 99% эффективный код (а в нашем 8-bit хобби это именно так).

  9. #29
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,121
    Записей в дневнике
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    10 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Самое интересное - это применение. Например, можно ли сортировать двухсвязный список? и применима ли модель стека?

    На zx я тоже баловался с Паскалем из-за рекурсивного алгоритма. Но Hisoft беден по сравнению с Borland.

    - - - Добавлено - - -

    Цитата Сообщение от ezswift Посмотреть сообщение
    А вот результат:
    чот я не понял - вроде бы должно быть A B G F

  10. #30
    Guru Аватар для bigral
    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Шынни Посмотреть сообщение
    Самое интересное - это применение. Например, можно ли сортировать двухсвязный список? и применима ли модель стека?
    Можно сортировать любое "множество" (в конце концов можно эмулировать поведение реализуя нужный интерфейс). Да и вообще разница только в реализации (скорость\ресурсоемкость доступа, добавления, замены, убирания зависит от реализации). Применим ли стек... ГЫ, алгоритмов сортировки придумали штук 50...80 вполне возможно что стеки в некоторых из них вполне применимы. Кроме того стек реализованный в процессорах это МАССИВ с дополнительной функцией быстрого занесения\вычитывания по специальному указателю.
    Последний раз редактировалось bigral; 27.07.2018 в 13:54.

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Компилятор языка Паскаль - планы на будущее
    от Bolt в разделе Программирование
    Ответов: 212
    Последнее: 13.10.2019, 17:12

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •