Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2012, 02:10   #1
Владимир Николаеви
 
Регистрация: 30.11.2012
Сообщений: 7
По умолчанию сортировка символьных данных методом переноса в массиве,ПРОБЛЕМКА!

ребят помощь нужна срочная голова уже тарахтит!
задание такое: Сортировка символьных данных методом переноса в массиве.
преподаватель говорит,что данный метод получился пузырьковый!
помогите пожалуйста если не сложно,что тут не так.
как я понял,тут принцип такой,что сравнивается первый элемент массива со вторым,минимальное значение уходит в левую часть,далее второй с третьим.
А нужно: вводится массив данных, создается другой,из первого массива выбирается минимальное значение и переносится во второй созданный массив и так далее...
Вот лог программы:

Код:
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Button1: TButton;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
a: String;
i, j, n: Integer;
Temp: Char;
begin
a:=Edit1.Text;
n:=Length(a);
if n=0 then
ShowMessage('Не введено ни одного символа.')
else
for i:=1 to n do
for j:=i+1 to n do
if AnsiCompareStr(a[i],a[j])>0 then
begin
Temp:=a[i];
a[i]:=a[j];
a[j]:=Temp;
end;
Edit2.Text:=a;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
Edit1.Clear;
Edit2.Clear;
end;

procedure TForm1.N3Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.N5Click(Sender: TObject);
begin
ShowMessage('Программа предназначена для сортировки'#13#10'вводимых пользователем с клавиатуры '#13#10'символьных данных методом переноса в массиве'#13#10'и вывода результата сортировки на экран'#13#10'для визуального контроля.');
end;

procedure TForm1.N6Click(Sender: TObject);
begin
ShowMessage('Программу разработал:'#13#10'ст. гр. 11ÇÂÝ31 ');
end;
end.



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 30.11.2012 в 09:09.
Владимир Николаеви вне форума Ответить с цитированием
Старый 30.11.2012, 09:12   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Ваш преподаватель прав.

Цитата:
Код:
for i:=1 to n do
for j:=i+1 to n do
if AnsiCompareStr(a[i],a[j])>0 then
это мало того, что метод сортировки простыми обменами (модификация "пузурька"),
так ещё и с ошибкой написанная.
должно быть:
Код:
 for i:=1 to n-1 do
   for j:=i+1 to n do
     if AnsiCompareStr(a[i],a[j])>0 then 
        .....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.11.2012, 12:57   #3
Владимир Николаеви
 
Регистрация: 30.11.2012
Сообщений: 7
По умолчанию спасибо,за подсказку

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Ваш преподаватель прав.


это мало того, что метод сортировки простыми обменами (модификация "пузурька"),
так ещё и с ошибкой написанная.
должно быть:
Код:
 for i:=1 to n-1 do
   for j:=i+1 to n do
     if AnsiCompareStr(a[i],a[j])>0 then 
        .....


А теперь в каком направлении мне двигаться?
Владимир Николаеви вне форума Ответить с цитированием
Старый 30.11.2012, 14:10   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А теперь в каком направлении мне двигаться?
ищите в методичке/учебнике/интернете, что такое "Сортировка методом переноса в массиве"
По найденному алгоритму/описанию алгоритма пишите код для сортировки.
всё.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.11.2012, 21:46   #5
Владимир Николаеви
 
Регистрация: 30.11.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ищите в методичке/учебнике/интернете, что такое "Сортировка методом переноса в массиве"
По найденному алгоритму/описанию алгоритма пишите код для сортировки.
всё.
спасибо)))
Владимир Николаеви вне форума Ответить с цитированием
Старый 30.11.2012, 21:57   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
По найденному алгоритму/описанию алгоритма пишите код для сортировки.
Да они по моему на Вике сразу для разных ЯП коды выкладывают, после формального описания алгоритма - даже париться не надо с написанием
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 02.12.2012, 18:23   #7
Владимир Николаеви
 
Регистрация: 30.11.2012
Сообщений: 7
По умолчанию Все никак не получается

Немного переделал.У меня почему-то программа не работает. Ошибку выдает, когда кнопку нажимаешь. Не могу понять в чём причина.
Программа по идее должна вот так выглядеть:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
A, B: String;
i, j, n: Integer;
begin
A:=Edit1.Text;
n:=Length(A);
if n=0 then
ShowMessage('Не введено ни одного символа.')
else
for i:=1 to n do
begin
j:=i;
while (j > 1) and (B[j-1] > A[i]) do
begin
B[j]:=B[j-1];
j:=j-1;
end;
B[j]:=A[i];
end;
Edit2.Text:=B;
end;
Владимир Николаеви вне форума Ответить с цитированием
Старый 02.12.2012, 21:15   #8
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Какую ошибку?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 03.12.2012, 11:07   #9
Владимир Николаеви
 
Регистрация: 30.11.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Какую ошибку?
Access violation at address 00453A21 in module 'Project1.exe'. Write of address 00000000.
Владимир Николаеви вне форума Ответить с цитированием
Старый 03.12.2012, 12:48   #10
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

архив с проектом прикрепите к посту - посмотрю. Так сразу не скажу, ошибка рантаймовая. Вполне может глюком дельфы оказаться
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработка символьных данных uHkBu3uTop Паскаль, Turbo Pascal, PascalABC.NET 3 26.04.2012 15:33
символы в типизиртванном файле найти методом индуктивной функции среднее значение символьных представлений натур чисел начиная с 9 calimdor Помощь студентам 0 15.02.2012 15:49
Сортировка повторяющихся данных в массиве MDS Паскаль, Turbo Pascal, PascalABC.NET 0 25.04.2011 12:26
Обработка символьных данных Normand Паскаль, Turbo Pascal, PascalABC.NET 6 13.04.2009 17:32