Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 115

/ вопрос решён /

Здравствуйте!
Я на днях столкнулся с проблемой, суть которой до конца мне не ясна. Решил спросить совета у вас, потому что мне очень интересно что не так в элементарном коде.
Задача (сортировки) такова:
- есть массив int отвечающий за порядок перестановки входящей строки.
- на вход (в Edit1) подается строка равная количеству элементов массива.
- есть процедура Sort (проблема именно здесь, и если сделать все то же, только в коде кнопки, то все работает, а с процедурой не хочет и вылетает из программы) которая примитивно берет i-тый элемент массива читает значение и ищет такой порядковый элемент во входящей строке и пишет его в Edit2 на i-тую позицию.

Очень хотелось бы узнать в чем состоит ошибка/проблема того что оно не хочет работать в процедуре.

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. procedure Sort (e1:TEdit;e2:TEdit;m:array of integer);
  2. var i:integer;
  3. begin
  4. for i:=1 to length(m) do e2.Text:=e2.Text+e1.Text[m[i]];
  5. end;
  6. procedure TForm1.Button1Click(Sender: TObject);
  7. begin
  8. if length(Edit1.Text) = 9 then Sort(Edit1,Edit2,a)
  9.  
  10. end;


login Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: 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™

min@y™ (статус: Доктор наук), 22 марта 2011, 19:35 [#1]:

Что в итоге сортировать-то надо? Так и не вкурил...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
login

login (статус: Посетитель), 22 марта 2011, 19:38 [#2]:

min@y™: сортировать можно любые 9 символов в веденные в Edit1
min@y™

min@y™ (статус: Доктор наук), 22 марта 2011, 19:49 [#3]:

Цитата (login):

сортировать можно любые 9 символов в веденные в Edit1

А зачем сортировать символы в Edit? B как сортировать: по возрастанию/убыванию?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
login

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™

min@y™ (статус: Доктор наук), 22 марта 2011, 20:11 [#5]:

Нихрена не понял. Но то, что проблема решилась - это гут. :) Зря я вообще сюда влез.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
login

login (статус: Посетитель), 22 марта 2011, 20:14 [#6]:

min@y™: подскажи пожалуйста как цитату правильно вставить, а то никак не получается :)
min@y™

min@y™ (статус: Доктор наук), 22 марта 2011, 20:47 [#7]:

Цитата (login):

min@y™: подскажи пожалуйста как цитату правильно вставить, а то никак не получается

Выделяешь кусок текста и жмакаешь "Цитировать" под аватаром аффтара выделенного текста.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
bugmenot

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)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:41
Выполнено за 0.02 сек.