Простые, но интересные задачки по программированию

10.05.10

Разработка - Математика и алгоритмы

Простенькие задачки по программированию на сообразительность.
Зарядка для ума.

Прислал работодатель в качестве тестового задания. Некоторые уж совсем простые. Ответы опубликую позже в файле.

В комментариях наверняка будут ответы, так что кому интересно решить самостоятельно не проматывайте вниз.

Задача 1.

Объявлены две числовые переменные a и b. Необходимо сделать так, чтобы без объявления других переменных в результате работы алгоритма значения переменных поменялись местами. Например, если изначально a = 4, b = 5, то в результате алгоритма стало a = 5, b = 4. Применять можно только операции присваивания и арифметические операции с числами и значениями переменных.

 

Задача 2.

За один цикл вычислить значение функции F(n) = 1!*2!*3!...*n!., где n! = 1*2*3*…*n.

 

Задача 3.

Убрать условный оператор «Если» из следующего блока (А может принимать значение 0 или 1):

Если (А = 0) Тогда
   
B = 2;
Иначе
   
В = 1;
КонецЕсли;

Не допускается использование ЛЮБЫХ других условных операторов (например, ?(А = 0;2;1))

 

Задача 4.

Имеются два массива данных А[а] и B[в] (а и в – количества элементов массива). Известно, что оба массива упорядочены по возрастанию. Необходимо написать алгоритм, проходящий по этим массивам за 1 цикл вида:

Для Сч = 1 По а + в Цикл

и выдающий значения обоих массивов в порядке возрастания т.е. как бы объединив оба массива и отсортировав их по возрастанию.

 

Задача 5.

Имеется неупорядоченный массив из n различных целых чисел от 0 до n (0,1,…,j-1,j+1,….,n). Необходимо за один цикл определить недостающее число j.

 

Ссылки по теме:

http://macedu.narod.ru/edu/summary/prog-exe.html

 

См. также

Математика и алгоритмы Программист Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    3208    stopa85    12    

38

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    7618    user1959478    52    

36

Математика и алгоритмы Разное Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    3147    maksa2005    8    

26

Математика и алгоритмы Инструментарий разработчика Программист Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    10932    7    SpaceOfMyHead    18    

61

Математика и алгоритмы Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    4401    RustIG    9    

25

Механизмы платформы 1С Математика и алгоритмы Программист Платформа 1С v8.3 Россия Бесплатно (free)

В статье анализируются средства платформы для решения системы линейных уравнений в 1С. Приводятся доводы в пользу некорректной работы встроенных алгоритмов, а значит потенциально некорректного расчета себестоимости в типовых конфигурациях.

23.11.2022    3567    gzharkoj    14    

25

Математика и алгоритмы Программист Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    9051    7    kalyaka    11    

44
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DoctorRoza 10.05.10 17:23 Сейчас в теме
Хорошие задачи .. )) .. а первая вообще из 10 класса средней школы!! :)
2. YVolohov 723 10.05.10 18:54 Сейчас в теме
Задачи понравились, +

Кстати для первой:
А = А + В;
В = А - В;
А = А - В;
Трям; minikos; Evg-Lylyk; +3 Ответить
64. JaneP 14 01.03.13 16:34 Сейчас в теме
(2) YVolohov,
Другое решение:
b=b-a
a=a+b
b=a-b
72. пользователь 01.02.18 11:13
Сообщение было скрыто модератором.
...
73. 20!8 01.02.18 11:14 Сейчас в теме
3. YVolohov 723 10.05.10 19:02 Сейчас в теме
Для третьей задачи всего одна строка:

B = 2 - A;
Tornado_Storm; timeforlive; freeek; Светлый ум; JaneP; odin777; Evg-Lylyk; +7 1 Ответить
17. e.kogan 1895 11.05.10 15:38 Сейчас в теме
(3) А вот и нет. B = 1+(A=0);
ogroup; Kesak; abasovit; KeyMaster; Evg-Lylyk; +5 Ответить
18. YVolohov 723 11.05.10 19:25 Сейчас в теме
Согласно условию задачи:
если А = 0 тогда В = 2
если А = 1 тогда В = 1

