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

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

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

 
 Ответить  Открыть новую тему 
> помогите плз найти и исправить ошибку в задаче на строки.
MiH@N
сообщение 17.06.2008 23:14
Сообщение #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 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 17.06.2008 23:25
Сообщение #2


Michael_Rybak
*****

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

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


двоеточие перед "=" пропустил smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
MiH@N
сообщение 18.06.2008 6:19
Сообщение #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 - 18.06.2008 6:19
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Айра
сообщение 18.06.2008 7:32
Сообщение #4


Профи
****

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

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


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

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


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

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

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


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

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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
MiH@N
сообщение 18.06.2008 17:17
Сообщение #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 - 18.06.2008 19:06
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Sozialist
сообщение 19.06.2008 15:47
Сообщение #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 - 19.06.2008 15:47
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
MiH@N
сообщение 20.06.2008 14:07
Сообщение #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 - 20.06.2008 14:18
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Sozialist
сообщение 20.06.2008 15:26
Сообщение #9


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

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

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


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

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

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

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

 



- Текстовая версия 23.06.2025 1:33
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"