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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal] Обработка строк 
:(
    Опции темы
Masas
  Дата 28.5.2007, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый вечер... Сам пытался-пыталсяб неполучается, вот может кто-нибудь из Вас сможет мне помоч. Формулировка задачи:

Рассматривается непустая строкаб содержащяя не более 80 символов. Каждый символ может быть маленькой англ. буквой или одним из знаков + - *. Группой букв будет называться такая совакупность букв, которая непосредственно не предшевствует и за которой нет буквы. Аналогично определяются группы знаков и цифр. Палиндромом будет называться такая группа букв, которая с лева на право читается также как с право на лев. Требуется написать программу, которая находит и печатает все такие группы букв, которые являются полиндромами. Если в строке есть хотя бы одна группа букв, но нет полиндромов, то вывод: "В строке нет ни одного полиндрома". Если в строке нет ни одной группы букв, то напечатать сообщение : "В строке нет ни одной группы".

Очень нужно сделать программку smile Спасибо всем кто прочитал)
PM MAIL   Вверх
Klin
Дата 29.5.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ну, примерно как-то так:

Код

uses CRT; { библиотека для очистки эрана }
{функция нахождения конца группы}
function FindEnd (mytext: string; mypos: integer): integer;
begin
 FindEnd:=Pos(Chr(32), Copy(mytext, mypos, Length(mytext)));
end;
{--------------------------------------------------------------------}
{ функция нахождения полиндрома в заданном тексте }
function FindPol (mytext: string): boolean;
var n: integer;
begin
 for n:=1 to round(Length(mytext)/2) do
  if (mytext[n]<>mytext[Length(mytext)-n]) then FindPol:= false;
end;
{--------------------------------------------------------------------}
var
 text: string[81]; { наш текст (почему 81 увидишь ниже) }
 StartPos: integer; { переменная для прохождения по позициям }
 ExistPol: boolean; { логическая переменная, отвечающая за существование полиндрома }
begin
 clrscr; { очистка экрана }
 Write('Enter text: '); Readln(text); { заполняем наш текст }
 if (Length(text)=81) then begin text[81]:=Chr(32) end
 else text:=text+Chr(32); { добавляем в конец пробел }
 StartPos:=1; { ищем с первого символа }
 if (text <> Chr(32)) then begin { если в строке есть что-нибудь, кроме пробела - выполняем }
  while FindEnd(text,StartPos)<>0 do begin { до тех пор, пока функция дает значения }
    if (FindPol(Copy(text,StartPos,FindEnd(text,StartPos)))) then begin { если группа является полиндром }
     Writeln('- ',Copy(text,StartPos,FindEnd(text,StartPos))); { выводим ее на экран }
     ExistPol:=true; { и сообщаем, что наши поиски не безнадежны :) } 
    end;
    StartPos:= StartPos + FindEnd (text,StartPos); { следующая позиция }
  end;
  if (Not ExistPol) then writeln('No Pol Group!'); { если полиндров нет - сообщая об этом }
 end
 else writeln('No Group!'); { если даже одной группы нет - кричим об этом :) }
end.



--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Masas
Дата 29.5.2007, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



запускаю программу:

Добавлено через 38 секунд
Написано Введите текст... я ввожу и хоп) обратно в код выходит...

Добавлено через 1 минуту и 54 секунды
Всё) Ошибку понял) Наверное ты забыл в конце readkey написать. ОГРОМНОЕ тебе спасибо) ! очень выручил)

Добавлено через 7 минут и 1 секунду
там вот что ещё... если ввести например +** то он выведет нету полиндромов (групп), но должно ведь выводится нету групп. А он выводит НЕТ групп только при условии что строка пустая
PM MAIL   Вверх
Guedda
Дата 29.5.2007, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

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



Цитата(Masas @  29.5.2007,  22:49 Найти цитируемый пост)
 в конце readkey написать.

Не ReadKey, а Readln;


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Masas
Дата 30.5.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а какая между ними разницца? smile 
PM MAIL   Вверх
Klin
Дата 30.5.2007, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Masas, исправил, но то как ты сказал. Но прочитав задание немного запутался. Чем разделяются группы? Пробелами? Если воообще ничем - будем писать, придется головой подумать smile

Ну а вот новый код:
Код

uses CRT; { библиотека для очистки эрана }
function FindEnd (mytext: string; mypos: integer): integer;
begin
 FindEnd:=Pos(Chr(32), Copy(mytext, mypos, Length(mytext)));
end;
{--------------------------------------------------------------------}
{ функция нахождения группы букв }
function FindLetter (mytext: string): boolean;
var
 n,temp,code: integer;
begin
 FindLetter:=false;
 for n:=1 to Length(mytext)-1 do begin
  val(mytext[n],temp,code);
  if (code <> 0) then begin FindLetter:=true; n:=Length(mytext)-1; end
 end;
end;
{--------------------------------------------------------------------}
{ функция проверки (является ли группа полиндром }
function FindPol (mytext: string): boolean;
var n: integer;
begin
 for n:=1 to round(Length(mytext)/2) do
  if (mytext[n]<>mytext[Length(mytext)-n]) then FindPol:=false;
end;
{--------------------------------------------------------------------}
var
 text: string[81];
 StartPos: integer;
 ExistPol,ExistLetter: boolean;
begin
 ClrScr; { очистка экрана }
 
 Write('Enter text: '); Readln(text);{ вводим текст }

 if (Length(text)=81) then begin text[81]:=Chr(32) end
 else text:=text+Chr(32); { добавляем в конец пробел }

 StartPos:=1; { поиск с первого символа }

 while FindEnd(text,StartPos)<>0 do begin { до тех пор, пока функция выполняется }
  if (FindLetter(Copy(text,StartPos,FindEnd(text,StartPos)))) then begin 
   { продолжать если буквенная группа }
    ExistLetter:=true; { сообщаем, что буквенная группа есть! }
    if (FindPol(Copy(text,StartPos,FindEnd(text,StartPos)))) then begin
     Writeln('- ',Copy(text,StartPos,FindEnd(text,StartPos)));
     ExistPol:=true;
    end;
  end;
  StartPos:= StartPos + FindEnd (text,StartPos); { следующие значения }
 end;
 if (Length(text)=1) then begin writeln('No Group!') end { нечего там нет :) }
 else if (Not ExistLetter) then begin writeln('No letter Group!') end { нет буквенных групп }
 else if (Not ExistPol) then writeln('No POL Group!'); { нет полиндромов }

 Writeln('The End.'); Readln; { конец }
end.




--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Masas
Дата 2.6.2007, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



неа) я у препода спросил, говорит строка вида: 123*qweewq+*-9rh*dfg т тп, тоесть без разделителей) 
PM MAIL   Вверх
Klin
Дата 2.6.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Придется мне подумать головой smile


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Romkin
Дата 2.6.2007, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот и интересный вопрос: о цифрах в задании ни слова. Они тоже входят в буквы или как? То есть, входят ли они в слово-палиндром или это разделители?
PM ICQ   Вверх
Klin
Дата 2.6.2007, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Romkin, не все так просто. Всего существуют 3 группы: буквы, цифры и знаки. А палиондорами может являтся только группа букв. Реализовать не сложно, но нужно время. 
Masas, сейчас к ЕГЭ готовлюсь, но постараюсь выделить время и вам.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Masas
Дата 5.6.2007, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

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


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

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

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

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


 




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


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

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