Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
16 / 16 / 9
Регистрация: 16.03.2012
Сообщений: 437

Поменять местами строки в StringGrid

12.03.2013, 18:58. Показов 2743. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Задание следующее. Пользователь вводит размерность матрицы N * M. Используя один массив, инвертировать строки матрицы ( просто поменять местами ).
Пример:
Вводим матрицу:
1 2 3 4
5 6 7 8
9 10 11 12

Получаем матрицу:
4 3 2 1
8 7 6 5
12 11 10 9

Не получается вывести матрицу в нужном виде как требуется по заданию.
Удаётся перемещать элементы из столбика в колонну и наоборот.

C
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
void __fastcall TForm2::Button1Click(TObject *Sender)
{
      int array[N][M];
      int n = StrToInt( CSpinEdit1->Value ); // для рядов
      int m = StrToInt( CSpinEdit2->Value ); // для колонн
      int i, j, rnd, pusto; // i - ряд, j - колонна, rnd - random ( для полноценного надо подключить какую-то библиотеу ещё)
      int tmp; // используем для перемещения строк.
 
      StringGrid1->Cells[0][0] = "0"; // В  [0][0] записываем 0, но по сути это надо на Form onCreate перенести
 
      if (CheckBox1->Checked == false)
      {
        Label4->Visible = true;
        Label4->Caption = "Введите числа!";
      } else
            Label4->Visible = false;
 
   /*Если выбрано автозаполнение */
      if ( CheckBox1->Checked )
      {
        for (i = 0; i < n; i++)
         for (j = 0; j < m; j++)
         {
            rnd = random(10) + 1;
            StringGrid1->Cells[i][j] = IntToStr(rnd);
         }
      } // End Of CheckBox1->Checked.
 
        StringGrid1->RowCount = CSpinEdit1->Value; // Кол-во строк = CSpinEdit1->Value
        StringGrid1->ColCount = CSpinEdit2->Value; // Кол-во столбцов = CSpinEdit2->Value
 
    /* Если поля StringGrid1 = "", то заполняем их 0  */
      for (i = 0; i < n; i++)
       for (i = 0; i < m; i++)
       {
         StringGrid1->Cells[i][j] = IntToStr(pusto);
       }
  /* Запись в array[ N ][ M ] */
 
    for (i = 0; i < StringGrid1->RowCount; i++)
     for (j = 0; j < StringGrid1->ColCount; j++)
     {
        array[i][j] = StrToInt(StringGrid1->Cells[j][i]); // записываем в StringGrid
        
                tmp = array[i][j];
        array[i][j] = array[ m - 1 - i ][ j ];
        array[ m - 1 - i ][ j ] = tmp;
 
        StringGrid2->RowCount = StringGrid1->RowCount;
        StringGrid2->ColCount = StringGrid1->ColCount;
        StringGrid2->Cells[m - 1 - i][j] = tmp;
 
     }
 
}
void __fastcall TForm2::Button2Click(TObject *Sender)
{
/* Сортировка по заданию по нажатию кнопки 2. Возможен перенос сюда от Button1*/
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.03.2013, 18:58
Ответы с готовыми решениями:

Поменять строки символьного stringgrid местами
Доброго времени суток! Необходимо поменять 1 строку и 3 местами, если ставлю int temp, то выходят цифры, а если char, то пустое место....

Исправить код: Поменять 1 и последний столбцы StringGrid местами
Надо исправить код Задача &quot;Поменять 1 и последний столбцы местами, и все элементы сместятся на 1&quot; Вот код, но тут меняются...

StringGrid: поменять столбцы местами
Несколько дней пишу шифратор, но вдаваться в подробности не буду. Объясню только корень проблемы. Имеется код. for i:=0 to x1 do ...

7
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
12.03.2013, 19:53
SlashX6, Федоренко Ю.П. Алгоритмы и программы на C++ Builder тебе в помощь) У него все возможные операции над массивами описаны)
1
16 / 16 / 9
Регистрация: 16.03.2012
Сообщений: 437
13.03.2013, 00:45  [ТС]
Graf_N, Спасибо за рекомендацию! На досуге надо будет глянуть

Добавлено через 4 часа 25 минут
Сидел и игрался меняя местами [i][j]. Доигрался до того, что сортирует как надо!
Теперь осталось проверить, где колонна, а где строка.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
    for (i = 0; i < StringGrid1->ColCount; i++)
     for (j = 0; j < StringGrid1->RowCount; j++)
     {
        StringGrid2->ColCount = StringGrid1->ColCount;
        StringGrid2->RowCount = StringGrid1->RowCount;
 
        array[i][j] = StrToInt(StringGrid1->Cells[j][i]);
 
        tmp = array[i][j];
        array[i][j] = array[ StringGrid1->ColCount - 1 - j ][ i ];
        array[ StringGrid1->ColCount - j ][ i ] = tmp;
 
        StringGrid2->Cells[StringGrid1->ColCount - 1 - j][i] = tmp;
0
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
13.03.2013, 00:49
SlashX6, кол- колонка ров- строка Х) А так i - у тебя идет в цикле сравнение с количеством колонок j - с количеством строк)
1
16 / 16 / 9
Регистрация: 16.03.2012
Сообщений: 437
13.03.2013, 23:14  [ТС]
Graf_N, надо доработать, просто где-то перепутал местами Col и Row

