Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 15

Вставка элементов в двумерный массив

03.06.2012, 11:20. Показов 2417. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан двумерный массив размером n*m, заполненный случайным образом.
2. Вставить после каждой четной строки первую строку.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
procedure TForm2.Button1Click(Sender: TObject);
   var
  i,j: integer;
begin
randomize;                                //   èíèöèàëèçàöèÿ ñ÷åò÷èêà ñëó÷àéíûõ ÷èñåë
n:=StrToInt(Edit1.Text);                  // êîë-âî ñòðîê
m:=StrToInt(Edit2.Text);                  //  êîë-âî ñòîëáöîâ
SetLength(a,n,m);                         // ïàðàìåòðû ìàññèâà
  for i:=0 to n-1 do                      // ñ÷åò÷èê ñòðîê
    for j:=0 to m-1 do                    // ñ÷åò÷èê ñòîëáöîâ
      a[i,j]:=Round(Sin(Random(1000))*1000); // ïðèñâîåíèå ñëó÷àéíîãî ÷èñëà îò -1000 äî 1000
StringGrid1.RowCount:=n+1;                // êîë-âî ñòðîê â òàáëèöå
StringGrid1.ColCount:=m+1;                // êîë-âî ñòîëáöîâ â òàáëèöå
  with StringGrid1 do                     // ïîçâîëÿåò êàæäûé ðàç íå îáðàùàòüñÿ ê èìåíè êîìïîíåíòà
    begin
    i:=0;                                 // ïåðâàÿ ñòðîêà
    for j:=1 to RowCount do               // öèêë äëÿ âûâîäà íîìåðîâ ñòðîê
    Cells[i,j]:=InttoStr(j);
    j:=0;                                 // ïåðâûé ñòîëáåö
    for i:=1 to ColCount do               // öèêë äëÿ âûâîäà íîìåðîâ ñòîëáöîâ
    Cells[i,j]:=IntToStr(i);
    end;
  with StringGrid1 do
    for i:=1 to n do                      //  öèêëû äëÿ âûâîäà ýëåìåíòîâ
      for j:=1 to m do                    //  ìàññèâà â òàáëèöó
      Cells[j,i]:=IntToStr(a[i-1,j-1]);
   end;
Это формирование массива.. не знаю как вставить первую строку после каждой четной строки, помогите.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.06.2012, 11:20
Ответы с готовыми решениями:

Двумерный массив Вставка столбца
У меня дано задание: вставить второй столбец перед столбцами, которые содержат минимальное значение. Помогите исправить ошибки, у меня...

Двумерный массив Вставка столбца
Вставить второй столбец перед столбцами, в которых содержится минимальный элемент. Помогите исправить ошибки, Если минимальный элемент в...

Двумерный массив.Найти сумму элементов в каждом столбце и занести ее в новый одномерный массив.Где ошибка?
program Project14; {$APPTYPE CONSOLE} uses SysUtils; type mas1=array of integer; mas2=array of integer; Var...

7
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
03.06.2012, 13:39
Вот, немного подправил ваш код и дописал:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j: integer;
begin
  randomize;                   //   инициализация счетчика случайных чисел
  n:=StrToInt(Edit1.Text);     // кол-во строк
  m:=StrToInt(Edit2.Text);     //  кол-во столбцов
  SetLength(a,n,m);            // параметры массива
  for i:=0 to n-1 do           // счетчик строк
  for j:=0 to m-1 do           // счетчик столбцов
  a[i,j]:=Random(2001)-1000;   // присвоение случайного числа от -1000 до 1000
 
  with StringGrid1 do          // позволяет каждый раз не обращаться к имени компонента
  begin
    RowCount:=n+1;             // кол-во строк в таблице
    ColCount:=m+1;             // кол-во столбцов в таблице
 
    for j:=1 to RowCount do    // цикл для вывода номеров строк
    Cells[0,j]:=InttoStr(j);   // в первом столбце
 
    for i:=1 to ColCount do    // цикл для вывода номеров столбцов
    Cells[i,0]:=IntToStr(i);   // в первой строке
 
    for i:=1 to n do           //  циклы для вывода элементов
    for j:=1 to m do           //  массива в таблицу
    Cells[j,i]:=IntToStr(a[i-1,j-1]);
   end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  i,j,k,n1: integer;
