Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Вывести строку в алфавитном порядке. Delphi (http://www.tehnari.ru/f41/t42251/)

Sayks 18.11.2010 23:06

Вывести строку в алфавитном порядке. Delphi
 
Дана строка(вводится в edit), состоящая из русских слов, разделенных пробелами (одним или несколькими). Вывести строку, содержащую эти же слова (разделенные одним пробелом), но расположенные в алфавитном порядке

Sayks 20.11.2010 12:28

У меня получается вот такой код но: 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];


AlexZir 20.11.2010 18:58

Это что, сейчас у студентов так в порядке вещей - кусок листинга выдернуть и на форум запостить? Какую помощь вы ожидаете, если в вашем коде ни начала, ни конца нет? Прикрепите ваш проект к следующему сообщению - будем разбираться, что к чему.

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

Sayks 20.11.2010 19:38

Вложений: 1
вот полный проект этой задачи...если поможете разобраться где налажал буду очень признателен

AlexZir 20.11.2010 20:53

Если никто не сделает раньше - в воскресенье ждите исправленный вариант. Раньше не смогу - у меня уже глубокая ночь.

Sayks 20.11.2010 20:56

Хорошо,спасибо что откликнулись....

Sayks 22.11.2010 11:19

помогите ,пожалуйста, срочно нужна эта задача завтра нужно сдать...

Sayks 22.11.2010 21:14

блин,что никто не может помочь?


Часовой пояс GMT +4, время: 16:35.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.