Добавлено через 13 часов 5 минут
Получилось оптимизировать алгоритм и добиться результата.
П.С. если кому не нель или кто знает, то как записать в пустые ячейки StringGrid 0.
Вариант приведённые ниже, работает правильно не всегда. Если значение задана, например, 4 * 4, то всё заполнит, а вот уже, например, 3 * 5, при заполнении выдаст ошибку
( "" invalid integer value ).

C
1
2
3
4
5
6
7
8
if ( StringGrid1->Cells[ i ][ j ] == "" )
{
    for ( i = 0; i < n; i++) // n - кол-во рядов выбранное в SpinEdit1
       for ( j = 0; j < m; j++) // m - кол-во колонн выбранное в SpinEdit2
       {
           StringGrid1->Cells[ i ][ j ] = "0"; // заполняем все пустые поля 0-лями.
       }
}
C
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
void __fastcall TForm2::Button1Click(TObject *Sender)
{
      int array[N][M];
      int n = StrToInt( CSpinEdit1->Value ); // ряд
      int m = StrToInt( CSpinEdit2->Value ); // колонна
      int i, j, rnd, nulle; // i - ряд, j - колонна, rnd - random
      int tmp;
 
      // Ввести 0 во все поля при нажатии кнопки для избежания вылетов ошибок.
 
      Label4->Visible = true;
      Label4->Caption = "Введите числа в поля!";
 
      StringGrid1->ColCount = CSpinEdit2->Value;
      StringGrid1->RowCount = CSpinEdit1->Value;
 
 
      StringGrid2->ColCount = StringGrid1->ColCount;
      StringGrid2->RowCount = StringGrid1->RowCount;
 
     for (i = 0; i < n; i++)
      for (j = 0; j < m; j++)
      {     /* Запись в массив */
            array[i][j] = StrToInt(StringGrid1->Cells[j][i]);
      }
 
     /* Меняем ряды местами. n - ряд, m - колонна */
     for (i = 0; i < n / 2; i++)
      for (j = 0; j < m; j++)
      {
            tmp = array[i][j];
            array[ i ][ j ] = array[ n - 1 - i ][ j ];
            array[ n - 1 - i ][ j ] = tmp;
      }
 
      /* В StringGrid2 записываем поменянные местами строки */
      for (i = 0; i < n; i++)
        for (j = 0; j < m; j++)
        {
            StringGrid2->Cells[j][i] = array[i][j];
        }
}
0
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
13.03.2013, 23:18
SlashX6, ставишь 2 цикла) На колонку и строку, во внутреннем цикле ставишь свое условие, если в такой то ячейке пусто, то заполнить ее нулем)
1
16 / 16 / 9
Регистрация: 16.03.2012
Сообщений: 437
14.03.2013, 14:19  [ТС]
Graf_N, сделал так, но ошибка осталась, поправьте если что-то не так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
      
      int n = StrToInt( CSpinEdit1->Value ); // кол-во рядов
      int m = StrToInt( CSpinEdit2->Value ); // кол-во колонн
         
         StringGrid1->ColCount = CSpinEdit2->Value;
      StringGrid1->RowCount = CSpinEdit1->Value;
 
      for (i = 0; i < n; i++)
       for (j = 0; j < m; j++)
       {
            if  ( StringGrid1->Cells[i][j] == "" )
            {
                StringGrid1->Cells[i][j] == "0";
            }
0
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
14.03.2013, 14:46
Цитата Сообщение от SlashX6 Посмотреть сообщение
Graf_N, сделал так, но ошибка осталась, поправьте если что-то не так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
      
      int n = StrToInt( CSpinEdit1->Value ); // кол-во рядов
      int m = StrToInt( CSpinEdit2->Value ); // кол-во колонн
         
         StringGrid1->ColCount = CSpinEdit2->Value;
      StringGrid1->RowCount = CSpinEdit1->Value;
 
      for (i = 0; i < n; i++)
       for (j = 0; j < m; j++)
       {
            if  ( StringGrid1->Cells[i][j] == "" )
            {
                StringGrid1->Cells[i][j] == "0";
            }
в теле ифа, не в условии а в теле 1 = а не 2

StringGrid1->Cells[i][j] = "0";
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.03.2013, 14:46
Помогаю со студенческими работами здесь

Поменять местами строчки в StringGrid
Здравствуйте! Есть стринг грид, в нём данные. Нужно поменять все строчки на противоположные. Т.е. последнюю на первую, пред последнюю на...

Поменять местами первый и последний столбец, после поменять местами первый и предпоследний строки
Масив 4х4, нужно поменять местами первый и последний столбец, после поменять местами первый и предпоследний строки, делал так: for...

Поменять местами 2 заданных элемента матрицы (StringGrid)
С помощью объекта SrtingGrid создайте матрицу из 12 строк и 12 столбцов. Заполните матрицу случайными целыми числами от -99 до 99....

У матрицы с размером M*N поменять местами строки с наибольшим и наименьшим элементом местами
Всем привет, подскажите пожалуйста. Как в Windows Form у матрицы с размером M*N поменять местами строки с наибольшим и наменьшим элементом...

Поменять местами второй и предпоследний столбцы в двумерном массиве StringGrid
Дан двумерный массив, сформированный случайным образом (заполнен числами от -100 до 100). Нужно запрограммировать кнопку,которая...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru