Имя: Пароль:
1C
1С v8
Как получить элемент из массива и сравнить его с другим элементом?
🠗 (длинная ветка 06.12.2013 16:36)
,
0 shevalie92
 
04.12.13
01:58
Как получить элементы из массива? и поменять их местами!
СзМассив(А,Б,В,Г,Д,)

мне нужно получить из СзМассив элементы Г,Д и поменять их местами!
например:

СзМассив(А,Г,В,Д,Б,)
437 Wobland
 
06.12.13
07:08
(436) конец ровно в строчке КонецЦикла. сходи в меню отладка, открой для себя пошаговое исполнение
438 Wobland
 
06.12.13
07:09
вспоминается ещё, как Ли Вонг(?) возрадовался до плеши
439 Wobland
 
06.12.13
07:10
+(438) «С другом по магазинам» @ http://lurkmore.to/Ли_Вонг_Ян
440 shevalie92
 
06.12.13
07:10
а как открыть я только не понял нажимаем стоп откладку красную точку ставим и ф11?
441 Любопытная
 
06.12.13
07:11
(434) Все начинают с пузырька потому что это примитив. Не надо ничего придумывать - все логично.
(440) Шагай к своему учителю, пусть он тебя учит
442 Wobland
 
06.12.13
07:13
экая она разозлилась. хорошо, что меня со вчерашней "лошадью" пронесло ;)
443 shevalie92
 
06.12.13
07:16
забыл спросить ладно в гуглал найду не хочу потревожить его по пустякам у него тоже есть своя жизнь я благодарен ему что помогает и признателен поэтому я так усердно пытаюсь понять что к чему и он насовсем учитель но преподает мне уроки и я этому рад
444 craxx
 
06.12.13
07:18
(441) не знаю, мне рекурсивная сортировка больше нра
445 shevalie92
 
06.12.13
07:19
wild и любопытная из вас тоже вышли отличные учителя если я вас понял 80% то уверен другие поймут на все 100% ^_^
446 skunk
 
06.12.13
07:21
(431)в винде аккардеон к мыши приделывается на раз два
447 Wobland
 
06.12.13
07:21
(444) когда я первый раз смотрел на визуализацию бого, думал "ах ни хрена ж себе, что творят! щас бац - и одним лёгким движением в конце всё упорядочат"
448 shevalie92
 
06.12.13
07:22
пора модераторам закрыть эту ветку странно что не банили ветку не удалили . смирились наверняка что я освоил аномаизер)))
449 Wobland
 
06.12.13
07:22
(446) это после визуализации сортировок ;)
450 shevalie92
 
06.12.13
07:24
а сколько лет форума миста смотрю некоторые давно зарегистрированные
451 Любопытная
 
06.12.13
07:25
(444) Леш, ты явно гораздо умнее меня) Я, при первой встрече с массивами в 9м классе на занятиях в кружке, придумала только пузырек)
452 shevalie92
 
06.12.13
07:27
wild  17 октября 2006; Стаж: 7 лет 1 месяц 20 дней

7 лет многовато ты наверняка привык к форум миста


боюсь представить если тебя забанет)))
453 Wobland
 
06.12.13
07:33
(452) а чо такого? бывало. за "с вас 500 рублей", за "блин", за сузуки для катены даже страдал ;)
454 Wobland
 
06.12.13
07:37
вы мне лучше скажите, откуда у меня в перед открытием кнопка на форме с режимом меню оказывается заполненной? 8.1
455 shevalie92
 
06.12.13
07:37
ты это кому отвечал )) и что за непонятные цифры в переди (452) давно хотел спросить это типа к кому отвечаешь
456 Wobland
 
06.12.13
07:37
+(454) первая строка перед открытием, есессно
457 Wobland
 
06.12.13
07:38
(455) истинно так. кнопки под ником даже нажимаются
458 Любопытная
 
06.12.13
07:49
(456) Нету у меня ни одной базы 8.1, чтобы разгадать твою чудесную загадку
459 Wobland
 
06.12.13
08:04
(458) ну ты же правильно сказала, что нарисовано прямо в форме. нужно развивать свою технику мышиного тычка
460 Любопытная
 
06.12.13
08:09
(459) т.е. ты просто не до ткнул? (недоткунл/ не доткнул?)
461 1Сергей
 
06.12.13
08:11
(460) не с глаголами
462 Любопытная
 
