| 
| 
 | Вопрос # 5 115/ вопрос решён / | 
 |  Здравствуйте!Я  на днях столкнулся с проблемой, суть которой до конца мне не ясна. Решил спросить совета у вас, потому что мне очень интересно что не так в элементарном коде.
 Задача (сортировки) такова:
 - есть массив int отвечающий за порядок перестановки входящей строки.
 - на вход (в Edit1) подается строка равная количеству элементов массива.
 - есть процедура Sort (проблема именно здесь, и если сделать все то же, только в коде кнопки, то все работает, а с процедурой не хочет и вылетает из программы) которая примитивно берет i-тый элемент массива читает значение и ищет такой порядковый элемент во входящей строке и пишет его в Edit2 на i-тую позицию.
 
 Очень хотелось бы узнать в чем состоит ошибка/проблема того что оно не хочет работать в процедуре.
 К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса) Приложение:Переключить в обычный режим procedure Sort (e1:TEdit;e2:TEdit;m:array of integer);var i:integer;beginfor i:=1 to length(m) do e2.Text:=e2.Text+e1.Text[m[i]];end;procedure TForm1.Button1Click(Sender: TObject);beginif length(Edit1.Text) = 9 then Sort(Edit1,Edit2,a) end;
|  |   Вопрос задал: login (статус: Посетитель)Вопрос отправлен: 22 марта 2011, 18:55
 Состояние вопроса: решён, ответов: 1.
 |  Ответ #1. Отвечает эксперт: bugmenot * ужасная неформатированная каша вместо кода* исполняемый модуль-то зачем публиковать?
 
 процедура использует открытый массив в качестве формального параметра.
 у открытых массивов нижний индекс _всегда_ равен 0, соответственно в состоянии $R- упадет выйдя за пределы.
 Пруф: http://docwiki.embarcadero.com/RADStudio/XE/en/Parameters_(Delphi)#Open_Array_Parameters
 
 PS: правильно™ использовать Low(MyArray) to High(MyArray)
 
|  | Ответ отправил: bugmenot (статус: 3-ий класс)Время отправки: 22 марта 2011, 19:14
 Оценка за ответ: 5
 Комментарий к оценке: Извините, писал на быструю руку чтобы сделать пример "неработающего" кода. Суть-то понятна.Спасибо за столь быстрый ответ.
 Не все до конца мне понятно, сейчас буду разбираться.
 |  
 Мини-форум вопросаВсего сообщений: 8; последнее сообщение — 23 марта 2011, 00:37; участников в обсуждении: 3. 
|   | min@y™ (статус: Доктор наук), 22 марта 2011, 19:35 [#1]:Что в итоге сортировать-то надо? Так и не вкурил... Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | login (статус: Посетитель), 22 марта 2011, 19:38 [#2]:min@y™: сортировать можно любые 9 символов в веденные в Edit1 |  
|   | min@y™ (статус: Доктор наук), 22 марта 2011, 19:49 [#3]: Цитата (login): сортировать можно любые 9 символов в веденные в Edit1  А зачем сортировать символы в Edit? B как сортировать: по возрастанию/убыванию?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | login (статус: Посетитель), 22 марта 2011, 20:06 [#4]:<blockquote> А зачем сортировать символы в Edit? B как сортировать: по возрастанию/убыванию? </blockquote> порядок сортировки заложен в массиве a: array[1..9] of integer = (9,8,7,6,5,4,3,2,1);
 Его длинна и есть количество сортируемых и подаваемых на ввод символов.
 з.ы: мне просто очень нужна такая процедура. на вход поступают массивы с не поддающейся логике последовательности и нужно в таком порядке отсортировать. я просто привел тут примитивный пример.
 Проблема уже решилась.
 [quote] Пруф: http://docwiki.embarcadero.com/RADStudio/XE/en/Parameters_(Delphi)#Open_Array_Parameters
 
 PS: правильно™ использовать Low(MyArray) to High(MyArray)[/quote]
 |  
|   | min@y™ (статус: Доктор наук), 22 марта 2011, 20:11 [#5]:Нихрена не понял. Но то, что проблема решилась - это гут.  Зря я вообще сюда влез. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | login (статус: Посетитель), 22 марта 2011, 20:14 [#6]:min@y™: подскажи пожалуйста как цитату правильно вставить, а то никак не получается   |  
|   | min@y™ (статус: Доктор наук), 22 марта 2011, 20:47 [#7]: Цитата (login): min@y™: подскажи пожалуйста как цитату правильно вставить, а то никак не получается  Выделяешь кусок текста и жмакаешь "Цитировать" под аватаром аффтара выделенного текста.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | bugmenot (статус: 3-ий класс), 23 марта 2011, 00:37 [#8]:Ну это какбы да, идентификатор Sort конфузит, лучше бы что-нить типа Permutate. Но не суть важно. 
 А что не до конца понятно-то? Цикл перебирает от m[1] до m[9], что соответствует a[2]..a[10]
 а[10] за границами массива и там какое-то произвольное целое -MaxInt-1..MaxInt. Используем это целое как индекс строки - и всё падает. Было бы еще веселее если бы после a была еще переменная объявлена :-)
 виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  25 марта 2011, 16:56: Статус вопроса изменён на решённый (изменил автор вопроса — login) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |