PDA

Просмотр полной версии : массивы



Первокурсница
01.07.2010, 14:29
Помогите, пожалуйста, исправить ошибки!!!

Условие: Дана строка символов, слова разделены пробелами. Вывести на экран порядковый номер слова, накрывающего k-ю позицию. Если k-я позиция – пробел, то вывести номер предыдущего слова.

Вот, что я написала:

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
A,b,c:integer;
S:string;
begin
c:=Length(LabeledEdit1.text);
a:=strtoint(LabeledEdit2.Text);
b:=a;
If LabeledEdit1.Text[a]=' ' then //есил символ пробел
begin
While LabeledEdit1.Text[b-1]<>' ' do //пока не нарвемся на другой пробел
begin
If B=0 then break;
b:=b-1;
end;
While B<>A do
begin
s:=s+LabeledEdit1.Text[b];
b:=b+1;
end;
end
else
begin
While LabeledEdit1.Text[a-1]<>' ' do //пока не нарвемся на другой пробел
begin
If A=0 then break;
a:=a-1;
end;
B:=A;
While LabeledEdit1.Text[B]<>' ' do
begin
b:=b+1;
If B=C then break;
end;
While A<>B+1 do
begin
s:=s+LabeledEdit1.Text[A];
a:=a+1;
c:=c+1
end;
end;
ShowMessage(s);
end;

end.

Игорь Акопян
02.07.2010, 09:25
я бы в случае пробела написал так:
если символ в заданной позиции пробел, то идём к началу и считаем пробелы, по достижении начала - "номер предыдущего слова" = "число пробелов"+1

а собсно и во втором случае то же самое ;) так что не нужно никакое условие


c := 0;
b := a-1;
While b>0 do
begin
if LabeledEdit1.Text[b] = ' ' then //если пробел
inc(c);
dec(b);
end;
ShowMessage(Format('Нумер слова - %d', [c+1]);


как-то так... писал прямо тут ;)