Имя: Пароль:
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.
Тогда тебе не важно, сортированны были массивы или не сортированны