• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Строковой тип, Pascal

Сова

Ученик
Регистрация
28 Окт 2011
Сообщения
10
Реакции
0
Баллы
0
Строковой тип, Pascal

Товарищи, прошу, помогите. С этим строковым типом только все хуже...:tehnari_ru_1019:


Пользователь вводит предложение, которое помимо слов содержит целые числа, принадлежащие диапазону от 1 до 500. Известно, что последнее число во введенном предложении – это количество дней. Найти данное число и перевести его к виду недели/дни.
Заменить найденное число в исходной строке на выражение вида ’HH недель MM дней’ с учетом корректных окончаний выводимых по-русски слов. Например, было ’прошло 22 после’, стало ’прошло 3 недели 1 день после’.

Составить программу, которая выделяет отдельные слова и числа из введенной пользователем строки. Словом считается последовательность букв, разделяемых одним или несколькими пробелами или знаками препинания. Числом считается последовательность цифр, разделяемых одним или несколькими пробелами, которая может включать точку в качестве разделителя целой и дробной части и знак минус, стоящий в начале.
Слова поместить в массив слов, числа поместить массив чисел. Найти в массивах самое длинное слово и минимальное число.
Вывести на экран слова в столбик. Например, если исходная строка ’Длина пути равна 1 метр.’, то на экран будет выведено:
Д п р м
л у а е
и т в т
н и н р
а а а
 
Сейчас попробую первую поковырять. Со второй - не знаю: уж очень много возни.
 
Пользователь вводит предложение, которое помимо слов содержит целые числа, принадлежащие диапазону от 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.
 
Спасибо. Придется еще разбираться...
 
Назад
Сверху