На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Друзья, соблюдайте, пожалуйста, правила форума и данного раздела:
Данный раздел не предназначен для вопросов и обсуждений, он содержит FAQ-заготовки для разных языков программирования. Любой желающий может разместить здесь свою статью. Вопросы же задавайте в тематических разделах!
• Если ваша статья может быть перенесена в FAQ соответствующего раздела, при условии, что она будет оформлена в соответствии с Требованиями к оформлению статей.
• Чтобы остальным было проще понять, указывайте в описании темы (подзаголовке) название языка в [квадратных скобках]!
Модераторы: Модераторы
  
> Создаём Offline FAQ , [Pascal] сбор статей и исходников
    Текущая версия: 0.3a
    Скачать OfflineFAQa3.rar (~48кб)
    Содержание Offline-FAQ

    Народ, те кто хочет помочь - присылайте решения проблем на Паскале без ассемблерных вставок.

    Основные топики:
    1. Основы Паскаля (самый главный упор именно на него)
      • Строки
      • Типы данных
      • Работа с файлами
    2. Математика и алгоритмы
      • численные методы
      • и т.д.
    3. Графика и игры
    4. ООП
    5. Дата и время

    Примеры должны быть ориентированы на сегодняшний день, поэтому не принимаются примеры по
    • Interrupts (уже не актуально)
    • Hardware (как правило, используются прерывания и ассемблер)
    • TSR (уже не актуально)

    Оформление:
    Только в документах DOC, HTML, или в сообщении в форуме. И не забудьте о соответствующих комментариях к коду программ!
    Если лень открывать редактор, то напишите описание прямо в своём сообщении. Выделите ключевые слова, подчеркните, где надо. Сам я не могу оформлять каждый присланный документ.
    Дополнения к ФАКу прикрепляйте в архиве к своему сообщению.

    А ещё неплохо собрать в HTML то, что лежит на сайте http://pascal.sources.ru/ :
    Pascal FAQ и Russian SWAG
      Значится так. Давайте обсудим детали нашего Offline FAQ.
      • Какие материалы поместим в ФАК ?
      • Каков формат файла ФАКа ?
      • Как будут проверяться материалы ?
      • Кто будет обновлять ФАК ?
        Насчет просмотра и файлов:
        предлагаю сделать отдельно оболочку и базу данных.
        Сделать, к сожалению, пока не могу - мало знанийи опыта в Delphi.

        Пример - DrWeb 4.32b.

        Кстати автообновление тоже можно сделать.
        Сообщение отредактировано: Romtek -
          Цитата Romtek, 21.11.04, 00:29
          Какие материалы поместим в ФАК ?

          Можно создать 2 раздела. В одном описать решение задач на логику (чуток отклонение в сторону алгоритмов), в другом задачи на синтаксис (обязательно включить сюда задачи по массивам и файлам!! :)).
          А еще можно создать третий раздел, в котором пойдет чистое описание синтаксиса (сюда типы данных, например).
          Ну и наконец, четвертый. Здесь можно поместить особенности программирования железа, графики, звука и т.д.
            Я пришел к выводу, что лучше взять формат CHM, как сделан Delphi Russian Knowledge Base.
              насчет материалов - мне кажется было бы лучше разбить весь материал на главы, разделы и темы точь в точь как это сделано в каком-нибудь хорошем учебнике. так будет легче искать пользователям тот или иной вопрос, так как навигация и поиск по книге всем привычен, а в хорошем учебнике оглавдение очень хорошо продумано и структурировано.
              в качестве основы можно прямо взять какой-нибудь конкретный учебник и продумать какие FAQи могут возникнуть по каждой теме и каждому параграфу.
              это, что касается основ и синтаксиса
              что касается полезных алгоритмов - тут сложнее. их можно разделить по принципу: геометрические задачи, выч.мат, работы с массивами(сортировки и т.д.), работа с дин. списками, работа с файлами, работа с устройствами...

              Добавлено
              насчет обновления и проверки - можно сделать плюс к оффлайн версии онлайн версию. на сайте сделать раздел: замеченные баги сюда, готовые дополнения сюда, новые вопросы для рассмотрения сюда. и пусть в этом участвуют все, кто хотят(добавляют, пытаются улучшить), но только нужет кто-то, а лучше несколько человек, чтобы это проверять и одобрять или браковать

              Добавлено
              рад буду помочь :) советами и делами... по мере возможностей
                Romtek, может, чистый HTML? Для комфортной работы с CHM нужно иметь Windows и IE. А у меня этого Виндовса уже давно нет. +Есть наладонник, на каотором хотелось бы иметь копию ФАКа. Он не понимает CHM, то есть придется декомпилировать его.

                Добавлено
                А вообще, есть тупой вариант: создаем WIKI. В нем делаем ФАК. Иногда делаем копии WIKI, которые пакуем и распространяем. ИМХО, ошибки будут находить быстрее, проще будет контрлировать изменение и рост ФАКа и т.д. и т.п.
                  я могу ошибаться, но по-моему для наладонником вообще еще нет нормальной СУБД -> можно сделать утилиту, которая переделывает FAQ в текстовый формат или что-то вроде него. А сам FAQ лучше делать в таком виде, как предложил Hubba-Bubba, чтобы пользователям не надо было устанавливать какие-либо дополнительные программы или службы для корректной работы FAQ, которых у него по той или иной причине может не быть
                    Я согласен с mikv, в том, что стоит сделать оффлайн ФАК на HTML т.к. Делать это на паскале или дельфе займет больше времени, а сделать что-то лучшее вряд-ди получится.

                    В качестве раздела можно поместить полную копию фака из PASCAL FAQ
                      Один из вопросов - это использование чужих материалов, т.е. копирайты.
                      Есть некоторая инфа, скачанная с сайтов. Как быть?
                      Спросить их авторов, можно ли включить в наш ФАК ихние материалы?
                      Сообщение отредактировано: Romtek -
                        А зачем нам использовать чужие материалы? У нас есть онлайн фак, в форуме есть много людей(таких как я), которые рады дать свои статьи...
                          Цитата Азат, 21.11.04, 23:48
                          В качестве раздела можно поместить полную копию фака из PASCAL FAQ

                          :no: Не думаю, что хорошая идея, т.к. в Online FAQ'е встречается немало демагогии.

                          Т.е., что бы уж и копирайта не было, можно посоздавать (написать, скомпоновать или отредактировать) статьи по каждой теме.
                            Вот-вот. Я о том же думал.
                              Ну и что в итоге?
                              Сообщение отредактировано: KiRiK -
                                Цитата KiRiK, 21.11.04, 23:08
                                Т.е., что бы уж и копирайта не было, можно посоздавать (написать, скомпоновать или отредактировать) статьи по каждой теме.

                                B) Оно самое.
                                  Кто готов заняться? :D
                                  Вот такой вотпрос: в какие сроки нужно все это безобразие организовать? А то тут, знаете ли, экзамены не за горами. ;)
                                  А так я готов способствовать. B)
                                    Бум оформлять в виде HTML. А потом, ещё чего-нибудь придумаем.
                                    Вот, первые материалы.

                                    Добавлено
                                    Сроки неограничены. Каждый помогает, как может.
                                    Прикреплённый файлПрикреплённый файлFAQ_and_go.rar (23.95 Кбайт, скачиваний: 366)
                                      Если честно, то меня не вдохновил интерфейс err_table.htm. :unsure: (Хотя информация изложена очень даже не плохо).
                                      А вот objpas.html и pascoding.htm, хоть и довольно безграфически, но смотрятся хорошо. :wub:
                                      Сообщение отредактировано: KiRiK -
                                        1. Если FAQ рассчитывается на разные платформы (смотреть то будут его не только под IE), то следует использовать только стандартные HTML теги <CENTER>, <B>, <U>,<I>,<BR>, <HR>, <UL>, <OL>, <LI>, <PRE>, <H1>...<H6>, <A>, <P> и др., которые гарантированно корректно обрабатываются браузерами. Конечно, возможно, сейчас это уже и не имеет смысла (мало у кого остались такие браузеры).
                                        В любом случае размер HTML файла можно значительно уменьшить, если удалить лишние теги, оставляемые визуальными редакторами.
                                        Кроме того очень удобно было бы планировать документы так, чтобы их можно было удобно распечатать (оптимальные отступы между строками, размеры шрифтов и т.д.).
                                        2. Т.к. база планируется большая, и возможно будет желание произвести глобальную замену шрифтов, фона, частей страниц, и т.д. Чтобы эти замены можно было вести не вручную настоятельно рекомендую использовать CSS, и следить чтобы все страницы имели единый стиль HTML кода. Для этого лучше всего создать один единый шаблон по которому будут построены все страницы, например:
                                        ExpandedWrap disabled
                                          <HTML>
                                          <HEAD>
                                          <TITLE>FAQ PASCAL</TITLE>
                                          <LINK rel="stylesheet" type="text/css" href="style.css">
                                          </HEAD>
                                          <BODY>
                                          <CENTER class="topmenu"><A HREF="index.html">| Главная |</A>
                                           <A HREF="http://">| Форум|</A> <A HREF="mailto:">| Отправить e-mail автору |</A></CENTER>
                                          <H1>ЗДЕСЬ СОДЕРЖАНИЕ СТРАНИЦЫ.</H1>
                                          <HR>
                                          <P ALIGN="RIGHT"><B><I>Разработано : .... при использовании материала ссылка на сайт обязательна"</I></B></P>
                                          </BODY>
                                          </HTML>

                                        Лучше один раз потратить время на приведение всех страниц к единому виду, чем делать это потом.
                                        Конечно делать вручную все непредставляется возможным, а визуальные редакторы - FrontPag, Composer и др. оставляют очень много лишнего.
                                        Наиболее оптимальный код с минимальными затратами времени можно получить используя прогу, которая будет проводить глобальную замену в файлах в указанном фодере с указанной маской.
                                        3. Прелестью визуальных HTML редакторов являются сслыки вида file://C:/WINDOWS/Рабочий стол/... об этом тоже следует помнить.
                                        Наиболее рекомендуемый комплект для работы - HTML редактор+Notepad+самодельная прога для рихтовки файлов.
                                        Сообщение отредактировано: Romtek -
                                          Цитата DoctorGenius, 22.11.04, 02:24
                                          Если FAQ рассчитывается на разные платформы
                                          Рассчитывается под другие платформы тоже.

                                          Цитата DoctorGenius, 22.11.04, 02:24
                                          Конечно, возможно, сейчас это уже и не имеет смысла (мало у кого остались такие браузеры).
                                          Есть достаточно неплохих альтернатив IE6, но это уже *другая* тема.

                                          Цитата DoctorGenius, 22.11.04, 02:24
                                          Для этого лучше всего создать один единый шаблон по которому будут построены все страницы
                                          В таком случае, нужен тот кто напишет единый CSS для страничек.

                                          Добавлено
                                          Цитата KiRiK, 21.11.04, 23:37
                                          Если честно, то меня не вдохновил интерфейс err_table.htm.
                                          Меня этот вариант вполне устраивает.
                                          Предложи свой, может у тебя лучше выйдет. ;)
                                          Сообщение отредактировано: Romtek -
                                            Цитата Romtek, 22.11.04, 10:02
                                            Предложи свой, может у тебя лучше выйдет.

                                            С удовольствием бы.. только ни разу не занимался созданием страничек :(.
                                              Я все же вновь предлагаю для создания FAQ и его дальнейшего развития использовать технологию WIKI.
                                              ИМХО, отличный способ скоординировать работу группы людей над текстами - этакий эквивалент CVS, но не для исходников, а для текстов. Хороший пример - Википедия (http://www.wikipedia.org).
                                              Сайт - онлайн вариант FAQ-а, а скажем автоматически раз в сутки будет делаться "слоепок" сайта и выкладываться в виже архива.
                                                Ух ты! То, что надо!
                                                Сообщение отредактировано: Romtek -
                                                  Цитата Romtek, 22.11.04, 16:31
                                                  Ух ты! То, что надо!

                                                  Да, смотрится неплохо. :)
                                                    Вот кое-что уже есть :P
                                                    - Математика и числа - (ссылка поправлена)

                                                    Слева в меню есть "edit page" - можете подправить код, и добавить что-то от себя! ;)
                                                    Сообщение отредактировано: Romtek -
                                                      Повторюсь еще раз с рекомендацией:
                                                      Лучше не лепить несколько вопросов/ответов на одну страничку, а размещать каждый вопрос в виде отдельного топика. Так будет легче и искать, и читать.
                                                        Онлайн вариант FAQ вполне успешно может храниться, скажем там где и сейчас - на форуме. Готовые же обсуждения можно всегда добавлять в базу. А вообще я бы сделал все это в виде сайта, используя технологии SSI. Каждая страница может быть построена следующим образом:
                                                        ExpandedWrap disabled
                                                          <HTML>
                                                          <HEAD>
                                                          <TITLE>Pascal FAQ</TITLE>
                                                          <LINK rel="stylesheet" type="text/css" href="style.css">
                                                          </HEAD>
                                                          <BODY>
                                                          <!--#include virtual="top.txt"-->
                                                          Содержание страницы.
                                                          <HR align=center width=490 color=#ffffff>
                                                          <!--#include virtual="bottom.txt"-->
                                                          </BODY>
                                                          </HTML>

                                                        В нижней части страницы можно разместить форму для отправки комментариев пользователей. Как например это сделано на http://delphibase.endimus.ru. или же замечания и коменнтарии могут отправляться на e-mail администратору сайта.
                                                        Таким образом когда имея "исходные" страницы автор позаменяет verh1 и verh2 на меню, элементы дизайна и др. (на сервере такая вставка происходит автоматически при каждом запросе страницы). Далее автор это все может прекрасно выложить в виде архива. Таким образом, не нужно будет делать никаких "слепков" с сайта и отдельно тратить время на оптимизацию FAQ для off-line и для on-line версии, делать "слепки" сайтов и др. Просто берем преобразуем материалы в HTML, вставляем в шаблон, и все.
                                                        Что же касается создания CSS, и вообще сайтов, советую посетить свою страницу. http://www.drgenius.h1.ru Я использую SSI и CSS стиль, благодаря этому возможно изменение дизайна всего сайта (около 100 страниц) изменением всего 3-х файлов. Работа SSI выполняется на стороне сервера, поэтому нет никакой разницы использовали SSI или нет. Это удобство исключительно для создателя сайта. Еще одна проблема состоит в том, что далеко не каждый бесплатный хостинг поддерживает SSI, рекомендую http://www.holm.ru
                                                        P.S. Почему сайт - быстрее, лучше, меньше траты on-line времени на скачивание, закачивание инфы и т.д. Вообще оптимальным было бы сделать все на PHP, с использованием mySQL, но это уже получиться новый форум, а не FAQ.
                                                        Если есть вопросы относительно "web-строительства" - пишите doctogenius@mail.ru
                                                          Программа на Delphi для проведения глобальной замены в файлах.
                                                          Прикреплённый файлПрикреплённый файлFindFile.zip (14.53 Кбайт, скачиваний: 330)
                                                            Цитата DoctorGenius, 24.11.04, 00:29
                                                            Программа на Delphi для проведения глобальной замены в файлах.

                                                            Несколько замечаний:
                                                            • Исходник на Дельфи, а не на чистом Паскале. Кроме того, не самая лучшая реализация - VCL перемешан с работой над файлами.
                                                            • А где комментарии? Где объяснение принципа работы?
                                                            • Оформление должно быть подобающим для помещения в FAQ.
                                                            • И, самое главное - зачем это добавлять в ЧАВО ? Ведь это специфичная проблема, которая встречается очень редко.
                                                            Сообщение отредактировано: Romtek -
                                                              Цитата DoctorGenius, 24.11.04, 01:04
                                                              в виде сайта, используя технологии SSI.

                                                              Именно так и построен сейчас этот сайт...
                                                              Холм.ру нам пока не требуется,
                                                              да и не согласятся они захостить пару гигов нахаляву :)
                                                                А кто сможет скачать off-line FAQ размером в пару гигов?
                                                                  А численные методы на pascal нужны? Встречалось немало вопросов по этой теме.
                                                                    Цитата DoctorGenius, 25.11.04, 00:34
                                                                    А численные методы на pascal нужны?

                                                                    Нужны.
                                                                      Цитата Guest, 24.11.04, 23:31
                                                                      А кто сможет скачать off-line FAQ размером в пару гигов?

                                                                      Его пока не существует, рано говорить.
                                                                      Присылай материалы, а мы выберем самые интересные. Предполагаемый размер Offline FAQ вряд ли будет свыше 5 МБ.
                                                                        Ну наконец то собрались сделать оффлайн фак!!!
                                                                        По поводу подсветки синтаксиса предлагаю делать её на лету с помощью моего js скрипта :) честно говоря я писал его специально для этого случая :)
                                                                        Это сильно сократит объём страниц оффлайн фака. Вы посмотрите на объём FAQ'а Vit'a это из за того что подсветка там статическая и при том выполнена корявенько (в основном это пробелы через  )

                                                                        Demo
                                                                        Подробности тут Подсветка синтаксиса
                                                                          Mixxx, большое спасибо за подсветку кода. Я тоже хотел подсветку отделить от HTML, но не знал у кого спрашивать.
                                                                          То что надо. ;)


                                                                          Но всё-таки хотелось бы, чтобы обсуждали не будущий интерфейс, а как заполнить ФАК нужными материалами.
                                                                            Цитата
                                                                            как заполнить ФАК нужными материалами.

                                                                            я думаю, чтобы это дело пошло качественнее и быстрее, чтобы надо было меньше одбирать и смотреть чужой код(который может оказаться немного не по теме или просто не к месту), надо спланировать структуру ФАКа и сообщать народу конкретно какие темы и примеры программ нужны. "Может у кого нибудь есть то-то и то-то?".

                                                                            Просто посмотрел что есть у меня по паскалю(в основном лабы конечно, а ведь они-то и первые кандидаты в ФАК) и никак не могу решить, что может понадобиться, а что нет... а все подряд комментировать, делать описание к прогам, объяснять и пояснять не охота, тем более, что велика вероятность, что эта именно моя и именно эта прога, например, в факе не окажется.
                                                                              Цитата shipbrother, 25.11.04, 15:45
                                                                              надо спланировать структуру ФАКа
                                                                              Его струкруру я уже описал в сообщении наверху.

                                                                              Цитата shipbrother, 25.11.04, 15:45
                                                                              и сообщать народу конкретно какие темы и примеры программ нужны. "Может у кого нибудь есть то-то и то-то?".

                                                                              Да ,но пока никто ничего не присылал.

                                                                              Цитата shipbrother, 25.11.04, 15:45
                                                                              никак не могу решить, что может понадобиться, а что нет... а все подряд комментировать, делать описание к прогам, объяснять и пояснять не охота, тем более, что велика вероятность, что эта именно моя и именно эта прога, например, в факе не окажется.
                                                                              Согласен. Поэтому опиши что выполняет каждая программа. А я и другие решим что надо, а что - нет.

                                                                              Добавлено
                                                                              P.S.
                                                                              Забыл про DoctorGenius. Не хочу пренебрегать его попыткой дополнить FAQ. ;)
                                                                                предлагаю свою помощь (хотя мне как модеру здесь самое место работать :))
                                                                                есть пара программ по буферизованному чтению файла для ТР/ВР, нужны?
                                                                                еще могу доработать статью про объекты (из онлайна) с добавлением виртуальных методов (можно и экспертный уровень включить, хотя ты и говорил, что лучше без АСМа)
                                                                                про строки вообще-то у нас хорошая тема... :rolleyes:
                                                                                т.е. мне :ph34r: нужна конкретика, я много что могу расписать, но описывать общЁ у меня не выходит
                                                                                  Пойдут почти любые примеры, которые часто спрашиваются (строки, матрицы, файлы).
                                                                                  Особенно вычислительные: интегралы, сумма ряда.

                                                                                  Добавлено
                                                                                  Уже есть кое-что из ФАКа:

                                                                                  CRT: Error 200, devision by zero. Fast CPU.
                                                                                  MATH: Почему умножение дает неверный результат (Longint)
                                                                                  FIL: Как узнать из программы, в каком каталоге лежит EXE
                                                                                  FIL: Как вставить/удалить строку внутри файла
                                                                                  FIL: Как вывести текст на экран из файла
                                                                                  FIL: Как найти строку в текстовом файле
                                                                                  FIL. Как найти файлы на ВСЕХ дисках
                                                                                  FIL. Как найти файлы на диске
                                                                                  FIL. Как обойти все вложенные подкаталоги
                                                                                  FIL. Как открыть на запись ReadOnly файл
                                                                                  FIL. Как переименовать/удалить открытый файл
                                                                                  FIL. Как получить путь к файлу
                                                                                  GRF. Как работать с графическими файлами
                                                                                  KBD. Как очистить буфер клавиатуры
                                                                                  KBD. Как прочитать нажатия клавиш Ctrl, Alt, Shift
                                                                                  MATH: перевод в 16-ричное число
                                                                                  MAT. Как вычислить ArcSin
                                                                                  KBD. Как узнать код функциональной клавиши по ReadKey
                                                                                  MAT. Как вычислить X^3 или корень N-й степени
                                                                                  MEM. Как пользоваться "MEM"
                                                                                  MEM. Как создать массив заранее неизвестной длины
                                                                                  STR. Как вытащить N-е слово из строки
                                                                                  STR. Как преобразовать строку в число и обратно
                                                                                    Цитата Vesper, 25.11.04, 17:03
                                                                                    есть пара программ по буферизованному чтению файла для ТР/ВР, нужны?

                                                                                    Давай!
                                                                                    Цитата Vesper, 25.11.04, 17:03
                                                                                    еще могу доработать статью про объекты (из онлайна) с добавлением виртуальных методов (можно и экспертный уровень включить, хотя ты и говорил, что лучше без АСМа)

                                                                                    А это пока не печёт. Редко встречается.
                                                                                      Отправляю кое-что по численным методам. Это так сказать основные, во всяком случае широко применяется в учебной практике
                                                                                      как то вычмат, информатика.
                                                                                      Есть еще материалы по данной теме - описания, реализации и др., пишите на e-mail - вышлю.

                                                                                      Добавлено
                                                                                      Посмотрел скрипт для подсветки кода. Самое то, что надо! Используется стандартный тег <PRE>.
                                                                                      Если даже посмотреть страницу старым браузером, который не поддерживает CSS и JS, то скрипт просто не сработает, а само форматирование исходника сохраниться. Отсутсвие же подсветки кода при использовании допотного браузера вряд-ли можно считать большой проблемой. Также большим плюсом является то что в данном случае код можно вытащить открыв страницу текстовым редактором - блокнотом (чего не сделаешь при использовании тегов <font color=...> и  ). Так что данный скрипт просто замечательная вещь!
                                                                                      Также надо следить за тем, чтобы в самом оформлении HTML страницы не было тегов, которые могут вызвать серьезные нарушения читабельности страницы, особенно это относиться к таблицам, т.к. не исключена ситуация, что страницу могут просматривать и под IE 3.0 - не секрет что для выполнения "повседневных задач" - как то лабораторок на Pascal, Excel, Word, и др. вполне достаточно железа вроде i486dx2-66, Win95, IE3.0. И FAQ должно корректно смотреться везде.
                                                                                      А вообще неплохим средством для проверки страниц "на устойчивость" является NN4.5, т.к. там даже незначительные ошибки в коде (которые не замечаются другими браузерами) приводят к серьезным нарушениям дизайна и читабельности страницы.
                                                                                      Еще можно заметить, что страницы то будут в кодировке koi-8, win-1251 - неважно, а комментарии и сообщения в программе при копировании исходников в Turbo Pascal надо будет переводить в DOS кодировку. Конечно кто знает - это не проблема (в Pascal FAQ я уже описывал как выполнять подобные преобразования с помощью стандартного средства - Internet Explorer'a). Но тем не менее эту сторону дела тоже нельзя упускать из виду.
                                                                                      Прикреплённый файлПрикреплённый файлmetods.zip (113.89 Кбайт, скачиваний: 333)
                                                                                        Ладненько, раз уж на то дело пошло, я чувствую какаю тему стоит делать мне, а именно мышинную ;). Вы скажите, что нужно поправить в Онлайн статье, что добавить.. а я уж сделаю :).
                                                                                          Забыл об одной очень важной детали: Все символы < и > (логические операции в исходниках) должны быть заменены их эквивалентами в HTML соответственно: < и >
                                                                                          Скобки, образующие теги в языке HTML в некоторых случаях могут не вызывать проблем, например эта строчка:
                                                                                          ExpandedWrap disabled
                                                                                            if a>b then writeln('test!');

                                                                                          Но, чтобы убедиться предлагаю следующий пример:
                                                                                          ExpandedWrap disabled
                                                                                            if (a<b) or (a>c) then writeln('123');
                                                                                            if a<>b then writeln('456');

                                                                                          Поэтому с целью избежания проблем с отображением исходников всегда следует делать глобальную замену.
                                                                                          Естественно, что при использовании визуальных редакторов данная проблема не возникает.
                                                                                            так, вот обещанная прога, переработал ее под объекты, разница только в том, что нельзя непосредственно подсмотреть скажем буфер. Работает оно вот как: assign связывает файл с именем и сразу открывает его (потому как объект предназначен для чтения, соответственно метод открытия есть всего один - reset(f,1) без попытки менять данные), после чего можно читать через метод read, параметры - буфер и его длина. Метод Seek позволяет сместить указатель, при этом немедленного чтения не осуществляется. Функция eof возвращает истину, если достигнут конец прочитанного буфера при условии, что занятая часть буфера меньше 256 байт (вообще-то это немного некорректно, если файл имеет длину 512 байт и на самом деле уже достигнут конец файла, т.е. из буфера прочитаны все данные, смещение начала буфера в файле 256, c_offset 0, ready=false, ф-я eof не вернет истину, хотя должна). Метод close просто закрывает файл.

                                                                                            Более подробное описание объекта

                                                                                            Объект TBufferedInput имеет 7 частных полей:
                                                                                            hidden:file - сам инкапсулированный файл;
                                                                                            buffer:array[byte] of byte - буфер данных, 256 байт;
                                                                                            opflag:boolean - признак открытого файла;
                                                                                            ready:boolean - признак наличия данных в буфере;
                                                                                            c_offset:byte - текущее смещение позиции файла внутри буфера;
                                                                                            l_offset:longint - смещение начала буфера в файле, кратно 256;
                                                                                            last_read:word - размер занятой части буфера в байтах (0-256, из-за чего word).

                                                                                            Метод Assign проверяет файл на существование и если файл существует, открывает его на чтение с гранулярностью данных 1 байт (так как мы передаем данные из файла с точностью до байта).

                                                                                            Метод Read читает данные из файла в буфер пользователя, используя промежуточный буфер длиной 256 байт для уменьшения количества обращений к диску. В случае наличия требуемого объема данных в буфере они просто копируются, смещается "короткий" индекс c_offset и возвращается запрошенный размер. В случае конца буфера передается остаток буфера и выполняется его заполнение вызовом метода из System. В случае явного конца файла (длина занятой части буфера меньше 256 байт) наружу передается остаток занятой части буфера и возвращается количество переданных байт. Если только что был выполнен Seek, то сначала выполняется заполнение буфера, а уже потом - проверка на конец буфера и размер данных. Процедура не способна передавать наружу блоки данных больше 64 Кбайт (ограничение налагается менеджером памяти реального режима).

                                                                                            Метод Seek устанавливает текущую позицию в файле и буфере. В случае ошибки позиция не изменяется.

                                                                                            Метод Close закрывает файл.

                                                                                            Добавлено
                                                                                            В соседнем файле (BufView.pas) пример использования буферизованного ввода для быстрого вывода BMP файла на экран.

                                                                                            Добавлено
                                                                                            Модуль VESA тащить вот отсюда: Вывод BMP на экран
                                                                                            Прикреплённый файлПрикреплённый файлbufview.zip (2.41 Кбайт, скачиваний: 319)
                                                                                              Нужен пример сортировки списка (Vesper, ;) )
                                                                                              С подробными комментариями, пожалуйста!

                                                                                              Добавлено
                                                                                              Кстати, и слияния двух в один, тоже.

                                                                                              Добавлено
                                                                                              А ещё простой пример по управлению клавишами: по нажатию на определённую клавишу что-то делается (пофантазируйте :rolleyes: ).
                                                                                              В том числе, стрелками (может, с применением ООП, в графике?)
                                                                                                Вот и первые плоды Оффлайн-ФАК (простенький вариант-шаблон).

                                                                                                Запускать Index.html
                                                                                                Прикреплённый файлПрикреплённый файлFAQ_Off.zip (50.5 Кбайт, скачиваний: 294)
                                                                                                  Недостатки:
                                                                                                  Довольно таки неплохо сделано.
                                                                                                  Замечания:
                                                                                                  1. Подсветка синтаксиса с использованием тегов font, и др. сильно увеличивает размер документа. Исходники которые весят 20 КБ весят 80 КБ. Пока их 5 штук вроде ничего страшного. При бОльшем числе исходников это будет уже ощутимо. Использование парсера на js значительно сокращает размер файла, но при этом возникает 2 проблемы:
                                                                                                  а) если исходник большой, то это очень тормозит браузер. Исходник 8 КБ обрабатывается секунд 5-7 на celeron 700.
                                                                                                  б) в старых браузерах это вообще не работает.
                                                                                                  Для решения проблемы предлагаю отказаться от "подробной" подсветки кода, для выделения ключевых слов можно использовать теги <B>...</B>, для комеентариев и др. <I>...</I>. "Раскрасить" их можно используя СSS.
                                                                                                  В результате размер документа значительно сократиться.
                                                                                                  2. Нет единой структуры HTML файлов, что-то сделано в одном редакторе, что-то в другом, даже кодировки различные кое-что выполнено в koi-8, некоторые страницы в win-1251.
                                                                                                  3. Нет кнопки на главную.
                                                                                                  Предлагаю Вашему вниманию более оптимизированный вариант FAQ (до оптимизиации 308 К, после оптимизации - 134 КБ. (распакованный объем).
                                                                                                  Прикреплённый файлПрикреплённый файлFAQ_Offline.zip (45.02 Кбайт, скачиваний: 308)
                                                                                                    Цитата DoctorGenius, 30.11.04, 02:53, 527621
                                                                                                    Недостатки:
                                                                                                    Довольно таки неплохо сделано.

                                                                                                    :D :rolleyes:
                                                                                                    Сорь за оффтоп - бессоница напала, а тут такое ;)
                                                                                                      Столько флейма читать не смог сразу и полностью.
                                                                                                      vot, а если, скажем, оплатить хостинг, ну.. лет на 10 вперед?
                                                                                                      Вообще, если есть такая необходимость, то стукни в асю или ПМ (Ася предпочтительней).
                                                                                                        DoctorGenius, спасибо за помощь.
                                                                                                        Вот несколько деталей:
                                                                                                        • В Мозилле нет фона (будто не работает CSS)
                                                                                                        • Ссылку на твой сайт замени на своё мыло. Кстати, и автора забыл :)
                                                                                                          "Разработка HTML и CSS" - тут я не согласен. Замени уж лучше на "Оформление и дизайн"
                                                                                                        • Я не хочу, например, выделять вручную каждое ключевое слово в коде программ. Может, есть какие-то предназначенные для этого программы?
                                                                                                        Короче, пока дизайн не самое главное. были бы материалы.

                                                                                                        Народ, вы присылать исходники будете, или где ? :whistle:

                                                                                                          вот программка, сортирующая список методом выбора. надеюсь подойдет.

                                                                                                          Добавлено
                                                                                                          есть еще проги, которые суммируют и делят столбиком многочлены, коэффициенты и степени которых лежат в списках.
                                                                                                          если нужны - говорите
                                                                                                          Прикреплённый файлПрикреплённый файлSORTLIST.PAS (2.55 Кбайт, скачиваний: 374)
                                                                                                            Можете разместить мою статью про длинную арифметику
                                                                                                            Мне не жалко :)

                                                                                                            Добавлено
                                                                                                            Люди!!!!!!!!!!!!!! А почему в этом ЧАВО только исходники? А кто статьи переносить будет? Без статей это всего лишь какой-то набор исходников, который лучше было бы поместить в формате PAS!
                                                                                                              вот пример сортировки списка (там два метода, пузырьком и выбором, выбор вообще просто реализуется)

                                                                                                              Добавлено
                                                                                                              shipbrother, это вроде не метод простого выбора, а метор простых вставок :rolleyes: т.е. ты хватаешь первый попавшийся элемент и впихиваешь его в середину отсортированной части списка.
                                                                                                              Прикреплённый файлПрикреплённый файлSORTLIST.zip (1.48 Кбайт, скачиваний: 277)
                                                                                                                Цитата Азат, 30.11.04, 10:23, 527921
                                                                                                                Люди!!!!!!!!!!!!!! А почему в этом ЧАВО только исходники? А кто статьи переносить будет? Без статей это всего лишь какой-то набор исходников, который лучше было бы поместить в формате PAS!

                                                                                                                Да знаю я. Писал уже, что нужны подробные комментарии к коду, и, заодно, описание. Хоть короткое:
                                                                                                                что делает, как делает. и желательно алгоритм.

                                                                                                                Добавлено
                                                                                                                Между прочим, а кто оформлять будет? Пушкин?
                                                                                                                Хоть выделите ключевые слова. Форум ведь располагает всеми необходимыми для этого средствами!
                                                                                                                Сообщение отредактировано: Romtek -
                                                                                                                  ага, а отлаживать код тоже прямо в ворде? :D у меня вроде в комментах все расписано...

                                                                                                                  Процедура BubbleSort сортирует список методом пузырька (если элемент больше, чем следующий за ним, выполняет обмен). Возможно проще в таких случаях обменивать местами данные, а не ссылки, но в случае сложных данных (например объекты) такой обмен уже может быть некорректным.

                                                                                                                  Процедура ChoiceSort сортирует список методом простого выбора, пересобирая список в новый (с головой в другой переменной) из элементов старого, сначала ищется максимум в оставшейся части списка, затем найденный элемент исключается из старого списка и добавляется в голову нового списка, таким образом новый список отсортирован по неубыванию. Данные (elem) не меняют своего физического расположения.

                                                                                                                  [Romtek:: ChoiceSort: правильнее SelectionSort]
                                                                                                                  Сообщение отредактировано: Romtek -
                                                                                                                    Vesper, точно! ошибочка вышла.. но тем лучше, другой алгоритм
                                                                                                                    Romtek, да я вроде везде комментарии написал, правда на английском, на русском не было возможности... если этот код пойдет и если нужно, напиши, я переделаю, чтобы вам не париться самим

                                                                                                                    еще прога есть, которая линию по экрану двигает как подставочку в арканоиде, но прога древняя, написана с помощью crt, я, как переделаю, постараюсь скинуть
                                                                                                                      есть у меня прога, которая двигает крест в графике по экрану как прицел от курсорных клавиш, но там юзается модуль, который обрабатывает INT09, соответственно не подходит :( в принципе переделать под обычный readkey не проблема, завтра займусь
                                                                                                                        могу кстати еще написать заметку про типизированные файлы и в добавок - маленькую лабу, которая в файл пишет всевозможные переменные паскалевского типа. это для того, если кому-нибудь интересно посмотреть как представляются данные в машине(могут быть вопросы в отношении типа real например)

                                                                                                                        вы только пишите, если это действительно нужно(можно на почту или в приват, чтобы форум не засорять), а то не охота делать что-нибудь в пустую. време6ни не так много...
                                                                                                                          shipbrother, а разница? там от crt используются две ф-и, keypressed и readkey, обе малюются на асме вне модуля и все :)
                                                                                                                          как ни крути без асма в ТР7.0 никуды :(
                                                                                                                            да, но просили-то проги без ассемблерных вставок.
                                                                                                                            я видел где-то исправленный crt, только не пробывал...
                                                                                                                              вот 3 проги + описание к ним в доке
                                                                                                                              1. суммирование и деление многочленов в столбик (на списках)
                                                                                                                              2. очередь на файлах
                                                                                                                              3. 2 функции для строк (удаление и копирование N последних символов

                                                                                                                              Добавлено
                                                                                                                              еще есть следующее(довольно банальное): однонаправленный стек на списках, двунаправленная очередь на списках, организация списка с произвольным доступом(ох уж эти лабы - основа основ). все в виде модулей. по памяти еще есть перевод чисел из двоичной системы в 10, из десятичной в пятеричную и шестеричную. банально, но может быть полезно
                                                                                                                              если надо - пишите.
                                                                                                                              Сообщение отредактировано: shipbrother -

                                                                                                                              Прикреплённый файлПрикреплённый файл3files.ZIP (15.36 Кбайт, скачиваний: 331)
                                                                                                                                Цитата shipbrother
                                                                                                                                ExpandedWrap disabled
                                                                                                                                      Assign(f,str);  {назначаем файловой переменной имя файла}
                                                                                                                                      rewrite(f);     {открывает файл для записи <=> создаем пустой}
                                                                                                                                      close(f);       {закрываем файл}

                                                                                                                                А где обработка ошибок? :huh:

                                                                                                                                Кстати, не надо в описании добавлять большие исходники. Достаточно самих PAS файлов.
                                                                                                                                  Цитата

                                                                                                                                  В Мозилле нет фона (будто не работает CSS)

                                                                                                                                  Потестил страницы в аналоге mozilla - Netscape 6. Фона небыло. Все дело было в отсутсвии символа # перед кодом цвета. Например конструкция background: ffffff отлично работает в IE, Opera и др. В Netscape же возникла данная проблема. Зная что Mozilla является его аналогом под linux, думаю теперь все будет нормально.
                                                                                                                                  Цитата

                                                                                                                                  Ссылку на твой сайт замени на своё мыло. Кстати, и автора забыл :)
                                                                                                                                  "Разработка HTML и CSS" - тут я не согласен. Замени уж лучше на "Оформление и дизайн"

                                                                                                                                  Я сделал единый шаблон для всех страниц. Это удобно, т.к. можно управлять всеми страницами, таким образом чтобы если захочется вставить что-либо (менюшки, подключить какие-либо js, css, добавить, или удавлить любые элементы дизайна) можно используя программу для глобальной замены ( текста (на Delphi) присланную мною ранее. Например ищем </BODY> заменяем на <P ALIGN="RIGHT">Разработчики: _______</P></BODY>.
                                                                                                                                  Вот и все. Главное подобрать правильную замену, а также всегда иметь резервную копию редактируемых страниц.
                                                                                                                                  Имея единую структуру всех страниц мы всегда можем ими управлять, не редактируя каждую страницу в отдельности, если захочется что-либо добавить, или изменить в дизайне и т.д. Если все страницы взятые из разных источников будут иметь совершенно разную структуру, то автоматическая замена значительно усложнится. Поэтому лучше один раз потратить время на приведение ВСЕХ страниц под один стиль, и тогда можно быть уверенным в том, что автоматическая замена будет проведена во всех страницах абсолютно правильно.
                                                                                                                                  Цитата

                                                                                                                                  Я не хочу, например, выделять вручную каждое ключевое слово в коде программ. Может, есть какие-то предназначенные для этого программы?

                                                                                                                                  Вариант самый простой. Берешь исходник .pas затем поочередно берешь мою проргаммку вводишь ключевые слова var, begin, {comments} и др. и заменяешь их на <b>var</b>, <b>begin</b>, <i>{comments}</i>.
                                                                                                                                  А вообще нетрудно сделать программку, которая во-первых будет проводить такие замены глобально, за один проход, во-вторых будет нечувствительна к регистру, чтобы к примеру Var и var было одно и тоже.
                                                                                                                                  Можно сделать и полную подкраску тегов, с помощью программы. Возьми предложенный выше js парсер и посмотри как он сделан, сделай такую же штуку, только чтобы она парсила не "на лету", а в файлах. Но как я уже говорил "полноценная" подкраска тегов занимает очень много места.
                                                                                                                                  Вот единый шаблон, для всех страниц данного сайта:
                                                                                                                                  1. HTML
                                                                                                                                  ExpandedWrap disabled
                                                                                                                                    <HTML>
                                                                                                                                    <HEAD>
                                                                                                                                    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
                                                                                                                                    <TITLE>Pascal FAQ :Оглавление</TITLE>
                                                                                                                                    <link REL="STYLESHEET" TYPE="text/css" HREF="style.css">
                                                                                                                                    </HEAD>
                                                                                                                                    <BODY>
                                                                                                                                    <H1>Pascal FAQ</H1>
                                                                                                                                    <HR>
                                                                                                                                    Здесь содержание страницы
                                                                                                                                    <HR>
                                                                                                                                    <CENTER><A HREF="index.html">< Оглавление</A></CENTER>
                                                                                                                                     
                                                                                                                                    <P ALIGN="RIGHT"><I>Разрабочики</I></P>
                                                                                                                                    </BODY>
                                                                                                                                    </HTML>

                                                                                                                                  2. CSS (исправлен).
                                                                                                                                  ExpandedWrap disabled
                                                                                                                                    BODY { background: #FFFFFF url(background.gif); background-attachment: fixed; font-family: Monospace; font-size: 16px;}
                                                                                                                                    A { color: 0000ff; text-decoration: none; }
                                                                                                                                    A:hover { color: ff0000; text-decoration: none; }
                                                                                                                                    CENTER { font-weight: bold; text-decoration: underline; }
                                                                                                                                    PRE { font-size: 14px; }
                                                                                                                                    H1 { font-size: 24px; font-weight: bold; text-align: center; }
                                                                                                                                    B { color: 0000ff }
                                                                                                                                    I { color: 003399; font-weight: bold; }
                                                                                                                                    HR { color: 003399; width: 80%; }
                                                                                                                                    P { font-size: 10px; }

                                                                                                                                  Также немелано бы разместить информацию по численным методам. Вот основные темы, по которым возникают частозадаваемые вопросы. Основные темы:
                                                                                                                                  1. Решение СЛАУ. Методы Гаусса, Крамера, простой итерации, Зейделя.
                                                                                                                                  2. Решение нелинейных уравнений. Методы: хорд, Ньютона, и др.
                                                                                                                                  3. Решение ОДУ. Методы Эйлера, Рунге-Кутта, Адамса.
                                                                                                                                  4. Приближение функций. Аппроксимация, интерполяция.
                                                                                                                                  5. Численное дифференцирование.
                                                                                                                                  6. Вычисление интегралов. Методы: прямоугольников, Симпсона, Гаусса, методы Монте-Карло и др.
                                                                                                                                  Также следует рассмотреть линейную и матричную алгебру, в частности вычисление определителей.
                                                                                                                                  Информацию по данным темам можно найти в моих постах на данном форуме, а также см. на Студенческом форуме в моем разделе "Вычислительная математика". Также (см. выше) я запостил методичку по численным методам, в ней тоже много чего расписано с примерами на Pascal. Есть еще много чего. Могу выслать, только проблематично постить в форуме (ограничение в 200 КБ). Лучше отправить по e-mail.
                                                                                                                                    Я оптимизнул свой скрипт, теперь он работает быстрее.
                                                                                                                                    + цвета подсветки стали как у Romtek'a в его редакторе.
                                                                                                                                    Для демонстрации её работы в аттаче сырцы из альфа версии фака.
                                                                                                                                    Прикреплённый файлПрикреплённый файлPascal_Parser_and_Src.zip (11.95 Кбайт, скачиваний: 297)
                                                                                                                                      Вторая версия альфа
                                                                                                                                      Немного добавил материала, вставил парсер Mixxx;)
                                                                                                                                      Слегка по другому оформил страницу (валидировал) и стили (объединил 2 стиля, тоже валидировал), учитывая советы от shipbrother и DoctorGenius.

                                                                                                                                      Оцените, как смотрится код на Паскале, и вообще.
                                                                                                                                      Прикреплённый файлПрикреплённый файлOfflineFAQa2.rar (42.56 Кбайт, скачиваний: 311)
                                                                                                                                        Как я уже говорил в исходнике символы <, > надо заменить их эквивалентами < >. Что получится, если этого не сделать - см. исходник с интегралами. Т.к. заменять прямо в HTML довольно затруднительно, бери прямо в файлах, .pas, .txt проведи глобальную замену вышеуказанных символов на их HTML-эквиваленты.
                                                                                                                                        Парсер работает намного быстрее, так что с этим все нормально.
                                                                                                                                        Так же как я уже говорил, следует все делать по единому шаблону.
                                                                                                                                        см. исправленную версию FAQ (HTML+добавлено несколько исходников по численным методам).
                                                                                                                                        И все-таки я думаю в ближайшее время стоит:
                                                                                                                                        1. Преобразовать (переработать) всю инфу которая есть в Pascal FAQ на форуме в off-line вариант.
                                                                                                                                        2. К численным методам (да и другим исходникам тоже) добавить подробное описание.
                                                                                                                                        3. Сделать on-line вариант данной базы (сайт) пусть даже на holm.ru, т.к. в скором времени размер данной базы превысит 200 КБ и тогда ее уже не прикрепишь так просто к посту в форуме.
                                                                                                                                        Прикреплённый файлПрикреплённый файлFAQ_Offline.zip (57.71 Кбайт, скачиваний: 289)
                                                                                                                                          Цитата DoctorGenius, 2.12.04, 02:35, 529824
                                                                                                                                          Как я уже говорил в исходнике символы <, > надо заменить их эквивалентами < >.
                                                                                                                                          Пока редактирование статей меня мало интересует.

                                                                                                                                          Цитата DoctorGenius, 2.12.04, 02:35, 529824
                                                                                                                                          Преобразовать (переработать) всю инфу которая есть в Pascal FAQ на форуме в off-line вариант.
                                                                                                                                          Я один не справлюсь, к тому же у меня есть другие дела. А ты, похоже, единственный, кто решил помочь. Поэтому, спасибо тебе.
                                                                                                                                          Надеюсь, не всем параллельно. :whistle:

                                                                                                                                          Цитата DoctorGenius, 2.12.04, 02:35, 529824
                                                                                                                                          Сделать on-line вариант данной базы (сайт)
                                                                                                                                          Может потом. Главная цель - оффлайн-версия.

                                                                                                                                          И ещё:
                                                                                                                                          найти бы что-то типа проектов CVS для коллективного пополнения ФАКа. А то неудобно как-то. Wiki по идее подходит, но как его связать с форумом и есть ли возможность в нём писать тексты программ на Паскале?

                                                                                                                                          Добавлено
                                                                                                                                          Да, забыл:
                                                                                                                                          пока нет ничего другого в замену - если есть какие-то дополнения к FAQ, не прикрепляйте неизменённые файлы в архиве.
                                                                                                                                          Т.к. размер файла потихоньку увеличивается, и нет смысла качать то, что уже готово и не изменялось.
                                                                                                                                          Сообщение отредактировано: Romtek -
                                                                                                                                            1. Вот что наклепал в HTML.
                                                                                                                                            Конечно, все требует серьезной доработки - форматирование текста, и т.д. Вообщем 197 КБ (zip-архивы я выкинул, т.к. иначе не помещалось). Правда осталось еще несколько вопросов которые я не сдеалал:
                                                                                                                                            Сделайте мне русский в Паскале !!!
                                                                                                                                            Графика в различных режимах
                                                                                                                                            Как замерять время выполнения кода?
                                                                                                                                            Изучаем IDE Turbo Pascal 7.0
                                                                                                                                            Как вывести Real в понятном виде?
                                                                                                                                            их надо просто дорабоатать, переписать заново, и т.д.
                                                                                                                                            2. Не понимаю, зачем нужен CVS, WIKI, и т.д. Для коллективных обсуждений есть форум, и в любом случае то что сделали (где бы не деалали) придется редактировать, переделывать HTML и помещать в offline FAQ.
                                                                                                                                            3. Почему бы не преобразовать HTML в CHM - потом всегда можно преобразовать обратно.
                                                                                                                                            Прикреплённый файлПрикреплённый файлpascal_faq.rar (196.94 Кбайт, скачиваний: 309)
                                                                                                                                              DoctorGenius, мне больше нравится мой начальный вариант главной странички, структурный.
                                                                                                                                              Вообще, если дополняешь новыми материалами, то лучше просто оформи их как следует (пример: "Поиск данных" и "Математика"). А в главную страницу я сам буду добавлять.
                                                                                                                                              Совсем не устраивает оформление текстов по Вычислительной Математике - по ним нужно пройтись Source-formatter'ом.


                                                                                                                                              Я пришёл к выводу, что основная задача Offline-FAQ - это не теория, а короткие примеры в ответ на вопросы (типа их задают).
                                                                                                                                              Поэтому нет смысла переводить все материалы в FAQ. Многие статьи в разделе Pascal FAQ имеют теоретический характер. Offline-FAQ должен быть справочником по Паскалю (в основном, для студентов).

                                                                                                                                              Насчёт исходников: я не вижу необходимости таскать ещё и ZIP-файлы вместе с FAQ. Громоздких текстов мы в него помещать не будем, и будет достаточно скопировать из странички текст программы обычным способом.
                                                                                                                                                Цитата DoctorGenius,6.12.04, 03:51 @
                                                                                                                                                Не понимаю, зачем нужен CVS, WIKI, и т.д. Для коллективных обсуждений есть форум, и в любом случае то что сделали (где бы не деалали) придется редактировать, переделывать HTML и помещать в offline FAQ.
                                                                                                                                                Я ищу самый лёгкий способ совместного пополнения примерами, а средств форума недостаточно, чтобы каждый мог оценить/исправить и дополнить чем-то своим без скачивания архива.


                                                                                                                                                Цитата DoctorGenius,6.12.04, 03:51 @
                                                                                                                                                Почему бы не преобразовать HTML в CHM - потом всегда можно преобразовать обратно.
                                                                                                                                                Готовая версия будет в двух вариантах: HTML и CHM.
                                                                                                                                                  Цитата

                                                                                                                                                  DoctorGenius, мне больше нравится мой начальный вариант главной странички, структурный.
                                                                                                                                                  Вообще, если дополняешь новыми материалами, то лучше просто оформи их как следует (пример: "Поиск данных" и "Математика"). А в главную страницу я сам буду добавлять.
                                                                                                                                                  Совсем не устраивает оформление текстов по Вычислительной Математике - по ним нужно пройтись Source-formatter'ом.

                                                                                                                                                  Я пришёл к выводу, что основная задача Offline-FAQ - это не теория, а короткие примеры в ответ на вопросы (типа их задают).
                                                                                                                                                  Цитата

                                                                                                                                                  Поэтому нет смысла переводить все материалы в FAQ. Многие статьи в разделе Pascal FAQ имеют теоретический характер. Offline-FAQ должен быть справочником по Паскалю (в основном, для студентов).

                                                                                                                                                  Статьи теоретического плана тоже нужны, например, для защиты курсовых и лабораторных работ, и т.д. С другой стороны если в FAQ мы рассматриваем программы для математических вычислений, то помещать туда же учебник по математике с теорией данных методов не представляется возможным.
                                                                                                                                                  Есть одна неплохая книга по Pascal в формате .doc. Здесь запостить не могу (весит ~300 КБ). Может быть стоит взять ее за основу.
                                                                                                                                                  http://www.yourpascal.com/forum25.html - мой раздел студенческого форума. см. Книги и ресурсы для начинающего праграммера на TP.
                                                                                                                                                  А вообще, я думаю Pascal Faq неплохо было бы сделать как drkb, только для Паскаля.
                                                                                                                                                  Если HTML писать корректно, то можно сделать весьма солидный (информативный) справочник, который без труда будет умещаться на дискету.
                                                                                                                                                  Цитата

                                                                                                                                                  Насчёт исходников: я не вижу необходимости таскать ещё и ZIP-файлы вместе с FAQ. Громоздких текстов мы в него помещать не будем, и будет достаточно скопировать из странички текст программы обычным способом.

                                                                                                                                                  Есть некоторая информация, которая весит немного, но не может быть помещена прямо на странице - пример тому - руссификатор для DOS (используется для руссификации клавиатуры в TP под WinXP), можно привести и другие примеры инфы, которую не рационально хранить в виде HTML.
                                                                                                                                                  Цитата

                                                                                                                                                  Я ищу самый лёгкий способ совместного пополнения примерами, а средств форума недостаточно, чтобы каждый мог оценить/исправить и дополнить чем-то своим без скачивания архива.

                                                                                                                                                  Не понимаю почему средств форума недостаточно?
                                                                                                                                                  Форум - онлайн версия FAQ. В off-line FAQ для каждого раздела я указывал автора ответа и источник материала. Таким образом в онлайне может вестись работа над статьями и исходниками (дополнение, исправление ошибок, и т.д.), а также если читатель заметит ошибки в исходнике, захочет предложить свой, допустим более оптимальный вариант решения данной проблемы, то он сможет просто перейти по ссылке на "родную" страницу в on-line FAQ и написать это в форуме.
                                                                                                                                                  В конце концов чтобы не использовать форум есть еще один вариант: создать шаблонный сайт к примеру narod.ru, sitecity.ru, и т.д., чтобы у каждого из тех, кто работает над FAQ был логин и пароль для доступа к аккаунту. Авторам не потребуется знание HTML, и опыта настройки CGI, PHP скриптов. В этих бесплатных сервисах есть множество предустановленных скриптов (анкеты, форумы, гостевые книги). Это все можно прикрутить, чтобы посетители могли отправлять свои исходники, высказывать пожелания, замечания, сообщать об ошибках в предложенных материалах. Все это можно будет скачать, и выложить в виде архива.
                                                                                                                                                  Сообщение отредактировано: DoctorGenius -
                                                                                                                                                    Цитата DoctorGenius,8.12.04, 01:13 @
                                                                                                                                                    Не понимаю почему средств форума недостаточно?
                                                                                                                                                    Форум - онлайн версия FAQ.

                                                                                                                                                    Почти-что достаточно... Но не совсем...
                                                                                                                                                    Я пытался сделать нечто вроде структурированного ФАК в стиле созданного у нас по Дельфи.
                                                                                                                                                    На сегодня есть всего пара проблем - это ограниченная глубина подразделов и невозможность прикрепления нескольких файл-аттачей.
                                                                                                                                                    Идея ВИКИ мне не очень по душе, поскольку никто не застрахован от действий недоброжелателей или просто безграмотных людей, которые могут вам ТАКОГО наредактировать - что мало не покажется :lol:
                                                                                                                                                    На тему коллективного доступа - движок форума уже сейчас позволяет назначить в раздел _группового модератора_, т.е. все, входящие в определенную группу, могут править/удалять посты.
                                                                                                                                                      Версия 0.3 с некоторыми добавлениями.

                                                                                                                                                      Добавлено
                                                                                                                                                      Содержание
                                                                                                                                                      Pascal FAQ
                                                                                                                                                      ------------------------------------
                                                                                                                                                      
                                                                                                                                                        1. {Как правильно оформить программу} 
                                                                                                                                                        2. {Сообщения и коды ошибок} 
                                                                                                                                                        3. Основы Паскаля 
                                                                                                                                                          * {Процедуры и функции Pascal} 
                                                                                                                                                          * {Примеры работы с указателями} 
                                                                                                                                                          * {Динамические массивы} 
                                                                                                                                                          * Очереди, списки, стеки 
                                                                                                                                                            * Списки  
                                                                                                                                                          * Работа с файлами 
                                                                                                                                                            * Есть ли на диске файл с данным именем?   
                                                                                                                                                        4. Математика и алгоритмы 
                                                                                                                                                          * {Базовые понятия} 
                                                                                                                                                          * Как упорядочить массив по возрастанию? Алгоритмы сортировки 
                                                                                                                                                            * {Метод пузырька} 
                                                                                                                                                            * {Метод выбора} 
                                                                                                                                                            * {Метод быстрой сортировки} 
                                                                                                                                                            * {Метод простых вставок} 
                                                                                                                                                            * {Метод бинарных вставок}  
                                                                                                                                                          * Поиск подпоследовательности в массиве 
                                                                                                                                                            * {Алгоритм СДВИГ-И} 
                                                                                                                                                            * {Бинарный поиск в упорядоченном массиве} 
                                                                                                                                                            * {Нечёткий поиск. Расстояние Левенштейна}  
                                                                                                                                                          * {Как работать с отдельными битами?} 
                                                                                                                                                          * Численные методы 
                                                                                                                                                            * {Приближённое представление числа в виде дроби} 
                                                                                                                                                            * {Вычисление интегралов различными методами} 
                                                                                                                                                            * {Разложение функций в степенные ряды}   
                                                                                                                                                        5. {Как упорядочить данные по возрастанию?} 
                                                                                                                                                        6. {Простая база данных} 
                                                                                                                                                        7. {Модуль для работы с длинными числами} 
                                                                                                                                                        8. Графика 
                                                                                                                                                          * Построение графика функции в 
                                                                                                                                                            * {декартовой С.К.} 
                                                                                                                                                            * {параметрической С.К.} 
                                                                                                                                                            * {полярной С.К.}  
                                                                                                                                                          * Работа с картинками. Обработка спрайтов, работа с BMP для TMT 
                                                                                                                                                          * Фракталы и хаос 
                                                                                                                                                            * {Множество Джулии} 
                                                                                                                                                            * Множество Мандельброта   
                                                                                                                                                        9. Объектно-Ориентированное Программирование (ООП) 
                                                                                                                                                          * Объекты 
                                                                                                                                                          * Виртуальные методы 
                                                                                                                                                          * Turbo Vision  
                                                                                                                                                        10. Советы программисту (Code Tuning)

                                                                                                                                                      Прикреплённый файлПрикреплённый файлOfflineFAQa3.rar (48.05 Кбайт, скачиваний: 1183)
                                                                                                                                                        Что мне не нравится в текущей системе форума - то, что надо зарегистрироваться для того, чтобы посмтореть FAQ. <_< А я его готовил для всех, включая гостей.

                                                                                                                                                        Цитата vot,8.12.04, 08:59 @
                                                                                                                                                        Идея ВИКИ мне не очень по душе, поскольку никто не застрахован от действий недоброжелателей или просто безграмотных людей, которые могут вам ТАКОГО наредактировать - что мало не покажется

                                                                                                                                                        Вики позволяет ограничивать доступ к ресурсам, поэтому можно прикрутить такую фишку к форуму, чтобы зарегеные пользователи (скажем, начиная с юниоров) смогли править тексты и добавлять свои.
                                                                                                                                                          Кто напишет задачку для Оффлайн-ФАК ?

                                                                                                                                                          Имеются сведения о студентах N учебных группах со своими реквизитами (имя, группа_номер, оценка по 4-ём предметам). Кол-во студентов заранее не известно.
                                                                                                                                                          Определить и вывести на экран группы с самым высоким средним баллом.


                                                                                                                                                          Оформить красиво (с отступами), комментариями и имеющими смысл именами переменных.
                                                                                                                                                          Использовать процедуры и функции, например
                                                                                                                                                          InputData;
                                                                                                                                                          CalcAverageMarks;
                                                                                                                                                          OutputHighMarks;

                                                                                                                                                          без модуля CRT.


                                                                                                                                                            А ещё нужна програмка, отображающая меню при помощи модуля CRT.
                                                                                                                                                            • Меню должно состоять из заголовка и списка элементов, в котором активный элемент подсвечивается.
                                                                                                                                                            • Всего 2 типа меню: вертикальное и горизонтальное.
                                                                                                                                                            • Меню должно располагаться по центру экрана и иметь разные настройки цветов, по выбору (константные значения).
                                                                                                                                                            • При нажатии на стрелки изменяется цвет активного элемента.
                                                                                                                                                              1. Элемент 1
                                                                                                                                                              2. Элемент 2 <- активный элемент
                                                                                                                                                              3. Элемент 3


                                                                                                                                                            Добавлено
                                                                                                                                                            Функция Menu должна возвращать индекс выбранного элемента. Для начала, пусть при выборе выводится название элемента.

                                                                                                                                                            Не забыть предусмотреть выход... :D
                                                                                                                                                              Вот навалял прогу для работы с записями и указателями. Также используется сортировка записей по двум критериям.
                                                                                                                                                              Зацените. Что нужно добавить/изменить? Хочу поместить в Offline-FAQ.

                                                                                                                                                              Есть идея написать тоже самое с использованием объектов, коллекций (ООП). Ну и добавить междумордие (интерфейс)... :whistle:
                                                                                                                                                              Прикреплённый файлПрикреплённый файлsortrec.rar (2.06 Кбайт, скачиваний: 303)
                                                                                                                                                                Меню
                                                                                                                                                                вертикальное
                                                                                                                                                                цвет выбирать нельзя
                                                                                                                                                                заголовок непишет
                                                                                                                                                                P.S.
                                                                                                                                                                Писал для других нужд, переделать и доработать лень, но хоть что-то.
                                                                                                                                                                Прикреплённый файлПрикреплённый файлMENU.ZIP (0.94 Кбайт, скачиваний: 321)
                                                                                                                                                                  вот тебе прога про студентов
                                                                                                                                                                  Прикреплённый файлПрикреплённый файлSTUD.zip (1.31 Кбайт, скачиваний: 325)
                                                                                                                                                                    Цитата Dima_R @ 22.12.04, 10:33
                                                                                                                                                                    Меню
                                                                                                                                                                    вертикальное
                                                                                                                                                                    цвет выбирать нельзя
                                                                                                                                                                    заголовок непишет
                                                                                                                                                                    P.S.
                                                                                                                                                                    Писал для других нужд, переделать и доработать лень, но хоть что-то.
                                                                                                                                                                    В общем, что-то высвечивает, конечно, но код немного непродуман. Можно сделать и компактнее, и понятнее, и красивее. 8-)
                                                                                                                                                                    Сам могу написать, но хочется, чтобы и другие поучаствовали. :whistle:
                                                                                                                                                                    Но всё равно спасибо!


                                                                                                                                                                    Vesper, хорошо. Только чего комменты на английском? ;) :)

                                                                                                                                                                    Чуток оформил программу и добавил функцию CalcStudAverage
                                                                                                                                                                    Сообщение отредактировано: Romtek -

                                                                                                                                                                    Прикреплённый файлПрикреплённый файлStud_avg.zip (1.67 Кбайт, скачиваний: 367)
                                                                                                                                                                      Romtek, не люблю транслит и кривые кодировки :-)))))
                                                                                                                                                                      ладно, пришел еще админ, терь будет время динамическое меню наваять
                                                                                                                                                                        Пример базы данных с использованием ООП (продолжение от SortRec)
                                                                                                                                                                        При первом запуске создаёт коллекцию и сохраняет в файл, и при повторном выводит её в отсортированном виде.
                                                                                                                                                                        Примечательно то, что с использованием объектов уменьшился код програмы.
                                                                                                                                                                        К тому же, легче понять, что делает программа.

                                                                                                                                                                        ExpandedWrap disabled
                                                                                                                                                                          unit Shop_obj;
                                                                                                                                                                           
                                                                                                                                                                          interface
                                                                                                                                                                          uses Objects;
                                                                                                                                                                           
                                                                                                                                                                          type
                                                                                                                                                                              TInfo = record
                                                                                                                                                                                Product: string [40]; { наименование товара }
                                                                                                                                                                                Price:  integer; { цена }
                                                                                                                                                                              end;
                                                                                                                                                                              PInfo = ^TInfo;
                                                                                                                                                                           
                                                                                                                                                                              TProductInfo = object (TObject)
                                                                                                                                                                                TransferRecord: TInfo;
                                                                                                                                                                                constructor Load (var S: TStream);
                                                                                                                                                                                procedure   Store(var S: TStream);
                                                                                                                                                                              end;
                                                                                                                                                                              PProductInfo = ^TProductInfo;
                                                                                                                                                                           
                                                                                                                                                                              TProductColl = object (TSortedCollection)
                                                                                                                                                                                function Compare (Key1, Key2: Pointer): Integer; virtual;
                                                                                                                                                                              end;
                                                                                                                                                                              PProductColl = ^TProductColl;
                                                                                                                                                                           
                                                                                                                                                                          procedure ListAll (C: PCollection);
                                                                                                                                                                           
                                                                                                                                                                          implementation
                                                                                                                                                                           
                                                                                                                                                                          Const
                                                                                                                                                                              RProductInfo: TStreamRec = (
                                                                                                                                                                                 ObjType: 54321;
                                                                                                                                                                                 VmtLink: Ofs(TypeOf(TProductInfo)^);
                                                                                                                                                                                 Load:    @TProductInfo.Load;
                                                                                                                                                                                 Store:   @TProductInfo.Store
                                                                                                                                                                               );
                                                                                                                                                                           
                                                                                                                                                                          constructor TProductInfo.Load(var S: TStream);
                                                                                                                                                                          begin
                                                                                                                                                                            inherited Init;
                                                                                                                                                                            S.Read(TransferRecord, SizeOf(TransferRecord));
                                                                                                                                                                          end;
                                                                                                                                                                           
                                                                                                                                                                          procedure TProductInfo.Store(var S: TStream);
                                                                                                                                                                          begin
                                                                                                                                                                            S.Write(TransferRecord, SizeOf(TransferRecord));
                                                                                                                                                                          end;
                                                                                                                                                                           
                                                                                                                                                                          {$I sortfunc.inc}
                                                                                                                                                                          function TProductColl.Compare(Key1, Key2: Pointer): Integer;
                                                                                                                                                                          begin
                                                                                                                                                                          {     Compare :=
                                                                                                                                                                                 PProductInfo(Key2)^.TransferRecord.Price -
                                                                                                                                                                                 PProductInfo(Key1)^.TransferRecord.Price;
                                                                                                                                                                          {}
                                                                                                                                                                               Compare := StrCmp (
                                                                                                                                                                                 PProductInfo(Key1)^.TransferRecord.Product,
                                                                                                                                                                                 PProductInfo(Key2)^.TransferRecord.Product
                                                                                                                                                                               )
                                                                                                                                                                          {}
                                                                                                                                                                          end;
                                                                                                                                                                           
                                                                                                                                                                          procedure ListAll (C: PCollection);
                                                                                                                                                                          var
                                                                                                                                                                           i: word;
                                                                                                                                                                           
                                                                                                                                                                           procedure ShowItem (P : PProductInfo); far;
                                                                                                                                                                           begin
                                                                                                                                                                               with P^.TransferRecord do
                                                                                                                                                                               begin
                                                                                                                                                                                    inc (i);
                                                                                                                                                                                    write   ( I : 2 );
                                                                                                                                                                                    write   ( ' ' : 4, Product );
                                                                                                                                                                                    writeln ( Price : 44 - Length (Product) );
                                                                                                                                                                               end;
                                                                                                                                                                           end;
                                                                                                                                                                           
                                                                                                                                                                          begin
                                                                                                                                                                            writeln;
                                                                                                                                                                            writeln ('Product' : 13, 'Price' : 37);
                                                                                                                                                                            for I := 1 to 50 do write ('=');
                                                                                                                                                                            writeln;
                                                                                                                                                                           
                                                                                                                                                                            i := 0;
                                                                                                                                                                            C^.ForEach(@ShowItem);
                                                                                                                                                                            readln;
                                                                                                                                                                          end;
                                                                                                                                                                           
                                                                                                                                                                          begin
                                                                                                                                                                            RegisterType (RProductInfo)
                                                                                                                                                                          end.


                                                                                                                                                                        ExpandedWrap disabled
                                                                                                                                                                          program Shop_OOP;
                                                                                                                                                                          uses Objects, shop_obj;
                                                                                                                                                                           
                                                                                                                                                                          Const
                                                                                                                                                                              Max = 5;
                                                                                                                                                                          var
                                                                                                                                                                              ProductColl: PProductColl;
                                                                                                                                                                              Info: PProductInfo;
                                                                                                                                                                           
                                                                                                                                                                          procedure InputData;
                                                                                                                                                                          var
                                                                                                                                                                            i, qnt: integer;
                                                                                                                                                                          begin
                                                                                                                                                                            repeat
                                                                                                                                                                                  write ('Enter quantity of products: '); readln (qnt);
                                                                                                                                                                                  if qnt = 0 then
                                                                                                                                                                                     writeln ('Quantity must be > 0');
                                                                                                                                                                            until qnt <> 0;
                                                                                                                                                                           
                                                                                                                                                                            {Randomize;}
                                                                                                                                                                            for i := 1 to qnt do
                                                                                                                                                                            begin
                                                                                                                                                                              Info := New (PProductInfo,Init);
                                                                                                                                                                              with Info^.TransferRecord do
                                                                                                                                                                              begin
                                                                                                                                                                                write ('Enter product name (up to 40 chars): '); readln (Product);
                                                                                                                                                                                write ('Enter price of product: '); readln (Price);
                                                                                                                                                                                {write ('Enter Name: '); readln (Product);
                                                                                                                                                                                Price := 1 + Random (20);}
                                                                                                                                                                              end;
                                                                                                                                                                              ProductColl^.Insert (Info);
                                                                                                                                                                            end;
                                                                                                                                                                          end;
                                                                                                                                                                           
                                                                                                                                                                          procedure Save;
                                                                                                                                                                          var F: TBufStream;
                                                                                                                                                                          begin
                                                                                                                                                                            F.Init ('shop_oop.dat', stCreate, 1024);
                                                                                                                                                                            ProductColl^.Store (F);
                                                                                                                                                                            if F.status <> stOk then
                                                                                                                                                                               writeln ('Error while writing to file.');
                                                                                                                                                                            F.Done;
                                                                                                                                                                          end;
                                                                                                                                                                           
                                                                                                                                                                          function Loaded: boolean;
                                                                                                                                                                          var F: TBufStream;
                                                                                                                                                                          begin
                                                                                                                                                                            F.Init ('shop_oop.dat', stOpenRead, 1024);
                                                                                                                                                                            if F.status = stOk then
                                                                                                                                                                            begin
                                                                                                                                                                                 ProductColl^.Load (F);
                                                                                                                                                                                 Loaded := (F.status = stOk);
                                                                                                                                                                            end;
                                                                                                                                                                            F.Done;
                                                                                                                                                                          end;
                                                                                                                                                                           
                                                                                                                                                                          begin
                                                                                                                                                                            ProductColl := New (PProductColl, Init (20, 5));
                                                                                                                                                                           
                                                                                                                                                                            if not Loaded then
                                                                                                                                                                               InputData; { заполнение коллекции }
                                                                                                                                                                           
                                                                                                                                                                            { форматированный вывод коллекции на экран }
                                                                                                                                                                            ListAll (ProductColl);
                                                                                                                                                                           
                                                                                                                                                                            { сохранение коллекции }
                                                                                                                                                                            Save;
                                                                                                                                                                           
                                                                                                                                                                            Dispose (ProductColl, Done);
                                                                                                                                                                          end.

                                                                                                                                                                        Прикреплённый файлПрикреплённый файлshop_oop.zip (2.23 Кбайт, скачиваний: 304)
                                                                                                                                                                          Цитата Romtek @ 21.12.04, 20:52
                                                                                                                                                                          А ещё нужна програмка, отображающая меню при помощи модуля CRT.
                                                                                                                                                                          Всё ещё нужна. см. (сообщ. #78)

                                                                                                                                                                          Также нужна программа, которая выводит текстовый файл на экран. При нажатии на пробел окно должно прокручиваться на размер экрана (без лишних наворотов, просто и понятно).
                                                                                                                                                                            Ура! Сдал первый экзамен. Вот написал, правда, снова не идеал, но намного лучше чем в прошлый раз. Плюс программка для чтения файлов.
                                                                                                                                                                            Прикреплённый файлПрикреплённый файлMenu_View.zip (2.29 Кбайт, скачиваний: 347)
                                                                                                                                                                              Спасибо! Именно то, что надо. ;)

                                                                                                                                                                              Замечания к программе MENU.PAS :

                                                                                                                                                                              1. ExpandedWrap disabled
                                                                                                                                                                                      Case ScanCode Of
                                                                                                                                                                                   
                                                                                                                                                                                  #77 : Begin
                                                                                                                                                                                          PrintElementMenu((St - 1) * Length(Menu[St]) + 2,3,St,False);
                                                                                                                                                                                          If St <> 7 Then
                                                                                                                                                                                           Inc(St)
                                                                                                                                                                                          Else
                                                                                                                                                                                           St := 1;
                                                                                                                                                                                          PrintElementMenu((St - 1) * Length(Menu[St]) + 2,3,St,True);
                                                                                                                                                                                        End;
                                                                                                                                                                                   
                                                                                                                                                                                  #75 : Begin
                                                                                                                                                                                          PrintElementMenu((St - 1) * Length(Menu[St]) + 2,3,St,False);
                                                                                                                                                                                          If St <> 1 Then
                                                                                                                                                                                           Dec(St)
                                                                                                                                                                                          Else
                                                                                                                                                                                           St := 7;
                                                                                                                                                                                          PrintElementMenu((St - 1) * Length(Menu[St]) + 2,3,St,True);
                                                                                                                                                                                        End
                                                                                                                                                                                      End;

                                                                                                                                                                                лучше упростить с помошью введения дополнительной функции, в которую будем передавать параметр True или False
                                                                                                                                                                                ExpandedWrap disabled
                                                                                                                                                                                  ...
                                                                                                                                                                                  procedure ShowMenu (Active: boolean);
                                                                                                                                                                                  begin
                                                                                                                                                                                    PrintElementMenu((St - 1) * Length(Menu[St]) + 2,3,St,Active);
                                                                                                                                                                                  end;
                                                                                                                                                                                  ...
                                                                                                                                                                                      Case ScanCode Of
                                                                                                                                                                                   
                                                                                                                                                                                  #77 : Begin
                                                                                                                                                                                          ShowMenu (False);
                                                                                                                                                                                          If St <> 7 Then
                                                                                                                                                                                           Inc(St)
                                                                                                                                                                                          Else
                                                                                                                                                                                           St := 1;
                                                                                                                                                                                          ShowMenu (True);
                                                                                                                                                                                        End;
                                                                                                                                                                                   
                                                                                                                                                                                  #75 : Begin
                                                                                                                                                                                          ShowMenu (False);
                                                                                                                                                                                          If St <> 1 Then
                                                                                                                                                                                           Dec(St)
                                                                                                                                                                                          Else
                                                                                                                                                                                           St := 7;
                                                                                                                                                                                          ShowMenu (True);
                                                                                                                                                                                        End
                                                                                                                                                                                      End;


                                                                                                                                                                              2. ExpandedWrap disabled
                                                                                                                                                                                    Case MainMenuHorizontal Of
                                                                                                                                                                                  1 : Begin
                                                                                                                                                                                        ClrScr;
                                                                                                                                                                                        WriteLn('Режим ј1');
                                                                                                                                                                                      End;
                                                                                                                                                                                  2 : Begin
                                                                                                                                                                                        ClrScr;
                                                                                                                                                                                        WriteLn('Режим ј2');
                                                                                                                                                                                      End;
                                                                                                                                                                                  3 : Begin
                                                                                                                                                                                        ClrScr;
                                                                                                                                                                                        WriteLn('Режим ј3');
                                                                                                                                                                                      End;
                                                                                                                                                                                  4 : Begin
                                                                                                                                                                                        ClrScr;
                                                                                                                                                                                        WriteLn('Режим ј4');
                                                                                                                                                                                      End;
                                                                                                                                                                                  5 : Begin
                                                                                                                                                                                        ClrScr;
                                                                                                                                                                                        WriteLn('Режим ј5');
                                                                                                                                                                                      End;
                                                                                                                                                                                  6 : Begin
                                                                                                                                                                                        ClrScr;
                                                                                                                                                                                        WriteLn('Режим ј6');
                                                                                                                                                                                      End;
                                                                                                                                                                                  7 : Halt;
                                                                                                                                                                                    End;

                                                                                                                                                                                по-моему, проще переписать в
                                                                                                                                                                                ExpandedWrap disabled
                                                                                                                                                                                  i := MainMenuVertical;
                                                                                                                                                                                  if i in [1..6] then
                                                                                                                                                                                    Menu[i];
                                                                                                                                                                                  else
                                                                                                                                                                                    Halt;
                                                                                                                                                                                аналогично и с MainMenuHorizontal

                                                                                                                                                                              3. Куски типа
                                                                                                                                                                                ExpandedWrap disabled
                                                                                                                                                                                    MainWindow(35,8,44,16,'Name');
                                                                                                                                                                                   
                                                                                                                                                                                    PrintElementMenu(35,9,1,True);
                                                                                                                                                                                   
                                                                                                                                                                                    For i := 2 to 7 do
                                                                                                                                                                                     Begin
                                                                                                                                                                                       PrintElementMenu(35,8 + i,i,False);
                                                                                                                                                                                     end;
                                                                                                                                                                                меня смущают. Никогда не пиши программу с константными значениями, максимум - значения высоты и ширины экрана (MaxX=80, MaxY=25). Остальное заменяй на общий код. Хочешь выставить значение центра по X - пиши так:
                                                                                                                                                                                ExpandedWrap disabled
                                                                                                                                                                                  (Hi (WindMin) - Lo (WindMin)) div 2;

                                                                                                                                                                                В крайнем случае, если не пишешь, то хотя бы одинаковые значения в программе обозначь одной константой.
                                                                                                                                                                                Например, значения 10, 9 желательно заменить на CX, CX-1
                                                                                                                                                                                Цитата Vesper @ 30.11.04, 19:27
                                                                                                                                                                                есть у меня прога, которая двигает крест в графике по экрану как прицел от курсорных клавиш, но там юзается модуль, который обрабатывает INT09, соответственно не подходит :( в принципе переделать под обычный readkey не проблема, завтра займусь

                                                                                                                                                                                А прога где ? ;)
                                                                                                                                                                                  Неотёсанные топики (Сообщ. #22) "Определение принадлежности точки к многоугольнику"
                                                                                                                                                                                  Кто может, проверьте почему при некоторых значениях выдаётся неверный результат.
                                                                                                                                                                                    Romtek, завис :( если не подвалят ченить ща будет
                                                                                                                                                                                      вот, только без комментов
                                                                                                                                                                                      Прикреплённый файлПрикреплённый файлCONTMOV2.zip (0.42 Кбайт, скачиваний: 304)
                                                                                                                                                                                        Чуток оформил твой код...
                                                                                                                                                                                        Надо только дополнить комментами.
                                                                                                                                                                                        ExpandedWrap disabled
                                                                                                                                                                                          uses graph, crt;
                                                                                                                                                                                           
                                                                                                                                                                                          procedure InitGraphics;
                                                                                                                                                                                          Const
                                                                                                                                                                                             PathToBGI = 'e:\bp\bgi';
                                                                                                                                                                                          var
                                                                                                                                                                                             gd, gm,
                                                                                                                                                                                             ErrorCode: Integer;
                                                                                                                                                                                           
                                                                                                                                                                                          begin
                                                                                                                                                                                            gd := VGA;
                                                                                                                                                                                            gm := VGAHi;
                                                                                                                                                                                            InitGraph (gd, gm, PathToBGI);
                                                                                                                                                                                            ErrorCode := GraphResult;
                                                                                                                                                                                            if ErrorCode <> grOk then
                                                                                                                                                                                            begin
                                                                                                                                                                                                 Writeln ('Graphics error: ', GraphErrorMsg (ErrorCode));
                                                                                                                                                                                                 Readln;
                                                                                                                                                                                                 Halt (1);
                                                                                                                                                                                            end;
                                                                                                                                                                                          end;
                                                                                                                                                                                           
                                                                                                                                                                                          Const
                                                                                                                                                                                             Border = 5;
                                                                                                                                                                                           
                                                                                                                                                                                          var
                                                                                                                                                                                             i, x, y,
                                                                                                                                                                                             mx, my :integer;
                                                                                                                                                                                             eexit:byte;
                                                                                                                                                                                             c:char;
                                                                                                                                                                                           
                                                                                                                                                                                          procedure DrawCursor;
                                                                                                                                                                                          begin
                                                                                                                                                                                            line (x - 15, y, x - 1, y);
                                                                                                                                                                                            line (x, y - 15, x, y - 1);
                                                                                                                                                                                            line (x + 15, y, x + 1, y);
                                                                                                                                                                                            line (x, y + 15, x, y + 1);
                                                                                                                                                                                          end;
                                                                                                                                                                                           
                                                                                                                                                                                          begin
                                                                                                                                                                                            eexit := 0;
                                                                                                                                                                                           
                                                                                                                                                                                            InitGraphics;
                                                                                                                                                                                            mx := GetMaxX;
                                                                                                                                                                                            my := GetMaxY;
                                                                                                                                                                                            x := mx div 2;
                                                                                                                                                                                            y := my div 2;
                                                                                                                                                                                           
                                                                                                                                                                                            OutText ('Press Esc to exit');
                                                                                                                                                                                            setcolor (Yellow);
                                                                                                                                                                                            DrawCursor;
                                                                                                                                                                                            repeat
                                                                                                                                                                                              c := readkey;
                                                                                                                                                                                              if c=#27 then eexit := 1;
                                                                                                                                                                                              if c=#0 then
                                                                                                                                                                                              begin
                                                                                                                                                                                                c := readkey;
                                                                                                                                                                                                setcolor (Black);
                                                                                                                                                                                                DrawCursor;
                                                                                                                                                                                                case c of
                                                                                                                                                                                                'K':
                                                                                                                                                                                                begin
                                                                                                                                                                                                     dec (x, 5);
                                                                                                                                                                                                     if x <= Border then
                                                                                                                                                                                                        x := Border;
                                                                                                                                                                                                end;
                                                                                                                                                                                           
                                                                                                                                                                                                'M':
                                                                                                                                                                                                begin
                                                                                                                                                                                                     inc (x, 5);
                                                                                                                                                                                                     if x >= mx - Border then
                                                                                                                                                                                                        x := mx - Border;
                                                                                                                                                                                                end;
                                                                                                                                                                                           
                                                                                                                                                                                                'H':
                                                                                                                                                                                                begin
                                                                                                                                                                                                     dec (y, 5);
                                                                                                                                                                                                     if y <= Border then
                                                                                                                                                                                                        y := Border;
                                                                                                                                                                                                end;
                                                                                                                                                                                           
                                                                                                                                                                                                'P':
                                                                                                                                                                                                begin
                                                                                                                                                                                                     inc (y, 5);
                                                                                                                                                                                                     if y >= my - Border then
                                                                                                                                                                                                        y := my - Border;
                                                                                                                                                                                                end;
                                                                                                                                                                                                end;
                                                                                                                                                                                           
                                                                                                                                                                                                setcolor (Yellow);
                                                                                                                                                                                                DrawCursor;
                                                                                                                                                                                              end;
                                                                                                                                                                                            until eexit > 0;
                                                                                                                                                                                            closegraph;
                                                                                                                                                                                          end.
                                                                                                                                                                                          ExpandedWrap disabled
                                                                                                                                                                                            Program Animation;
                                                                                                                                                                                             
                                                                                                                                                                                            uses Crt,Graph;
                                                                                                                                                                                             
                                                                                                                                                                                            const
                                                                                                                                                                                             Triangle: array[1..4] of PointType = ((X: 50; Y: 100), (X: 100; Y:100),
                                                                                                                                                                                               (X: 150; Y: 150), (X:  50; Y: 100));
                                                                                                                                                                                             
                                                                                                                                                                                            var Gd, Gm, Ap: Integer;
                                                                                                                                                                                                Xpos : integer;
                                                                                                                                                                                             
                                                                                                                                                                                                STab : Array[0..199] of integer;
                                                                                                                                                                                             
                                                                                                                                                                                            Procedure Retrace;
                                                                                                                                                                                            begin
                                                                                                                                                                                              while (Port[$03DA] and $8 = 0) do;
                                                                                                                                                                                            end;
                                                                                                                                                                                             
                                                                                                                                                                                            Procedure Flip;
                                                                                                                                                                                            begin
                                                                                                                                                                                              SetActivePage(Ap);
                                                                                                                                                                                              Ap := (Ap + 1) and 1;
                                                                                                                                                                                              SetVisualPage(Ap);
                                                                                                                                                                                            end;
                                                                                                                                                                                             
                                                                                                                                                                                            Function InitializeGraph : boolean;
                                                                                                                                                                                            begin
                                                                                                                                                                                             Gd := VGA;
                                                                                                                                                                                             InitGraph(Gd, Gm,'..\bgi');
                                                                                                                                                                                             if GraphResult <> grOk then Halt(1);
                                                                                                                                                                                             If (Gd = HercMono) or (Gd = EGA) or (Gd = EGA64) or (Gd = VGA) then begin
                                                                                                                                                                                              InitializeGraph := True;
                                                                                                                                                                                              Flip;
                                                                                                                                                                                             end else begin
                                                                                                                                                                                              OutText('No paging supported.');
                                                                                                                                                                                              InitializeGraph := False;
                                                                                                                                                                                             end;
                                                                                                                                                                                            end;
                                                                                                                                                                                             
                                                                                                                                                                                            begin
                                                                                                                                                                                             If InitializeGraph then begin
                                                                                                                                                                                              For Stab[0] := 1 to 199 do
                                                                                                                                                                                               Stab[Stab[0]] := round(50*Sin( (Stab[0] * (360/199)*pi) / 180));
                                                                                                                                                                                              Stab[0] := 0;
                                                                                                                                                                                              repeat
                                                                                                                                                                                               Xpos := (Xpos +1) mod 200;
                                                                                                                                                                                               ClearDevice;
                                                                                                                                                                                               Circle(Xpos+50,100,50);
                                                                                                                                                                                               Circle(250-Xpos,100,50);
                                                                                                                                                                                               DrawPoly(SizeOf(Triangle) div Sizeof(PointType), Triangle);
                                                                                                                                                                                               Triangle[1].Y := 50+Stab[Xpos] div 2;
                                                                                                                                                                                               Triangle[1].X := 100-Stab[Xpos] div 2;
                                                                                                                                                                                               Triangle[2].Y := 100+Stab[Xpos];
                                                                                                                                                                                               Triangle[2].X := 100-Stab[Xpos];
                                                                                                                                                                                               Triangle[3].X := 150+Stab[Xpos];
                                                                                                                                                                                               Triangle[4] := Triangle[1];
                                                                                                                                                                                               Line(60-Stab[Xpos],50,60+Stab[Xpos],10);
                                                                                                                                                                                               Retrace;
                                                                                                                                                                                               Flip;
                                                                                                                                                                                              until keypressed;
                                                                                                                                                                                             end;
                                                                                                                                                                                             Readkey;
                                                                                                                                                                                             CloseGraph;
                                                                                                                                                                                            end.


                                                                                                                                                                                          Кто может составить статью по применению видеостраниц для анимации? Описать всё популярным языком.
                                                                                                                                                                                            Цитата Vesper @
                                                                                                                                                                                            так, вот обещанная прога, переработал ее под объекты, разница только в том, что нельзя непосредственно подсмотреть скажем буфер.


                                                                                                                                                                                            Цитата Vesper @
                                                                                                                                                                                            В соседнем файле (BufView.pas) пример использования буферизованного ввода для быстрого вывода BMP файла на экран.


                                                                                                                                                                                            Vesper, а не мог бы ты составить простой пример без графики?
                                                                                                                                                                                            сообщ. №46
                                                                                                                                                                                              ну задач таких немного, где обязательно читать информацию разными блоками... ядро в принципе одно и то же, только его использование нужно менять
                                                                                                                                                                                              надо подумать над такой задачей (подобрать нормальный пример)
                                                                                                                                                                                                Вот видел нужен модуль для работы с БМП из ТМТ. Кидаю...
                                                                                                                                                                                                Прикреплённый файлПрикреплённый файлbmp.rar (3.18 Кбайт, скачиваний: 337)
                                                                                                                                                                                                  Цитата Arsuit @
                                                                                                                                                                                                  Вот видел нужен модуль для работы с БМП из ТМТ. Кидаю...

                                                                                                                                                                                                  Работа с картинками
                                                                                                                                                                                                    Цитата Arsuit @
                                                                                                                                                                                                    Кидаю...
                                                                                                                                                                                                    Я же просил не кидать, а оформлять как следует.
                                                                                                                                                                                                    Хочу видеть статьи, готовые к выпуску, а не модуль с программой.
                                                                                                                                                                                                      Цитата Romtek @
                                                                                                                                                                                                      Я же просил не кидать, а оформлять как следует.

                                                                                                                                                                                                      Ну там есть небольшая документация
                                                                                                                                                                                                        Цитата Arsuit @
                                                                                                                                                                                                        Ну там есть небольшая документация
                                                                                                                                                                                                        Я видел, разумеется. :)
                                                                                                                                                                                                        Но описание нужно ведь оформить, а кто этим должен заниматься? Можешь прямо здесь, в этой теме, написать сообщение с оформленным средствами форума описанием.
                                                                                                                                                                                                          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                                                                                                                                                                                          0 пользователей:


                                                                                                                                                                                                          Рейтинг@Mail.ru
                                                                                                                                                                                                          [ Script execution time: 0,2077 ]   [ 16 queries used ]   [ Generated: 19.07.25, 02:51 GMT ]