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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2012, 12:00   #1
anthonyk
Пользователь
 
Регистрация: 15.12.2012
Сообщений: 18
По умолчанию Легкая задача по Delphi

Здравствуйте!

Нужна ваша помощь в решении простой задачи на delphi. Я в программировании новичок. Вообще я лингвист и не понятно зачем нам программирование.

Собственно задача:

Даны натуральное число n, символы S1,S2,...Sn. Получить первое натуральное число i, для которого каждый из символов S(i) и S(i+1) совпадает с буквой а. Если такой пары символов в последовательности нет, то ответом должно быть число 0.

То, что я пытался сделать:

На форме есть button, label, edit.

procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
i,n:integer;
begin
s:=Edit1.Text;
n:=length(s);
For i:=1 to n do
if (s[i]='a') and (s[i+1]=s[i]) then
Label1.Caption:=IntToStr(i) else Label1.Caption:='0';
end;

Буду благодарен за любую помощь!
anthonyk вне форума Ответить с цитированием
Старый 15.12.2012, 12:25   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

А проблема-то в чем? Код вроде правильный...
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 15.12.2012, 13:10   #3
anthonyk
Пользователь
 
Регистрация: 15.12.2012
Сообщений: 18
По умолчанию

Проблема в том, что когда ввожу произвольный набор символов в Edit1, и, собственно, нажимаю на кнопку, ответ постоянно '0', есть 'аа' или нет. Не могу понять почему так.
anthonyk вне форума Ответить с цитированием
Старый 15.12.2012, 13:18   #4
studen
Пользователь
 
Регистрация: 21.05.2012
Сообщений: 88
По умолчанию

Штука в том, что программа не останавливается, когда находит "аа", надо сделать вот как (простите, что без отступов):
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
i,n:integer;
begin
s:=Edit1.Text;
n:=length(s);
For i:=2 to n do
if (s[i-1]='a') and (s[i]=s[i-1]) then begin
Label1.Caption:=IntToStr(i);
exit;
end
else Label1.Caption:='0';
end;
И правда, зачем лингвисту программирование? Наверное, как и программисту культурология


Кроме того, есть стандартная функция Pos, гуглите, она как раз и выполняет эту задачу.

Последний раз редактировалось studen; 15.12.2012 в 13:21.
studen вне форума Ответить с цитированием
Старый 15.12.2012, 13:30   #5
anthonyk
Пользователь
 
Регистрация: 15.12.2012
Сообщений: 18
По умолчанию

Спасибо большое! Всё заработало. Ошибку я понял.
Про функцию pos я знаю, но мне показалось, что по условию задачи она не совсем подойдет. Хотя может я ошибаюсь. Еще раз большое спасибо!
anthonyk вне форума Ответить с цитированием
Старый 15.12.2012, 14:04   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Имхо, не нужно на каждой итерации цикла присваивать 0 label'у.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
  i, n: integer;
begin
  s := Edit1.Text;
  n : =length(s);
  For i := 1 to n - 1 do
  if (s[i] = 'a') and (s[i] = s[i + 1]) then
  begin
    Label1.Caption := IntToStr(i);
    exit;
  end;
  Label1.Caption := '0';
end;
(Нужно изменить вот так цикл, например, иначе будет ответ на 1 больше нужного)
С pos будет проще, но преподаватель может сказать, что нужно было самому реализовать поиск.
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := pos('aa', Edit1.Text);
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 15.12.2012 в 14:07.
BDA вне форума Ответить с цитированием
Старый 15.12.2012, 14:22   #7
anthonyk
Пользователь
 
Регистрация: 15.12.2012
Сообщений: 18
По умолчанию

Спасибо, BDA. Код мой получился такой:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
  i,n:integer;
begin
  s:=Edit1.Text;
  n:=length(s);
  For i:=1 to n do
  if (s[i]='a') and (s[i+1]=s[i]) then
  begin
    Label1.Caption:=IntToStr(i);
    exit;
  end;
  Label1.Caption:='0';
end;
anthonyk вне форума Ответить с цитированием
Старый 15.12.2012, 14:34   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Код:
For i := 1 to n - 1 do
Иначе будет выход за границы строки.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.12.2012, 14:44   #9
anthonyk
Пользователь
 
Регистрация: 15.12.2012
Сообщений: 18
По умолчанию

Ок. Спасибо.
anthonyk вне форума Ответить с цитированием
Старый 15.12.2012, 14:52   #10
anthonyk
Пользователь
 
Регистрация: 15.12.2012
Сообщений: 18
По умолчанию

А можно еще намёк небольшой попросить у вас? Нужно организовать подсчет наибольшего количества определенных символов в строке, в моем случае - пробелов. Какие функции мне можно посмотреть?

Насколько я понял, мне в строке нужно найти первые несколько пробелов (или один пробел), запомнить его, дальше найти вторую группу пробелов, сравнить с первой, запомнить ту группу, которая больше, дальше найти третью группу пробелов и т.д. до конца строки, затем вывести наибольшее число пробелов. Все правильно?
anthonyk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
легкая задача Иван Грозный Паскаль, Turbo Pascal, PascalABC.NET 5 21.05.2012 13:47
легкая задача на реализацию videolord Общие вопросы C/C++ 4 18.12.2011 16:02
задача не самая легкая Arinca Паскаль, Turbo Pascal, PascalABC.NET 0 17.04.2011 22:25
Господа, вроде легкая задача по Delphi, а как подступиться не знаю koysara Помощь студентам 3 17.09.2010 11:12
легкая задача vAdiM_Kubski Паскаль, Turbo Pascal, PascalABC.NET 2 25.09.2009 22:49