Сортировка массива через функцию

Тема в разделе "1C и всё что с ней связано", создана пользователем NATRIY, 2 июн 2008.

Статус темы:
Закрыта.
  1. NATRIY

    NATRIY Гость

    Блгагодарю за внимание и терпение, понимание.
    Проблема вследующем мне нужно отсортировать массив по возратанию или по убываниювзависимости от

    Я функции не люблю и неочень понимаю(т.к я пока настадии чайника :) ). Но надо сделать.
    ___________________________________________________
    Задачка. Создать массив, затем его изменить получить новый и новый нужно отсортировать.
    Изменила и обработка на сортировку работает отлично, когда она была п\в процедуре.
    Все отсортированно только остальсь это сделать только как функция а не процедурой.
    У меня ошибка. Как и справит не знаю.Синтаксис помощник вообще не куда не годится для новичка, только для опытного пользователя, который что-то не помнит. Как исправитьь, что дописать, чтобы работало.????
    Обработка.Обработка1.Форма.Форма(21)}: Поле объекта недоступно для записи (НаправлениеСортировки)
    НаправлениеСортировки = Истина;


    Перем Т;//Переменная для промежуточного хранения

    Процедура КнопкаВыполнитьНажатие(Кнопка)
    Мас = Новый Массив;
    Мас2 = Новый Массив;
    Мас.Добавить(5);
    Мас.Добавить(10);
    Мас.Добавить(30);
    Мас.Добавить(15);
    Мас.Добавить(7);
    Мас.Добавить(0);
    Для Каждого Эл Из Мас Цикл
    Если Эл >= 10 Тогда
    Мас2.Добавить(Эл*5);
    ИначеЕсли Эл<10 И Эл<>0 Тогда
    Мас2.Добавить(Эл+3);
    ИначеЕсли Эл=0 Тогда
    Мас2.Добавить(Эл+1000);
    КонецЕсли;
    КонецЦикла;
    НаправлениеСортировки = Истина;//Ошибка
    Возр=ВозрастаниеМассива(Мас2, НаправлениеСортировки);

    КонецПроцедуры

    Функция ВозрастаниеМассива(Мас2, НаправлениеСортировки);
    Для Эл = 0 По Мас2.Количество()-1 Цикл
    Для Инд=Эл+1 По Мас2.Количество() Цикл
    Если Мас2[Эл]>Мас2[Инд-1] Тогда //сортировка работает
    Т=Мас2[Эл];
    Мас2[Эл]=Мас2[Инд-1];
    Мас2[Инд-1]=Т;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;

    Возврат Мас2;
    КонецФункции
    ______________
    Когда бы ло все написано процедурой хоть сортировалось, а сейчас вообще ошибка :(.
    Спасибо за помощь!
     
  2. NATRIY

    NATRIY Гость

    Задачку сама решила(вывод: если долго-долго мучатся что-либо получится) :)
    Вылаживаю код вдруг кому нибудь ещё понадобится на здоровье.
    Перем Т;//Переменная для промежуточного хранения
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    Перем НаправлениеСортировки;
    Мас = Новый Массив;
    Мас2 = Новый Массив;
    Мас.Добавить(5);
    Мас.Добавить(10);
    Мас.Добавить(30);
    Мас.Добавить(15);
    Мас.Добавить(7);
    Мас.Добавить(0);
    Для Каждого Эл Из Мас Цикл
    Если Эл >= 10 Тогда
    Мас2.Добавить(Эл*5);
    ИначеЕсли Эл<10 И Эл<>0 Тогда
    Мас2.Добавить(Эл+3);
    ИначеЕсли Эл=0 Тогда
    Мас2.Добавить(Эл+1000);
    КонецЕсли;
    КонецЦикла;
    _____Часть_Удаление,повторяющихся массивов__________
    Инд=0;
    Эл = Мас2.Количество();
    Пока Инд < Эл Цикл
    Инд2=Инд+1;
    Пока Инд2 < Эл Цикл
    Если Мас2[Инд2]= Мас2[Инд] Тогда
    Мас2.Удалить(Инд2);
    Эл =Эл -1;
    Иначе
    Инд2=Инд2+1;
    КонецЕсли;
    КонецЦикла;
    Инд=Инд+1;
    КонецЦикла;
    __________________________________________________

    НаправлениеСортировки = Ложь;
    Возр=ВозрастаниеМассива(Мас2,НаправлениеСортировки);
    Для Каждого Эл Из Мас2 Цикл
    Сообщить (Эл);
    КонецЦикла;
    КонецПроцедуры

    Функция ВозрастаниеМассива(Мас2, НаправлениеСортировки);
    Если НаправлениеСортировки Тогда
    Для Эл = 0 По Мас2.Количество()-1 Цикл
    Для Инд=Эл+1 По Мас2.Количество() Цикл
    Если Мас2[Эл]>Мас2[Инд-1] Тогда
    Т=Мас2[Эл]; :)
    Мас2[Эл]=Мас2[Инд-1];
    Мас2[Инд-1]=Т;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    Иначе
    Для Эл = 0 По Мас2.Количество()-1 Цикл
    Для Инд=Эл+1 По Мас2.Количество() Цикл
    Если Мас2[Эл]<Мас2[Инд-1] Тогда
    Т=Мас2[Эл];
    Мас2[Эл]=Мас2[Инд-1];
    Мас2[Инд-1]=Т;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    КонецЕсли;
    Возврат Мас2;
    КонецФункции
    ________________________________________________________________
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей