![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
вот исходник кода, программа должна из строки Label1 переводить значение в Label2 с заменой букв а на б, пробелов на '-', и подсчитывать количество замен(в зависимости от того, поставлена галочка в CheckBox'ах или нет). У меня выдает ошибку в строках:
while Pos('а', s) > 0 do s[Pos('a',s)]:='a'; while Pos(' ',s)>0 do s[Pos(' ',s)]:='-';... если заменить тип s на string, то программа запускается, но нужных действий не производит((( помогите... код вот: Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
Button1: TButton;
Edit2: TEdit;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
n, s:integer;
begin
n:=0;
Edit3.Text:='';
Edit2.Text:='';
if CheckBox2.Checked then
while Pos('а', s) > 0 do
begin
n:=n+1;
s[Pos('a',s)]:='a';
end;
if CheckBox3.Checked then
while Pos(' ',s)>0 do
begin
n:=n+1;
s[Pos(' ',s)]:='-';
end;
if CheckBox1.Checked then Edit3.Text:=IntToStr(n);
Edit2.Text:=s;
end;
end.Последний раз редактировалось Admin, 15.04.2009 в 18:42. |
|
#2
|
|||
|
|||
|
1. s должно быть именно string
2. не вижу задание s значения. 3. Такой код лучше переписать на циклы типа: Код:
var
i, n : Integer;
s : String;
begin
n := 0;
s := Edit1.Text; // начальное значение
For I := 1 To Length(s) Do
If s[i] = 'a' Then
Begin
s[i] := 'a';
Inc(n);
End;
If s[i] = ' ' Then
Begin
s[i] := '-';
Inc(n);
End;
end;Условия по флажкам сам добавишь ![]() |
|
#3
|
|||
|
|||
|
Admin мне надо именно без перебора значений символов (не надо вот этих [i])
а выглядеть примерно так должно: http://s48.radikal.ru/i119/0904/06/46ada435801c.jpg т.е надо именно так, как сделано в программе, тока убрать этот баг ![]() з.ы: я тока начал над делфи мозги ломать, поэтому я noob... ![]() |
|
#4
|
|||
|
|||
|
Гы, Pos - это тот же перебор, только скрытый от тебя внутри стандартной функции. С циклом, в котором ты сделаешь все условия в один проход будет быстрее и красивее.
Кстати, как я сказал - где инициализация s??? |
|
#5
|
||||
|
||||
|
Сразу 2 ошибки вижу, тип s подразумевается строка а у вас целое. Вы пишете, что надо менять а на б, а фактически гоняете цикл до сваливания по переполнению n
Код:
while Pos('а', s) > 0 do
begin
n:=n+1;
s[Pos('a',s)]:='a';
end;Последний раз редактировалось Страдалецъ, 15.04.2009 в 19:34. |
|
#6
|
|||
|
|||
|
извините за наглость, конечно, а можно просто целый код написать и все...
![]() |
|
#7
|
||||
|
||||
|
Ну ленивый народ пошел:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
n: Integer;
s: String;
begin
n:=0;
Edit3.Text:='';
Edit2.Text:='';
s := 'что там мы-типа пытаемся заменить';
if CheckBox2.Checked then
while Pos('а', s) > 0 do
begin
n:=n+1;
s[Pos('a',s)]:='б';
end;
if CheckBox3.Checked then
while Pos(' ',s)>0 do
begin
n:=n+1;
s[Pos(' ',s)]:='-';
end;
if CheckBox1.Checked then Edit3.Text:=IntToStr(n);
Edit2.Text:=s;
end; |
|
#8
|
|||
|
|||
|
спасибо ОГРОМНОЕ
![]() |