![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
ninja |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Добрый день!
Столкнулся с такой проблемой: необходимо таблицу stringgrid заполнить значениями '1' и '0' по такому принцыпу для 2х столбцов: Код 00 01 10 11 для 3х столбцов Код 000 001 010 011 100 101 110 111 Причем количество столбцов может быть любым например 10, и заполнение таблицы происходит по такому принцыпу. Помогите разобраться. Первые 2 строчки заполнил обычным циклом, для остальных делал следующее: Пробывал сначала бежать по каждой строчке и если встречается '1' то смотреть что после нее, если '0' , то в следующую записывалась '1' если после '1' всречалась снова '1' то '1' записывалась после текущей позиции.
Затем пробывал бежать по каждому столбцу т.е. если последний столбец, то заполняется так 0,1,0,1,0,1...... предпоследний так 00,11,00,11,00........ и т.д. Тут столкнулся с проблемой как реализовать такой цикл.
P.S. Заранее благодарен за помощь |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
На самом деле все проще:
procedure TForm1.Button1Click(Sender: TObject);- делает то, что тебе надо... При условии, что у СтрингГрида FixedRows = 0 и FixedCols = 0... |
ninja |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Огромное спасибо, все получилось.
![]() |
TarasBer |
![]()
Сообщение
#4
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
inttostr(1) - в цитатник
Я бы добавил к решению Вольво то, что в данном случает логичнее вместо div 2 писать shr 1 (это не только быстрее, это действительно логичнее - ведь нам нужно двоичное разложение числа), а вместо StringGrid1.Cells[myCol - 1, X] := IntToStr(T mod 2); логичнее if odd(t) then StringGrid1.Cells[myCol - 1, X] := '1' else StringGrid1.Cells[myCol - 1, X] := '0'; -------------------- |
andriano |
![]()
Сообщение
#5
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
Не согласен по обоим пунктам.
inttostr(1) - в цитатник Я бы добавил к решению Вольво то, что в данном случает логичнее вместо div 2 писать shr 1 (это не только быстрее, это действительно логичнее - ведь нам нужно двоичное разложение числа), Но аппаратная зависимость, которая в данном случае налицо, здесь совершенно не нужна. Цитата а вместо StringGrid1.Cells[myCol - 1, X] := IntToStr(T mod 2); логичнее if odd(t) then StringGrid1.Cells[myCol - 1, X] := '1' else StringGrid1.Cells[myCol - 1, X] := '0'; Что будет быстрее выполняться - также сказать трудно. Зато исходный вариант короче в записи и, на мой взгляд, нагляднее. |
TarasBer |
![]()
Сообщение
#6
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Не согласен по обоим пунктам. Это не просто нелогично, это аппаратнозависимо, т.к. будет выполняться только на компьютерах с двоичным представлением информации (а есть еще и троичные, хоть это и экзотика). Бывает, кирпичи на голову падают. Цитата Но аппаратная зависимость, которая в данном случае налицо, здесь совершенно не нужна.И чем это логичнее? Что будет быстрее выполняться - также сказать трудно. Зато исходный вариант короче в записи и, на мой взгляд, нагляднее. Хорошо, StringGrid1.Cells[myCol - 1, X] := char((T and 1) + byte('0')); Только не надо говорить про зависимость от кодировки. -------------------- |
ninja |
![]()
Сообщение
#7
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Сталкнулся еще с одной проблемой:
Мне необходимо теперь по определенным правилам например если это сложение то сложить определенные столбцы т.е. Все условие моей задачи состоит в том чтобы вывести таблицу истиности для заданной формулы, причем количество переменных неограничено. Например данно 2 переменных x1 и x2 и сама функция x1^x2 ^ - умножение выводится таблица для 2х переменных Код 00 01 10 11 результат должен получается такой
Проблема в реализации т.е. Я сначала пробегаю по строке отбрасываю x и функция принимает вид 1^2..... для 3x переменных я сделал:
Если переменных 3, 1^2^3, то сначала выполняется 1^2 переменной ff:=1 и зазем выполняется ff^3 Получается все очень громоздко, если есть идеи пожалуйста поделитесь. Спасибо. |
![]() ![]() |
![]() |
Текстовая версия | 8.07.2025 11:01 |