если же считать по формуле в (17)
если А = 0 тогда В = 1
если А = 1 тогда В = 2
19. Evg-Lylyk 4842 11.05.10 23:15 Сейчас в теме
(18) да не все правильно. В 1С Число(Истина) = 1; Число(Ложь) = 0 вот и результат
20. YVolohov 723 11.05.10 23:54 Сейчас в теме
(19) Действительно правильно. А я сначала не врубился.
22. ll13 1067 12.05.10 00:22 Сейчас в теме
(19),(20) Только вот зачем? Смотрите сами, зачем городить огород:
1 - операция сравнения
2 - неявное приведение типа (Булево->Число)
3 - Сложение

Ведь В зависит от А линейно => B = 2 - A более логично ... :)
23. Evg-Lylyk 4842 12.05.10 01:47 Сейчас в теме
(22) Да согласен сложнее. Зато тоже правильно и по другому.
И возможно человек просто не прочитал "А может принимать значение 0 или 1" и написал просто замену
Если (А = 0) Тогда
    B = 2;
Иначе
    В = 1;
КонецЕсли;

для любых значений А
70. premierex 204 25.06.16 15:43 Сейчас в теме
(22) ll13, см. мой предыдущий комментарий.
74. Jokemas 192 13.03.18 17:21 Сейчас в теме
(19)
(24) Зачем так сложно? В форме рисуем числовое поле, (число1 же), вбиваем туда любое число и считаем факториал.

Процедура КнопкаВыполнитьНажатие(Кнопка)

Счетчик = 1;
Факториал = 1;

Пока Счетчик <= Число1 Цикл

Факториал = Факториал * Счетчик;

Счетчик = Счетчик + 1;

КонецЦикла;

Сообщить(Факториал);

КонецПроцедуры
75. Jokemas 192 13.03.18 17:24 Сейчас в теме
(19)
(24) Зачем так сложно? В форме рисуем числовое поле, (число1 же), вбиваем туда любое число и считаем факториал.

Процедура КнопкаВыполнитьНажатие(Кнопка)
	
        Счетчик = 1;
	Факториал = 1;
	Пока Счетчик <= Число1 Цикл
		Факториал = Факториал * Счетчик;
		Счетчик = Счетчик + 1;		
	КонецЦикла;
	
	Сообщить(Факториал);	
	
КонецПроцедуры
Показать
76. spacecraft 13.03.18 17:51 Сейчас в теме
(75) и чему там получится 0! ?
77. Jokemas 192 14.03.18 01:30 Сейчас в теме
(76)
единице, конечно =)

Переменная счетчик = 1, переменная факториал = 1, 1*1 сколько будет? =)))). По определению факториал 0 = 1, поэтому переменные начинаются с 1, исключая возможность умножения на 0 =)
78. Jokemas 192 14.03.18 02:30 Сейчас в теме
(75)
Так, ну отвечая на вопрос я описал только факториал, а само решение Задачи будет таким:
Процедура КнопкаВыполнитьНажатие(Кнопка)
	
	Счетчик = 1;
	Факториал = 1;
	Результат = 1;
	
	М = Новый Массив;
		
	Пока Счетчик <= Число1 Цикл
		 
		Факториал = Факториал * Счетчик;
		М.Добавить(Факториал);
		Результат = Результат*М[Счетчик-1];
		Счетчик = Счетчик + 1;	
				
	КонецЦикла;
	Сообщить(Факториал);
	Сообщить(Результат);
	
КонецПроцедуры
Показать


Просто все эти факториалы фигачим в массив, который перемножаем.
55. Dolly_EV 269 17.05.10 10:18 Сейчас в теме
(18)(19)(20) в (17) проверка УСЛОВИЯ (Истина/Ложь), что по условию задачи низзя ;)
56. Evg-Lylyk 4842 17.05.10 11:35 Сейчас в теме
(55) По условии задачи нельзя использовать условных операторов например ?.
В решении B = 1+(A=0); нет условных операторов.
69. premierex 204 25.06.16 15:35 Сейчас в теме
(3) YVolohov, При А = 100, например, результат будет явно не верным.
4. YVolohov 723 10.05.10 19:36 Сейчас в теме
Задача №5

КоличествоЭлементов = Массив.Количество();
СуммаЧиселМассива = 0;
СуммаЧиселРяда = 0;

