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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2009, 12:41   #1
Dina44
 
Регистрация: 21.06.2009
Сообщений: 3
По умолчанию Паскаль.Обработка строк.

Здравствуйте! Оч прошу помочь.

Дан русский текст.Все слова оканчивающиеся на -онок или -енок представить во множественном числе.Перед буквой Т пишется а или я в зависимости от предыдущей буквы:если шипящая, то А,иначе Я.

Вот мой код.В нем я сделала только проверку если согласная предыдущая суффиксу не шипящая....И то в нем какие-то ошибки. Подскажите хоть чуть-чуть в чем у меня может быть ошибка

Код:
program pr3;
uses crt;
const WG=50;
type tmass=array[1..WG] of string;
var sl,sl2,sl3:tmass; ksl,i:byte; txt:string;
{функция определения букв символа}
function f_bukva(sim:char):boolean;
begin
 if (sim in ['а'..'я']) or (sim in ['А'..'Я']) or (sim in ['a'..'z']) or (sim in ['A'..'Z'])
  then f_bukva:=true else f_bukva:=false;
end;
{Процедура выделения слов}
procedure pr_slova(txt:string;var ksl:byte; var slova:tmass);
var i:byte;
begin
ksl:=1; slova[ksl]:='';
 for i:=1 to length(txt) do
  if f_bukva(txt[i]) then slova[ksl]:=slova[ksl]+txt[i] else if f_bukva(txt[i-1]) then
    begin inc(ksl); slova[ksl]:='';
   end;
end;

begin
writeln('введи исходный текст');readln(txt);
pr_slova(txt,ksl,sl);
for i:=1 to ksl do begin
if (copy(sl[i],length(sl[i])-4,4)='онок') or (copy(sl[i],length(sl[i])-4,4)='енок')
 then if (copy(sl[i],length(sl[i])-5,1)='щ') and (copy(sl[i],length(sl[i])-5,1)='ч')
 then begin  sl2[i]:='ата'; delete(sl[i],length(sl[i])-4,4); sl3[i]:=concat(sl[i],sl2[i]);end;
   writeln('новое слово-',sl3[i]);
end;
end.
Dina44 вне форума Ответить с цитированием
Старый 06.12.2009, 17:00   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

основная ошибка - не контролируете длину строки!!
ну как можно проверить подстроку начинающую с минус чётвёртой позиции, если слово, например, двух или трёхбуквенное!
т.е.
Код:
  if Length(sl[i])>4 then begin
    <тут Ваш код>if (copy(sl[i],length(sl[i])-4,4)='онок') 
            or (copy(sl[i],length(sl[i])-4,4)='енок')
          и т.д.
  end;
дальше я сам код не проверял...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.12.2009, 21:31   #3
Dina44
 
Регистрация: 21.06.2009
Сообщений: 3
По умолчанию

о..спасибо)) это обязательно учту)
Dina44 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль,обработка строк Dina44 Помощь студентам 1 06.12.2009 00:30
обработка строк на Си HoOpe Помощь студентам 35 20.05.2009 19:11
Обработка строк kpactu Помощь студентам 0 12.05.2009 22:43
обработка строк densan Общие вопросы Delphi 3 26.08.2008 11:11