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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2008, 16:53   #11
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

1.Определение палиндрома можно еще сделать так:
Код:
Function Perev(str:string):boolean;
var 
     s:    string;
     k:    integer;
begin
    s:='';
    for k:=length(str) downto 1 do s:=s+str[k];//если считать с конца и получится то же
    if s=str  then Perev:=True   //то палиндром
    else Perev:=False;
end;
2. Алгоритм удаления палиндромов из строки.
Код:
n:=1;
for i:=1 to length(s) do
begin
if (s[i]=' ') or (i=length(s)) then //если пробел или конец строки
    begin
     if Perev(Copy(s,n,i-n)) then // копируем из строки первое слово и если слово перевертыш
     write(f,copy(s,n,i-n),'  ');//выводим новую строку без палиндромов
     n:=i+1; //переходим к следующему слову
end;
puporev вне форума Ответить с цитированием
Старый 26.05.2008, 17:11   #12
1234
Заблокирован
 
Регистрация: 09.11.2007
Сообщений: 97
По умолчанию

Спасибо! Сейчас пытаюсь все вместе собрать
А что такое f в (f,copy(s,n,i-n) ?
чтение в файл? я просто с клавиатуры строку ввожу..


вот так вот получилось, но новую строку не выводит:


Код:
program pal;
uses crt;
var
str,s:string;
i,n:integer;

Function Perev(str:string):boolean;
var
     s:    string;
     k:    integer;
begin
    s:='';
    for k:=length(str) downto 1 do s:=s+str[k];
    if s=str  then Perev:=True
    else Perev:=False;
end;

begin
writeln('string:');
readln(str);

n:=1;
for i:=1 to length(s) do
begin
if (s[i]=' ') or (i=length(s)) then
    begin
     if Perev(Copy(s,n,i-n)) then
     writeln(copy(s,n,i-n),'  ');
     readln;
     n:=i+1;
end;
end;
end.

Последний раз редактировалось 1234; 26.05.2008 в 17:14.
1234 вне форума Ответить с цитированием
Старый 26.05.2008, 17:19   #13
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
readln(str);
У тебя везде перемення s, а вводишь str. Конечно ничего не выйдет.
И еще. Лучше выводить как я написал, это все-таки строка,, зачем же ее столбиком.
Цитата:
write(f,copy(s,n,i-n),' ');
Анасчет F вы правы, кусок из программы, забыл убрать вывод в файл

Последний раз редактировалось puporev; 26.05.2008 в 17:22.
puporev вне форума Ответить с цитированием
Старый 26.05.2008, 17:38   #14
1234
Заблокирован
 
Регистрация: 09.11.2007
Сообщений: 97
По умолчанию

Работает только для такого варианта asddsaH
В этом случае удаляется последняя буква
А с таким вариантом уже не работает 123321
может я неправильную строку задаю?
1234 вне форума Ответить с цитированием
Старый 26.05.2008, 17:46   #15
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
Нахождение слов-палиндромов (перевертышей),
Это в задании для кого написано? Слова в тексте это группы символов, разделенных пробелами(как правило).
Непишите "Ехал казак домой" и посмотрите, что получится.
puporev вне форума Ответить с цитированием
Старый 26.05.2008, 17:58   #16
1234
Заблокирован
 
Регистрация: 09.11.2007
Сообщений: 97
По умолчанию

Код:
program pal;
uses crt;
var
str,s:string;
i,n:integer;

Function Perev(str:string):boolean;
var
     s:    string;
     k:    integer;
begin
    s:='';
    for k:=length(str) downto 1 do s:=s+str[k];
    if s=str  then begin
     Perev:=True;
    writeln('yes');
    end
    else
     Perev:=False;
    writeln('no');
end;

begin
writeln('string:');
readln(s);

n:=1;
for i:=1 to length(s) do
begin
if (s[i]=' ') or (i=length(s)) then
    begin
     if Perev(Copy(s,n,i-n)) then
     write(copy(s,n,i-n),'  ');
     readln;
     n:=i+1;
end;
end;
end.
Вот код. может я где-то ошибаюсь, но не получается верная строка
Приведите пример входной строки, из которой что-либо удалится
1234 вне форума Ответить с цитированием
Старый 26.05.2008, 19:01   #17
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Извини, поторопился и сделал две ошибки: не те слова удалял и вместо
to length(s)+1 do написал to length(s) do
Вот нормальный код:
Код:
program pal;   
uses crt;   
var  
str,s:string;   
i,n:integer;   
Function Perev(str:string):boolean;
var  
     s:    string;   
     k:    integer;   
begin  
    s:='';
    for k:=length(str) downto 1 do s:=s+str[k];   
    if s=str  then begin  
     Perev:=True;   
    end
    else  
    Perev:=False;
end;
  
begin
clrscr;
writeln('string:');   
readln(s);   
n:=1;
for i:=1 to length(s)+1 do
begin
if (s[i]=' ') or (i=length(s)+1)
 then
 begin
  if not Perev(Copy(s,n,i-n)) then
      write(copy(s,n,i-n),' ');
      n:=i+1;
    end;
end;
readln;
end.
Но это как я понимаю только наметки программы, тут еще кое-что делать надо.
puporev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана строка, состоящая из нескольких слов. Найти количество слов, которые содержат хотя бы одну букву "А" Mashaa Помощь студентам 13 09.12.2009 13:28
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49
На чем пишутся стратегии типа "Казаков" и "Эпохи империи" Tayfun Свободное общение 3 26.06.2007 20:27