<?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=41888&amp;view=findpost&amp;p=340260</guid>
        <pubDate>Sat, 17 Apr 2004 14:03:37 +0000</pubDate>
        <title>Задачи по матрицам</title>
        <link>https://forum.sources.ru/index.php?showtopic=41888&amp;view=findpost&amp;p=340260</link>
        <description><![CDATA[romtek: <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">{ From : Vadim Serov &nbsp; 26.10.97</div><div class="code_line">&nbsp;Subj : Определение Седловой Точки в Матрице</div><div class="code_line">}</div><div class="code_line">const</div><div class="code_line">&nbsp;MAX=20;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;line=Array[1..MAX] of Extended;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;smin:Extended;</div><div class="code_line">&nbsp;imin:Integer;</div><div class="code_line">&nbsp;i,j,n,m:Integer;</div><div class="code_line">&nbsp;x:Array[1..MAX] of line;</div><div class="code_line">&nbsp;buf:line;</div><div class="code_line">&nbsp;juf:Array[1..MAX] of Integer;</div><div class="code_line">&nbsp;inp:Text;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;Assign(inp,&#39;matrix.txt&#39;);</div><div class="code_line">&nbsp;Reset(inp);</div><div class="code_line">&nbsp;Read(inp,n,m);{количество стpок и столбцов}</div><div class="code_line">&nbsp;if (MAX&#60;n) or (MAX&#60;m) then</div><div class="code_line">&nbsp;&nbsp;Write(&#39;нежелаю считать! &#39;)</div><div class="code_line">&nbsp;else begin</div><div class="code_line">&nbsp;&nbsp;for i:=1 to n do</div><div class="code_line">&nbsp;&nbsp; for j:=1 to m do</div><div class="code_line">&nbsp;&nbsp; &nbsp;Read(inp,x[i][j]);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;for i:=1 to n do begin</div><div class="code_line">&nbsp;&nbsp; buf[i]:=x[i][1];</div><div class="code_line">&nbsp;&nbsp; juf[i]:=1;</div><div class="code_line">&nbsp;&nbsp; for j:=2 to m do</div><div class="code_line">&nbsp;&nbsp; &nbsp;if buf[i]&#60;x[i][j] then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; buf[i]:=x[i][j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; juf[i]:=j</div><div class="code_line">&nbsp;&nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;smin:=buf[1];</div><div class="code_line">&nbsp;&nbsp;for i:=2 to n do begin</div><div class="code_line">&nbsp;&nbsp; if smin&#62;buf[i] then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;smin:=buf[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp;imin:=i</div><div class="code_line">&nbsp;&nbsp; end</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Writeln;</div><div class="code_line">&nbsp;&nbsp;Write(&#39;Седловая точка x=&#39;,juf[imin],&#39; &nbsp;y=&#39;,imin)</div><div class="code_line">&nbsp;end;</div><div class="code_line">&nbsp;Close(inp)</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
== matrix.txt ==<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">5 6</div><div class="code_line">7 6 6 5 7 15</div><div class="code_line">6 3 5 1 2 9</div><div class="code_line">10 5 9 2 3 19</div><div class="code_line">5 8 1 3 5 6</div><div class="code_line">10 9 5 6 9 10</div></ol></div></div></div></div>]]></description>
        <author>romtek</author>
        <category>Pascal: Структуры данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=41888&amp;view=findpost&amp;p=273347</guid>
        <pubDate>Tue, 30 Dec 2003 20:53:35 +0000</pubDate>
        <title>Задачи по матрицам</title>
        <link>https://forum.sources.ru/index.php?showtopic=41888&amp;view=findpost&amp;p=273347</link>
        <description><![CDATA[Some1: <span class='tag-size' data-value='12' style='font-size:12pt;'>Удаление из матрицы строки или столбца<br>
</span><br>
<br>
Ужасные и злобные преподы опять задали неразрешимую задачу? Они угрожающе намекают вам, что без решения задачи с таким условием уже можно просыпаться утром пораньше, чтобы внимательно изучать почитаемую всеми профессию дворника ?<br>
Тогда эта тема для вас %))))<br>
<br>
Итак вам нужно удалить из матрицы строку или столбец. Как это сделать?<br>
<br>
Для начала мы определимся, как будет задана у нас матрица.<br>
Тут есть два явных варианта:<br>
<span class='tag-size' data-value='14' style='font-size:14pt;'>Первый</span><br>
для особо непридирчивых преподов, если вы скажем учитесь на сварщика, и задачу подобного плана вы не увидите больше никогда в жизни, разве что в кошмарах. Тогда мы будем задавать статическую матрицу.<br>
Обычно в таких задачах указан размер матрицы. Иногда она бывает квадратной, и её размер часто в условии указывают буквой N. Это число обозначает количество элементов по горизонтали и по вертикали. Бывает также, что матрица не квадратная. Тогда тем или иным способом у вас должно быть в условии указаны размеры по горизонтали и по вертикали матрицы. В общем если эти размеры есть, то у вас с вероятностью 80% матрица должна быть объявлена статически.<br>
Я опущу в этой теме вопросы заполнения матрицы числами, и вывод данных на экран. Об этом можно будет (позже) почитать в одной из тем этого раздела.<br>
Сразу перейду к способу удаления элемента матрицы:<br>
Допустим матрица у нас задана как <strong class='tag-b'>m:array[1..7,1..5] of real;</strong><br>
Сначала мы должны узнать, какую строку (или столбец) нам следует удалить.<br>
Попросим пользователя ввести этот номер в переменную <strong class='tag-b'>k</strong>.<br>
Удаляя строку мы должны добраться до нужной строки в матрице, и все последующие строки после нужной мы будем смещать назад.<br>
Например были строки такие:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><span class="tag-font" data-value="Courier" style="font-family:Courier">m 12345<br>
1 <span class="tag-color tag-color-named" data-value="green" style="color: green">11111</span><br>
2 <span class="tag-color tag-color-named" data-value="green" style="color: green">22222</span><br>
3 <span class="tag-color tag-color-named" data-value="green" style="color: green">33333</span></span> - эту строку будем удалять<span class="tag-font" data-value="Courier" style="font-family:Courier"><br>
4 <span class="tag-color tag-color-named" data-value="green" style="color: green">44444</span><br>
5 <span class="tag-color tag-color-named" data-value="green" style="color: green">55555</span><br>
6 <span class="tag-color tag-color-named" data-value="green" style="color: green">66666</span><br>
7 <span class="tag-color tag-color-named" data-value="green" style="color: green">77777</span></span></div></div><br>
И нужно удалить строку номер 3.<br>
Тогда мы переместим данные из строки 4 в строку 3, затем из строки 5 в строку 4, затем из строки 6 в строку 5, после этого из строки 7 в строку 6. И всё. У нас удалятся все данные в строке 3, а все остальные строки сдвинутся. получится так:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><span class="tag-font" data-value="Courier" style="font-family:Courier">m 12345<br>
1 <span class="tag-color tag-color-named" data-value="green" style="color: green">11111</span><br>
2 <span class="tag-color tag-color-named" data-value="green" style="color: green">22222</span><br>
3 <span class="tag-color tag-color-named" data-value="green" style="color: green">44444</span><br>
4 <span class="tag-color tag-color-named" data-value="green" style="color: green">55555</span><br>
5 <span class="tag-color tag-color-named" data-value="green" style="color: green">66666</span><br>
6 <span class="tag-color tag-color-named" data-value="green" style="color: green">77777</span><br>
7 <span class="tag-color tag-color-named" data-value="green" style="color: green">77777</span></span> - эти данные нам уже на самом деле не нужны. Но они остались</div></div><br>
После этого размер матрицы по вертикали станет меньше. И поэтому нам нужно при выводе вывести столбцы с первого по 6 а не по 7. Чтобы отслеживать, что у нас уже только 6 столбцов, лучше завести переменную, которая вначале была бы равна размеру матрицы по вертикали, а при удалении строки уменьшалась бы на 1. Таким образом можно удалить из матрицы несколько строк, несколько раз уменьшив эту переменную. И тогда при выводе на экран мы сможем используя эту переменную вывести нужное количество строк.<br>
Как видно, данные перемещаются по алгоритму - &quot;Переместить из следующей в предыдущую, перейти в следующую. Повторить пока есть следующая&quot;.<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">const</div><div class="code_line">&nbsp;&nbsp;xsize:byte=5;</div><div class="code_line">&nbsp;&nbsp;ysize:byte=7;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;k:byte;</div><div class="code_line">&nbsp;&nbsp;m:array[1..ysize,1..xsize] of real;</div><div class="code_line">&nbsp;&nbsp;ys:byte; {Нам она нужна, чтобы изменить размер матрицы после удаления}</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;write(&#39;Введите номер строки, который удалять: &#39;);</div><div class="code_line">&nbsp;&nbsp;readln(k);</div><div class="code_line">&nbsp;&nbsp;... {тут вводим данные матрицы}</div><div class="code_line">&nbsp;&nbsp;ys:=ysize; {Установим начальное значение для количества строк в матрице}</div><div class="code_line">&nbsp;&nbsp;for o:=k+1 to ys do {Будем перебирать все строки после удаляемой}</div><div class="code_line">&nbsp;&nbsp;for p:=1 to xsize do m[o-1,p]:=m[o,p]; {Каждый элемент строки переносим на один вверх}</div><div class="code_line">&nbsp;&nbsp;dec(ys); {Укажем, что матрица уже на одну строку меньше}</div><div class="code_line">&nbsp;&nbsp;... {Тут выводим матрицу}</div><div class="code_line">end.</div></ol></div></div></div></div><br>
Для удаления столбца из матрицы, я надеюсь, вы уже догадались, нужно сделать тоже самое.<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">const</div><div class="code_line">&nbsp;&nbsp;xsize:byte=5;</div><div class="code_line">&nbsp;&nbsp;ysize:byte=7;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;k:byte;</div><div class="code_line">&nbsp;&nbsp;m:array[1..ysize,1..xsize] of real;</div><div class="code_line">&nbsp;&nbsp;xs:byte; {Нам она нужна, чтобы изменить размер матрицы после удаления}</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;write(&#39;Введите номер столбца, который удалять: &#39;);</div><div class="code_line">&nbsp;&nbsp;readln(k);</div><div class="code_line">&nbsp;&nbsp;... {тут вводим данные матрицы}</div><div class="code_line">&nbsp;&nbsp;xs:=xsize; {Установим начальное значение для количества столбцов в матрице}</div><div class="code_line">&nbsp;&nbsp;for o:=1 to ysize do {Будем перебирать все строки}</div><div class="code_line">&nbsp;&nbsp;for p:=k+1 to xs do m[o,p-1]:=m[o,p]; {элемент из каждого столбца переносим на один влево}</div><div class="code_line">&nbsp;&nbsp;dec(xs); {Укажем, что матрица уже на один столбец меньше}</div><div class="code_line">&nbsp;&nbsp;... {Тут выводим матрицу}</div><div class="code_line">end.</div></ol></div></div></div></div><br>
Оба алгоритма можно легко комбинировать, для того, чтобы удалить и строку, и столбец.<br>
<br>
<span class='tag-size' data-value='14' style='font-size:14pt;'>Второй</span><br>
для тех преподов, которые почти всегда ходят в шапочке чтобы никто не видел рожек, пробивающихся у них под волосами.<br>
Такие часто водятся в кафедрах, связанных с компьютерными технологиями, часами сидят под радиационным облучением мониторов, и мутируют, в результате чего приобретают крайне злобное и дотошное отношение к студентам, и их задачам.<br>
<br>
Для таких лучше всего выполнить задачу по полной программе, учитывая все нюансы, связанные с постановкой условия задачи. Так, если в условии написано (цитирую) &quot;удалить из матрицы строку (столбец)...&quot;, то мы должны буквально понять это задание, и действительно <strong class='tag-b'>удалить</strong> эту злосчастную строку или столбец. А чтобы можно было именно удалять, нужно матрицу задавать не статически, а динамически.<br>
Динамическая матрица состоит не из элементов - цифр, как обычная матрица, а из динамически выделяемых в памяти компьютера объектов, которые часто называют нодами. Все эти ноды зацеплены друг за друга, чтобы по одной ноде можно было бы найти следующую. Про ноды скоро можно будет почитать в нашем FAQ в теме <a class='tag-url' href='http://forum.sources.ru/index.php?s=&act=ST&f=87&t=69615&st=0' target='_blank'>Связаные списки</a> В связи с такой организацией матрицы можно действительно удалять отдельные элементы, строки или столбцы матрицы, именно так, как указано в условии задачи.<br>
Следует заметить, что матрица, организованная на основе связанных списков не является двумерным массивом в понимании языка Pascal (то есть не объявляется как array[1..n,1..k]). Она является лишь образным представлением матрицы, реализованной связанными списками. На этом нюансе садюги-преподы часто заваливают бедного студента. И поэтому им нужно чётко и ясно пояснить, что вы верно выбрали тип организации матрицы, именно потому, что в условии было сказано &quot;удалить строку(столбец)&quot;, прибавив, что в статической матрице удалить на самом деле ничего нельзя, так как в действительности строк или столбцов меньше не станет.<br>
<br>
Ну... в общем я уже устал, и не намерен углубляться в структуру связанных списков, и слишком сильно расписывать реализацию удаления строки или столбца из матрицы в этом варианте. Скажу лишь, что основной принцип в том, что нужная строка или столбец действительно удаляются, а связи между элементами матрицы формируются таким образом, как будто удалённой строки или столбца и не было вообще в природе.<br>
Вот код рабочей программы:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Нужно составить матрицу , а затем удалить <br>
из неё i-ю строку и j-столбец.</div></div><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">type</div><div class="code_line">&nbsp;&nbsp;pnode=^tnode;</div><div class="code_line">&nbsp;&nbsp;tnode=record</div><div class="code_line">&nbsp;&nbsp; val:integer;</div><div class="code_line">&nbsp;&nbsp; next:pnode;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;prow=^trow;</div><div class="code_line">&nbsp;&nbsp;trow=record</div><div class="code_line">&nbsp;&nbsp; row:pnode;</div><div class="code_line">&nbsp;&nbsp; next:prow;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;matr:prow;</div><div class="code_line">&nbsp;&nbsp;temprow:prow;</div><div class="code_line">&nbsp;&nbsp;tempcolumn:pnode;</div><div class="code_line">&nbsp;&nbsp;xsize,ysize:byte;</div><div class="code_line">&nbsp;&nbsp;x,y:byte;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure showmatrix(matr:prow);</div><div class="code_line">var temp:pnode;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;while matr&#60;&#62;nil do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; temp:=matr^.row;</div><div class="code_line">&nbsp;&nbsp; while temp&#60;&#62;nil do</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; write(temp^.val:5);</div><div class="code_line">&nbsp;&nbsp; &nbsp; temp:=temp^.next;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; writeln;</div><div class="code_line">&nbsp;&nbsp; matr:=matr^.next;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;matr:=nil;</div><div class="code_line">&nbsp;&nbsp;write(&#39;Введите ширину матрицы:&#39;);</div><div class="code_line">&nbsp;&nbsp;readln(xsize);</div><div class="code_line">&nbsp;&nbsp;write(&#39;Введите высоту матрицы:&#39;);</div><div class="code_line">&nbsp;&nbsp;readln(ysize);</div><div class="code_line">&nbsp;&nbsp;{Формируем динамическую матрицу}</div><div class="code_line">&nbsp;&nbsp;for y:=1 to ysize do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; if matr=nil then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; new(matr);</div><div class="code_line">&nbsp;&nbsp; &nbsp; temprow:=matr;</div><div class="code_line">&nbsp;&nbsp; end else</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; new(temprow^.next);</div><div class="code_line">&nbsp;&nbsp; &nbsp; temprow:=temprow^.next;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; temprow^.row:=nil;</div><div class="code_line">&nbsp;&nbsp; for x:=1 to xsize do</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; if temprow^.row=nil then</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; new(temprow^.row);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; tempcolumn:=temprow^.row;</div><div class="code_line">&nbsp;&nbsp; &nbsp; end else</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; new(tempcolumn^.next);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; tempcolumn:=tempcolumn^.next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; tempcolumn^.val:=random(100)-50;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; tempcolumn^.next:=nil;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;temprow^.next:=nil;</div><div class="code_line">&nbsp;&nbsp;writeln(&#39;Вот получившаяся матрица:&#39;);</div><div class="code_line">&nbsp;&nbsp;showmatrix(matr);</div><div class="code_line">&nbsp;&nbsp;writeln(&#39;Удалим из неё строку и столбец.&#39;);</div><div class="code_line">&nbsp;&nbsp;write(&#39;Введите номер столбца, который следует удалить:&#39;);</div><div class="code_line">&nbsp;&nbsp;readln(xsize);</div><div class="code_line">&nbsp;&nbsp;write(&#39;Введите номер строки, которую следует удалить:&#39;);</div><div class="code_line">&nbsp;&nbsp;readln(ysize);</div><div class="code_line">&nbsp;&nbsp;{Уберём их}</div><div class="code_line">&nbsp;&nbsp;y:=1;</div><div class="code_line">&nbsp;&nbsp;if ysize=1 then matr:=matr^.next;</div><div class="code_line">&nbsp;&nbsp;temprow:=matr;</div><div class="code_line">&nbsp;&nbsp;while temprow&#60;&#62;nil do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; if xsize=1 then temprow^.row:=temprow^.row^.next;</div><div class="code_line">&nbsp;&nbsp; x:=1;</div><div class="code_line">&nbsp;&nbsp; tempcolumn:=temprow^.row;</div><div class="code_line">&nbsp;&nbsp; while tempcolumn&#60;&#62;nil do</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; if x=xsize-1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; tempcolumn^.next:=tempcolumn^.next^.next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end else tempcolumn:=tempcolumn^.next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; inc(x);</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; if y=ysize-1 then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; temprow^.next:=temprow^.next^.next;</div><div class="code_line">&nbsp;&nbsp; &nbsp; inc(y);</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; temprow:=temprow^.next;</div><div class="code_line">&nbsp;&nbsp; inc(y);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;writeln(&#39;Вот получившаяся матрица:&#39;);</div><div class="code_line">&nbsp;&nbsp;showmatrix(matr);</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>Some1</author>
        <category>Pascal: Структуры данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=41888&amp;view=findpost&amp;p=263372</guid>
        <pubDate>Sun, 14 Dec 2003 16:22:07 +0000</pubDate>
        <title>Задачи по матрицам</title>
        <link>https://forum.sources.ru/index.php?showtopic=41888&amp;view=findpost&amp;p=263372</link>
        <description><![CDATA[Some1: <span class='tag-size' data-value='12' style='font-size:12pt;'>Как поменять местами элементы матрицы относительно главной диагонали?</span><br>
<br>
Вот полностью коментированая программа, выполняющая нужные нам действия.<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">const {Объявим константы}</div><div class="code_line">&nbsp;&nbsp;n=4; {Размер матрицы}</div><div class="code_line">var {Объявим переменные}</div><div class="code_line">&nbsp;&nbsp;m:array[1..n,1..n] of integer;</div><div class="code_line">&nbsp;&nbsp;{Матрица m - двухмерный массив с шириной и высотой n</div><div class="code_line">&nbsp;&nbsp; каждый элемент - переменная типа integer}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;i,j:byte;</div><div class="code_line">&nbsp;&nbsp;{Переменные счётчики по вертикали и по горизонтали</div><div class="code_line">&nbsp;&nbsp; Будут использоваться для заполнения, обмена и вывода элементов матрицы</div><div class="code_line">&nbsp;&nbsp; тип - byte, потому что матрица не будет больше чем 255x255}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;k:integer;</div><div class="code_line">&nbsp;&nbsp;{Временная переменная k, будет использована для обмена значений элементов</div><div class="code_line">&nbsp;&nbsp; матрицы}</div><div class="code_line">&nbsp;</div><div class="code_line">{---------Начало программы---------}</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;{Сначала заполним матрицу числами}</div><div class="code_line">&nbsp;&nbsp;for j:=1 to n do {Перебираем строки матрицы}</div><div class="code_line">&nbsp;&nbsp;for i:=1 to n do {Перебираем столбцы матрицы}</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;write(&#39;Введите m(&#39;,i,&#39;,&#39;,j,&#39;): &#39;); {Выводим запрос пользователю}</div><div class="code_line">&nbsp;&nbsp; &nbsp;readln(m[i,j]); {Читаем с клавиатуры число, и ложим его в соотв. ячейку}</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;{Теперь обменяем значения элементов матрицы относительно главной диагонали}</div><div class="code_line">&nbsp;&nbsp;for j:=1 to n do {Перебираем строки матрицы}</div><div class="code_line">&nbsp;&nbsp;for i:=1 to j-1 do {Перебираем столбцы матрицы}</div><div class="code_line">&nbsp;&nbsp;begin {j-1 потому что нам не нужны элементы самой главной диагонали}</div><div class="code_line">&nbsp;&nbsp; &nbsp;k:=m[i,j]; {Запоминаем значение из нижней левой части матрицы}</div><div class="code_line">&nbsp;&nbsp; &nbsp;m[i,j]:=m[j,i]; {Меняем его на значение из соотв. верхней правой части}</div><div class="code_line">&nbsp;&nbsp; &nbsp;m[j,i]:=k; {Меняем значение из верхней правой части на раннее сохранённое}</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;{Наконец выведем содержимое матрицы на экран}</div><div class="code_line">&nbsp;&nbsp;for j:=1 to n do {Перебираем строки матрицы}</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i:=1 to n do {Перебираем столбцы матрицы}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;write(m[i,j]:5); {Выведем текущий элемент, расширив его до 5 символов}</div><div class="code_line">&nbsp;&nbsp; &nbsp;writeln; {Перейдём на новую строку}</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end.</div></ol></div></div></div></div><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">const {Объявим константы}</div><div class="code_line">&nbsp;&nbsp;n=4; {Размер матрицы}</div><div class="code_line">var {Объявим переменные}</div><div class="code_line">&nbsp;&nbsp;m:array[1..n,1..n] of integer;</div><div class="code_line">&nbsp;&nbsp;{Матрица m - двухмерный массив с шириной и высотой n</div><div class="code_line">&nbsp;&nbsp; каждый элемент - переменная типа integer}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;i,j:byte;</div><div class="code_line">&nbsp;&nbsp;{Переменные счётчики по вертикали и по горизонтали</div><div class="code_line">&nbsp;&nbsp; Будут использоваться для заполнения, обмена и вывода элементов матрицы</div><div class="code_line">&nbsp;&nbsp; тип - byte, потому что матрица не будет больше чем 255x255}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;k:integer;</div><div class="code_line">&nbsp;&nbsp;{Временная переменная k, будет использована для обмена значений элементов</div><div class="code_line">&nbsp;&nbsp; матрицы}</div><div class="code_line">&nbsp;</div><div class="code_line">{---------Начало программы---------}</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;randomize; {Инициализируем генератор случайных чисел}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;{Сначала заполним матрицу числами}</div><div class="code_line">&nbsp;&nbsp;for j:=1 to n do {Перебираем строки матрицы}</div><div class="code_line">&nbsp;&nbsp;for i:=1 to n do {Перебираем столбцы матрицы}</div><div class="code_line">&nbsp;&nbsp; &nbsp;m[i,j]:=random(100); {Генерируем случайное число от 0 до 99, и заносим его в матрицу}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;{Теперь обменяем значения элементов матрицы относительно главной диагонали}</div><div class="code_line">&nbsp;&nbsp;for j:=1 to n do {Перебираем строки матрицы}</div><div class="code_line">&nbsp;&nbsp;for i:=1 to j-1 do {Перебираем столбцы матрицы}</div><div class="code_line">&nbsp;&nbsp;begin {j-1 потому что нам не нужны элементы самой главной диагонали}</div><div class="code_line">&nbsp;&nbsp; &nbsp;k:=m[i,j]; {Запоминаем значение из нижней левой части матрицы}</div><div class="code_line">&nbsp;&nbsp; &nbsp;m[i,j]:=m[j,i]; {Меняем его на значение из соотв. верхней правой части}</div><div class="code_line">&nbsp;&nbsp; &nbsp;m[j,i]:=k; {Меняем значение из верхней правой части на раннее сохранённое}</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;{Наконец выведем содержимое матрицы на экран}</div><div class="code_line">&nbsp;&nbsp;for j:=1 to n do {Перебираем строки матрицы}</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i:=1 to n do {Перебираем столбцы матрицы}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;write(m[i,j]:5); {Выведем текущий элемент, расширив его до 5 символов}</div><div class="code_line">&nbsp;&nbsp; &nbsp;writeln; {Перейдём на новую строку}</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>Some1</author>
        <category>Pascal: Структуры данных</category>
      </item>
	
      </channel>
      </rss>
	