Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Turbo Pascal] Задача. Работа с текстом, Дан текст. Найти кол-во слов... 
V
    Опции темы
METTER
Дата 9.9.2008, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.9.2008

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



Задача для зачёта. Бужу безмерно благодарен за помощь!

Дан текст, состоящий из слов, разделенных пробелами (одним или несколькими) или знаками препинания. Найти кол-во слов, которые начинаются и заканчиваются на одну и ту же букву и вывести их на экран.
PM MAIL   Вверх
mr.Anderson
Дата 9.9.2008, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

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



В основе лежит последовательный (посимвольный) анализ текста. Я где-то приводил решение похожей задачи. Скажу алгоритм, реализуешь, я думаю, сам. Попробуй, по крайней мере.
  •  Объявляем переменную-слово (будем там слово хранить). Например, назовем ее word.
  •  Также объявляем переменную, куда запишем количество слов. Например, wordCount. Ставим ее в 0.
  •  Идем по всему тексту посимвольно (Read()).
  •  В цикле при каждом проходе проверяем. Если текущий элемент - символ (буква-цифра), то приписываем ее к word, если нет - тогда анализируем наше слово. Первая и последняя буква равны - выводим word и инкрементируем wordCount. В любом случае ее обнуляем (word := '';).
Собственно, это все.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
METTER
Дата 9.9.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.9.2008

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



mr.Anderson,  большое спасибо за подсказку и за помощь, но я сам не смогу это сделать ((( ибо  smile ... к сожалению и с другими задачами тоже так, потому как затянул всё.. а времени в обрез... учёба заочно даёт о себе знать..
некрасиво с моей стороны, но если не трудно, то помогите, пожалуйста, с полным решением
PM MAIL   Вверх
mr.Anderson
Дата 9.9.2008, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

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



METTER, ок, попробуй так (проверить нечем, пишу на коленке):
Код

program FindWords;
var
 text  : String;
 i     : Integer;
 word  : String;
 wordC : Word;
begin
 wordC := 0;
 word := '';

 for i:=1 to Length(text) do
 begin
  if (text[i] in ['A'..'Z','a'..'z','0'..'9']) then
  begin
   if (word[1] = word[Length(word)]) then
   begin
    inc(wordC);
    WriteLn(word);
   end;
  
   word := '';
  
   continue;
  end
  else word := word + text[i];  
 end;

 WriteLn('Count of words: ', wordC);
end.

Кажись, не наврал.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
volvo877
Дата 10.9.2008, 12:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 34
Всего: 116



Цитата(mr.Anderson @  9.9.2008,  21:03 Найти цитируемый пост)
пишу на коленке

Заметно... Вообще-то это даже не откомпилируется: Word в Паскале - это тип, а ты называешь так переменную... И что в следующей строке означает Word? По-прежнему тип? Фиг там, уже переменная, ты получаешь "Error in type" и думаешь, где ж косяк-то? Но даже если переименовать переменную в _Word, оно все равно не будет работать, потому что правильно - так:
Код
...
  if not (text[i] in ['A'..'Z','a'..'z','0'..'9']) then { <--- NOT в оригинале не было }
...

... Но даже и теперь это все равно не будет работать, потому что последнее слово обрабатываться не будет... Самый простой вариант - после ввода text-а, но перед началом его обработки сделать 
Код
...
text := text + ' ';
...

PM MAIL   Вверх
mr.Anderson
Дата 10.9.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

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



volvo877, не со всеми доводами согласен, word : String компилируется без проблем в Delphi, насчет TP не знаю, просто не пишу в нем, думаю, он тоже должен это понять. Про not и обработку последнего слова да, забыл, на то она и коленка. smile


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
THandle
Дата 10.9.2008, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



mr.Anderson, 

Цитата(mr.Anderson @  10.9.2008,  14:47 Найти цитируемый пост)
word : String компилируется без проблем в Delphi,


В Delphi да, но где ты в названии темы видишь Delphi? Там ясно что Паскаль. Если отвечаешь в тему про паскаль, то изволь иметь при себе его компилятор, чтобы проверить.

volvo877 все верно говорит.
PM   Вверх
METTER
Дата 10.9.2008, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.9.2008

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



ребят, так как всё ж будет в правильно? а то ошибку выдаёт ((
PM MAIL   Вверх
volvo877
Дата 11.9.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 34
Всего: 116



Цитата(METTER @  10.9.2008,  21:54 Найти цитируемый пост)
как всё ж будет в правильно?

Я ж написал выше, что надо сделать... Ну, если уж писать полностью, то я бы сделал вот так:

Код

program FindWords;
var
  text, nextWord: String;
  i: Integer;
  count: Word;
begin
  write('s = '); readln(text);
  text := text + ' ';

  count := 0;
  nextWord := '';
  for i := 1 to Length(text) do begin
    if text[i] in ['A'..'Z','a'..'z','0'..'9'] then
      nextWord := nextWord + text[i]
    else begin

      if (nextWord[1] = nextWord[Length(nextWord)]) then begin
        inc(count); writeln(nextWord);
      end;
      nextWord := '';

    end;
  end;
  writeln('Count of words: ', count);
end.


P.S.
Цитата(mr.Anderson @  10.9.2008,  13:47 Найти цитируемый пост)
word : String компилируется без проблем в Delphi
  smile Это и в Турбо-Паскале компилируется... Но вот на этом:
Код
var
 word  : String;
 wordC : Word; // <--- облом будет в любом компиляторе: нужен тип, а не имя переменной

PM MAIL   Вверх
METTER
Дата 11.9.2008, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.9.2008

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



volvo877,  огромное спасибо за помощь!!!  smile  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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