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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2009, 20:24   #1
Таня.Ку
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 28
По умолчанию Символы и строки(ПАСКАЛЬ)

Дана строка,состоящая из русских слов,разделенных пробелами (одним или несколькими). Преобразовать каждое слово в строке,удалив из него все последующие1|предыдущие2 вхождения первой1|последней2 буквы этого слова (количество пробелов между словами не изменять).
Таня.Ку вне форума Ответить с цитированием
Старый 14.12.2009, 21:44   #2
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

на delphi или на turbo pascal писать?
Alex_FF вне форума Ответить с цитированием
Старый 14.12.2009, 21:59   #3
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

для первого случая:
Код:
const
  Quantity = 100;
  Alphabet = ['А'..'Я', 'а'..'п', 'р'..'я'];

function Change(S: String): String;
var
  I: Integer;
  FirstLetter: Char;
  Word: String;
begin
  FirstLetter := S[1];
  Word := FirstLetter;
  for I := 2 to Length(S) do
    if S[I] <> FirstLetter then Word := Word + S[I];
  Change := Word;
end;

var
  I, J, N: Integer;
  S, Word: String;
begin
  WriteLn('Введите строку');
  ReadLn(S);
  I := 1;
  WriteLn('Результат:');
  while I <= Length(S) do
  begin
    if S[I] in Alphabet then
    begin
      Word := '';
      while (S[I] in Alphabet) and (I <= Length(S)) do
      begin
        Word := Word + S[I];
        Inc(I);
      end;
      Write(Change(Word), S[I]);
    end
    else Write(S[I]);
    Inc(I);
  end;
  ReadLn;
  ReadLn;
end.
для второго случая нужно переписать функцию Change следующим образом:
Код:
function Change(S: String): String;
var
  I: Integer;
  LastLetter: Char;
  Word: String;
begin
  LastLetter := S[Length(S)];
  Word := LastLetter;
  for I := Length(S) - 1 downto 1 do
    if S[I] <> LastLetter then Word := Concat(S[I], Word);
  Change := Word;
end;
P. S. Вообще в функциях Change нужно сравнивать буквы в верхнем регистре, но т. к. в Turbo Pascal функция Upcase определена только для английских букв, я это не сделал. В delphi с этим проблем нет, потому и спрашивал, на чем писать. Ну если очень нужно Upcase для Trubo Pascal, то вот она:
Код:
function UpcaseLetter(C: Char): Char;
const
  S1 = ['а'..'п'];
  S2 = ['р'..'я'];
  S3 = ['a'..'z'];
begin
  if C in S1 then UpcaseLetter := Chr(Ord(C) - Ord('а') + Ord('А'))
  else if C in S2 then UpcaseLetter := Chr(Ord(C) - Ord('р') + Ord('Р'))
  else if C in S3 then UpcaseLetter := Upcase(C)
  else UpcaseLetter := C;
end;
Alex_FF вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
строки и символы AlinAA Фриланс 3 17.05.2018 14:08
Задачи на символы и строки Alabay Паскаль, Turbo Pascal, PascalABC.NET 3 11.01.2009 21:30
Строки и символы 111111 Общие вопросы C/C++ 2 16.12.2008 18:18
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27