Для Счетчик = 1 По КоличествоЭлементов Цикл
СуммаЧиселМассива = СуммаЧиселМассива + Массив[Счетчик - 1];
СуммаЧиселРяда = СуммаЧиселРяда + Счетчик;
КонецЦикла;

Сообщить(СуммаЧиселРяда - СуммаЧиселМассива);
Evg-Lylyk; +1 Ответить
6. Evg-Lylyk 4842 10.05.10 20:48 Сейчас в теме
(4) Можно чуток попроще. Сумма чисел арифметической прогрессии равна (Начало+Конец) * (Количество / 2). Пример: 1-100; Сумма = (1+101) *(100/2) = 5050 т.к. пропущенное число только одно разница между суммой массива и полной прогрессией и будет то число.
pm74; YVolohov; +2 Ответить
5. kosilov 276 10.05.10 19:54 Сейчас в теме
ТекA=0;
ТекB=0;
КвоА = A.Количество();
КвоВ = B.Количество();
Для Сч = 1 По КвоА + КвоВ Цикл
    если ТекA<КвоА и (ТекB=КвоВ  ИЛИ A[ТекA]<B[ТекB]) тогда
        Сообщить("A[" + ТекA + "]=" + A[ТекA]);
        ТекA = ТекA + 1;
    иначе
        Сообщить("B[" + ТекB + "]=" + B[ТекB]);
        ТекB = ТекB + 1;
    КонецЕсли;
КонецЦикла;

Показать
el7; Evg-Lylyk; +2 Ответить
7. Поручик 4692 10.05.10 22:59 Сейчас в теме
>>> Прислал работодатель в качестве тестового задания.
Надо было послать этого работодателя. На три буквы, например в лес.
wowik; KapasMordorov; +2 Ответить
8. awa 2610 11.05.10 09:16 Сейчас в теме
Ну и для второй задачки ответ:
Функция F(N)
	Результат = 1;
	Для Ин = 2 По N Цикл
		Результат = Результат * Pow(Ин, N - Ин + 1);
	КонецЦикла;
	Возврат Результат;
КонецФункции // F(N)
pm74; Evg-Lylyk; +2 Ответить
9. Evg-Lylyk 4842 11.05.10 11:55 Сейчас в теме
(8) неверно
При N=4 правильно (1! = 1) * (2! =2) * (3! = 6) *(4! = 24) = 144
У вас результат 1*(2^3 = 8)*(3^2=9)*(4^1) = 288
10. awa 2610 11.05.10 12:02 Сейчас в теме
(9) 1*2*6*24=288 (с) calc
Или у нас калькуляторы разные? (в уме я считать не умею!)
11. Evg-Lylyk 4842 11.05.10 12:10 Сейчас в теме
(10) Сорри моя ошибка все верно
12. Nefertary 164 11.05.10 12:36 Сейчас в теме
13. marat_n 112 11.05.10 12:56 Сейчас в теме
Я даже догадываюсь, что за работодатель :)
Нормальный тест. Сразу отфильтровывают тех, кто подумать не может. Только присылать его как-то бессмысленно, ибо есть гугл и время не ограничено.
15. Evg-Lylyk 4842 11.05.10 13:43 Сейчас в теме
(13)
Я даже догадываюсь, что за работодатель

напиши пожалуйста в личку
Свою задачу эти задачки решают. Я допустим взял на заметку.
(12) Для A=0 B= 2
А у вас 2^0=1
14. YAN 1374 11.05.10 13:22 Сейчас в теме
Хорошая зарядка для ума, вот обработку даже захотелось сделать :)
Прикрепленные файлы:
ВО_задачки.epf
wowik; Светлый ум; Evg-Lylyk; +3 Ответить
16. ll13 1067 11.05.10 15:04 Сейчас в теме
1). A=A+B; B=A-B; A=A-B
2). Расчет факториала выносим в рекурсивную функцию(по условию задачи использование рекурсии не запрещено), а сами n! перемножаем в цикле.
3). B = 2 - A
Evg-Lylyk; +1 Ответить
21. ildarovich 7930 12.05.10 00:00 Сейчас в теме
Задача 4
ё = 0;
Для Сч  = 1 По А.Количество() + В.Количество() Цикл
	ж = (Сч - 1 - ё) = В.Количество() ИЛИ ё < А.Количество() И А[ё] < В[Сч - 1 - ё];
	Сообщить(?(ж, "А[" + ё + "]=" + А[ё], "В[" + (Сч - 1 - ё) + "]=" + В[Сч - 1 - ё]));
	ё = ё + ж
