Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Исходники][Delphi][Пример]Нахождение в строке слов с одинаковыми первой и последней буквой 
:(
    Опции темы
THandle
Дата 26.3.2008, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Задание.

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


Решение.

Код

program problem;

{$APPTYPE CONSOLE}

var
  sData, sSlovo: string;
  i, k : integer;

function IsSame(s : string) : boolean;
begin
  result := false;
  if s[1] = s[length(s)] then
    result := true;
end;

begin
  Write('STROKA: ');
  Readln(sData);
  sData := sData + ' ';
  k := 0;
  for i := 1 to length(sData) do
    if sData[i] <> ' ' then
      sSlovo := sSlovo + sData[i]
    else
      if sSlovo <> '' then
        begin
          if IsSame(sSlovo) then
            inc(k);
          sSlovo := '';
        end;
  write(k);
  Readln;
end.




Объяснение.


sData - строка, вводимая с клавиатуры.

sSlovo - текущее слово из введенной строки.

k - счетчик слов, начинающихся и заканчивающихся одной и той же буквой.

i - счетчик цикла.



Код

  Write('STROKA: ');
  Readln(sData);
  sData := sData + ' ';
  k := 0;


Вводим нашу строку. Присваиваем счетчику слов с одинаковой первой и последней буквой значение 0.


Код

  for i := 1 to length(sData) do


В цикле от 1 до конца строки делаем следующее:

Код

    if sData[i] <> ' ' then
      sSlovo := sSlovo + sData[i]


Если символ строки sData с индексом i не равен пробелу, то 
прибавляем к текущему слову этот символ, иначе делаем следующее:


Код

    else
      if sSlovo <> '' then
        begin
          if IsSame(sSlovo) then
            inc(k);
          sSlovo := '';
        end;




Код

if sSlovo <> '' then


Если текущее слово не пустое, то вызываем следующую функцию:



Код

function IsSame(s : string) : boolean;
begin
  result := false;
  if s[1] = s[length(s)] then
    result := true;
end;


Она проверяет одинаковы ли первый и последний символы слова.
Если одинаковы, то функция возвращает true, и мы
увеличиваем наш счетчик k на 1:

Код

            inc(k);


Далее независимо от того что вернула функции IsSame очищаем текущее слово:

Код

         sSlovo := '';


Далее продолжается цикл.


После завершения цикла и подсчета количества слов с одинаковыми первой и последней буквой делаем следующие действия:

Код


  write(k);
  Readln;


Выводим результат, то есть количество слов с одинаковыми первой и последней буквой.
Далее ждем ввода с клавиатуры, чтобы завершить программу.


Конец.




В прикрепленном файле находится проект данного примера.

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  _______.rar 20,70 Kb
PM   Вверх
MetalFan
  Дата 26.3.2008, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(THandle @  26.3.2008,  15:17 Найти цитируемый пост)
  result := false;
  if s[1] = s[length(s)] then
    result := true;

к чему лишние телодвижения?
достаточно
Код

  result := s[1] = s[length(s)];


Это сообщение отредактировал(а) MetalFan - 26.3.2008, 16:01


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
THandle
Дата 26.3.2008, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



MetalFan, согласен, что достаточно, но:

Все это пишется для совсем начинающих, которые, как мне кажется могут не понять смысл такай записи.
PM   Вверх
MetalFan
Дата 26.3.2008, 17:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



тогда уж более наглядна была бы запись вида:
Код
  if s[1] = s[length(s)] then
    result := true
  else
    result := false;



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0817 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.