06.12.13
08:13
(461) не я в курсе, а до?
463 Wobland
 
06.12.13
08:15
не доткнул. проверочное слово не докрасил
464 Wobland
 
06.12.13
08:16
а недоткнул - это зверь какой-то семейства сумчатых
465 Любопытная
 
06.12.13
08:18
(464) мне его жалко. С таким-то именем...
466 1Сергей
 
06.12.13
08:18
(463) о_О
467 Repey
 
06.12.13
08:23
(464) Недотыкомка? Это, вроде как , нечто иное.
468 Wobland
 
06.12.13
08:26
(467) недотыкомка - это из ряда (439): "В магазине мы имели один бутылка, много молоки, хлебу, *опку, поридж, кока, еда квашеный, гризли сущеный, карасик и другие овощи."
469 Сергей Д
 
06.12.13
09:15
Надо ж, ветка еще жива. Это вместо пятничной что ли?
470 Мимохожий Однако
 
06.12.13
09:16
Дотянул таки до заветной
471 1Сергей
 
06.12.13
09:19
(469) не сместо, а паралельно
472 1Сергей
 
06.12.13
09:19
*не вместо
473 Wobland
 
06.12.13
09:39
да занавес уже. автор избрал сортировку глупца. сложность ровно на порядок больше пузырьковой: n^3 против n^2
wiki:Глупая_сортировка
474 catena
 
06.12.13
10:18
(469)Соревнуемся. Екатерина пятничную ветку делала часов до 4 вечера.
475 1Сергей
 
06.12.13
13:51
476 Wobland
 
06.12.13
14:08
(475) как грится, 10х
далеко не разбегайтесь, планирую хоть что-нибудь на выходных заделать ;)
477 shevalie92
 
06.12.13
14:59
ребята у меня вопрос а как запустить индекс например с 5 до 1 типа наоборот?
массив.количество=индекс+5 потом снижаемся на один меньше до 1

типа -1?

или как?
478 shevalie92
 
06.12.13
15:00
или индекс = 5 -1
479 bvg
 
06.12.13
15:03
(477) ага, прям так и пиши)
480 shevalie92
 
06.12.13
15:04
я сериёзно
481 1Сергей
 
06.12.13
15:05
(477)

Для ы=-5 по -1 Цикл
    Инд = -ы;
    ...
КонецЦикла;
482 shevalie92
 
06.12.13
15:06
индекс = 5;
индекс = М.Количество -1

так?
483 shevalie92
 
06.12.13
15:06
спосибо
484 bvg
 
06.12.13
15:20
закончились вопросы? очень странно )
485 shevalie92
 
06.12.13
15:25
походу неправильно)))налукавел))
486 bvg
 
06.12.13
15:51
(485) расскажи, как ты понял, что неправильно)
487 shevalie92
 
06.12.13
15:58
Для индекс =-5 по -1 Цикл
    Инд = -ы;
    ...
Конец Цикла;

не может быть -5

если индекс = 0 тогда он начинает с цифрой 1 если укажем +1
если индекс = 5 тогда он начинает с цифрой 5 и мы укажем -1
будет уже 4321

Для индекс = 5 по -1 Цикл думаю будет как-то так!
488 1Сергей
 
06.12.13
16:00
(487) Для индекс =-4 по 0 Цикл
489 Wobland
 
06.12.13
16:01
(487) ты там чего такое задумал?
490 shevalie92
 
06.12.13
16:03
дойти до индекс 9 один круг потом обратно с 9 но тоже сортировать в одном слове ^_^ Шейкерная сортировка
491 Wobland
 
06.12.13
16:04
(490) не до 9, а до Н
492 shevalie92
 
06.12.13
16:05
до н и указать н-1
493 shevalie92
 
06.12.13
16:09
wild ну скажи плиз как запустить откладку с красной точкой
494 shevalie92
 
06.12.13
16:16
все нашел))
495 Wobland
 
06.12.13
16:18
(490) Шелла штоль?
(494) шифт+ф9 покажет тебе значения переменных. ну или в табло
496 shevalie92
 
06.12.13
16:21
нашел как пройтись с красной точкой
497 Wobland
 
06.12.13
16:24
везёт тебе. многие тут так и не освоили
498 shevalie92
 
06.12.13
16:32
щяс код поставлю с Шейкерная сортировка скажешь если правильный
молодец^_^ если я на правильном пути скажешь КонецБлизок иначе ))) скажешь конецНеБлизок

