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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2007, 11:10   #1
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
По умолчанию Эмуляция механического счетчика

На форме 3 ListBox'a. У всех св-во Items числа от 0 до 9.
Нужно чтобы был организован счетчик - по типу обычного счетчика для подсчета электронэнергии.Но возникает ошибка при пере ходе цифр от 89 к 90 - получается число 190 вместо 90, потомучто этот алгоритм реализован для разрядов (т.е. единицы,десятки и сотни).

Существует условие - нельзя сравнивать числа арифметическими действиями!!!, только как текст или логическими операциями.

Вот листинг процедура сидит на таймере(это не суть).

procedure TForm1.Button1Click(Sender: TObject);
var
TEXT_1:string; TEXT_2:string; TEXT_3:string;
procedure MoveItems(List:TListBox);
// простое перемещение в листбоксе
var
q:string;
begin
q := List.Items.Strings[0];
List.Items.Delete(0);
List.Items.Add(q);
end;
begin
TEXT_1 := Listbox1.Items.Strings[0];
MoveItems(ListBox1);
if TEXT_1 = '9' then
begin
//ошибка возникает здесь!!!! при переходе 89-90 т.к.
//оба разряда равны 9: 89 - единицы и (при добавлении единицы) 90
//
MoveItems(ListBox2);
TEXT_2 := Listbox2.Items.Strings[0];
if (TEXT_1 = '9') and (TEXT_2='9') then
begin
MoveItems(ListBox3);
TEXT_3 := Listbox3.Items.Strings[0];
end;
end;
end;
кто сможет решить буду очень благодарен!!!
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
Paul Hindenburg вне форума Ответить с цитированием
Старый 19.08.2007, 20:17   #2
Мэс
Пользователь Подтвердите свой е-майл
 
Аватар для Мэс
 
Регистрация: 07.08.2007
Сообщений: 22
По умолчанию

Я бы на твоем месте попробовал бы следующий вариант:

procedure MoveItems(List : TListBox);
var
q : string;
begin
q:=List.Items.Strings[0];
List.Items.Delete(0);
List.Items.Add(q);
end;

procedure Schetchik;
begin
MoveItems(Form1.ListBox1);
if Form1.ListBox1.Items[0]='0' then MoveItems(Form1.ListBox2) else exit;
if Form1.ListBox2.Items[0]='0' then MoveItems(Form1.ListBox3) else exit;
if Form1.ListBox3.Items[0]='0' then
begin
MoveItems(Form1.ListBox1);
MoveItems(Form1.ListBox2);
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Schetchik;
Label1.Caption:='Показания счетчика: '+ListBox3.Items[0]+ListBox2.Items[0]+ListBox1.Items[0];
end;
Мэс вне форума Ответить с цитированием
Старый 20.08.2007, 00:20   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Существует условие - нельзя сравнивать числа арифметическими действиями!!!
бред какой-то, а ты уверен что в описаниях функций Add, Delete нет арифметических действий?
С таким же успехом можно написать функцию делающую все арифметические вычисления и вынести ее в отдельный модуль
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эмуляция Mago Паскаль, Turbo Pascal, PascalABC.NET 3 27.07.2008 23:33
Собрать статистику счетчика. Djonson PHP 1 01.03.2008 18:35
Эмуляция консоли... Sota Общие вопросы C/C++ 4 20.01.2008 01:04
Эмуляция клавиш UnD)eaD)Snake Win Api 1 04.11.2007 18:07