IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> помогите плз найти и исправить ошибку в задаче на строки.
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


помогите плз найти и исправить ошибку в задаче на строки. условие такое:Дана строка, содержащая английский текст. Найти количество слов, начинающихся с буквы b.

procedure TForm1.Button1Click(Sender: TObject);
var s : String; i : integer;
begin
s:=edit1.text;
edit1.Text:='';
for i=1 to length(s) do
if (s[i]=' b') then k:=k+1;
end;
edit2.Text:='k';
после to выдаёт [Error] Unit1.pas(37): For loop control variable must be simple local variable подскажите что к чему?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


двоеточие перед "=" пропустил smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


тут я кое что подредактировал но всё равно требуемого результата не выходит...мож глянете где ещё ошибки.
З.Ы. всегда получается 0.
Код
procedure TForm1.Button1Click(Sender: TObject);
var s : String;   i,k : integer;
begin
s:=edit1.text;
edit1.Text:='';
k:=0;
for i:=1 to length(s)  do
if (s[i]=' b') then  k:=k+1;
edit2.Text:=inttostr(k);
end;


Сообщение отредактировано: MiH@N -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


хм.. а как это у тебя один символ строки s s[и] может равняться двум символам ' b' (пробел и b) ?

Сообщение отредактировано: Айра -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


k - это же число?
тогда нельзя делать
edit2.Text:='k';

это выведет букву k, а не значение переменной k.
надо
Edit2.Text:=IntToStr(k);


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


я в исправленном коде это исправил. smile.gif в 3 посте.

Добавлено через 8 мин.
Цитата(Айра @ 18.06.2008 6:32) *

хм.. а как это у тебя один символ строки s s[и] может равняться двум символам ' b' (пробел и b) ?


вообщет этим действием я хотел чтоб цикл проверял строку и находил в ней слова начинающиеся с b.
а как правильно будет?

нашол в FAQ похожую задачу но чёт неполучается правильно интерпретировать и перевести её в Delphi.

Код
function Count(Const s, w: String; start: Byte): Byte;
const
  limits = ['.', ',', ';', '!', '?', ' '];
var
  p: Byte;
begin
  p := Pos(w, Copy(s, start, 255));
  if (start > length(s)) or (p = 0) then Count := 0
   else if (((start + p - 2) = 0) or (s[ start + p - 2] in limits))
    and (((start + p + length(w) - 2) = Length(s)) or (s[start + p + length(w) - 1] in limits))
     then Count := 1 + Count(s, w, start + p + length(w) - 2) else Count := 0 + Count(s, w, start + p + length(w) - 2);
end;


Сообщение отредактировано: MiH@N -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Клавиатурный тиран
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  -2  +


procedure TForm1.Button1Click(Sender: TObject);
var
s : String;
i,k : integer;
flag:boolean=true;
BEGIN
s:=edit1.text;
edit1.Text:='';
k:=0;
for i:=1 to length(s) do
begin
if flag and (s[i]='b') then inc(k);
if s[i]=' ' then flag:=true else flag:=false;
end;
edit2.Text:=IntToStr(k);
END;


Не проверял. Должно работать.

Сообщение отредактировано: Sozialist -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


Спасибо за помощь!

Цитата(Sozialist @ 19.06.2008 14:47) *

procedure TForm1.Button1Click(Sender: TObject);
var
s : String;
i,k : integer;
flag:boolean=true;
BEGIN
s:=edit1.text;
edit1.Text:='';
k:=0;
for i:=1 to length(s) do
begin
if flag and (s[i]='b') then inc(k);
if s[i]=' ' then flag:=true else flag:=false;
end;
edit2.Text:=IntToStr(k);
END;


Не проверял. Должно работать.



а что означает строка flag:boolean=true; ? может надо просто flag:boolean; ? и что означает ink(k)?
Заранее спс.

Сообщение отредактировано: MiH@N -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Клавиатурный тиран
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  -2  +


flag:boolean=true; - объявление типизированной константы - переменной, которая инициализируется при объявлении, иначе можно
var
flag:boolean
begin
flag:=true;
...
end.

inc(k) то же, что и k:=k+1;
Я просто привык к такому синтаксису.

Сообщение отредактировано: Sozialist -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 3.12.2020 20:08
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name