|
Вопрос # 5 115/ вопрос решён / |
|
Здравствуйте!
Я на днях столкнулся с проблемой, суть которой до конца мне не ясна. Решил спросить совета у вас, потому что мне очень интересно что не так в элементарном коде.
Задача (сортировки) такова:
- есть массив int отвечающий за порядок перестановки входящей строки.
- на вход (в Edit1) подается строка равная количеству элементов массива.
- есть процедура Sort (проблема именно здесь, и если сделать все то же, только в коде кнопки, то все работает, а с процедурой не хочет и вылетает из программы) которая примитивно берет i-тый элемент массива читает значение и ищет такой порядковый элемент во входящей строке и пишет его в Edit2 на i-тую позицию.
Очень хотелось бы узнать в чем состоит ошибка/проблема того что оно не хочет работать в процедуре.
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Приложение: Переключить в обычный режим- procedure Sort (e1:TEdit;e2:TEdit;m:array of integer);
- var i:integer;
- begin
- for i:=1 to length(m) do e2.Text:=e2.Text+e1.Text[m[i]];
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- if 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)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|