Показать сообщение отдельно
Старый 26.11.2011, 20:06   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Сова Посмотреть сообщение
Пользователь вводит предложение, которое помимо слов содержит целые числа, принадлежащие диапазону от 1 до 500. Известно, что последнее число во введенном предложении – это количество дней. Найти данное число и перевести его к виду недели/дни. Заменить найденное число в исходной строке на выражение вида ’HH недель MM дней’ с учетом корректных окончаний выводимых по-русски слов. Например, было ’прошло 22 после’, стало ’прошло 3 недели 1 день после’.
Вот, ловите:
Код:
Const
 Nmb=['0','1','2','3','4','5','6','7','8','9'];
Var
 S,Sn,Days,Week,Day:String;
 i,W,D,mW,mN:Byte;
 Code:Integer;
 N:Word;

BEGIN
 Writeln('Enter the string:');
 Readln(S);
 i:=0;
 REPEAT
  Repeat
   Inc(i);
  Until (S[i] in Nmb) or (i=Length(S));
  If i<Length(S) then
   begin
    Sn:='';
    Dec(i);
    repeat
     Inc(i);
     If (S[i] in Nmb) then Sn:=Sn+S[i];
    until (Not(S[i] in Nmb)) or (i=Length(S));
    If i<Length(S) then Dec(i);
   end;
 UNTIL i=Length(S);
 VAL(Sn,N,Code);
 W:=N div 7;
 D:=N mod 7;
 mW:=W mod 10;
 mN:=N mod 10;
 If (N>4) and (N<21) then
  Days:='дней'
 else
  Case mN of
   0,5,6,7,8,9: Days:='дней';
   1          : Days:='день';
   else Days:='дня';
  end;
 If (W>4) and (W<21) then
  Week:='недель'
 else
  Case mW of
   0,5,6,7,8,9: Week:='недель';
   1          : Week:='неделя';
   else Week:='недели';
  end;
 Case D of
  0,5,6: Day:='дней';
  1    : Day:='день';
  2,3,4: Day:='дня';
 end;
 Writeln(N,' '+Days+' или ',W,' '+Week+' и ',D,' '+Day);
 Readln
END.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070