<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593085</guid>
        <pubDate>Thu, 16 Apr 2015 14:15:40 +0000</pubDate>
        <title>рисование обрамления таблицы в ASCII-art</title>
        <link>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593085</link>
        <description><![CDATA[p1qb0d: 1) switch(i) придется из внешнего цикла перенести во внутренний, если он будет определять s_ch. Если не будет - можно оставить во внешнем, но определение s_ch придется переносить во внутренний цикл (j) полюбому.<br><br>2) В оба switch нужно добавить case 1: В нем, если i = 1 (или j) И j &gt; 2 (или i), то нужно будет s_ch присвоить более интересное значение от 0 до F. От 0 до 9 легко, нужно только из i (j) вычесть 3 и прибавить 30h. От A до F соответственно прибавлять 41h (судя по картинке ТЗ).<br><br>3) Заполнение основной таблицы что-то типа s_ch = ((i - 3) &lt;&lt; 4) + (j - 3);<br><br>Но тут еще есть что пооптимизировать...]]></description>
        <author>p1qb0d</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593083</guid>
        <pubDate>Thu, 16 Apr 2015 14:13:00 +0000</pubDate>
        <title>рисование обрамления таблицы в ASCII-art</title>
        <link>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593083</link>
        <description><![CDATA[Dart_Sitius: <strong class='tag-b'>AVA12</strong>, <strong class='tag-b'>p1qb0d</strong>, понял ваши идеи. во многом они похожи, и самое главное, отличаются от моей идеи. я выводил не построчно, и поэтому уголки не вписывались в мой алгоритм, а их вывод стоял особняком. если же выводитть построчно, то все гармонично.<br>
спасибо, буду пробовать&#33; если возникнут еще идеи - можете сюда их писать.]]></description>
        <author>Dart_Sitius</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593076</guid>
        <pubDate>Thu, 16 Apr 2015 14:03:27 +0000</pubDate>
        <title>рисование обрамления таблицы в ASCII-art</title>
        <link>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593076</link>
        <description><![CDATA[AVA12: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Хранить 16 байт, если используется 4 байта - слишком шикарно. Лучше в коде этим переменным присваивать константы</div></div><br>
Выбросить 12 байт данных и 12 байт кода, чтобы вместо них впендюрить, как минимум, 40 байт кода? Ну, не знаю...]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593074</guid>
        <pubDate>Thu, 16 Apr 2015 13:49:17 +0000</pubDate>
        <title>рисование обрамления таблицы в ASCII-art</title>
        <link>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593074</link>
        <description><![CDATA[Dart_Sitius: Спасибо за ответы&#33; Выкладываю пока полное ТЗ:<br>
1. Таблица ASCII-символов 16х16, символы по порядку слева направо сверху вниз<br>
2. Таблица очерчена символами двойного бордюра<br>
3. Сверху и слева от таблицы отображена нумерация столбцов и строк числами от 0 до F.<br>
4. Внешние границы также символами двойного бордюра<br>
5. Во всех режимах таблица строго посередине экрана<br>
выводить лучше напрямую в память (меньше места займет, чем через int 10h)<br>
Сейчас буду вникать в ответы<br>
<span class="b-attach" data-size="7288" data-hits="2548" data-attach-id="44977" data-attach-post-id="3593074">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3593074&amp;attach_id=44977' title='Скачать файл' target='_blank'>2015_04_16_18_45_53_DOSBox_0.74__Cpu_speed__max_100__cycles__Frameskip__0__Program____DOSBOX.png</a> (, : 2548)
		</span>]]></description>
        <author>Dart_Sitius</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593071</guid>
        <pubDate>Thu, 16 Apr 2015 13:36:39 +0000</pubDate>
        <title>рисование обрамления таблицы в ASCII-art</title>
        <link>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593071</link>
        <description><![CDATA[p1qb0d: Хранить 16 байт, если используется 4 байта - слишком шикарно. Лучше в коде этим переменным присваивать константы, потому что код все равно нужно генерить - хоть константу, хоть обращение к ячейке памяти.]]></description>
        <author>p1qb0d</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593065</guid>
        <pubDate>Thu, 16 Apr 2015 13:22:02 +0000</pubDate>
        <title>рисование обрамления таблицы в ASCII-art</title>
        <link>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593065</link>
        <description><![CDATA[AVA12: Гм, действительно, в коде автора таблица имеет размер 20*20 знакомест. Значит, все сложно. Есть идея алгоритма, который берет компактное (n + m + 2 байта) описание любой таблицы:<br><br>В таблице может быть 4 вида текстовых строк: верхняя и нижняя рамка, горизонтальная граница и ячейки. В строке могут быть 4 вида символов: левая и правая рамка, вертикальная граница/пересечение, горизональная линия/пробел. Все возможные варианты символов храним в таблице 4*4 байт. Описание строки таблицы: количество столбцов n (1 байт), затем n байт с ширинами столбцов (без учета границ). Описание столбца таблицы: количество строк m (1 байт), затем m байт с высотами строк (без учета границ). Чтобы не насиловать ОС, выводимые символы можно складывать во временный буфер, а затем печатать сразу всю строку.<br><br>Цикл рисования строки текста принимает тип строки, выводит левую границу, для каждого столбца - нужное количество пробелов/линий плюс (кроме последнего столбца) вертикальную границу/пересечение, правую границу, перевод строки.<br><br>Внешний цикл вызывает цикл рисования строки: верхняя рамка, затем для каждой строки таблицы нужное количество ячеек плюс (кроме последней строки) горизонтальная граница, затем нижняя рамка.<br><br>Уложить все это в 190 байт - элементарно.]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593029</guid>
        <pubDate>Thu, 16 Apr 2015 12:14:34 +0000</pubDate>
        <title>рисование обрамления таблицы в ASCII-art</title>
        <link>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593029</link>
        <description><![CDATA[p1qb0d: Действительно, без оригинального ТЗ непонятно что требуется.<br>
<br>
Здесь верно указали, что есть функция вывода текста. Но даже если пишется напрямую в память, то все равно будет выводиться построчно, то есть, та же функция вывода текста.<br>
<br>
Текст надо формировать, соответственно, строками.<br>
<br>
Непонятно в каких координатах нужно выводить текст. Но есть определение arr[][], из которого телепатически следует, что:<br>
1) Верхняя строка заголовка и левого столбца нумерации по одной свободной ячейке.<br>
2) На 20-й строке таблица заканчивается очередной рамкой.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">/* Итого: Строки от 0 до 19 */</div><div class="code_line">&nbsp;</div><div class="code_line">for (i = 0; i &#60; 20; i++){</div><div class="code_line">&nbsp;</div><div class="code_line">/* Если это 0-я строка, тогда рамка &quot;верхняя&quot; */</div><div class="code_line">&nbsp;&nbsp; &nbsp;switch(i){</div><div class="code_line">/* Устанавливаем коды левой, средней и правой крестовины, и прогон */</div><div class="code_line">&nbsp;&nbsp; &nbsp;case 0:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;l_ch = 201;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;m_ch = 203;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;r_ch = 187;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;s_ch = 205;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp;case 2:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;l_ch = 204;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;m_ch = 206;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;r_ch = 185;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;s_ch = 205;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp;case 19:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;l_ch = 200;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;m_ch = 202;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;r_ch = 188;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;s_ch = 205;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp;default:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;l_ch = 186;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;m_ch = 186;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;r_ch = 186;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;s_ch = 32;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">/* Столбцы от 0 до 19: */</div><div class="code_line">&nbsp;&nbsp;for (j = 0; j &#60; 20; j++){</div><div class="code_line">&nbsp;</div><div class="code_line">/* Набиваем выводимую строку */</div><div class="code_line">&nbsp;&nbsp; &nbsp;switch(j){</div><div class="code_line">&nbsp;&nbsp; &nbsp;case 0:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;*(buf + j) = l_ch;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp;case 2:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;*(buf + j) = m_ch;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp;case 19:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;*(buf + j) = r_ch;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp;default:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;*(buf + j) = s_ch;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">/* Строка готова. Обнуляем кончик и выводим: */</div><div class="code_line">&nbsp;&nbsp;*(buf + 20) = 0;</div><div class="code_line">&nbsp;&nbsp;printf(&quot;%s\n&quot;, buf);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">return 0; /* Everything went OK */</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Осталось только переписать на asm. Думаю, с этим не должно возникнуть проблем.]]></description>
        <author>p1qb0d</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593007</guid>
        <pubDate>Thu, 16 Apr 2015 10:53:21 +0000</pubDate>
        <title>рисование обрамления таблицы в ASCII-art</title>
        <link>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3593007</link>
        <description><![CDATA[AVA12: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>190 байт ограничение на всю программу</div></div><br>
Смутно подозреваю, что здесь опять неправильно поставлена задача. Потому что на картинке таблица имеет размер 18*6 знакомест, если добавить переводы строк, то получится 120 байт, вызов функции DOS для вывода текста и завершение программы - порядка 10 байт. Так что если компилировать в формат COM, то отведенного объема хватит с лихвой, и еще останется место под пасхальные яйца. Автор, как же на самом деле формулируется задача?]]></description>
        <author>AVA12</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3592874</guid>
        <pubDate>Wed, 15 Apr 2015 21:19:30 +0000</pubDate>
        <title>рисование обрамления таблицы в ASCII-art</title>
        <link>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3592874</link>
        <description><![CDATA[Dart_Sitius: <strong class='tag-b'>amk</strong>, почти угадали. 190 байт ограничение на всю программу. в этом смысл - бьюсь за каждый байт.<br>
насчет табличек, я не понял, как их связать еще и с координатами.<br>
т.е я могу записать символы уголков и крестовин в один массив: db 0C9h,0CBh,0BBh,0CCh,0CEh,0B9h,0C8h,0CDh,0BCh - вот они.<br>
как мне теперь компактно вывести эти символы именно в нужных координатах? (0,0) (0, 2) ...]]></description>
        <author>Dart_Sitius</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3592870</guid>
        <pubDate>Wed, 15 Apr 2015 20:45:24 +0000</pubDate>
        <title>рисование обрамления таблицы в ASCII-art</title>
        <link>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3592870</link>
        <description><![CDATA[amk: У тебя для таблиц всего двадцать символов, включая прямые участки. Напиши формулу, которая просто будет выдавать уникальный номер символа от 0 до, скажем, до 32. Можно, чтобы одному символу соответствовали несколько номеров. А дальше сделай табличку длиной 32 символа и выбирай из неё нужный код. Это будет компактнее, чем хитрая формула, вычисляющая сам код символа.<br>
<br>
У тебя что, программа длиной всего 200 байт, что тебе лишних 50 байт жалко?<br>
Кстати, программа не может занимать меньше 512 байт даже на дискете, на жёстком диске соответственно 4096 байт. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-04-15T20:52:13+00:00">15.04.15, 20:52</time></span></span><br>
Ошибся. Всего символов рамочек 40. Но если ты пользуешься только двойной рамкой, то их остаётся одиннадцать. вполне можно разместить в табличку длиной 16.<br>
<br>
Один из вариантов.<br>
Рамочка в клетке может продолжаться в четырёх направлениях. Записывая имеющиеся направления в виде двоичного числа, получаешь значение от 0 до 15. Четыре из них (1, 2, 4, 8) вообще говоря невозможны, остальные соответствуют пробелу и твоим 11 символам.]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3592850</guid>
        <pubDate>Wed, 15 Apr 2015 19:45:29 +0000</pubDate>
        <title>рисование обрамления таблицы в ASCII-art</title>
        <link>https://forum.sources.ru/index.php?showtopic=401528&amp;view=findpost&amp;p=3592850</link>
        <description><![CDATA[Dart_Sitius: Представьте, что у вас есть задача нарисовать ASCII символами следующее обрамление таблицы <span class="b-attach" data-size="1669" data-hits="1442" data-attach-id="44974" data-attach-post-id="0">
			<span class="b-attach__title">фыв</span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=0&amp;attach_id=44974' title='Скачать файл' target='_blank'>2015_04_15_19_10_48_DOSBox_0.74__Cpu_speed__max_100__cycles__Frameskip__0__Program____DOSBOX.png</a> (, : 1442)
		</span>.<br>
Нарисовать нужно в DOS на assembler такими символами <a class='tag-url' href='http://en.wikipedia.org/wiki/Box-drawing_character#DOS' target='_blank'>http://en.wikipedia.org/wiki/Box-drawing_character#DOS</a>.<br>
Основная суть в том, чтобы получить откомпилированный файл как можно меньшего размера, т.е количество операций и вообще данных в исходнике нужно минимизировать.<br>
На самом деле это лишь часть всего задания, но загвоздка именно в этом.<br>
Само обрамление я нарисовал, но только символами &#39;=&#39; и &#39;||&#39;, т.е без уголочков и крестовин.<br>
А эти уголочки и крестовины - это в моем алгоритме вырожденный случай, их нужно рисовать отдельно и соответственно код разрастается в полтора раза только из-за них.<br>
Я не могу ничего придумать, кроме следующего алгоритма (псевдокод на СИ):<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">int arr[][] = {</div><div class="code_line">{0,0,a}, {0,2,b}, {0,19,c},</div><div class="code_line">{2,0,d}, {2,2,e}, {2,19,f},</div><div class="code_line">{19,0,g}, {19,2,h}, {19,19,i}</div><div class="code_line">};</div><div class="code_line">for (int i = 0; i &#60; 9; ++i) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;vga[arr[i][0]][arr[i][1]] = arr[i][2];</div><div class="code_line">}</div></ol></div></div></div></div><br>
Здесь задано можно сказать отображение (i, j) -&gt; symbol. Мы пробегаемся по этому отображению и рисуем в позиции (i, j) symbol.<br>
Это довольно стандартный прием. Но из-за этого хардкода этого &quot;отображения&quot; файл вырастает на 50 байт.<br>
Какие еще можете посоветовать приемы, алгоритм?<br>
Т.е еще раз, подытожу:<br>
Нужно поставить в заданных позициях уголочки так, чтобы занимаемое место кода было наименьшим.<br>
Я думал еще над тем, чтобы найти закономерность в ascii кодах уголочков (на картинке в аттаче эти коды), и тогда не придется хардкодить. Можно было бы составить формулу f, подставлять туда i, а она выдавала бы ascii код i-го уголочка. Но закономерности не вижу.]]></description>
        <author>Dart_Sitius</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	