ок ты таким образом мне поможешь)
499 Псих
 
06.12.13
16:36
не ожидал что тема так вырастет.
жгите дальше.
500 Псих
 
06.12.13
16:36
пицот,чего уж там.
501 Wobland
 
06.12.13
16:36
писот!
502 Wobland
 
06.12.13
16:36
(500) фу, грязный читер
503 Псих
 
06.12.13
16:36
мимо ;)
504 Псих
 
06.12.13
16:37
не надо оскорблений, так получилось
505 Псих
 
06.12.13
16:37
интересно, чем сейчас занимается наш пациент...
506 Принт
 
06.12.13
16:43
любители тянуть резину за хвост..
507 Серго62
 
06.12.13
16:44
(495) Не, не Шелла. Двунаправленная пузырьковая сортировка по другому называется.
508 shevalie92
 
06.12.13
16:48
http://habrahabr.ru/post/204600/ 3 сортировка из списка
509 shevalie92
 
06.12.13
17:02
&НаКлиенте
Функция МассивЧисел()
    
    МассивЧисел = Новый Массив();
    МассивЧисел.Добавить(3); // и = 0
    МассивЧисел.Добавить(1); // и = 1
    МассивЧисел.Добавить(5); // и = 2    
    МассивЧисел.Добавить(0); // и = 3    
    МассивЧисел.Добавить(7); // и = 3    
    МассивЧисел.Добавить(12); // и = 3    
    МассивЧисел.Добавить(22); // и = 3    
    МассивЧисел.Добавить(9); // и = 3    
    
    Индекс = 0;
    
    МассивЧиселКоличество = МассивЧисел.Количество() - 2;   // - 2 потомучто доходим до предпоследнего элемента, НЕ ПОСЛЕДНЕГО!!!    
    Пока Индекс <= МассивЧиселКоличество Цикл
        // идем по массиву, сравниваем значение элемента массива со следующим значением элемента
        Если МассивЧисел[Индекс] >  МассивЧисел[Индекс+1] Тогда
            // поменять местами значения
            ВременнаяПеременная = МассивЧисел[Индекс+1];
            МассивЧисел[Индекс+1] = МассивЧисел[Индекс];    // здесь мы получаем такой массив: 3 3 4 0
            МассивЧисел[Индекс] = ВременнаяПеременная;    // а здесь мы получаем: 2 3 4 0
             //Индекс = 0; // начнем обход с начала
        //Иначе
        Индекс = Индекс + 1;
    КонецЕсли;
    //КонецЦикла;
    Если
        МассивЧисел[Индекс-1] > МассивЧисел[Индекс] Тогда
            ВременнаяПеременная = МассивЧисел[Индекс-1];
            МассивЧисел[Индекс-1] = МассивЧисел[Индекс];
            МассивЧисел[Индекс] = ВременнаяПеременная;                
            КонецЕсли;
            Индекс = Индекс - 1;//Двигаем позицию на шаг назад              
        КонецЦикла;        
    КонецЦикла;      
    
    // выести на экран результат
    Для Индекс = 0 по МассивЧиселКоличество + 1 цикл
        Сообщить(МассивЧисел[Индекс]);
    КонецЦикла;
    
    
КонецФункции




я на правильном пути?
510 Wobland
 
06.12.13
17:09
там же два цикла. справа налево и слева направо
511 shevalie92
 
06.12.13
17:11
там слишком много канецЦицла необрасяите внимание
а так я на правильном пути или совсем плохо
512 shevalie92
 
06.12.13
17:13
я потом исправлю

МассивЧисел[Индекс-1] > МассивЧисел[Индекс] Тогда
            ВременнаяПеременная = МассивЧисел[Индекс-1];
            МассивЧисел[Индекс-1] = МассивЧисел[Индекс];
            МассивЧисел[Индекс] = ВременнаяПеременная;                
            КонецЕсли;
            Индекс = Индекс - 1;//Двигаем позицию на шаг назад              
        КонецЦикла;        
    КонецЦикла;      


это правильно






Шейкерная сортировка
513 shevalie92
 