КонецЦикла
OLDMVN; Evg-Lylyk; +2 Ответить
30. ildarovich 7930 12.05.10 09:54 Сейчас в теме
Вот выпендрЁЖный вариант (21), если немного отступить от "буквы" задания
ёж = 0; 
Для уж  = 0 По А.Количество() + В.Количество() - 1 Цикл 
   що = (уж - ёж) = В.Количество() ИЛИ ёж < А.Количество() И А[ёж] < В[уж - ёж]; 
   Сообщить(?(що, "а" + ёж + "=" + А[ёж], "в" + (уж - ёж) + "=" + В[уж - ёж])); 
   ёж = ёж + що 
КонецЦикла

Можно еще сократить одну строку, если дважды вычислять "що".
А по скорости было бы сравнить интересно...
24. PlatonStepan 38 12.05.10 02:56 Сейчас в теме
:!: код может и ошибочный, но алгоритм мне нравицо :D
Задача 4:
Для сч = 1 По ?(а>б,а,б) Цикл
	Асч = ?(сч>а,неопределено,А[сч]);
	Бсч = ?(сч>б,неопределено,Б[сч]);
	Сообщить(?(Асч>Бсч,Асч,Бсч));
	Сообщить(?(Асч<Бсч,Асч,Бсч));
КонецЦикла;


*точно ошибочный :)

вот вроде бы правильное решение:
счА = 0;
счБ = 0;
Пока НЕ (счА=а И счБ=б) Цикл
	Если (счА<а) И ((мА[счА] <= мБ[счБ-(счБ=б)]) ИЛИ (счБ=б)) Тогда
		Сообщить(мА[счА]);
		счА = счА + 1;
	КонецЕсли;
	Если (счБ<б) И ((мБ[счБ] <= мА[счА-(счА=а)]) ИЛИ (счА=а)) Тогда
		Сообщить(мБ[счБ]);
		счБ = счБ + 1;
	КонецЕсли;
КонецЦикла;
Показать
26. PlatonStepan 38 12.05.10 05:40 Сейчас в теме
в (24) по сравнению с вариантом (21) итераций как будто меньше :D
27. Креатив 66 12.05.10 07:58 Сейчас в теме
вероятно так заработает тоже, но по скорости уступит (24)
счА = 0;
счБ = 0;
вра = ма[1];
врб = мб[1];
Пока 1=1 Цикл
   Если вра <  врб  Тогда
      Сообщить(вра);
      счА = счА + 1;
   Иначе
      Сообщить(врб);
      счБ = счБ + 1;
   КонецЕсли;
   Если счА>а  Тогда
       вра = мб[б];
   Иначе
       вра = ма[счА];
   КонецЕсли;
   Если счБ>б  Тогда
       врб = ма[а];
   Иначе
       врб = мб[счБ];
   КонецЕсли;
   Если (счБ>б) и (счА>а)  Тогда
      Прервать;
   КонецЕсли;
КонецЦикла;
Показать

25. costy_admin 58 12.05.10 05:36 Сейчас в теме
// чА число А
// чБ Число Б
чА = (чА+чБ)-чА;
чБ = (чА+чБ)-чБ;
// НчА конечный результат число А
// НчБ конечный результат числа Б
при учете что числа положительные....

28. salex10 12.05.10 08:55 Сейчас в теме
Для (25) 1-я задача, я так понимаю
чА = (чА+чБ)-чА;
чБ = (чА+чБ)-чБ;
- в последнем варажении уже чА=чБ, поэтому чБ будет = чБ

мое решение:
А = А - Б
Б = Б + А
А = Б - А
annak2980; Evg-Lylyk; +2 Ответить
29. salex10 12.05.10 09:10 Сейчас в теме
2-я задача - рекурсия скорее всего
3-я: В = 2 - А
4-я:
счА = 1;
счВ = 1;
Для Сч = 1 По а + в Цикл
Если счА > а Тогда
Если счВ > в Тогда
Прервать;
Иначе
Сообщить(В[счВ]);
счВ = счВ + 1;
Конецесли;
ИначеЕсли А[счА] < B[счВ] Тогда
Сообщить(А[счА]);
счА = счА + 1;
Иначе
Сообщить(В[счВ]);
счВ = счВ + 1;
Конецесли;
Конеццикла;
31. Spitfire 104 12.05.10 10:25 Сейчас в теме
вторая задача легко пишется и без рекурсии:
F_n = 1;
n_fact = 1;
i = 1;
while i<=n do
   n_fact = n_fact * i;
   F_n = F_n * n_fact;
   i = i +1;
end;
Return F_n;
Показать
freeek; Elolaz; Evg-Lylyk; +3 Ответить
36. Evg-Lylyk 4842 12.05.10 11:48 Сейчас в теме
(31) Я решил аналогично
РезультатФункции = 1; ФакториалДляПоследнегоСч = 1;
Для Сч = 2 По Н Цикл
	ФакториалДляПоследнегоСч = ФакториалДляПоследнегоСч * Сч;
	РезультатФункции = РезультатФункции * ФакториалДляПоследнегоСч;
КонецЦикла;

(32) в решении
A=A+B;....
есть момент - переполнение (выход за границы типа) хотя в 1С это наверно не актуально ну в вашем решении этот момент более актуален
(33) Правильно конечно, но в 1С нет XOR (вариант с XOR более универсален он обменяет значениями не только числа)
32. Vasilina2009 12.05.10 10:26 Сейчас в теме
1. Решение: при b<>0
a = a*b
b=a/b
a=a/b
EvgeniyOlxovskiy; karagiosis; Evg-Lylyk; +3 Ответить
33. Spitfire 104 12.05.10 10:29 Сейчас в теме
для первой задачи, если нужно поменять местами не числовые переменные (а произвольные двоичные данные), то можно написать так:
a = a xor b;
b = b xor a;
a = a xor b;

тут xor - оператор логического исключающего ИЛИ
34. Vashenko 12.05.10 10:59 Сейчас в теме
1. a=a*b=20; b=a/b=5; a=a/b=4
2. F=1; Для K=1 По n Цикл F=F*(K)^(n-K+1) КонецЦикла
3. B=2-A
4. Для Сч=1 По а+b Цикл
ТекНомерА=0; ТекНомерB=0;
Если А[ТекНомерА+Сч]>B[ТекНомерB+Сч] Тогда
ТекНомерА=ТекНомерА+1; Сообщить(А[ТекНомерА]);
Иначе
ТекНомерB=ТекНомерB+1; Сообщить(B[ТекНомерB]);
КонецЕсли
37. Evg-Lylyk 4842 12.05.10 11:54 Сейчас в теме
(34), (35) неверно 4
Вынести за цикл:
ТекНомерА=0; ТекНомерB=0;

Заменить
Если А[ТекНомерА+Сч]>B[ТекНомерB+Сч] Тогда

на
Если А[ТекНомерА]<B[ТекНомерB] Тогда

по возрастанию
и еще учесть что массив А полностью меньше массива Б
40. Vashenko 12.05.10 13:20 Сейчас в теме
(37) спасибо за поправки. накалякал просто идеи без проверки :)
35. Vashenko 12.05.10 11:04 Сейчас в теме
1. a=a*b=20; b=a/b=5; a=a/b=4
2. F=1; Для K=1 По n Цикл F=F*(K)^(n-K+1) КонецЦикла
3. B=2-A
4. Для Сч=1 По а+b Цикл
ТекНомерА=0; ТекНомерB=0;
Если А[ТекНомерА+Сч]>B[ТекНомерB+Сч] Тогда
ТекНомерА=ТекНомерА+1; Сообщить(А[ТекНомерА]);
Иначе
ТекНомерB=ТекНомерB+1; Сообщить(B[ТекНомерB]);
КонецЕсли
38. chea06 134 12.05.10 12:41 Сейчас в теме
вероятно был у этого же работодателя, только решал эти задачи на месте на листке. И кстати в задании не сказано, что задачи надо решать методами 1С :)
39. vet7777 595 12.05.10 12:55 Сейчас в теме
в 3 задаче я не сразу заметил условие что "А может принимать значение 0 или 1"
и решил ее при условии, что А может принимать любое значение - положительное, отрицательное или 0.

а вы попробуйте! задача гораздо интереснее получается. 8-)
41. ll13 1067 12.05.10 13:47 Сейчас в теме
(39) Это очень плохо, если Вы даже условие прочитать не можете правильно, что же дальше то будет, когда до реализации дойдёт :o
Я бы такого работника не взял :D
44. e.kogan 1895 12.05.10 15:53 Сейчас в теме
(41) Жизнь научила, что думать надо сразу универсально :) иначе бы А было Булевым.
Evg-Lylyk; +1 Ответить
46. ll13 1067 12.05.10 17:02 Сейчас в теме
(44) В институте научили, что самое главное правильно понять и усвоить условия задачи.
Если это сделано - то пол задачи решено :)
42. vet7777 595 12.05.10 14:02 Сейчас в теме
я просто усложнил задачу...
мне по барабану что ты там думаешь, я бы тебя тоже не взял 8-)
ты реши с тем условием, что я написал, потом пальцы кидай ;)
43. Necytij 12.05.10 15:45 Сейчас в теме
Задачки все десткие, но, честно говоря, над последней пришлось подумать минутку... :oops:
45. e.kogan 1895 12.05.10 16:29 Сейчас в теме
На четвёртую задачку: не оттестированный, но вроде корректный вариант
ТекущийЭлементА=0;
ТекущийЭлементБ=0;
КвоА=А.Количество();
КвоБ=Б.Количество();
ТекстВыполнить="ТекущийЭлемент#=ТекущийЭлемент#+1;
|Сообщить(""число ""+#[ТекущийЭлемент#]+"" - ""+й+"" элемент упорядоченного массива, ""+ТекущийЭлемент#+"" элемент массива #"")";
Для й=0 по КвоА + КвоБ Цикл
	ВыводимА=Не (ТекущийЭлементА>КвоА);
	ВыводимБ=Не (ТекущийЭлементБ>КвоБ);
	Если Не (ВыводимА или ВыводимБ) Тогда Прервать; КонецЕсли; //оба массива кончились
	Если ВыводимА и ВыводимБ Тогда 
		ВыводимА=(А[ТекущийЭлементА]>Б[ТекущийЭлементБ]);
	КонецЕсли;
	Выполнить(СтрЗаменить(ТекстВыполнить,"#",?(ВыводимА,"А","Б")));		
КонецЦикла;
Показать

47. e.kogan 1895 12.05.10 17:06 Сейчас в теме
(45) Однако при числовом реквизите А "защиту от дурака" лучше поставить ;) мало ли что пользователь введёт? Или до того проверку влепить, или делать неявным приведением значения.
Во всяком случае наши преподаватели обязательно попробуют ввести при проверке А=3 8-)
48. o.nikolaev 216 12.05.10 22:26 Сейчас в теме
Я тоже их на месте решал. И работодатель известный :) Что-то не верю в то что их прислали... ;)
49. breyn 13.05.10 09:48 Сейчас в теме
50. Kondrat 11 13.05.10 10:14 Сейчас в теме
Для первой задачки:
не так изящно, но все же....

а=Строка(а)+"*"+Строка(б);
б=Число(Лев(а,Найти(а,"*")-1));
а=Число(Сред(а,Найти(а,"*")+1));
51. Hitcher 178 13.05.10 15:26 Сейчас в теме
Задача 3. Решение для любого значения А :D

Попытка
В = 1/А;
В = 2;
Исключение
В = 1 ;
КонецПопытки;
dmbarchenkov; freeek; VoShk; +3 Ответить
52. ll13 1067 13.05.10 16:55 Сейчас в теме
(51) Ну ты дружок замутил ... Попытка ... Исключение ... КонецПопытки
Одна из самых медленных конструкций в 1С ...
53. Поручик 4692 13.05.10 17:23 Сейчас в теме
А куда нам торопиться?
54. vet7777 595 14.05.10 08:47 Сейчас в теме
а теперь решите в таком варианте:
Написать функцию B=F(A) на встроенном языке 1С, при следующих условиях:
1. если А=0, то B=2, иначе B=1
2. полученное однострочное выражение, должно выполняться в табло 1С при различных значениях A
3. не допускается использование условных операторов (например , ?(А = 0;2;1)), не допускается использование попыток/исключений (что в общем то в табло и не получится :).

