Как очистить stringgrid паскаль
Профиль
Группа: Участник
Сообщений: 27
Регистрация: 30.3.2009
Репутация: нет
Всего: нет
Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург
Репутация: 23
Всего: 72
Профиль
Группа: Участник
Сообщений: 27
Регистрация: 30.3.2009
Репутация: нет
Всего: нет
Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург
Репутация: 23
Всего: 72
| Цитата(EntityFx @ 28.4.2009, 22:04 ) |
| но в памяти "висит" |
Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009
Репутация: 20
Всего: 58
Не помню, чтобы при манипуляциях со StringGrid'ом память очищали.
| Цитата(kami @ 28.4.2009, 22:28 ) |
| Если Taskmanager-ом, то плюнь, это так сказать неправильные показания. |
Cogito, ergo sum
Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь
Репутация: 53
Всего: 133
Запрещается!
1. Публиковать ссылки на вскрытые компоненты
2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
- Литературу по Дельфи обсуждаем здесь
- Действия модераторов можно обсудить здесь
- С просьбами о написании курсовой, реферата и т.п. обращаться сюда
- Вопросы по реализации алгоритмов рассматриваются здесь
- 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
[ Время генерации скрипта: 0.1109 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Обработка матриц в Паскале
Матрица — это двумерный массив , каждый элемент которого имеет два индекса: номер строки и номер столбца.
Объявить двумерный массив (матрицу) можно так:
имя : array [ индекс1_нач.. индекс1_кон, индекс2_нач.. индекс2_кон ]
- тип определяет тип элементов массива,
- имя — имя матрицы,
- индекс1_нач..индекс1_кон — диапазон изменения номеров строк,
- индекс2_нач..индекс2_кон — диапазон изменения номеров столбцов матрицы.
var h : array [ 0.. 1 1, 1.. 10 ] of integer;
Описана матрица целых чисел h , состоящая из двенадцати строк и десяти столбцов (строки нумеруются от 0 до 11, столбцы от 1 до 10).
Существует ещё один способ описать матрицы, для этого надо создать новый тип данных :
новый_тип=array [ индекс1_нач.. индекс1_кон ] of тип;
имя : array [ индекс2_нач.. индекс2_кон ] of новый_тип;
новый_тип=array [ список_диапазонов ] of тип;


В данном случае в матрицах a и b есть 10 строк и 30 столбцов, а с — матрица , в которой есть 16 строк и 14 столбцов.
Для обращения к элементу матрицы необходимо указать её имя и в квадратных скобках через запятую номер строки и номер столбца:
имя [ номер_строки, номер_столбца ]
имя [ номер_строки ] [ номер_столбца ]
Например, h[2,4] 1 Или h[2][4]. — элемент матрицы h , находящийся в строке под номером два и столбце под номером четыре.
Для обработки всех элементов матрицы необходимо использовать два цикла . Если матрица обрабатывается построчно, то во внешнем цикле последовательно перебираются строки от первой до последней, затем во внутреннем — все (первый, второй, третий и т. д.) элементы текущей строки. При обработке элементов матрицы по столбцам внешний цикл будет перебирать столбцы, внутренний — строки. На рис. 6.1 представлена блок-схема алгоритма обработки матрицы по строкам, на рис. 6.2 — по столбцам. Здесь i — номер строки, j — номер столбца, N — количество строк, M — количество столбцов матрицы A .


Рассмотрим основные операции , выполняемые над матрицами при решении задач.
6.1 Ввод-вывод матриц
Матрицы, как и массивы, нужно вводить (выводить) поэлементно. Вначале следует ввести размеры матрицы, а затем уже в двойном цикле вводить элементы. Блок-схема ввода элементов матрицы изображена на рис. 6.3.
Вывод можно осуществлять по строкам или по столбцам, но лучше, если элементы располагаются построчно, например,
Алгоритм построчного вывода элементов матрицы приведён на рис. 6.4.
Об описании матриц на языке Паскаль было рассказано в разделе 5.2 главы 5, обращение к элементу
или
.
Рассмотрим реализацию ввода-вывода матриц в консольных приложениях.
Для организации построчного ввода матрицы в двойном цикле по строкам и столбцам можно использовать оператор read .
В этом случае элементы каждой строки матрицы можно разделять символами пробела или табуляции, и только в конце строки нажимать Enter .
Ниже приведён пример консольного приложения ввода-вывода матрицы.
На рис. 6.5 представлены результаты работы программы.

Ввод матрицы также можно организовать с помощью следующего цикла .
Авторы предлагают читателю самостоятельно разобраться, в чём будет отличие ввода матрицы в этом случае.
Для ввода-вывода матриц можно использовать компонент типа TStringGrid, с которым мы познакомились в главе 5.
В качестве примера рассмотрим следующую задачу.
ЗАДАЧА 6.2. Составить программу транспонирования 2 Транспонированная матрица — матрица, полученная из исходной матрицы
заменой строк на столбцы. матрицы
.
Блок-схема транспонирования матрицы приведена на рис. 6.6. При транспонировании матрицы
получается матрица B
.

Рассмотрим частный случай транспонирования матрицы фиксированного размера A(4,3) .
На форме разместим метки Label1 и Label2 со свойствами Caption — Заданная матрица
и Транспонированная матрица
, два компонента типа TStringGrid , изменив их свойства так, как показано в табл. 6.1, и кнопку Транспонирование матрицы.
Окно формы приложения представлено на рис. 6.7.
Ниже приведён текст подпрограммы с комментариями, которая будет выполняться, если пользователь щёлкнет по кнопке Транспонирование матрицы.
| Свойство | StringGrid1 | StringGrid2 | Описание свойства |
|---|---|---|---|
| Top | 30 | 30 | Расстояние от верхней границы таблицы до верхнего края формы |
| Left | 15 | 240 | Расстояние от левой границы таблицы до левого края формы |
| Height | 130 | 130 | Высота таблицы |
| Width | 200 | 200 | Ширина таблицы |
| ColCount | 4 | 5 | Количество столбцов |
| RowCount | 5 | 4 | Количество строк |
| DefaultColWidth | 30 | 30 | Ширина столбца |
| DefaultRowHeight | 20 | 20 | Высота строки |
| Options.goEditing | true | false | Возможность редактирования таблицы |

Результаты работы программы представлены на рис. 6.8.

Для демонстрации ввода-вывода матриц с помощью компонента типа TStringGrid мы рассмотрели работу с матрицами фиксированного размера A(4,3) и B(3,4) . Теперь рассмотрим общий случай решения задачи транспонирования матрицы A(N,M) .
Расположим на форме следующие компоненты:
- метку label1 с надписью «Введите размерность матрицы»;
- метку label2 с надписью «N http://www.intuit.ru/2010/edi»>метку label3 с надписью «M http://www.intuit.ru/2010/edi»>метку label4 с надписью «Исходная матрица А «;
- метку label5 с надписью «Преобразованная матрица В «;
- поле ввода Edit1 для ввода числа N ;
- поле ввода Edit2 для ввода числа M ;
- компонент StringGrid1 для ввода исходной матрицы A ;
- компонент StringGrid2 для хранения транспонированной матрицы B ;
- кнопку Button1 с надписью «Ввод» для ввода размеров матрицы А ;
- кнопку Button2 с надписью «Очистить» для очистки содержимого матриц;
- кнопку Button3 с надписью «Транспонирование» для решения задачи транспонирования матрицы А ;
- кнопку Button4 с надписью «Выход из программы» для завершения работы программы.
Можно разместить компоненты на форме так, как показано на рис. 6.9.


Установим свойство видимости ( Visible ) в False у компонентов метки label4, label5, StringGrid1, StringGrid2 , кнопки Button2 и Button3 . После этого при запуске программы будут видны только компоненты, отвечающие за ввод размеров матрицы, и кнопка Выход из программы (см. рис. 6.10) 3 Свойству формы Caption присвоено значение Транспонирование матрицы. . Матрицы A и B , их размеры N, M объявим глобально.
Обработчик кнопки Выход из программы стандартен и представлен ниже.
Теперь напишем обработчик кнопки Ввод, который должен вводить и проверять корректность введения размеров матрицы, устанавливать свойства компонентов StringGrid1 и StringGrid2 (количество строк и столбцов), делать видимым компонент StringGrid1 , кнопку Транспонирование , невидимыми компоненты, отвечающие за ввод размеров матрицы (метки label1, label2, label3 , поля ввода Edit1 и Edit2 , кнопку Ввод ).
Теперь напишем обработчик кнопки Транспонирование . При щелчке по этой кнопке становится видимым компонент StrigGrid2 , предназначенный для хранения транспонированной матрицы B , соответствующая ему надпись ( label5 ), формируется матрица B . Матрица B выводится в компонент StringGrid2 . Кнопка Ввод становится невидимой. Текст обработчика приведён ниже.
Осталось написать обработчик события при нажатии на кнопку Очистить. При щелчке по этой кнопке должно происходить следующее:
- очистка содержимого компонентов StringGrid1, StringGrid2 ;
- компоненты StringGrid1, StringGrid2 и соответствующие им метки labe4 и label5 , а также кнопки Транспонировать и Очистить становятся невидимыми;
- становится видимой кнопка Ввод;
- в поля ввода записываются начальные значения размеров матрицы ( N=4, M=3 ).
Текст обработчика кнопки Очистить с комментариями приведен ниже:
Мы получили работающую программу для транспонирования матрицы. На рис. 6.11 представлены результаты транспонирования матрицы A(2,4) .
Обратите внимание на использование оператора присоединения
with имя_компонента do оператор;
который упрощает доступ к свойствам компонента. Внутри оператора With имя компонента для обращения к его свойствам можно не использовать.
Например, для очистки элементов матрицы A вместо операторов
был использован оператор
Рассмотрим несколько задач обработки матриц. Для их решения напомним читателю некоторые свойства матриц (рис. 6.12):


- если номер строки элемента совпадает с номером столбца (
), это означает, что элемент лежит на главной диагонали матрицы; - если номер строки превышает номер столбца (
), то элемент находится ниже главной диагонали; - если номер столбца больше номера строки (
), то элемент находится выше главной диагонали; - элемент лежит на побочной диагонали, если его индексы удовлетворяют равенству
; - неравенство
характерно для элемента, находящегося выше побочной диагонали; - соответственно, элементу лежащему ниже побочной диагонали, соответствует выражение
.
Как очистить stringgrid паскаль
← →
Bishop ( 2002-12-08 23:56 ) [0]
Здравствуй и процветай всезнающий All. Подскажите:
Как быстро очистить StringGrid, чтоб не очищать каждую ячейку?
← →
Sha ( 2002-12-09 00:32 ) [1]
Придется очищать, тут никуда не деться.
← →
Tundra ( 2002-12-09 07:34 ) [2]
Попробуй RowCount и ColCount установить в 1, а затем вернуть в прежнее состояние
← →
PKT ( 2002-12-09 07:51 ) [3]
to: Tundra (09.12.02 07:34)
А сам не пробовал ? Не прокатит этот способ.
← →
MBo ( 2002-12-09 08:06 ) [4]
with stringgrid1 do
for i:=FixedRows to RowCount-1 do
Rows[i].Clear;
← →
Separator ( 2002-12-09 08:22 ) [5]
> MBo © (09.12.02 08:06)
Этот способ работает еще медленне чем простой перебор всех ячеек
← →
MBo ( 2002-12-09 08:43 ) [6]
тайминг c 500×500 заполненных ячеек
Cells[i,j]:="" 9000 мс.
Rows[i].Clear 7100 мс
Rows[i].Text:="" 4200 мс
← →
MBo ( 2002-12-09 08:50 ) [7]
P.S.
Освобождение и пересоздание этого StringGrid — 300 мс 😉
← →
Separator ( 2002-12-09 08:54 ) [8]
тот же тайминг:
Cells[i,j] := "" 17841 мс.
Cols[i].Text := "" 13481 мс
Rows[i].Text := "" 8766 мс — самый продуктивный
Странно раньше результат был другим.
Кстати а почему к Rows доступ быстрее чем к Cols
← →
Дмитрий К.К. ( 2002-12-09 09:20 ) [9]
Да замочить его тогда и заново родить! 😉
← →
Alexander Vasjuk ( 2002-12-09 11:22 ) [10]
Separator © (09.12.02 08:54)
Видимо храниться в Rows а Cols создаються из Rows
← →
Anatoly Podgoretsky ( 2002-12-09 11:30 ) [11]
Хранение данных в TSringGrid весьма сложно и преобразование из в row/col/text не является быстрой операцией, если же учистять полностью, то Free/Create будет во много раз быстрее
← →
mmb ( 2002-12-10 07:59 ) [12]
Если установить RowsCount := 1 и ColsCount := 1?
← →
Separator ( 2002-12-10 08:03 ) [13]
Не прокатит, так как реально данные не будут уничтожены. Попробуй сначала заполнить таблицу, потом уменьшить ее размер и тут же снова увеличить до исходного, все данные останутся на месте.
← →
Zwerg ( 2002-12-10 13:05 ) [14]
TStringGrid хранит данные в разреженной матрице (Sparced Matrix),
доступ к Cell[], Rows[], Cols[] нетривиален. Поэтому проще
пересоздать TStringGrid 😉