Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.04.2009, 18:39
gralex gralex вне форума
Прохожий
 
Регистрация: 15.04.2009
Сообщения: 14
Репутация: 10
Восклицание помогите найти ошибку PLS

вот исходник кода, программа должна из строки 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: Пользуемся тегами!

Последний раз редактировалось Admin, 15.04.2009 в 18:42.
Ответить с цитированием
  #2  
Старый 15.04.2009, 18:46
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

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  
Старый 15.04.2009, 19:21
gralex gralex вне форума
Прохожий
 
Регистрация: 15.04.2009
Сообщения: 14
Репутация: 10
По умолчанию

Admin мне надо именно без перебора значений символов (не надо вот этих [i])
а выглядеть примерно так должно:
http://s48.radikal.ru/i119/0904/06/46ada435801c.jpg
т.е надо именно так, как сделано в программе, тока убрать этот баг
з.ы: я тока начал над делфи мозги ломать, поэтому я noob...
Ответить с цитированием
  #4  
Старый 15.04.2009, 19:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Гы, Pos - это тот же перебор, только скрытый от тебя внутри стандартной функции. С циклом, в котором ты сделаешь все условия в один проход будет быстрее и красивее.

Кстати, как я сказал - где инициализация s???
Ответить с цитированием
  #5  
Старый 15.04.2009, 19:31
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Сразу 2 ошибки вижу, тип s подразумевается строка а у вас целое. Вы пишете, что надо менять а на б, а фактически гоняете цикл до сваливания по переполнению n
Код:
while Pos('а', s) > 0 do
  begin
  n:=n+1;
  s[Pos('a',s)]:='a';
 end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 15.04.2009 в 19:34.
Ответить с цитированием
  #6  
Старый 15.04.2009, 19:40
gralex gralex вне форума
Прохожий
 
Регистрация: 15.04.2009
Сообщения: 14
Репутация: 10
Смущение

извините за наглость, конечно, а можно просто целый код написать и все...
Ответить с цитированием
  #7  
Старый 15.04.2009, 19:53
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ну ленивый народ пошел:
Код:
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  
Старый 16.04.2009, 15:01
gralex gralex вне форума
Прохожий
 
Регистрация: 15.04.2009
Сообщения: 14
Репутация: 10
Хорошо

спасибо ОГРОМНОЕ
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:23.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025