06.02.2012, 17:27 | #1 (permalink) |
Member
Регистрация: 28.03.2010
Сообщений: 477
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1837
|
Помогите с двумя задачами на Паскале
1. Поменять элементы в квадратной матрице местами относительно главной и побочной диагонали. (Тут хотела использовать вторую матрицу, заполняя ее элементами первой в другом порядке, не получается ). 2. Заполнить матрицу натуральными числами по спирали. Заранее большое спасибо! |
06.02.2012, 17:27 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Очень часто в решении проблем помогает прочтение схожих топиков Помогите пожалуйста! C# вычисление интеграла двумя любыми способами Помогите плиз с задачами на с++ Помогите настроить линк между двумя Mikrotik SXT-5D's Нужна помощь с задачами Помогите с двумя программами по массивам Помогите с двумя программами |
06.02.2012, 19:18 | #2 (permalink) |
Member
Регистрация: 15.02.2009
Сообщений: 695
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 523
|
Вот решение 2 задачи, заполнение происходит спиралью из центра. Скажу сразу, писал не я, но программу проверил - рабочая.
Код:
var a:array [1..100,1..100] of integer; i,j,s,x,y,n:integer; napr,shag:byte; begin readln(n); {считываем n} x:=n+1; {координаты текущей клетки} y:=n+1; shag:=1; {количество элементов в витке спирали} napr:=1; {направление движения} s:=-1; {счетчик, увеличиваемый на 1} repeat begin for j:=1 to 2 do {нетрудно заметить, что каждые два витка одинаковы по длине(см. пример)} begin for i:=1 to shag do {поэтому мы можем заполнять по два витка с одним шагом} begin inc(s); a[x,y]:=s; {заполняем текущий элемент} if (napr=1) then dec(x); if (napr=2) then dec(y); {выбор направления движения} if (napr=3) then inc(x); if (napr=4) then inc(y); end; inc(napr); {изменяем напрвление} if (napr=5) then napr:=1; end; inc(shag); {два витка пройдены, поэтому увеличиваем размер шага} end; until (shag=2*n+1); {единственный минус - последний столбец остается незаполненным, поэтому} for i:=2*n+1 downto 1 do {заполняем его} begin inc(s); a[i,2*n+1]:=s; end; for i:=1 to 2*n+1 do begin for j:=1 to 2*n+1 do write(a[i,j]:4); {выводим массив} writeln; end; readln end. |
06.02.2012, 20:43 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Привет, Ира!
Ну вот первая задачка: Код:
CONST N=7; VAR M1,M2,M3:Array[1..N,1..N] of Byte; i,j:Byte; BEGIN Randomize; For i:=1 to N do Begin For j:=1 to N do begin M1[i,j]:=Random(100); Write(M1[i,j]:4); end; Writeln; End; Writeln; For i:=1 to N do M2[i,i]:=M1[i,i]; For i:=1 to N-1 do For j:=i+1 to N do M2[j,i]:=M1[i,j]; For j:=1 to N-1 do For i:=j+1 to N do M2[j,i]:=M1[i,j]; For i:=1 to N do Begin For j:=1 to N do Write(M2[i,j]:4); Writeln; End; Writeln; For i:=1 to N do M3[i,N-i+1]:=M1[i,N-i+1]; For i:=1 to N-1 do For j:=1 to N-i do M3[N-j+1,N-i+1]:=M1[i,j]; For j:=2 to N do For i:=N downto N-j+1 do M3[N-j+1,N-i+1]:=M1[i,j]; For i:=1 to N do Begin For j:=1 to N do Write(M3[i,j]:4); Writeln; End; Readln; END. |
07.02.2012, 03:21 | #4 (permalink) |
Member
Регистрация: 28.03.2010
Сообщений: 477
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1837
|
До первой задачи таки додумалась сама, алгоритм получился такой же, как у вас, Владимир, может все-таки будет с меня толк со второй задачей еще маюсь, спасибо за решение, но я хочу заполнить ее наоборот к центру, спортивный интерес появился, сама добью спасибо всем за помощь
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|