Каталог решений - [После]Новогодние задачи

[После]Новогодние задачи

[После]Новогодние задачи

В наличии

Совсем немного времени осталось до того момента, когда отзвучат куранты, шампанское будет выпито, мандарины съедены, и даже оливье закончится. Возникнет вопрос: чем бы занять неожиданно появившееся свободное время?

Категория:

Описание

Я хочу предложить несколько интересных на мой взгляд задач. Скорее всего, не все они имеют практическое применение, но, я надеюсь, позволят взглянуть на казалось бы хорошо знакомые вещи с неожиданной стороны.

1)

Начнем с классики:

Как поменять местами значения двух переменных, не используя третью? В языке 1С существует как минимум три способа для числовых переменных и один — для строковых. Каждый способ имеет свои достоинства, недостатки и область применения. (Конечно же, говоря о количестве переменных, мы имеем в виду прикладной код. Какие переменные используются при этом в платформе нам неведомо). Найдите эти способы. А может быть их число гораздо больше? 

2)

Имеется две таблицы, в первой — M записей, во второй — N записей. Какое максимальное и минимальное число записей может содержать результат а) левого соединения, б) внутреннего соединения и в) полного соединения таблиц? (дополнительные условия ГДЕ (WHERE) не накладываются).

3)

Существует рекомендация для оптимизации запросов: отборы при использовании виртуальных таблиц лучше задавать в параметрах виртуальной таблицы, а не в секции ГДЕ. Но всегда ли результаты будут идентичны? Другими словами: возможна ли ситуация, когда переместив условие из секции ГДЕ в параметры виртуальной таблицы, мы получим другой результат запроса?

4)

Есть справочник Контрагенты с табличной частью Скидки. Для каждого контрагента может быть несколько видов скидок, заданных в процентах.

При вычислении итоговой цены для контрагента все скидки применяются последовательно, т.е. например, если есть две скидки по 50%, то результирующая цена сторублевого товара будет: 100 минус 50% от 100 рублей и минус 50% от результата, итого — 25 руб. Таким образом итоговая скидка составила 75%.

Необходимо разработать отчет, который рассчитывает итоговые скидки контрагентов

5)

Программист Вася (не тот, который кот (c), а тот, который не кот) получил задачу:

Имеется две таблицы значений с колонкой "Наименование". Необходимо найти сколько строк (наименований) из первой таблицы присутствуют во второй. Вася решает сделать это за один проход по предварительно отсортированным таблицам и пишет вот такой код:

	ТЗ1.Сортировать("Наименование");
	ТЗ2.Сортировать("Наименование");
	
	КолВоСовпадений = 0;
	Индекс1 = 0;
	Индекс2 = 0;
	
	Пока Индекс1 < ТЗ1.Количество() И Индекс2 < ТЗ2.Количество()  Цикл
		Если ТЗ1[Индекс1].Наименование = ТЗ2[Индекс2].Наименование Тогда   
			КолВоСовпадений = КолВоСовпадений + 1;
			Индекс1 = Индекс1 + 1;			
		ИначеЕсли ТЗ1[Индекс1].Наименование < ТЗ2[Индекс2].Наименование Тогда   
			Индекс1 = Индекс1 + 1;
		ИначеЕсли ТЗ1[Индекс1].Наименование > ТЗ2[Индекс2].Наименование Тогда   
			Индекс2 = Индекс2 + 1;
		КонецЕсли; 
	КонецЦикла; 
	
	Сообщить("Количество совпадений: " + КолВоСовпадений); 

К сожалению, этот код ошибочен. Где ошибка? Как исправить?

6)

Дано не очень большое положительное целое число. Необходимо разделить его на N целых частей пропорционально (точнее примерно пропорционально) N весам.

Примеры:

Число: 100

частей: 2

веса: 1, 3.

Результат: 25, 75

Число: 1000

частей: 3

веса: 1, 2, 3.

Результат: 167, 333, 500

Обязательное условие: операции умножения и деления использовать нельзя!

 

На этом пока все. Поздравляю всех с Новым годом!

 

PS: Настоятельная просьба: пожалуйста, не пишите ответы и решения в комментариях, не лишайте сообщество удовольствия самостоятельного поиска решения! Желающие могут прислать свои варианты ответов в личку, постараюсь ответить всем.

UPD 16.01.2020:

 

has been added to your cart:
Оформление заказа