begin
  //Вставка первой строки после каждой чётной строки
  //Посчитаем, сколько строк будем вставлять и увеличим размерность массива
  n1:=(n Div 2)+n;
  SetLength(a,n1,m);        // Новый размер массива
  For i:=n-1 DownTo 2 Do    // Будем двигаться от конца к началу массива
  If (i Mod 2)=0 Then       // Только если строка чётная если считать с 0
  Begin                     // (вставляем перед нечётными считая с 1)
    //Сдвинем на одну строку все строки, начиная с этой
    For j:=n1-2 DownTo i Do // сдвигаем начиная с последней строки
    For k:=0 To m-1 Do
    a[j+1,k]:=a[j,k];
    //Запишем первую строку в место вставки
    For k:=0 To m-1 Do
    a[i,k]:=a[1,k];
  End;
 
  n:=n1;
  //Запишем массив в StringGrid
  with StringGrid1 do          // позволяет каждый раз не обращаться к имени компонента
  begin
    RowCount:=n+1;             // новое кол-во строк в таблице
 
    for j:=1 to RowCount do    // цикл для вывода номеров строк
    Cells[0,j]:=InttoStr(j);   // в первом столбце
 
    for i:=1 to n do           //  циклы для вывода элементов
    for j:=1 to m do           //  массива в таблицу
    Cells[j,i]:=IntToStr(a[i-1,j-1]);
   end;
end;
1
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 15
03.06.2012, 15:47  [ТС]
Спасибо Вам огромное)

Добавлено через 1 час 43 минуты
Цитата Сообщение от Одиночка Посмотреть сообщение
Вот, немного подправил ваш код и дописал:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j: integer;
begin
  randomize;                   //   инициализация счетчика случайных чисел
  n:=StrToInt(Edit1.Text);     // кол-во строк
  m:=StrToInt(Edit2.Text);     //  кол-во столбцов
  SetLength(a,n,m);            // параметры массива
  for i:=0 to n-1 do           // счетчик строк
  for j:=0 to m-1 do           // счетчик столбцов
  a[i,j]:=Random(2001)-1000;   // присвоение случайного числа от -1000 до 1000
 
  with StringGrid1 do          // позволяет каждый раз не обращаться к имени компонента
  begin
    RowCount:=n+1;             // кол-во строк в таблице
    ColCount:=m+1;             // кол-во столбцов в таблице
 
    for j:=1 to RowCount do    // цикл для вывода номеров строк
    Cells[0,j]:=InttoStr(j);   // в первом столбце
 
    for i:=1 to ColCount do    // цикл для вывода номеров столбцов
    Cells[i,0]:=IntToStr(i);   // в первой строке
 
    for i:=1 to n do           //  циклы для вывода элементов
    for j:=1 to m do           //  массива в таблицу
    Cells[j,i]:=IntToStr(a[i-1,j-1]);
   end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  i,j,k,n1: integer;
begin
  //Вставка первой строки после каждой чётной строки
  //Посчитаем, сколько строк будем вставлять и увеличим размерность массива
  n1:=(n Div 2)+n;
  SetLength(a,n1,m);        // Новый размер массива
  For i:=n-1 DownTo 2 Do    // Будем двигаться от конца к началу массива
  If (i Mod 2)=0 Then       // Только если строка чётная если считать с 0
  Begin                     // (вставляем перед нечётными считая с 1)
    //Сдвинем на одну строку все строки, начиная с этой
    For j:=n1-2 DownTo i Do // сдвигаем начиная с последней строки
    For k:=0 To m-1 Do
    a[j+1,k]:=a[j,k];
    //Запишем первую строку в место вставки
    For k:=0 To m-1 Do
    a[i,k]:=a[1,k];
  End;
 
  n:=n1;
  //Запишем массив в StringGrid
  with StringGrid1 do          // позволяет каждый раз не обращаться к имени компонента
  begin
    RowCount:=n+1;             // новое кол-во строк в таблице
 
    for j:=1 to RowCount do    // цикл для вывода номеров строк
    Cells[0,j]:=InttoStr(j);   // в первом столбце
 
    for i:=1 to n do           //  циклы для вывода элементов
    for j:=1 to m do           //  массива в таблицу
    Cells[j,i]:=IntToStr(a[i-1,j-1]);
   end;
