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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2012, 17:24   #1
JonDee
Новичок
Джуниор
 
Регистрация: 10.05.2012
Сообщений: 2
Смущение [Pascal] Найти самый короткий палиндром.

Дана строка символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Слова, читающиеся слева на право и справа на лево одинаково будем называть палиндромами(перевертышами). Найти самый короткий палиндром.
Код:
uses crt;
const b=['a'..'z','а'..'я'];
      z=['0'..'9','+','-','*',' ','_'];
var ds:set of char;
    c:char;
    s,s1,s2:string;
    n,i,j,p,g:byte;
begin
clrscr;
writeln('Введите строку из малых английских букв и знаков + - * ');
writeln('длиной до 80 символов, окончание ввода Enter');
s:='';
n:=0;{длина строки}
ds:=b+z;{допустимые символы}
repeat
c:=readkey;{читаем код клавиши}
if c in ds then{если допустимый}
 begin
  n:=n+1;{считаем}
  s:=s+c;{добавляем к строке}
  write(c);{выводим на экран}
 end;
if (c=#13)or(n=80) then writeln;{если Enter или 80, на новую строку}
until (c=#13)or(n=80);{конец ввода}
writeln('Группы букв-палиндромы');
p:=0;{нет палиндромов}
g:=0;{нет групп букв}
i:=1;
while i<=n do{пока не конец строки}
if(s[i] in b)and((i=1)or(s[i-1] in z)) then{если буква и она первая или перед ней знак}
 begin
  g:=1;{есть группы букв}
  s1:='';{слово}
  j:=i;
  while(j<=n)and(s[j] in b) do{пока не конец и не знак}
   begin
    s1:=s1+s[j];{составляем слово}
    j:=j+1;
   end;
  s2:=''; {читаем его с конца}
  for j:=length(s1)downto 1 do
  s2:=s2+s1[j];
  if s2=s1 then{если одинаково}
   begin
    p:=1; {есть палиндромы}
    writeln(s1);{выводим}
   end;
  i:=i+length(s1);{перешагиваем через слово}
 end
else i:=i+1;{если знак, пропускаем}
if g=0 then write('Нет групп букв')
else if p=0 then write('Нет палиндромов');
readln
end.
помогите что бы он выбирал самый маленький палиндром.
JonDee вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пропишите программу в pascal! Пока не сдам прогу- домой не отпустят. Курсантский отпуск короткий, а домой хочется! Brusik Помощь студентам 0 09.07.2011 15:37
три файла, найти самый заполненый [Cи] vinternete Помощь студентам 6 09.07.2011 11:40
масивы найти 2 самый мал эл в массиве bnv Общие вопросы C/C++ 2 11.02.2009 14:24
Тот самый Pascal... Двумерные массивы... Сеня Помощь студентам 21 29.01.2009 00:36