1с задачи для новичков

1. Mifril78 06.10.23 14:04 Сейчас в теме
Есть задание. Даны два целых числа A и В. Выведите все числа от A до B включительно, в порядке возрастания через запятую, если A < B, но если A > B тогда выводить в порядке убывания через запятую.

Мой Код,
&НаКлиенте
Процедура ВыводЗначения(Команда)

Если Число1 > Число2 Тогда
Результат = Пересчет(Число1,Число2);
ИначеЕсли Число1 < Число2 Тогда
Результат = Пересчет2(Число1,Число2);
КонецЕсли;
Сообщить(Результат);
КонецПроцедуры


&НаКлиенте
Функция Пересчет(Число1,Число2);

Если Число1 = Число2 Тогда
Результат =Строка(Число1);
Иначе
Результат = Строка(Число1) + " " + Строка(Пересчет(Число1 - 1, Число2));
КонецЕсли;
Возврат Результат;

КонецФункции

&НаКлиенте
Функция Пересчет2(Число1, Число2);

Если Число2 = Число1 Тогда
Результат =Строка(Число2);
Иначе
Результат = Строка(Число2) + " " + Строка(Пересчет2(Число1, Число2 + 1));
КонецЕсли;
Возврат Результат;

КонецФункции


Я не понимаю почему клиент вылетает, подскажите что не так
По теме из базы знаний
Найденные решения
2. soft_wind 06.10.23 14:51 Сейчас в теме
а зачем такой сложный код? на франчайзи учитесь?
попробуйте такой код

Число1 = 10;
Число2 = 17;
лкМ = Новый Массив;
Пока Число1 <> Число2 Цикл
	лкМ.Добавить(Число1);
	Число1 = Число1 + ?(Число1  <  Число2, 1, -1);
КонецЦикла;
лкМ.Добавить(Число1);
Сообщить(СтрСоединить(лкМ,","));
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. soft_wind 06.10.23 14:51 Сейчас в теме
а зачем такой сложный код? на франчайзи учитесь?
попробуйте такой код

Число1 = 10;
Число2 = 17;
лкМ = Новый Массив;
Пока Число1 <> Число2 Цикл
	лкМ.Добавить(Число1);
	Число1 = Число1 + ?(Число1  <  Число2, 1, -1);
КонецЦикла;
лкМ.Добавить(Число1);
Сообщить(СтрСоединить(лкМ,","));
Показать
4. Mifril78 06.10.23 15:03 Сейчас в теме
(3) просто в задаче было условие не использовать циклы, спасибо за ответ, я уже нашел решение
6. starik-2005 3040 06.10.23 15:18 Сейчас в теме
(4)
не использовать циклы
Функция ВывестиСледующее(Х, А, Б)
  Если Мин(А,Б)+Х > Макс(А,Б) Тогда
    Возврат 0
  Иначе
    Сообщить( А + ?( А > Б, -Х, Х ) );
    ВывестиСледующее( Х + 1, А, Б )
  КонецЕсли
КонецФункции

//...
ВывестиСледующее(0, 15, 10)
Показать
3. user5300 1019 06.10.23 14:58 Сейчас в теме
5. starik-2005 3040 06.10.23 15:07 Сейчас в теме
Чтеа все такие сложные...
Для Х = 0 ПО Макс(А,Б) - Мин(А,Б) Цикл
  Сообщить( ?( А < Б, А + Х, А - Х ) );
КонецЦикла;
7. soft_wind 06.10.23 15:49 Сейчас в теме
(5) нужна одна сторока!
а сообщить в цикле что даст?
8. starik-2005 3040 06.10.23 15:51 Сейчас в теме
(7) Ну а что мешает написать <<Возврат СтрШаблон("%1,%2", А +- Х, Следующее(Х+1, А, Б))>>?
9. soft_wind 06.10.23 15:51 Сейчас в теме
(4) "Не использовать циклы"
еще +/- запретили бы использовать

попробуйте рекурсивную процедуру
10. starik-2005 3040 06.10.23 16:01 Сейчас в теме
(9)
попробуйте рекурсивную процедуру
Функция ВывестиСледующее(Х, А, Б)
  Если Мин(А,Б)+Х > Макс(А,Б) Тогда
    Возврат Строка(Макс(А,Б))
  Иначе
    Если А > Б Тогда
      Возврат ВывестиСледующее( Х + 1, А, Б ) +","+ Строка( А - Х ) ;
    Иначе
      Возврат  Строка( А - Х ) +","+ ВывестиСледующее( Х + 1, А, Б );
    КонецЕсли;
  КонецЕсли
КонецФункции

//...
Сообщить( ВывестиСледующее(0, 15, 10) )
Показать
11. soft_wind 06.10.23 16:10 Сейчас в теме
12. starik-2005 3040 06.10.23 16:15 Сейчас в теме
(11)
получилось
Так он же в (3) пишет, что нашел решение. А Вы что, правда помочь хотели? ))))
13. soft_wind 06.10.23 16:22 Сейчас в теме
(12) да какая это помощь? просто привести пример, рассмотреть разные варианты
(у вас тоже очень оригинальные)
вот что у меня с рекурсией получилось
&НаКлиенте
Процедура Команда1(Команда)
	
	Число1 = 3;
	Число2 = 10;
	Результат = "";
	ВыполнитьРасчет(Число1, Число2, Результат);
    Сообщить(Результат);
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьРасчет(Число1, Число2, Результат)
	Результат = Результат + ?(Результат = "","",",") + Число1; 
	Если Число1 <> Число2 Тогда
		Число1 = Число1 + ?(Число1  <  Число2, 1, -1);
		ВыполнитьРасчет(Число1, Число2, Результат);
	КонецЕсли;
КонецПроцедуры
Показать
14. starik-2005 3040 06.10.23 17:42 Сейчас в теме
(13)
привести пример, рассмотреть разные варианты
+
ВыполнитьРасчет(Число1 + (Число1  -  Число2) / (Число1  -  Число2), Число2, Результат);
Оставьте свое сообщение

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