![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
![]() Доброго дня. Помогите реализовать алгоритм. Я не буду описывать всю программу, напишу чуть иначе. Есть алгоритм, как реализовать в коде - не хватает ума.
Итак. Имеется массив чисел. Числа положительные и отрицательные. Массив мы представим в виде 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. |
#2
|
||||
|
||||
![]() Цитата:
|
#3
|
||||
|
||||
![]() Как это в коде реализовывается.
Как искать в массиве сочетания ++, или --. Если я воткнуть изменения в массив, между ++ один - например. |
#4
|
||||
|
||||
![]() Цитата:
Цитата:
Код:
ListBox1.Items.Insert(7, '-'); |
#5
|
||||
|
||||
![]() Хоть убиться, не могу представить как это в коде реализовать
|
#6
|
||||
|
||||
![]() Цитата:
|