Имя: Пароль:
1C
 
Любителям алгоритмов, просьба подсказать
0 Простенький вопросик
 
11.05.12
12:01
Есть 2 массива с заданным количеством элементов, оба упорядочены по возрастанию. Как в 1 цикл создать новый массив, упорядоченный по возрастанию? Собственно требуется цикл на языке 8ки.
1 Cube
 
11.05.12
12:03
Пока Истина Цикл
   НовыйМассив = Новый Массив;
   Прервать;
КонецЦикла;
2 Простенький вопросик
 
11.05.12
12:04
(1)
не, бред мне не надо
3 Feanor
 
11.05.12
12:05
1. Создать ТЗ
2. Засунуть туда 1-ый массив
3. Засунуть туда 2-ой массив
4. Отсортировать
5. Выгрузить колонку из ТЗ
6. Профит

с тебя 20 баксов
4 Cube
 
11.05.12
12:06
(2) Что посеешь, то и пожнешь. Слыхал?))
А так: какие вопросы - такие ответы.
А вот ещё: Как крикнется, так и аукнется.
Продолжать?))

Ставь нормально вопрос, получай нормальный ответ.
5 D3O
 
11.05.12
12:07
Создать СписокЗначений, загрузить в него первый массив (как вариант массив с большим количеством элементов), в цикле по другому массиву добавить в Список его значения, отсортировать Список, выгрузить в новый массив
6 МихаилМ
 
11.05.12
12:09
ищите по "сортировка слиянием"
7 Buster007
 
11.05.12
12:09
интересно, что им непонятно?
Есть 2 массива, например:
1ый
1 4 5 7
2ой
3 10 15

требуется за 1 цикл создать массив
1 3 4 5 7 10 15

СписокЗначений, ТЗ и т.д. использовать запрещается.
8 Feanor
 
11.05.12
12:10
(7) а вот и работодатели подтянулись)
9 Простенький вопросик
 
11.05.12
12:11
Ну это что-то типа квалификационной задачи. Я подозреваю, что функцию сортировки нельзя использовать, так как это еще один цикл. Я немного недописал условие. Там еще есть уточнение. Цикл должен быть вида "для х=1 по a+b цикл" где а и b - размеры массивов.
10 МишКа
 
11.05.12
12:11
(0)
и=1;
й=1;
пока и<=РазмерПервогоМассива или й<=РазмерВторогоМассива цикл
//здесь очевидно что делать
конеццикла;
11 МишКа
 
11.05.12
12:12
(9) Извращенцы они. Плюнь.
12 Простенький вопросик
 
11.05.12
12:13
(7)
ага, примерно так. Как бы еще это сделать?
13 155153144627
 
11.05.12
12:13
14 azernot
 
11.05.12
12:14
М1 = Новый Массив;
М2 = Новый Массив;

М3 = Новый Массив; //Новый массив

Б = 0;
Для А = 0 по Макс(М1.Количество(), М2.Количество()) Цикл
   Если А > М1.Количество() Тогда
       М3[Б] = М2[А];
       Б = Б+1;
   ИначеЕсли А > М2.Количество()
       М3[Б] = М1[А];
   Иначе
       Если М1[А] < М2[А] ТОгда
           М3[Б] = М1[А];
           Б = Б+1;
           М3[Б] = М2[А];
           Б = Б+1;
       Иначе
           М3[Б] = М2[А];
           Б = Б+1;
           М3[Б] = М1[А];
           Б = Б+1;
       КонецЕсли;
   КонецЕсли;
КонецЦикла;
15 Ненавижу 1С
 
гуру
11.05.12
12:14
РазмерА=А.Количество();
РазмерБ=Б.Количество();
йА=0; йБ=0;
М = Новый Массив;
Пока йА<РазмерА или йБ<РазмерБ Цикл
 Если йБ=РазмерБ Тогда
   БеремА=Истина;
 ИначеЕсли йА=РазмерА Тогда
   БеремА=Ложь;
 Иначе
   БеремА = (А[йА]<Б[йБ]);
 КонецЕсли;
 Если БеремА Тогда
   Х=А[йА];
   йА=йА+1;
 Иначе
   Х=А[йБ];  
   йБ=йБ+1;
 КонецЕсли;
 М.Добавить(Х);
КонецЦикла;
16 МишКа
 
11.05.12
12:19
(14) Неправильно.
17 МишКа
 
11.05.12
12:20
(15) Правильно.
18 azernot
 
11.05.12
12:20
(16) А ну да, ступил :)
19 Cube
 