PS: мы в конторе уже напридумывали 3 варианта решения.
57. maxis33 45 24.05.10 09:50 Сейчас в теме
Мне тоже такие присылали по почте. Довольно занятно было порешать, даже без особой цели устроиться к ним на работу:)
58. vodyanoy 27.05.10 17:14 Сейчас в теме
Да, работодатель известный. Года 3 назад у них в офисе я эти задачки решал на листочке. Странно, что они их до сих пор совсем не изменили.
По поводу 2-й задачки. Тут кто-то рекурсию предлагал. Я тоже тогда рекурсию замутил. Меня, естественно, завернули с этой мыслью несуразной :D , т.к. циклов должно быть по условию всего ОДИН, а рекурсия это уже совсем не один. Не додумался тогда сходу, ну да ладно.
59. Mogidin 130 04.06.10 10:54 Сейчас в теме
1) # a=4 b=5
a=a+b # a=9 b=5
b=a-b # a=9 b=4
a=a-b # a=5 b=4

2) Результат=1; Элемент=1;
Для Инд=1 По Н Цикл
Элемент=Элемент*Инд;
Результат=Результат*Элемент;
КонецЦикла;
# Результат = F(n)

3) B=2-A

4) Инд1=1; Инд2=1; Эл1=А[Инд1]; Эл2=В[Инд2];
Для Инд=1 По а+в Цикл
Если (Эл1<Эл2) И (Инд1<а) Тогда
Сообщить(Эл1); Инд1=Инд1+1; Эл1=А[Инд1];
Иначе
Сообщить(Эл2); Инд2=Инд2+1; Эл2=В[Инд2];
КонецЕсли;
КонецЦикла;

5) Контроль=0; Сумма=0;
Для Инд=1 По Н Цикл
Контроль=Контроль+Инд;
Сумма=Сумма+А[Инд];
КонецЦикла;
Пропавший=Контроль-Сумма;

*везде подразумевается индексация массивов с 1
odin777; rom-x; Evg-Lylyk; +3 Ответить
60. rmelikov 3 15.11.10 11:31 Сейчас в теме
1) подразумевается, что оба числа не равны нулю, в другом случае делается проверка и решение очевидно. Итак решение: b=b*a; a=b/a; b=b/a
2)Значение = 1;
Для н=1 по нн Цикл
Значение = Значение * Значение * н;
н = н + 1;
КонецЦикла
3)В = 2 - А
4) и 5) думаю много похожих решений уже есть. А теперь почитаю, чего написали другие =)
61. Oleg_nsk 279 22.11.10 10:56 Сейчас в теме
Задача №5

Сум = А.Количество();
Для н = 0 По А.Количество()-1 Цикл
Сум = Сум - А[н] + н;
КонецЦикла;
Сообщить(Сум);
62. Oleg_nsk 279 22.11.10 11:00 Сейчас в теме
Задача №4

ИндА = 0;
ИндБ = 0;
Для н = 1 По (КолА + КолБ) Цикл
Если (КолА = ИндА) и (КолБ = ИндБ) Тогда
Прервать;
ИначеЕсли (КолА = ИндА) и Не (КолБ = ИндБ) Тогда
Сообщить(Б[ИндБ]);
ИндБ = ИндБ+1;
ИначеЕсли Не (КолА = ИндА) и (КолБ = ИндБ) Тогда
Сообщить(А[ИндА]);
ИндА = ИндА+1;
ИначеЕсли А[ИндА] < Б[ИндБ] Тогда
Сообщить(А[ИндА]);
ИндА = ИндА+1;
ИначеЕсли А[ИндА] > Б[ИндБ] Тогда
Сообщить(Б[ИндБ]);
ИндБ = ИндБ+1;
ИначеЕсли А[ИндА] = Б[ИндБ] Тогда
Сообщить(А[ИндА]);
Сообщить(Б[ИндБ]);
ИндА = ИндА+1;
ИндБ = ИндБ+1;
КонецЕсли;
КонецЦикла;
63. rom-x 152 06.10.11 15:16 Сейчас в теме
1) а = а + (b - a)
b = b - (b - a)

