Работа с диапазоном чисел

1. ПолКило 03.04.17 11:44 Сейчас в теме
Здравствуйте, есть таблица с числами, мне необходимо обойти все числа в ТЗ, и разделить их на диапазоны, не могу сообразить, как мне в цикле задать чтобы при получении следующего числа сравнивать с предыдущим и если отличается на 1 то это один диапазон, если отличаются больше чем на 1 то другой диапазон, числа идут по порядку. Или может данный подход в корне не правильный?
+
По теме из базы знаний
Найденные решения
7. herfis 498 03.04.17 12:19 Сейчас в теме
Вроде так (для двух чисел и более):
ТекущийДиапазон = ТаблицаДиапазонов.Добавить();
ТекущийДиапазон.Начало = ТаблицаЧисел[0].Число;
Для ИндексЧисла = 1 По ТаблицаЧисел.Количество() - 1 Цикл
   Если ТаблицаЧисел[ИндексЧисла].Число <> ТаблицаЧисел[ИндексЧисла - 1].Число + 1 Тогда
      ТекущийДиапазон.Конец = ТаблицаЧисел[ИндексЧисла - 1].Число;
      ТекущийДиапазон = ТаблицаДиапазонов.Добавить();
      ТекущийДиапазон.Начало = ТаблицаЧисел[ИндексЧисла].Число;
   КонецЕсли;
КонецЦикла;
ТекущийДиапазон.Конец = ТаблицаЧисел[ТаблицаЧисел.Количество() - 1].Число;
Показать
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Naposaram 291 03.04.17 11:52 Сейчас в теме
(1) В цикле в переменную помещай очередное значение и потом при следующем витке цикла сравнивай с ним.
+
3. Naposaram 291 03.04.17 11:56 Сейчас в теме
(1) типа того:

ПредЧисло =  0;

Пока СтрТаб Из Таблица Цикл 
	Если НЕ ПредЧисло = 0 Тогда 
		// Тут сравниваем	
	КонецЕслИ;
	
	ПредЧисло = СтрТаб.Число;
КонецЦикла;

Показать
+
4. ildarovich 7861 03.04.17 11:58 Сейчас в теме
Вот тут Минимализмы (Задача 2) есть готовая функция для решения этой задачи.
DJDUH; +1
8. ПолКило 03.04.17 13:06 Сейчас в теме
(4)
(7)всем спасибо))) очень помогли) Для себя понял, нужно пробел в знаниях исправлять в плане индексов.
+
5. herfis 498 03.04.17 12:02 Сейчас в теме
Писал сразу набело, поэтому за работоспособность не ручаюсь :)
ПредыдущееЧисло = -99999999; ДиапазонОткрыт = Ложь;
Для Каждого СтрокаЧисла Из ТаблицаЧисел Цикл
     Если СтрокаЧисла.Число <> ПредыдущееЧисло + 1 Тогда
          Если ДиапазонОткрыт Тогда
                Диапазон = ТаблицаДиапазонов[ТаблицаДиапазонов.Количество() - 1];
                Диапазон.Конец = ПредыдущееЧисло;
                ДиапазонОткрыт = Ложь;
          КонецЕсли;
          Диапазон = ТаблицаДиапазонов.Добавить();
          Диапазон.Начало = СтрокаЧисла.Число;
          ДиапазонОткрыт = Истина;
     КонецЕсли;
     ПредыдущееЧисло = СтрокаЧисла.Число;
КонецЦикла;
Если ДиапазонОткрыт Тогда
     Диапазон = ТаблицаДиапазонов[ТаблицаДиапазонов.Количество() - 1];
     Диапазон.Конец = ПредыдущееЧисло;
КонецЕсли;
Показать
+
6. herfis 498 03.04.17 12:05 Сейчас в теме
Не, чет намутил. Проще можно. Щаз...
+
7. herfis 498 03.04.17 12:19 Сейчас в теме
Вроде так (для двух чисел и более):
ТекущийДиапазон = ТаблицаДиапазонов.Добавить();
ТекущийДиапазон.Начало = ТаблицаЧисел[0].Число;
Для ИндексЧисла = 1 По ТаблицаЧисел.Количество() - 1 Цикл
   Если ТаблицаЧисел[ИндексЧисла].Число <> ТаблицаЧисел[ИндексЧисла - 1].Число + 1 Тогда
      ТекущийДиапазон.Конец = ТаблицаЧисел[ИндексЧисла - 1].Число;
      ТекущийДиапазон = ТаблицаДиапазонов.Добавить();
      ТекущийДиапазон.Начало = ТаблицаЧисел[ИндексЧисла].Число;
   КонецЕсли;
КонецЦикла;
ТекущийДиапазон.Конец = ТаблицаЧисел[ТаблицаЧисел.Количество() - 1].Число;
Показать
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот