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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2011, 19:04   #1
welcomeTo
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 43
По умолчанию Operator not applicable to this operand type

Задание: Рассматривается строка как массив символов. Посчитать количество слов, заканчивающихся на гласную букву.
Выводит ошибку
Код:
procedure TForm1.Button1Click(Sender: TObject);
var s,s1,s2:string;
len,i,col:integer;
begin
  col:=0;

  s:=Edit1.Text;
  len:= length(s);
  s1:='aеиуэюя';
  for i:=0 to (len-1) do
  begin
    s2:=s[i-1];
    if (s[i] = ' ' and pos(s2,s1)) //ТУТ ОШИБКА
    then inc(col);  
    if (i=len  and pos(s2,s1))
    then inc(col);
  end;
  Label2.Caption := intTOStr(col);
end;

Последний раз редактировалось welcomeTo; 06.06.2011 в 19:07.
welcomeTo вне форума Ответить с цитированием
Старый 06.06.2011, 19:08   #2
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Код:
if (s[i] = ' ' and pos(s2,s1))// ТУТ ОШИБКА
Что по вашему должно сравниваться и с чем?
Скобки надо так ставить:

Код:
If (...) And (....) Or (...) Then ...
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 06.06.2011, 19:22   #3
welcomeTo
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 43
По умолчанию

Теперь та же самая ошибка показывает на строку ниже, т.е. вот сюда
Код:
then inc(col);
welcomeTo вне форума Ответить с цитированием
Старый 06.06.2011, 19:28   #4
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Какойто вообще бредовый код. Чтоб выполнить задание:

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

Код:
for i := 1 to len do
if (s[i] = ' ') and (pos(s[i-1],s1) <> 0) then inc(col);
При условии что первый не пробел и что разделяет слова лишь один пробел.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 06.06.2011, 19:40   #5
welcomeTo
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 43
По умолчанию

А в моем кто что проверяется?)
именно так:
Цитата:
Сообщение от Valio Посмотреть сообщение
найдя пробел посмотреть что стоит перед ним.
PS - Ваш код не проверит последнее слово
welcomeTo вне форума Ответить с цитированием
Старый 06.06.2011, 19:44   #6
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Цитата:
Сообщение от welcomeTo Посмотреть сообщение
А в моем кто что проверяется?)
именно так:

PS - Ваш код не проверит последнее слово
Посмотри внимательней... Мой код то работает.... наверно

Ок, после цикла напиши:

Код:
if pos(s[len],s1 <> 0) then inc(col);
Теперь всё учитывается.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 06.06.2011, 19:44   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Посчитать количество слов, заканчивающихся на гласную букву.
Разбиваем строку на массив слов:http://www.programmersforum.ru/showt...369#post398369
И после уже по массиву проверяем. Можно даже не в массив запихивать а в одну и ту же строковую переменную.
Идея понятна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.06.2011, 20:02   #8
welcomeTo
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 43
По умолчанию

Valio,
Цитата:
for i := 1 to len do
Цитата:
if pos(s[len],s1 <> 0)
Насколько я знаю, строковый индекс в Delphi начинается с нуля ===> работать не будет
только i надо с 1 начинать
Stilet, ясна но задачи требуют использования только строк) без массивов. не для себя я делаю эти задачи, так что лучше ограничиться лишь строками.

Последний раз редактировалось welcomeTo; 06.06.2011 в 20:08.
welcomeTo вне форума Ответить с цитированием
Старый 06.06.2011, 20:36   #9
welcomeTo
Пользователь
 
Регистрация: 27.05.2010
Сообщений: 43
По умолчанию

Может кому нужно будет :
Код:
for i:= 1 to len do
  begin
    if (s[i] = ' ') and AnsiContainsText(s1,s[i-1]) then inc(col);
  end;
  if AnsiContainsText(s1,s[len]) then inc(col);
  Label2.Caption := intTOStr(col);
welcomeTo вне форума Ответить с цитированием
Старый 06.06.2011, 21:01   #10
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Цитата:
Насколько я знаю, строковый индекс в Delphi начинается с нуля ===> работать не будет
Ваши познания неполны )
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Operand must be l-value mMAg Помощь студентам 1 14.04.2011 16:09
Could not convert variant of type (UnicodeString) into type (Double) postaveche БД в Delphi 11 13.12.2010 16:41
ошибка: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char> Critter Общие вопросы C/C++ 5 08.08.2010 23:38
Ошибка. Operator not applicable to this oparand type _-Re@l-_ Общие вопросы Delphi 6 29.06.2010 13:30
ошибка - [Error] Unit1.pas(325): Operator not applicable to this operand type blackstersl Общие вопросы Delphi 6 27.08.2008 13:17