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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2006, 19:37   #1
D_K_
 
Регистрация: 30.11.2006
Сообщений: 5
По умолчанию задача по строкам

выручайте! нужно написать следующюю прогу.
"вводится строка из слов. слова разделены одним или более пробелом. после последнего слова - точка. в слове от 1 до 8 английских символов. всего слов до 50 штук.
вывести те, которые являются симметричными и не совпадают с последним словом"
D_K_ вне форума Ответить с цитированием
Старый 30.11.2006, 19:46   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

алгоритм:
1)создаёшь слово-буфер, обнуляешь его.
2)добавляешь побуквенно в слово-буфер, если следующий символ пробел, то добавляешь слово в массив слов. обнуляешь слово-буфер
3)ищешь символ отличный от пробела и начинаешь с пункта 2 и так до точки.
3)прогоняешь через цикл массив полученных слов, сравнивая первую и последнюю букву, вторую и предпоследнюю и т.д. тоже лучше в цикле.
4)если слово семметричное выводишь его в memo, например.

какой из пунктов не понятен? или нужен код?
Alar вне форума Ответить с цитированием
Старый 30.11.2006, 19:51   #3
D_K_
 
Регистрация: 30.11.2006
Сообщений: 5
По умолчанию

лучше код... если не затруднит... спасибо.
D_K_ вне форума Ответить с цитированием
Старый 30.11.2006, 19:54   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

1. Выделяем последнее слово и сохраняем в переменной.
2. Поочередно выделяем слова, создаем их "перевертыши" (если я правильно понял выражение "симметричные слова").
3. Проверяем "перевертыша" и оригинал на совпадение с последним словом. Если нет совпадения - п.4.
4. Осуществляем поиск "перевертыша" в оставшейся части строки.
5. Опять на п.2.

Основной оператор - CompareStrings

Или опять готовый листинг требуется?
mihali4 вне форума Ответить с цитированием
Старый 30.11.2006, 20:22   #5
D_K_
 
Регистрация: 30.11.2006
Сообщений: 5
По умолчанию

mihali4
Алгоритм я и сам примерно так представлял. Только вот как его оформить в коде - увы. В Дельфях не силен (знаю на уровне начальной школы: циклы, массивы и т.п.), а прога нужна моему знакомому. Поэтому самому сидеть и листать доки, вспоминая правила записи команд некогда. Если можешь - дай готовый листинг.
D_K_ вне форума Ответить с цитированием
Старый 30.11.2006, 20:38   #6
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

перевёртыши это что?
deged - перевёртышь? я так понял задачу.
Alar вне форума Ответить с цитированием
Старый 30.11.2006, 21:32   #7
D_K_
 
Регистрация: 30.11.2006
Сообщений: 5
По умолчанию

Ага. Оно же abccba, abbba. Хотя уже самого начали брать сомнения в значении этого термина. Первое слово вроде как симметрично относительно промежутка между буквами сс. А второе - относительно самой буквы, хотя тоже по идее симметрично.
В общем пусть симметричные те, которые читаются одинаково справа налево и слева направо.
D_K_ вне форума Ответить с цитированием
Старый 01.12.2006, 12:43   #8
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
Счастье

И опять под листинг попадаю я...
Я беру за основу то, что пользователь вводит всю эту беду в memo...
На форме - 2 memo, 1 Button.
Код:
 
procedure TForm1.Button1Click(Sender: TObject);
var
  i,c: SmallInt;
 LastWord, BufWord, RevWord, s: String;
begin
 memo2.Lines.Clear;
 LastWord:='';
  BufWord:='';
  RevWord:='';
 S:=memo1.Text;
  if s = '' then exit;
  for i:=length(S)-1 downto length(S)-10 do
   if S[i]<>#32 then LastWord:=s[i]+LastWord else Break;
  for i:=1 to Length(s) do
  begin
   if s[i]<>#32 then BufWord:=BufWord+s[i] else
     if BufWord<>'' then
      begin
       for c:=1 to Length(BufWord) do RevWord:=BufWord[c]+RevWord;
        if BufWord=RevWord then memo2.Lines.Add(BufWord);
        BufWord:='';
        revWord:='';
    end;
  end;
end;
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 01.12.2006, 19:25   #9
D_K_
 
Регистрация: 30.11.2006
Сообщений: 5
По умолчанию

SuperVisor
Благодарю! Только для полного выполнения условия задачи "...и не совпадают с последним словом" следует написать так:
Код:
if BufWord=RevWord then if BufWord<>LastWord then memo2.Lines.Add(BufWord);
D_K_ вне форума Ответить с цитированием
Старый 01.12.2006, 20:13   #10
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Странно, вроде-бы писал.. Но это не столь важно, если ты это заметил, а еще лучше немного поправить сторку: из
Код:
if BufWord=RevWord then memo2.Lines.Add(BufWord);
в
Код:
if (BufWord=RevWord) and (BufWord<>LastWord) then memo2.Lines.Add(BufWord);
Да и вообще он все еще подлежит оптимизации.
Обращайся, если что.
Познавая других, мы познаем себя.
С'est la vie...

Последний раз редактировалось SuperVisor; 01.12.2006 в 20:20.
SuperVisor вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пара вопросов по строкам Ravenbird Паскаль, Turbo Pascal, PascalABC.NET 8 03.11.2006 22:55