Помощь - Поиск - Пользователи - Календарь
Полная версия: строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
RIDDICK
Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами – запятая или не менее одного пробела, за последним словом - точка.

Напечатать те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству:
- буквы слова упорядочены по алфавиту;
Напечатать те слова последовательности, которые отличны от последнего слова, предварительно преобразовав каждое из них по следующему правилу:
- перенести последнюю букву в начало слова.

помогите решить... горю... стринги еще не прошли ((
Altair
разбиваем тест на слова.
FAQ: разбиение строки на слова
затем проходим массив и печатаемнужные элементы.
RIDDICK
это понятно... а как определить, что буквы в слове по алфав. порядку ?
hiv
Попробуй нечто вроде этого:
var i: integer;
s: string;
boy: boolean;

. . . . . .

i:=2;
if length(s)>1 then boy:=(ord(s[i])=(ord(s[i-1])+1))
else boy:=true;
while (i<length(s)) and boy do
begin
inc(i);
boy:=(ord(s[i])=(ord(s[i-1])+1));
end;
if boy then writeln('Буквы в слове расположены по алфавиту! ');
RIDDICK
это нечто дает тру только если слово типа "абв"... но никак не "абг" )
RIDDICK
далее, я не совсем понял про PChar, без которого тут никак имхо .
hiv
Чтобы учесть
Цитата
это нечто дает тру только если слово типа "абв"... но никак не "абг"

Тогда замени это:
if length(s)>1 then boy:=(ord(s[i])=(ord(s[i-1])+1))

на вот это:
if length(s)>1 then boy:=(ord(s[i])>ord(s[i-1]))


А чтобы проблем не было с верхним и нижним регистрами, переведи всю строку в один регистр перед вычислениями.
volvo
Цитата(RIDDICK @ 12.05.05 9:12)
я не совсем понял про PChar, без которого тут никак имхо.

Можно пояснить, с какой стороны тут никак не обойтись без PChar?
RIDDICK
2volvo

вводимая строка иметь будет длину около 400 символов
volvo
Ну и что? Обязятельно прикручивать PChar? А у тебя где-то в условии сказано, что дана СТРОКА содержащая ... ? У тебя речь идет о ПОСЛЕДОВАТЕЛЬНОСТИ, не так ли? Вот и используй
Var
sequence: array[1 .. 400] of char;

И не нужен тебе PChar, если вы еще даже String не проходили, то о чем-то более серьезном вообще разговора нет. Ну, а если речь о том, что символы ВВОДЯТСЯ с клавиатуры, то почему бы не вводить их сразу в массив слов (минуя буферную переменную)?
RIDDICK
как бы объяснить... лектор отстает на пару лекций от учебной практики )

" между соседними словами – запятая или не менее одного пробела, за последним словом - точка." - поэтому надо одной строкой (((
hiv
Цитата
Дана последовательность, содержащая от 2 до 50 слов...

Как собираетесь ее задавать? Читать из файла или с клавиатуры вводить?
RIDDICK
с клавиатуры
hiv
Ввод строки:
uses Crt;

var q :char;
count :integer; {количество вводимых символов}
s :array[1..400] of char; {обходимся без PChar}

begin
count:=0;
repeat
q:=readkey;
if ord(q)<>13 then
begin
inc(count);
ss[count]:=q;
end;
until ord(q)=13;

. . . . . .
end.


Имей в виду, при вводе редактировать нельзя!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.