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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2010, 14:28   #1
werus
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 38
Восклицание delphi текст

здравствуйте...поможете с задачкой?....
дана строка состоящая из латинских букв, в которой слова разбиты пробелами,напечатать те слова, которые отличны от последнего слова, и удовлетворяют след..требованию:каждая буква входит в слово не менее 2-х раз...вот как раз тут у меня и запарка..помогите...код ниже...

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

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

procedure TForm1.Button1Click(Sender: TObject);
VAR I,L,LEN,k:INTEGER;     OK:BOOLEAN;
     S,str:STRING;       st:array[1..100] of string;
     n,m:integer;
     ch:integer;

begin

S:=MEMO1.Text;
LEN:=LENGTH(S);
l:=1;k:=0; str:='';
MEMO1.Lines[0];
FOR I:=1 TO len DO
 BEGIN
  if (s[i]=' ') then
   BEGIN
   LEN:=i-l;
   inc(k);
   st[k]:= copy(s,l,i-l);
   L:=I+1;
   end;
 end;
 FOR I:=1 TO k-1 DO
 BEGIN
 for l:=1 to k do
 ch:=0;
for i=1 to Length st[l];
for j= i to length st[l];
 if st[l][k]=st[l][j] then ch=st[l][k]+1
  END;
 Memo1.Lines.Add(str);
end;

end.
werus вне форума Ответить с цитированием
Старый 27.04.2010, 16:13   #2
werus
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 38
По умолчанию

ну...люди..то нибудь
werus вне форума Ответить с цитированием
Старый 27.04.2010, 17:51   #3
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

держи мою карявку, вроде должна работать
Код:
procedure TForm1.Button1Click(Sender: TObject);

function  main_(str:string ):boolean;
var
ch:string [1];
i:integer;
begin
 Result:=true;
  str:=uppercase(TRIM(str));
  while (str<>'') and result  do
 begin
 i:= length(str);
  ch:=str[i];
   while  result   do
    begin
      dec(i);
      if i<1 then
      result:=false
      else
       if ch=str[i] then
       begin
        str:=StringReplace(str,ch,'',[rfReplaceAll]);
         Break;
       end;
      end;
  end;
end;var
x:integer;
begin
 for x := 0 to Memo1.Lines.Count - 2 do
  if (Uppercase(trim(memo1.Lines.Strings[x]))<>Uppercase(trim(memo1.Lines.Strings[Memo1.Lines.Count - 1])))
  and main_(memo1.Lines.Strings[x]) then
  Memo2.Lines.Add.Add(memo1.Lines.Strings[x]);
end;
всё вроде поправил


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

Последний раз редактировалось vovk; 27.04.2010 в 18:31. Причина: поправил
vovk вне форума Ответить с цитированием
Старый 27.04.2010, 18:28   #4
werus
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 38
По умолчанию

спасибо.) жду
werus вне форума Ответить с цитированием
Старый 27.04.2010, 19:35   #5
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

както так в общем только надо в USES добавить strutils не вместо ReverseString неохото было ничего придумывать
немного подумать в общем то можно гораздо проще сделать, мне кажется
Код:
procedure TForm1.Button3Click(Sender: TObject);
function  main_(str:string ):boolean;
var
ch:string [1];
i:integer;
begin
 Result:=true;
  str:=uppercase(TRIM(str));
  while (str<>'') and result  do
 begin
 i:= length(str);
  ch:=str[i];
   while  result   do
    begin
      dec(i);
      if i<1 then
      result:=false
      else
       if ch=str[i] then
       begin
        str:=StringReplace(str,ch,'',[rfReplaceAll]);
         Break;
       end;
      end;
  end;
end;
var
x:integer;
str1,str2:String;
begin
str1:=Trim(StringReplace((StringReplace(Memo1.Lines.Text,#10,' ',[rfReplaceAll])),#13,' ',[rfReplaceAll]))+' ';
str1:=StringReplace(str1,'  ',' ',[rfReplaceAll]);
x:= pos(' ',ReverseString(Trim(str1)));
str2:= Copy(str1, length(Trim(str1))- x+2,x);
memo1.Lines.Clear;
while str1<>'' do
 begin
   x:=Pos(' ',str1);
   if  (copy(str1,1,x)<>str2) and main_(copy(str1,1,x)) then
   Memo1.Text:=Memo1.Text+copy(str1,1,x);
   Delete(str1,1,x);
 end;
end;
vovk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Не получается вывести текст в Label murmuno Помощь студентам 4 26.03.2010 10:50
текст в две строки в TButton (Delphi) kaa1977 Помощь студентам 3 17.11.2009 13:16
Delphi 2009 не видит русский текст?оО TwiX Работа с сетью в Delphi 8 15.08.2009 20:52
Delphi - rus текст Vladimir-belikov Помощь студентам 2 30.05.2009 13:14
Текст в OpenGl (Delphi) Levsha100 Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 08.12.2008 22:36