Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 08.04.2012, 17:48   #1
Lizakotenkova
 
Регистрация: 17.02.2012
Сообщений: 3
Восклицание -вставить между средними строками первую строку в массиве

дан двуменый массив 8на7 заполненный случайным образом.
-вставить между средними строками первую строку
(желательно кратко)
Lizakotenkova вне форума
Старый 08.04.2012, 18:33   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

После вставки строки получится массив 9 на 7.
При вставке нужно переместить нижнюю часть массива на строку ниже.
Я надеюсь, что массив вы сформируете и сможете вывести.
Сама вставка:
Код:
for i:=9 downto 6 do
	for j:=1 to 7 do
		a[i,j]:=a[i-1,j];
for i:=1 to 7 do
	a[5,i]:=a[1,i];
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме
Старый 08.04.2012, 18:34   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это уже 9х7 массив будет.
Покажи как ты вводишь массив
I'm learning to live...
Stilet вне форума
Старый 08.04.2012, 18:47   #4
Lizakotenkova
 
Регистрация: 17.02.2012
Сообщений: 3
По умолчанию

через random
Lizakotenkova вне форума
Старый 08.04.2012, 19:44   #5
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Я вижу 2 варианта решения проблемы.

1. Порядок:
- перенести информацию из первой строки в дополнительно выделенный массив,
- сдвинуть нижнюю половину вниз на одну строку,
- вставить информацию, скопированную из первой строки в нужное место.
Недостатки:
- требуется дополнительная память (которую, впрочем, при некотором изменении алгоритма можно сократить до одного элемента),
- реализация требует перемещения больших фрагментов памяти (более половины объема массива) - O(N).

2. Заменить массив на несколько иную структуру, например, на одномерный массив указателей на строки. При этом перемещать придется только указатели, а не сами данные - O(sqrt(N)).
Примечание: Вместо массива можно использовать список, тогда собственно перемещение O(1), но, учитывая невозможность доступа непосредственно к середине списка, поиск O(sqrt(N)).
s-andriano вне форума
Старый 09.04.2012, 14:19   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в дополнение ко всему вышесказанному добавлю:

массивы в Delphi/Pascal при присвоении позволяют оперировать целыми строками.
см. тему: Забавная и малоизвестная особенность работы с массивами в Pascal/Delphi
в этой связи решение (предложенное выше BDA) вырождается в такое:

полный код программы
Код:
{ дан двуменый массив 8на7 заполненный случайным образом.  
-вставить между средними строками первую строку
}

var a: array[1..9, 1..7] of integer;
    i,j : integer;
begin
  {заполним массив случайными элементами}
  Randomize;
  for i := 1 to 8 do
    for j := 1 to 7 do
      a[i, j] := Random(99) + 1;

  
  {выведем массив на экран}
  WriteLn('Исходный массив: ');
  for i := 1 to 8 do begin
    for j := 1 to 7 do Write(a[i, j]:2,' ');
    WriteLn;
  end;


  {сдвинем строки 5-8 на одну вниз -
    дополнительную 9-ю строку в массиве мы заранее предусмотрели!}
  for i:=8 downto 5 do
     a[i+1] := a[i];

  {в освободившееся место вставить первую строку}
  a[5]:=a[1];


  {выведем полученный массив на экран}
  WriteLn;
  WriteLn('Полученный массив 9x7: ');
  for i := 1 to 9 do begin
    for j := 1 to 7 do Write(a[i, j]:2,' ');
    WriteLn;
  end;


  Readln
end.
Serge_Bliznykov вне форума
Старый 09.04.2012, 17:05   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Serge_Bliznykov, да, удобное сокращение (постоянно о нем забываю ).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прочитать первую строку из memo hacknet Работа с сетью в Delphi 1 22.10.2010 18:56
Выделить первую строку в таблице Polotenchik Microsoft Office Word 3 27.07.2010 22:41
Поменять местами столбец и первую строку DanteDMC3 Помощь студентам 1 12.02.2010 16:06
Вставить первую строку после строки, в которой находится первый встреченный максимальный элемент. JiLiYa Паскаль, Turbo Pascal, PascalABC.NET 4 03.12.2008 12:13