Помощь - Поиск - Пользователи - Календарь
Полная версия: строки
Форум «Всё о Паскале» > 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.


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