Специалист
Регистрация: 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.
|