2) Перем Факт, Рез, Знач;
Рез = 1; Знач = 1;
Для ин= 1 По Факт Цикл
Знач = Знач*ин;
Рез = Рез*Знач;
КонецЦикла;

3) B = (B + A) - A
71. premierex 204 25.06.16 15:46 Сейчас в теме
(63) rom-x,
2) Перем Факт, Рез, Знач;
Рез = 1; Знач = 1;
Для ин= 1 По Факт Цикл
Знач = Знач*ин;
Рез = Рез*Знач;
КонецЦикла;

Переменная Факт не инициализирована, 1С сразу выдаст сообщение об ошибке о невозможности приведения переменной Факт к типу "Число".
65. gangstar94 28.11.14 10:28 Сейчас в теме
Ответ на первую задачу из 10 класса :
А=4;
Б=5;
Если А=4 тогда
А=5 ;
Иначе Сообщить("Условие не выполнено") ;
КонецЕсли ;
Если Б=5 тогда
Б=4
Иначе Сообщить ("Условие не выполнено") ;
КонецЕсли ;
АА="А="+А ;
ББ="Б="+Б ;
Сообщить (АА);
Сообщить (ББ);
66. Evg-Lylyk 4842 28.11.14 12:52 Сейчас в теме
(65)
Задача 1.
Объявлены две числовые переменные a и b. Необходимо сделать так, чтобы без объявления других переменных в результате работы алгоритма значения переменных поменялись местами. Например, если изначально a = 4, b = 5, то в результате алгоритма стало a = 5, b = 4. Применять можно только операции присваивания и арифметические операции с числами и значениями переменных.
Решение:
b=b-a
a=a+b
b=a-b
67. abasovit 6 11.04.15 13:40 Сейчас в теме
В = Число((А = 0)+1)
, для любого значения А.
Спасибо автору данной публикации.
68. KapasMordorov 428 25.06.16 10:40 Сейчас в теме
http://www.forum.mista.ru/topic.php?id=368453&page=1
Пост 6.
Всё-таки надо было гуглить и тогда бы прочитал местный пост Поручика.
79. Jokemas 192 16.03.18 21:54 Сейчас в теме
5 Задача
Имеется НЕУПОРЯДОЧЕННЫЙ массив из n различных целых чисел от 0 до n (0,1,…,j-1,j+1,….,n). Необходимо за один цикл определить недостающее число j:
Ну ок, нигде не написано, что нельзя его упорядочить...

Функция СортировкаСпискомЗначений(Массив) Экспорт
	м = новый СписокЗначений;
	М.ЗагрузитьЗначения(Массив);
	м.СортироватьПоЗначению(НаправлениеСортировки.Возр);
	Возврат М.ВыгрузитьЗначения();
КонецФункции
//------------------------
Процедура КнопкаВыполнитьНажатие(Кнопка)

М = Новый Массив;

М.Добавить(0);                    
М.Добавить(2);
М.Добавить(5);
М.Добавить(7);
М.Добавить(6);
М.Добавить(1);
М.Добавить(3);
М.Добавить(4);
М.Добавить(8);
М.Добавить(10);

уМ = СортировкаСпискомЗначений(М);

Для Счетчик = 1 По уМ.Количество() - 1 Цикл 
Если уМ[Счетчик] - уМ[Счетчик-1] > 1  Тогда
	Результат = уМ[Счетчик]-1;
	Сообщить("Не хватает: " + Результат);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
80. konstantinvasenev 97 19.06.18 17:21 Сейчас в теме
(79)
n = М.Количество()+1;
k = (n+1)*n/2;
Для Сч = 0 По n-2 Цикл
k = k - М[Сч];
КонецЦикла;
Сообщить(k);

где (n+1)*n/2; - сумма всех чисел в массиве
вычитанием элементов из этой суммы определяем недостающее число
stas1976; +1 Ответить
81. wowkos 11.10.19 14:04 Сейчас в теме
82. user1571619 27.03.21 10:59 Сейчас в теме
Вот код на языке с++

#include<iostream>
using namespace std;
int main()
{
setlocale(LC_ALL,("rus"));
int a,b;
cout<<"Введите первую цифру:";
cin>>a;
cout<<"Введите второе число:";
cin>>b;
cout<<"a:"<<b<<"b:"<<a;
return 0;
}
Оставьте свое сообщение