06.12.13
17:18
смотри доделал но у меня бесконечный цикл :(



&НаКлиенте
Функция МассивЧисел()
    
    МассивЧисел = Новый Массив();
    МассивЧисел.Добавить(3); // и = 0
    МассивЧисел.Добавить(1); // и = 1
    МассивЧисел.Добавить(5); // и = 2    
    МассивЧисел.Добавить(0); // и = 3    
    МассивЧисел.Добавить(7); // и = 3    
    МассивЧисел.Добавить(12); // и = 3    
    МассивЧисел.Добавить(22); // и = 3    
    МассивЧисел.Добавить(9); // и = 3    
    
    Индекс = 0;
    
    МассивЧиселКоличество = МассивЧисел.Количество() - 2;   // - 2 потомучто доходим до предпоследнего элемента, НЕ ПОСЛЕДНЕГО!!!    
    Пока Индекс <= МассивЧиселКоличество Цикл
        // идем по массиву, сравниваем значение элемента массива со следующим значением элемента
        Если МассивЧисел[Индекс] >  МассивЧисел[Индекс+1] Тогда
            // поменять местами значения
            ВременнаяПеременная = МассивЧисел[Индекс+1];
            МассивЧисел[Индекс+1] = МассивЧисел[Индекс];    // здесь мы получаем такой массив: 3 3 4 0
            МассивЧисел[Индекс] = ВременнаяПеременная;    // а здесь мы получаем: 2 3 4 0
            Индекс = Индекс + 1;
    КонецЕсли;
    Если
        МассивЧисел[Индекс-1] <= МассивЧисел[Индекс] Тогда
        ВременнаяПеременная = МассивЧисел[Индекс-1];
        МассивЧисел[Индекс-1] = МассивЧисел[Индекс];
        МассивЧисел[Индекс] = ВременнаяПеременная;                
    КонецЕсли;
        Индекс = Индекс - 1;//Двигаем позицию на шаг назад              
        КонецЦикла;
    
    // выести на экран результат
    Для Индекс = 0 по МассивЧиселКоличество + 1 цикл
        Сообщить(МассивЧисел[Индекс]);
    КонецЦикла;
    
    
КонецФункции
514 Wobland
 
06.12.13
17:19
перед самым концом цикла ты сдвигаешь индекс на шаг назад
515 shevalie92
 
06.12.13
17:20
wiiild????? скажи правильно?
516 shevalie92
 
06.12.13
17:23
поставил +1 Индекс = Индекс - 1;//Двигаем позицию на шаг назад      


сортировка неправильное(((
517 Wobland
 
06.12.13
17:24
н=м.количество();
й=н-1;
пока й>0 цикл
если м[й]>м[й-1] менять_местами
й=й-1
н=н-1
конец цикла;

вот так ты пройдёшь один раз. потом так же в обратную сторону:
к=0;
для й=к по н-1
...
к=к+1;

и это дело повторяется, пока к и н не сойдутся в одной точке
518 shevalie92
 
06.12.13
17:24
придется опять блок схему сделать но у меня нету времени
519 Wobland
 
06.12.13
17:25
а тут даже сишный код есть
https://ru.wikipedia.org/wiki/Шейкерная_сортировка
520 shevalie92
 
06.12.13
17:25
посиб
521 Серго62
 
06.12.13
17:30
(519) сейчас у него будет взрыв мозга от сишного синтаксиса...
Всем в укрытие!
522 shevalie92
 
06.12.13
17:41
к это что
523 Wobland
 
06.12.13
17:42
(522) граница слева. н - справа
524 shevalie92
 
06.12.13
17:44
блин так сложно :(
525 Wobland
 
06.12.13
17:44
кстати, помимо ++ у сей есть do while. у 1с же нету такого, только через пока конеццикла?
526 Wobland
 
06.12.13
17:45
(524) можно загнать твой массив в ТЗ, а ТЗ скормить СКД. СКД сама отсортирует
527 Wobland
 
06.12.13
17:48
вот получать пачку данных в несколько десятков тысяч записей из соседней базы, прикручивать к ним данные из своей, выводить с нужными группировками, ресурсами и вычисляемыми полями, красить различия в данных из "там" и "из тут", да ещё чтоб за минуту хотя бы сделалось - вот это не так просто. задумайся ;)
528 Wobland
 
06.12.13
17:50
(527) в минуту я не уложился вроде. одно подключение к соседней базе занимает секунд 6-8. продажи за месяц у меня секунд 70-80 получаются. плюс вывод
529 shevalie92
 
06.12.13
17:58
&НаКлиенте
Функция МассивЧисел()
    
    МассивЧисел = Новый Массив();
    МассивЧисел.Добавить(3); // и = 0
    МассивЧисел.Добавить(1); // и = 1
    МассивЧисел.Добавить(5); // и = 2    
    МассивЧисел.Добавить(0); // и = 3    
    МассивЧисел.Добавить(7); // и = 3    
    МассивЧисел.Добавить(12); // и = 3    
    МассивЧисел.Добавить(22); // и = 3    
    МассивЧисел.Добавить(9); // и = 3    
    
    Индекс = 0;
    
    МассивЧиселКоличество = МассивЧисел.Количество() - 2;   // - 2 потомучто доходим до предпоследнего элемента, НЕ ПОСЛЕДНЕГО!!!    
    Пока Индекс <= МассивЧиселКоличество Цикл
        // идем по массиву, сравниваем значение элемента массива со следующим значением элемента
        Если МассивЧисел[Индекс] >  МассивЧисел[Индекс+1] Тогда
            // поменять местами значения
            ВременнаяПеременная = МассивЧисел[Индекс+1];
            МассивЧисел[Индекс+1] = МассивЧисел[Индекс];    // здесь мы получаем такой массив: 3 3 4 0
            МассивЧисел[Индекс] = ВременнаяПеременная;    // а здесь мы получаем: 2 3 4 0
            
            Индекс = 0; //здесь надо начнем обход с начала? здесь надо код в обратную сторуну?
        Иначе
            Индекс = Индекс + 1;
        КонецЕсли;
        
    КонецЦикла;
    
    // выести на экран результат
    Для Индекс = 0 по МассивЧиселКоличество + 1 цикл
        Сообщить(МассивЧисел[Индекс]);
    КонецЦикла;
530 shevalie92
 
06.12.13
17:59
блин как представлять это(((
531 shevalie92
 
06.12.13
18:04
печально но моя не понимает я дохожу до конца круга и не знаю что дальше сделать!

оператор если надо
532 shevalie92
 
06.12.13
18:09
кажется понял начну я сначала!
533 shevalie92
 
06.12.13
18:10
блин зачем стерли часть ветки ((((
534 shevalie92
 
06.12.13
18:41
wild посмотри вроде бы все норм а не работает


Функция МассивЧисел()
    
    МассивЧисел = Новый Массив();
    МассивЧисел.Добавить(3); // и = 0
    МассивЧисел.Добавить(1); // и = 1
    МассивЧисел.Добавить(5); // и = 2    
    МассивЧисел.Добавить(0); // и = 3    
    МассивЧисел.Добавить(7); // и = 3    
    МассивЧисел.Добавить(12); // и = 3    
    МассивЧисел.Добавить(22); // и = 3    
    МассивЧисел.Добавить(9); // и = 3    
    
    Индекс = 0;
    
    МассивЧиселКоличество = МассивЧисел.Количество() - 2;   // - 2 потомучто доходим до предпоследнего элемента, НЕ ПОСЛЕДНЕГО!!!    
    Пока Индекс <= МассивЧиселКоличество Цикл
        // идем по массиву, сравниваем значение элемента массива со следующим значением элемента
        Если МассивЧисел[Индекс] >  МассивЧисел[Индекс+1] Тогда
            // поменять местами значения
            ВременнаяПеременная = МассивЧисел[Индекс+1];
            МассивЧисел[Индекс+1] = МассивЧисел[Индекс];    // здесь мы получаем такой массив: 3 3 4 0
            МассивЧисел[Индекс] = ВременнаяПеременная;    // а здесь мы получаем: 2 3 4 0
        КонецЕсли;
          КонецЦикла;
            Индекс = Индекс + 1;
        Если МассивЧисел[Индекс-1] >  МассивЧисел[Индекс] Тогда
            // поменять местами значения
            ВременнаяПеременная = МассивЧисел[Индекс-1];
            МассивЧисел[Индекс-1] = МассивЧисел[Индекс];
            МассивЧисел[Индекс] = ВременнаяПеременная;
        КонецЕсли;
            Индекс = Индекс - 1;    
    // выести на экран результат
    Для Индекс = 0 по МассивЧиселКоличество + 1 цикл
        Сообщить(МассивЧисел[Индекс]);
    КонецЦикла;
КонецФункции
535 Wobland
 
06.12.13
19:45
вот тебе задача попроще. возьми свой работающий (работающий же?) пузырёк и измени алгоритм так, чтобы оно сортировалось в обратном порядке, от большего к меньшему
536 Wobland
 
09.12.13
10:16