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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 26.02.2014, 02:11   #1
mrDo
Новичок
Джуниор
 
Регистрация: 26.02.2014
Сообщений: 2
Вопрос Нужна помощь с сортировкой

Помогите пожалуйста. Никак не могу добиться того чтобы буква Ё была на своем месте.
unit Unit3;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm3 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form3: TForm3;

implementation
{$R *.dfm}

Const
Prob : set of char = [' '..' '];
Kir: set of char = ['А'..'Я'];
BukvLatM: set of char = ['a'..'z'];
e = 'Ё';



Function Prov(const s: string): byte;
Var
Nom: byte;
i,Len: word;
Begin
Nom:=0; len:= Length(S);
If Len=0 then Nom:=1
Else
Begin
i:=1;
while (i<=Len) and (Nom=0) do
begin
if Not ((S[i] in Prob) or (S[i] in Kir) or (S[i]='Ё') or (S[i] in BukvLatM)) then Nom:=2;
Inc(i);
end;
End;
Prov:=Nom;
End;

Procedure Sort(var s:string);
Var
i, z, len: Word;
flag: Boolean;
ch: char;
Begin
Z:=1; len:=length(s);
Repeat
flag:=true;
for i:=1 to len-z do
if (s[i] in Kir) and ((s[i+1] in Prob) or (s[i+1] in BukvLatM)) or
(s[i] in BukvLatM) and (s[i+1] in Prob) or
(s[i] in BukvLatM) and (s[i+1] in BukvLatM) and (s[i]>s[i+1]) or
(s[i] in Kir) and (s[i+1] in Kir) and (s[i]>s[i+1]) or (s[i]='Ё')
then
begin
ch:=s[i]; s[i]:=s[i+1]; s[i+1]:=ch; flag:= false;
end;
inc(z);
Until flag or (z=len);
End;



procedure TForm3.Button1Click(Sender: TObject);
var s: string; Nom: byte;
begin
s:=Edit1.Text;

Nom:= Prov(s);
Case Nom of
1: Label2.Caption := 'Пустая строка';
2: Label2.Caption := 'Некорректные символы';
else
begin
Sort(s);
Label2.Caption:='"'+s+'"';
end; {else}
End; {case}

end;

procedure TForm3.Button2Click(Sender: TObject);
begin
close
end;

end.
mrDo вне форума
Старый 26.02.2014, 02:44   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Зачем так сложно?
Код:
const
  p = ' АБВabc';
...
if pos(s[i], p) > pos(s[i + 1], p) then ...
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума
Старый 26.02.2014, 02:52   #3
mrDo
Новичок
Джуниор
 
Регистрация: 26.02.2014
Сообщений: 2
По умолчанию

Спасибо! Все действительно работает.
mrDo вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь с сортировкой односвязных списков на Pascal Lesowik Помощь студентам 2 22.05.2011 06:14
Требуется помощь с сортировкой по полю! Phaeton Общие вопросы C/C++ 0 05.01.2010 23:10
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) 5Paladin5 Помощь студентам 3 02.07.2009 09:12