11.05.12
12:21
Сч1 = 1;
Сч2 = 1;
Количество1 = Массив1.Количество();
Количество2 = Массив2.Количество();
ОбщееКоличество = Количество1 + Количество2;
НовыйМассив = Новый Массив;
Для Сч = 1 По ОбщееКоличество Цикл
   Если Сч1 <= Сч И Сч2 <= Сч Тогда
       Значение1 = Массив1[Сч1-1];
       Значение2 = Массив2[Сч2-1];
       Если Значение1 < Значение2 Тогда
           НовыйМассив.Добавить(Значение1);
           Сч1 = Сч1 + 1;
       Иначе
           НовыйМассив.Добавить(Значение2);
           Сч2 = Сч2 + 1;
       КонецЕсли;
   ИначеЕсли Сч1 <= Сч Тогда
       НовыйМассив.Добавить(Значение1);
       Сч1 = Сч1 + 1;
   Иначе
       НовыйМассив.Добавить(Значение2);
       Сч2 = Сч2 + 1;
   КонецЕсли;
КонецЦикла;
20 mrDru
 
11.05.12
12:22
мои 5 копеек:

КурсорА = 0;
КурсорБ = 0;

МассивА = Новый Массив;
МассивБ = Новый Массив;
МассивИтог = Новый Массив;

МассивА.Добавить(1);
МассивА.Добавить(11);
МассивА.Добавить(12);
МассивА.Добавить(111);
МассивА.Добавить(112);
МассивА.Добавить(1111);
МассивА.Добавить(3112);

МассивБ.Добавить(2);
МассивБ.Добавить(21);
МассивБ.Добавить(22);
МассивБ.Добавить(211);
МассивБ.Добавить(212);
МассивБ.Добавить(2111);

Пока МассивА.Количество() > КурсорА
       ИЛИ МассивБ.Количество() > КурсорБ Цикл
   
   Если МассивА.Количество() = КурсорА Тогда
       
       МассивИтог.Добавить(МассивБ[КурсорБ]);
       КурсорБ = КурсорБ + 1;

   ИначеЕсли МассивБ.Количество() = КурсорБ Тогда
       
       МассивИтог.Добавить(МассивА[КурсорА]);
       КурсорА = КурсорА + 1;
       
   Иначе
       
       Если МассивА[КурсорА] > МассивБ[КурсорБ] Тогда
       
           МассивИтог.Добавить(МассивБ[КурсорБ]);
           КурсорБ = КурсорБ + 1;
           
       Иначе
           
           МассивИтог.Добавить(МассивА[КурсорА]);
           КурсорА = КурсорА + 1;
       
       КонецЕсли;
   
   КонецЕсли;
   
   Сообщить(МассивИтог[МассивИтог.Количество() - 1]);

КонецЦикла;
21 Простенький вопросик
 
11.05.12
12:26
(15)
спасибо, быстро соображаешь
22 Нуф-Нуф
 
11.05.12
12:30
очередной кандидат решает тестовое задание при помощи коллективного разума?
остальные то задачи решил?
23 Простенький вопросик
 
11.05.12
12:31
(22)
2/3 решил, еще несколько осталось, может выложу попозже
24 experimentator76
 
11.05.12
13:17
(0) делал такую ради интереса для одной компании
чем они там занимаются мне осталось неизвестно )
25 experimentator76
 
11.05.12
13:18
как бы непонятен смысл ее выполнения ЗА ТС
ему от этого легче работать там не станет
26 experimentator76
 
11.05.12
13:19
(7) позабористее давай задачки ))
27 NS
 
11.05.12
13:21
(15) Обычно для ускорения из основного цикла доп. проверку на конецы массивов убирают, и выходят из цикла после достижения конца одного из массивов.
А дальше доливают оставшийся массив.
28 NS
 
11.05.12
13:25
Хотя тут предсказание переходов неважно, так что пофиг.
29 hhhh
 
11.05.12
13:28
(25) как раз прямой смысл. Если умеет работать с мистой, значит и там ему легко будет работать.
30 experimentator76
 
11.05.12
13:28
была немного другая задачка

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

[code]    
   // исходные данные
   масА = ...;
   масВ = ...;
   
   // сообщаем значения массивов в порядке убывания за один цикл    
   а = масА.Количество() - 1;
   в = масВ.Количество() - 1;
   мСчетчик = масА.Количество() + масВ.Количество();
   Пока мСчетчик > 0 Цикл
       
       Если а < 0 Тогда
           Сообщить("В: " + масВ[в]);
           в = в - 1;
           
       ИначеЕсли в < 0 Тогда
           Сообщить("А: " + масА[а]);
           а = а - 1;
           
       ИначеЕсли (масА[а] > масВ[в]) Тогда
           Сообщить("А: " + масА[а]);
           а = а - 1;
           
       ИначеЕсли (масА[а] < масВ[в]) Тогда
           Сообщить("В: " + масВ[в]);
           в = в - 1;
           
       Иначе
           Сообщить("А: " + масА[а]);
           а = а - 1;
           Сообщить("В: " + масВ[в]);
           в = в - 1;
           мСчетчик = мСчетчик - 1;
       КонецЕсли;
       
       мСчетчик = мСчетчик - 1;
   КонецЦикла;
   
[/code]
31 Mikeware
 
11.05.12
13:30
(29) типа, "тупой, но спросит"?
32 Ненавижу 1С
 
гуру
11.05.12
13:30
(27) писано "на коленке", прямо в браузере
33 experimentator76
 
11.05.12
13:32
(32) на отладку должно уходить 80% времени ))
34 experimentator76
 
11.05.12
13:33
(29) мистаболы везде сгодятся ))
Маня же на логан заработал
35 hhhh
 
11.05.12
13:34
(27) тогда нарушится условие - будет два цикла. А автору надо за один цикл.
36 ХочуСказать
 
11.05.12
13:40
(35) обычно говорят о количестве проходов
37 Простенький вопросик
 
11.05.12
13:42
(15) всетак чето не так. Смотри, я дописал код...
А = Новый Массив (3);
   Б = Новый Массив (3);
     А[0]=1;
      А[1]=2;
       А[2]=3;
             Б[0]=2;
      Б[1]=4;
       Б[2]=5;

   РазмерА=А.Количество();
РазмерБ=Б.Количество();
йА=0; йБ=0;
М = Новый Массив;
Пока йА<РазмерА или йБ<РазмерБ Цикл
 Если йБ=РазмерБ Тогда
   БеремА=Истина;
 ИначеЕсли йА=РазмерА Тогда
   БеремА=Ложь;
 Иначе
   БеремА = (А[йА]<Б[йБ]);
 КонецЕсли;
 Если БеремА Тогда
   Х=А[йА];
   йА=йА+1;
 Иначе
   Х=А[йБ];  
   йБ=йБ+1;
 КонецЕсли;
 М.Добавить(Х);
КонецЦикла;
     сообщить(М[0]);
     сообщить(М[1]);
сообщить(М[2]);
     сообщить(М[3]);
      сообщить(М[4]);
сообщить(М[5]);

В итоге получается
1
1
2
3
2
3
38 z_d_v
 
11.05.12
13:46
(37) наверное не хватает проверки на одинаковае значения в массивах
39 Reset
 
11.05.12
13:47
(37)
Там опечатка, лентяй.
Х=А[йБ]; на Х=Б[йБ]; поменяй
40 Простенький вопросик
 
11.05.12
13:47
а вот (30) правильно работает, хотя и наоборот
41 Ненавижу 1С
 
гуру
11.05.12
13:48
//опечатался я в (15), надо так:

Если БеремА Тогда
   Х=А[йА];
   йА=йА+1;
 Иначе
   Х=Б[йБ];  
   йБ=йБ+1;
 КонецЕсли;
42 Reset
 
11.05.12
13:49
Если массив "Б" назвать массивом "У", текст ставится оригинальней.
43 experimentator76
 
11.05.12
13:50
(40) ну вот немного напряги мозги и переделай чтобы сортировало в нужную сторону )
44 experimentator76
 
11.05.12
13:51
(0) когда возьмут - а по законам Вселенной именно тебя и возьмут))
напиши на мисту как работается и все тако
45 Простенький вопросик
 
11.05.12
13:51
(41)
а так все верно, еще раз спасибо
46 dmpl
 
11.05.12
13:53
(0) Все просто. Решишь эту задачу - будешь кодером. Докажешь, что эту задачу решать не надо - будешь руководителем проекта/ведущим программистом.
47 pumbaEO
 
11.05.12
13:54
(46) + 1 докажешь, что эту задачу надо решать, будешь консультантом.
48 experimentator76
 
11.05.12
13:55
+(46) докажешь что за эту задачу должны заплатить - станешь Маней )
49 Простенький вопросик
 
11.05.12
13:55
(46)
а если решу эту задачу через мисту?
50 experimentator76
 
11.05.12
13:57
(46) на Ведущего надо доказать что массивы должны быть отсортированы в другую сторону
51 experimentator76
 
11.05.12
13:58
(49) этот вопрос ты задай работодателю )
52 experimentator76
 
11.05.12
13:59
у тебя основная задача изменить код до неузнаваемости - вместо переменных юзай УИД
53 _Atilla
 
14.05.12
19:33
(0) Оба массива запихни в бинарное дерево. Потом читай методом LDR или RDL.
Тогда тебе не важно, сортированны были массивы или не сортированны
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший