Консультация № 143742
12.09.2008, 15:51
0.00 руб.
0 2 1
Уважаемые эксперты решите пожалуйста мне эти задачи.
1.Удалить в словах из каждой пары сдвоенных букв одну.
2.Напечатать слова, перед которыми в последовательности находятся только слова, рас-положенные по алфавиту раньше.
3.Определить, имеется ли в последовательности хотя бы одна пара слов, обратных друг другу (палиндромов). С уважением Дмитрий

Обсуждение

Неизвестный
12.09.2008, 23:24
общий
3) Про палиндромы уже много программ здесь писалось. Поищите, пожалуйста, не гоже повторяться
2) Все буквы раньше? Или достаточно части?
1) Вот так можно удалить все сдвоенные, строенные
Код:
 var
s: String;
i: Integer;
BEGIN
WriteLn('Введите строку:');
ReadLn(s);
i:=1;
while i < length(s) do begin
if s[i] = s[i+1] then delete(s,i,1)
else inc(i)
end;
WriteLn(s);
END.

Если i-тый символ совпадает с i+1-ым, то удаляем i-тый, иначе увеличиваем i. И так делаем до тех пор, пока i меньше длины строки
давно
Профессор
401888
1232
13.09.2008, 09:17
общий
это ответ
Здравствуйте, Пушкарёв Дмитрий Сергеевич!
Задача 2.
Считаем что последовательность представлена словами, составленными из букв одного алфавита(русского или латинского) в одном регистре и разделенными пробелами. Если это не так, нужно будет в программе пробел заменить на другой разделитель, а буквы привести в один регистр. Вообще цель этой задачи не заниматься устранением разных препон, возникающих при обработке строк, а понять, как программа расставляет слова по алфавиту. А делается это благодаря свойству сравнения строк посимвольно, когда S1>S2, если очередной символ в строке S1 имеет код в таблице ANSII больше, или тоже самое, что буква находится дальше по алфавиту(имеется в виду либо русская, либо латинская транскрипция.).
Код в приложении.
Задача 3.
Слова обратные друг другу, это не палиндромы. Палиндром, слово читающееся одинаково хоть с начала, хоть с конца, например КАЗАК.
Обратные друг другу слова, например РОТ-ТОР, это разновидность анаграммы, не помню как называется.
Требования для исходной строки те же, что и в предыдущей задаче.


Приложение:
№2.
var s,s1,s2:string;
i,k:integer;
begin
clrscr;
writeln('Vvedite posledovatelnost slov:');
readln(s); {исходная последовательность}
s:=s+' '; {добавляем в конец пробел}
s1:=copy(s,1,pos(' ',s)-1); {запоминаем первое слово, его не печатаем}
k:=0; {заводим счетчик совпадений}
for i:=length(s) downto 1 do {движемся по строке от конца к началу}
begin
s2:=copy(s,1,pos(' ',s)-1);{запоминаем очередное слово}
if s2>s1 then {если оно по алфавиту дальше, то}
begin
writeln(s2);{печатаем его}
s1:=s2;{запоминаем его как очередное наибольшее}
k:=k+1;{считаем}
end;
delete(s,1,pos(' ',s));{удаляем использованное слово}
end;
if k=0 then writeln('Takih slov net!');{если совпадений нет, выводим сообщение}
readln
end.
№3.
uses crt;
var
s:string;
m:array[1..10]of string;
i,n,k,j:integer;
Function Obrat(str:string):string;{функция для "переворота" слов}
var st:string;
j:integer;
begin
st:='';
for j:=length(str) downto 1 do
st:=st+str[j];
Obrat:=st;
end;

begin
clrscr;
writeln('Vvedite posledovatelnost slov:');
readln(s);
n:=1;
for i:=1 to length(s) do {преобразуем строку в массаив слов}
if s[i]=' ' then n:=n+1
else m[n]:=m[n]+s[i];
k:=0;
for i:=1 to n-1 do
for j:=i to n do
if m[i]=Obrat(m[j]) then {если есть слова, обратные друг другу, то}
begin
writeln('Takaja para est!'); {выводим сообщение}
readln;
k:=k+1;{считаем}
exit;{выходим из программы}
end;
if k=0 then writeln('Takoj pary net!');{если нет, сообщаем}
readln
end.

Форма ответа