• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Вывести строку в алфавитном порядке. Delphi

  • Автор темы Автор темы Sayks
  • Дата начала Дата начала

Sayks

Новые
Регистрация
26 Окт 2010
Сообщения
17
Реакции
0
Баллы
0
Вывести строку в алфавитном порядке. Delphi

Дана строка(вводится в edit), состоящая из русских слов, разделенных пробелами (одним или несколькими). Вывести строку, содержащую эти же слова (разделенные одним пробелом), но расположенные в алфавитном порядке
 
У меня получается вот такой код но: 1)он работает и с англ буквами хотя надо только с русскими 2)при выводе в memo остаётся то же число пробелов 3) при выводе в edit2 выводится только последняя буква(слово).помогите пожалуйста найти ошибки,а то я над этой задачей неделю бьюсь....
Код:
type Myset=set of char;
var
  Form1: TForm1;

implementation

{$R *.dfm}
function srav(str1,str2:string) :bool;
var
  n,i:word;
begin
  result:=false;
  if length(str1)<length(str2) then
    n:=length(str1)
  else
    n:=length(str2);
  for i:=1 to n do
    if ord(str1[i])<ord(str2[i]) then
    begin
      result:=true;
      break;
    end
    else
    if ord(str1[i])>ord(str2[i]) then break;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  s,st,c: string;
  n,j,i:integer;
  Ruchar:Myset;
  arr:array of string;
begin
  Ruchar:=['a'..'ÿ','A'..'ß','¸','¨',' '];
  s:=Edit1.Text;
  i:=1;
  While (i<=length(s)) and (s[i] in Ruchar) do
  if s[i] in Ruchar then
  begin
    if s[i]<>' ' then st:=st+s[i]
    else
    begin
      if st<>'' then Memo1.Lines.Add(st);
      Memo1.Lines.Add('');
      st:='';
    end;
    i:=i+1;
  end else showmessage('not russian');
    if st<>'' then Memo1.Lines.Add(st);
    n:=memo1.Lines.Count;
  setlength(arr,n);
  for i:=0 to n-1 do
    arr[i]:=memo1.Lines.Strings[i];
    memo1.Clear;

  for i:=n-2 downto 0 do
    for j:=0 to i do
      if not srav(arr[j],arr[j+1]) then
      begin
        c:= arr[j];
        arr[j]:= arr[j+1];
        arr[j+1]:= c;
      end;
  for i:=0 to n-1 do
  Memo1.Lines.Add(arr[i]);
  for i := 0 to length(arr) - 1 do
  Edit2.Text:=arr[i];
 
Это что, сейчас у студентов так в порядке вещей - кусок листинга выдернуть и на форум запостить? Какую помощь вы ожидаете, если в вашем коде ни начала, ни конца нет? Прикрепите ваш проект к следующему сообщению - будем разбираться, что к чему.

З.Ы. Первая команда в функции - возвратить значение "ложь", забавно, однако :))
 
вот полный проект этой задачи...если поможете разобраться где налажал буду очень признателен
 

Вложения

Если никто не сделает раньше - в воскресенье ждите исправленный вариант. Раньше не смогу - у меня уже глубокая ночь.
 
Хорошо,спасибо что откликнулись....
 
помогите ,пожалуйста, срочно нужна эта задача завтра нужно сдать...
 
блин,что никто не может помочь?
 
Назад
Сверху