13.06.2010, 15:54 | #1 (permalink) |
Новичок
Регистрация: 13.06.2010
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Двумерные массивы и процедуры PASCAL
|
13.06.2010, 15:54 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Может быть проблема давно решена, посмотрите в похожих обсуждениях Pascal массивы Двумерные массивы через процедуру Двумерные массивы, Fortran Помогите, пожалуйста, с Паскалем. Процедуры-массивы Массивы Pascal |
13.06.2010, 16:57 | #2 (permalink) | |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
Во-первых, не очень понятно
Цитата:
Во-вторых, где ваши наработки (наброски)? Выкладывайте, мы поможем, исправим |
|
13.06.2010, 20:27 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
MrSTEP, я смиренно прошу извинения, что встреваю, но просто меня задачка заинтересовала. А задачка-то ох, не простая! Сам провозился больше часа.
Как я понимаю, речь идет вот о чем. Пусть есть прямоугольная матрица. Нужно сдвинуть нумерацию элементов либо "вправо", т.е. каждый элемент строки занимает место сдвинутого в строке на n позиций с переходом на следующую строку, последних элементов - на начало матрицы, ну или "вниз" - это когда тоже самое, но по столбцам. Вот что у меня получилось: Код:
Const M0=4; N0=5; VAR A1,A2:ARRAY[1..M0,1..N0] of BYTE; B1,B2:ARRAY[1..M0*N0] of BYTE; n:WORD; i,j,k:Integer; C:Char; BEGIN RANDOMIZE; For i:=1 to M0 do For j:=1 to N0 do A1[i,j]:=Random(100); Writeln('Initial matrix:'); For i:=1 to M0 do begin For j:=1 to N0 do Write(A1[i,j]:4); WriteLn; end; WriteLn; WriteLn('Enter the regime - Right (R) or Down (D):'); ReadLn(C); Write('Enter the Shift '); ReadLn(n); If (C='R') or (C='r') then begin For i:=1 to M0 do For j:=1 to N0 do B1[(i-1)*N0+j]:=A1[i,j]; end else begin For j:=1 to N0 do For i:=1 to M0 do B1[(j-1)*M0+i]:=A1[i,j]; end; For i:=1 to M0*N0 do begin If (i+n)<=M0*N0 then k:=(i+n) else If ((i+n) mod (M0*N0))=0 then k:=M0*N0 else k:=((i+n) mod (M0*N0)); B2[k]:=B1[i]; end; If (C='R') or (C='r') then begin For i:=1 to M0 do For j:=1 to N0 do A2[i,j]:=B2[(i-1)*N0+j]; end else begin For j:=1 to N0 do For i:=1 to M0 do A2[i,j]:=B2[(j-1)*M0+i]; end; WriteLn; WriteLn('"Shifted" matrix:'); For i:=1 to M0 do begin For j:=1 to N0 do Write(A2[i,j]:4); WriteLn; end; ReadLn; END. |
13.06.2010, 20:46 | #4 (permalink) | |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
Цитата:
А задача действительно интересная, чей самому попробовать |
|
13.06.2010, 20:50 | #5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
13.06.2010, 21:36 | #6 (permalink) |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
На паскале наверняка будут учить еще не одно поколение программистов.. На мой, пока еще не искушенный ЯПами, взгляд, для обучения он проще..
|
14.06.2010, 09:46 | #7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Кстати, подумал - возможно, более изящное решение можно сделать при помощи указателей и организации стека, но тут я тоже, увы, не весьма.
|
30.12.2013, 13:40 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Значит, так. Информирую: у нас НЕ ПРИНЯТО цепляться к чужим темам, поэтому Вам создана отдельная: Паскаль. Проверить наличие одинаковых элементов массива. А если будете продолжать подобную деятельность, последует наказание.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|