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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2009, 02:01   #1
logoleha
 
Регистрация: 26.05.2009
Сообщений: 5
Сообщение Подкорректируйте код, плиззз...

У меня задание такое:
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Подсчитать количество слов в данной строке.

Требования:
Для ввода текста надо использовать компонент RichEdit. Ввод предложения организовать двумя способами:
1)в одну строку; (RichEdit1)
2)каждое слово-на отдельной строке.(RichEdit2)

Я использовал 2 RichEdit, 2 Edit, 2 Button. И написал такой код:


Код:
unit Unit1;

interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, ComCtrls, ToolWin, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    Button1: TButton;
    Edit1: TEdit;
    RichEdit2: TRichEdit;
    Button2: TButton;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
    k,i:integer;
begin
   s:=RichEdit1.Text;
   If i>=Length(s) then
   k:=0;
   for i:=1 to length(s) do
   if s[i]=' ' then k:=k+1;
   if k=0 then showmessage(' Вы не ввели текст! Будьте внимательны.');
   if k<>0 then k:=k+1;
   Edit1.Text:=FloatToStr(k);
   end;

procedure TForm1.Button2Click(Sender: TObject);
var
s1:string;
n1,k1:integer;
begin
  s1:=richedit2.lines[0];
  for n1:=0 to richedit2.lines.count do
  begin
  Edit2.Text:=FloatToStr(n1);
  end;
  end;
end.
Но есть проблема:
в первом случае так как она у меня считает по пробелам, если я буду вводить слова оставляя несколько пробелов ответ будет неправильным.
Во-втором случае она считывает стоки и если я оставлю пустую строку ответ тоже будет неправильным.
Помогите пожалуйста!!!

Последний раз редактировалось Stilet; 01.06.2009 в 09:32.
logoleha вне форума Ответить с цитированием
Старый 01.06.2009, 02:10   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код заключайте в теги CODE ("#" на панели в окне редактирования).

В первом случае используйте циклы while для пропуска пробелов и слов.
Во втором проверяйте строки на пустоту.

Код:
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
k,i,len:integer;
begin
s:=RichEdit1.Text;
k:=0;
i := 0;
len := length(s);
while i<=len do
 begin
 while (s[i]=' ') and (i<=len) do inc(i); // ïðîïóñêàåì ïðîáåëû
 while (s[i]<>' ') and (i<=len) do inc(i); // ïðîïóñêàåì áóêâû
 inc(k);
 end;
Edit1.Text:=IntToStr(k);
end;


procedure TForm1.Button2Click(Sender: TObject);
var
n,k:integer;
begin
k := 0;
for n:=0 to richedit2.lines.count-1 do
 begin
 if length(richedit2.Lines.Strings[n])>0 then inc(k);
 end;
Edit2.Text := IntToStr(k);
end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 01.06.2009, 02:24   #3
logoleha
 
Регистрация: 26.05.2009
Сообщений: 5
По умолчанию Есть на свете добрые люди.

Спасибо большое!!!
logoleha вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подкорректируйте програмку апрол Паскаль, Turbo Pascal, PascalABC.NET 1 14.12.2008 00:27