Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.09.2012, 10:17
Аватар для alexusankov
alexusankov alexusankov вне форума
Новичок
 
Регистрация: 27.08.2012
Сообщения: 78
Версия Delphi: C++/Delphi 2010
Репутация: 10
По умолчанию Непростая задачка с listbox

Доброго дня. Помогите реализовать алгоритм. Я не буду описывать всю программу, напишу чуть иначе. Есть алгоритм, как реализовать в коде - не хватает ума.
Итак. Имеется массив чисел. Числа положительные и отрицательные. Массив мы представим в виде listbox1 на форме.
Так же на форме будет listbox2 и listbox3 - для запихивания значений из массива. Итак поехали :
Массив представляет собой последовательность чисел в listbox1. В итоге массив должен начинаться с положительного числа, и заканчиваться отрицательным. Числа должны чередоваться, НЕчетные - положительны, четные элементы отрицательны. Это то что должно получиться в итоге. Сразу мы имеем массив чисел, которые идут по нарастающей :
+35
-42
+96
-112
+186
-740
Вот в этом примере массив шикарен и все правильно.
Но бывает такое :
1. Два числа подряд идут отрицательных
2. Два числа идут положительных
3. Массив начинается НЕ с положительного
4. Массив заканчивается НЕ отрицательным
- это вещи с которыми будем бороться
Пример :
-15
+35
-42
+78
-116
-182
+350
-360
+620
+630
-700
+730
В этом массиве имеется все 4 описанных косяка. Что программа должна с ними делать.
1. В первую очередь, обязательно проверить начинается ли и заканчивается ли массив сотв-но положительным и отрицательными. Если нет - в начало listbox сунуть положительное (0) в конец отрицательное (-800).
2. Далее если программа в списке находит два подряд идущих отрицательных (-116,-182) то :
2.1 Если ВТОРОЕ отрицательное отличается от первого отричательно меньше чем на 2 - удалить ил listbox первое отрицательное.
Если второе(otr2) отрицательное отличается от первого(otr1) БОЛЬШЕ чем на два - между этими числами нужно вставить положительное - которое будет равно отрицательному(переведенному в положительное) плюс 2. Получится -116, + 118, -182
3. Если в списке два плюса(+620,+630) - почти то же самое : Если второе положительное отличается от первого положительного менее чем на 2 - второе положительное нужно удалить.
Если второе положительное больше первого более чем на 2 - между ними нужно воткнуть отрицательное число, которое будет равно второму положительному минус два, перевернутое в отрицательное. т.е. мы получим 620,-628,630.
Итак в listbox1 был кривоватый массив который программа исправила.
Было бы идеально, если бы пары чиле которые НЕ исправлялись - ушли в listbox2 а те что исправлены - в listbox3. На нашем примеремы получим исправленный массив :
0
-15
+35
-42
+78
-116
+118
-182

+350
-360
+620
-628

+630
-700
+730
-800
т.е. все числа пойду в листбокс2, кроме : отмечных красным.
Если логика непонятна - поясню боллее развернуто.
Спасибо заранее))

Последний раз редактировалось alexusankov, 27.09.2012 в 10:19.
Ответить с цитированием
 


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:01.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025