end;
Можете еще помочь поменять средние столбцы местами,пожалуйста?
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
03.06.2012, 17:51

Не по теме:

После обеда.



Добавлено через 1 час 51 минуту
Вот замена двух средних столбцов матрицы и таблицы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.Button3Click(Sender: TObject);
var
  i,j,k : integer;
begin
  //Взаимозамена средних столбцов
  k:=(n Div 2)-1;    //Номер первого из столбцов, которые нужно обменять
  For i:=0 To n-1 Do //Двигаемся по строкам
  Begin //Меняем 2 значения в строке в нужных столбцах
    j:=a[i,k]; //Временно запоминаем, чтобы не затереть
    a[i,k]:=a[i,k+1];
    a[i,k+1]:=j;
    //Сразу поменяем в таблице
    StringGrid1.Cells[k+2,i+1]:=StringGrid1.Cells[k+1,i+1];
    StringGrid1.Cells[k+1,i+1]:=IntToStr(j);
  End;
end;
1
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 15
03.06.2012, 18:06  [ТС]
Цитата Сообщение от Одиночка Посмотреть сообщение

Не по теме:

После обеда.



Добавлено через 1 час 51 минуту
Вот замена двух средних столбцов матрицы и таблицы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.Button3Click(Sender: TObject);
var
  i,j,k : integer;
begin
  //Взаимозамена средних столбцов
  k:=(n Div 2)-1;    //Номер первого из столбцов, которые нужно обменять
  For i:=0 To n-1 Do //Двигаемся по строкам
  Begin //Меняем 2 значения в строке в нужных столбцах
    j:=a[i,k]; //Временно запоминаем, чтобы не затереть
    a[i,k]:=a[i,k+1];
    a[i,k+1]:=j;
    //Сразу поменяем в таблице
    StringGrid1.Cells[k+2,i+1]:=StringGrid1.Cells[k+1,i+1];
    StringGrid1.Cells[k+1,i+1]:=IntToStr(j);
  End;
end;
Благодарю за помощь)
0
IrinaKovaleva21
18.03.2014, 20:00
Одиночка, Помогите пожалуйста, создаю двумерный массив по вашему исходнику, и не могу понять как правильно описать глобальные переменные и массивы. Выдает ошибку Field StringGrid1 does not Have a corresponding component. Уже все перерыла и никак(((((
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
18.03.2014, 20:30
Delphi
1
2
3
4
5
var
  Form1: TForm1;
  a:array of array of integer;
  m,n:integer;
implementation
Вроде все
1
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
19.03.2014, 07:25
IrinaKovaleva21,
Вряд ли эта ошибка выдаётся из-за не правильного описания переменных. Хотя Puporev показал, как правильно описать. Скорее всего у вас в описании формы есть StringGrid1, а на форме его нет.
Выложите проект в архиве. Нужно смотреть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.03.2014, 07:25
Помогаю со студенческими работами здесь

Дан двумерный массив. Получить новый массив путем деления всех элементов строки на наименьший по модулю эл
Дан двумерный массив. Получить новый массив путем деления всех элементов строки на наименьший по модулю элемент строки. Если наименьший...

Двумерный массив, найти среднее значение элементов главной диагонали
Двумерный масив, найти среднее значение елементов главной диагонали, заменить отрицательные на положительные значения масива, а...

Дан двумерный массив. Определить произведение элементов третьей строки
Дан двумерный массив. Определить произведение элементов третьей строки.

Дан двумерный массив 4х5 Посчитать сумма нечетных элементов массива
Помогите плиз Нужно решит вот такую задачу в паскале: Дан двумерный массив 4х5 Посчитать сумма нечетных элементов массива

Задан двумерный массив: найти пары одинаковых элементов и напечатать их индексы
Задан двумерный целочисленный массив(Stringgrid). Известно, что среди его элементов есть пары одинаковых элементов. Найти эти пары,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru