Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 13.06.2010, 15:54   #1 (permalink)
kuzlar
Новичок
 
Регистрация: 13.06.2010
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Двумерные массивы и процедуры PASCAL

Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз ( в зависимости от режима ) n может быть больше количества элементов в строке или стобце ( оформить в виде процедуры )
kuzlar вне форума   Ответить с цитированием

Старый 13.06.2010, 15:54
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Может быть проблема давно решена, посмотрите в похожих обсуждениях

Pascal массивы
Двумерные массивы через процедуру
Двумерные массивы, Fortran
Помогите, пожалуйста, с Паскалем. Процедуры-массивы
Массивы Pascal

Старый 13.06.2010, 16:57   #2 (permalink)
MrSTEP
一步一步地会到目的
 
Аватар для MrSTEP
 
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,937
Записей в дневнике: 10
Сказал(а) спасибо: 139
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
По умолчанию

Во-первых, не очень понятно
Цитата:
вправо или вниз ( в зависимости от режима )
Как задается режим?

Во-вторых, где ваши наработки (наброски)? Выкладывайте, мы поможем, исправим
MrSTEP вне форума   Ответить с цитированием
Старый 13.06.2010, 20:27   #3 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,977
Сказал(а) спасибо: 322
Поблагодарили 543 раз(а) в 184 сообщениях
Репутация: 102235
По умолчанию

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.
Конечно, можно обойтись и без вспомогательных линейных массивов, но тогда там точно запутаешься. Впрочем, может кто-нибудь и поизящнее решение найдет.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 13.06.2010, 20:46   #4 (permalink)
MrSTEP
一步一步地会到目的
 
Аватар для MrSTEP
 
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,937
Записей в дневнике: 10
Сказал(а) спасибо: 139
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
По умолчанию

Цитата:
MrSTEP, я смиренно прошу извинения, что встреваю
нет смысла в извинениях, на этом форуме ты правишь бал

А задача действительно интересная, чей самому попробовать
MrSTEP вне форума   Ответить с цитированием
Старый 13.06.2010, 20:50   #5 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,977
Сказал(а) спасибо: 322
Поблагодарили 543 раз(а) в 184 сообщениях
Репутация: 102235
По умолчанию

Цитата:
Сообщение от MrSTEP Посмотреть сообщение
нет смысла в извинениях, на этом форуме ты правишь бал
OFF! Увы - недолго: Паскаль уходит, а на прочих языках я не пишу. Когда-то (~107 лет назад) делал проги на Delphi, да с тех пор всё позабыл от неупотребления. А СИ не знаю и знать не хочу: активно не нравится.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 13.06.2010, 21:36   #6 (permalink)
MrSTEP
一步一步地会到目的
 
Аватар для MrSTEP
 
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,937
Записей в дневнике: 10
Сказал(а) спасибо: 139
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
По умолчанию

На паскале наверняка будут учить еще не одно поколение программистов.. На мой, пока еще не искушенный ЯПами, взгляд, для обучения он проще..
MrSTEP вне форума   Ответить с цитированием
Старый 14.06.2010, 09:46   #7 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,977
Сказал(а) спасибо: 322
Поблагодарили 543 раз(а) в 184 сообщениях
Репутация: 102235
По умолчанию

Кстати, подумал - возможно, более изящное решение можно сделать при помощи указателей и организации стека, но тут я тоже, увы, не весьма.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 16.06.2010, 20:49   #8 (permalink)
kuzlar
Новичок
 
Регистрация: 13.06.2010
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

А не подскажите как это все оформить в виде процедуры?
kuzlar вне форума   Ответить с цитированием
Старый 30.12.2013, 13:08   #9 (permalink)
Kostya_N
Новичок
 
Регистрация: 30.12.2013
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Помогите пожалуйста решить задачу с помощью...
Kostya_N вне форума   Ответить с цитированием
Старый 30.12.2013, 13:40   #10 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,977
Сказал(а) спасибо: 322
Поблагодарили 543 раз(а) в 184 сообщениях
Репутация: 102235
По умолчанию

Цитата:
Сообщение от Kostya_N Посмотреть сообщение
Помогите пожалуйста решить задачу
Значит, так. Информирую: у нас НЕ ПРИНЯТО цепляться к чужим темам, поэтому Вам создана отдельная: Паскаль. Проверить наличие одинаковых элементов массива. А если будете продолжать подобную деятельность, последует наказание.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 13:28.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.