массивы

Общие вопросы: версии и диалекты, синтаксис языка, cтруктуры и типы данных (массивы, строки, списки...), обработка данных и т.д.
Ответить
Первокурсница
Сообщения: 1
Зарегистрирован: 01 июл 2010, 14:23

01 июл 2010, 14:29

Помогите, пожалуйста, исправить ошибки!!!

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

Вот, что я написала:
[syntax='delphi']
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+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<>' ' 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.
[/syntax]
Аватара пользователя
Игорь Акопян
Сообщения: 1419
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

02 июл 2010, 09:25

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

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

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

как-то так... писал прямо тут ;)
Изображение
Ответить