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

  • Автор темы NATRIY
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

NATRIY

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

Я функции не люблю и неочень понимаю(т.к я пока настадии чайника :) ). Но надо сделать.
___________________________________________________
Задачка. Создать массив, затем его изменить получить новый и новый нужно отсортировать.
Изменила и обработка на сортировку работает отлично, когда она была п\в процедуре.
Все отсортированно только остальсь это сделать только как функция а не процедурой.
У меня ошибка. Как и справит не знаю.Синтаксис помощник вообще не куда не годится для новичка, только для опытного пользователя, который что-то не помнит. Как исправитьь, что дописать, чтобы работало.????
Обработка.Обработка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;
КонецФункции
______________
Когда бы ло все написано процедурой хоть сортировалось, а сейчас вообще ошибка :(.
Спасибо за помощь!
 
N

NATRIY

#2
Задачку сама решила(вывод: если долго-долго мучатся что-либо получится) :)
Вылаживаю код вдруг кому нибудь ещё понадобится на здоровье.
Перем Т;//Переменная для промежуточного хранения
Процедура КнопкаВыполнитьНажатие(Кнопка)
Перем НаправлениеСортировки;
Мас = Новый Массив;
Мас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;
КонецФункции
________________________________________________________________
 
Статус
Закрыто для дальнейших ответов.