38

Дана строка, в которой содержится осмысленное текстовое сообщение. Слова…

09 марта 2023

Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются В заданном формате дд- целое число из диапазона от 1 до 31, мм — целое число из диапазона от 1 до 12, а гг — целое число из диапазона от 1 до 2020 (если какая-то часть формата нарушена, то данная подстрока в качестве даты не рассматривается.) Заменить каждую дату сообщения на дату следующего дня. Написать программу на Паскале. Сроочноо. Поожалуйста…

категория: информатика



52

Во-первых, каков формат года? Должно быть 4 знака, то есть гг=[0001, 2020]Во-вторых, каков формат самой даты? Это число без разделителей? Ддммгг? Или с разделителями — точками, что более естественно? Дд. Мм. Ггг? Или с разделителями — слешами, по-американски? Дд/мм/гг? Или совсем по-американски, месяц впереди дня? Мм/дд/гг? Или без разделителей, но в обратном порядке? Гггммдд? Я и такое видел! Будем считать, что это число без разделителей, 1 вариант, ддммгг. 8 цифр. Тогда проверка должна быть примерно такой: Пишу на бейсике, на паскаль сами переводите.Poz1=1: Poz2=0Do While Poz1 > 0 ' Цикл, пока в строке встречаются пробелы Poz2=InStr (Poz1, Stroka, ") ' Ищем пробел в строке If Poz2 > 0 Then ' Если нашли пробел — это конец слова If Poz2 — Poz1=8 Then ' Если длина слова 8 знаков Flag=True ' Признак, что это 8 цифр, устанавливаем в истину For i=1 To 8 If Chr (Mid (Stroka, Poz1+i — 1, 1) < & H30 Or _ Chr (Mid (Stroka, Poz1+i — 1, 1) > & H39 Then Flag=False ' Какой-то из знаков оказался НЕ цифрой End If Next i If Flag=True Then ' Если это все же 8 цифр, то проверяем, дата ли это Day=Val (Mid (Stroka, Poz1, 2) Month=Val (Mid (Stroka, Poz1+2, 2) Year=Val (Mid (Stroka, Poz1+4, 4) If (Day >=1) And (Day <= 31) And (Month >=1) And (Month <= 12) _ And (Year >=1) And (Year <= 2020) Then ' Если это ДАТА Call ChangeDate (Day, Month, Year) ' Вызываем п/п замены даты End If End If End If Else ' Если не нашли пробел — это было последнее слово Poz2=Len (Stroka) ' Устанавливаем Poz2 на конец строки If Poz2 — Poz1=8 Then ' Если длина слова 8 знаков Flag=True ' Признак, что это 8 цифр, устанавливаем в истину For i=1 To 8 If Chr (Mid (Stroka, Poz1+i — 1, 1) < & H30 Or _ Chr (Mid (Stroka, Poz1+i — 1, 1) > & H39 Then Flag=False ' Какой-то из знаков оказался НЕ цифрой End If Next i If Flag=True Then ' Если это все же 8 цифр, то проверяем, дата ли это Day=Val (Mid (Stroka, Poz1, 2) Month=Val (Mid (Stroka, Poz1+2, 2) Year=Val (Mid (Stroka, Poz1+4, 4) If (Day >=1) And (Day <= 31) And (Month >=1) And (Month <= 12) _ And (Year >=1) And (Year <= 2020) Then ' Если это ДАТА Call ChangeDate (Day, Month, Year) ' Вызываем п/п замены даты End If End If End If End If Poz1=Poz2 ' Устанавливаем начало нового словаLoopEnd SubSub ChangeDate () If (Day=31) And (Month=12) Then ' Если это было 31 декабря Year=Year+1 ' То ставим 1 января следующего года strDay="01": strMounth="01": strYear=Trim (Str (Year) ElseIf (Day=31) And (Month=1) Then ' 31 января strDay="01": strMounth="02": strYear=Trim (Str (Year) ElseIf (Day=28) And (Month=2) And (Year Mod 4 <> 0) Then ' 28 февраля strDay="01": strMounth="03": strYear=Trim (Str (Year) ElseIf (Day=29) And (Month=2) And (Year Mod 4=0) Then ' 29 февраля strDay="01": strMounth="03": strYear=Trim (Str (Year) ElseIf (Day=31) And (Month=3) Then ' 31 марта strDay="01": strMounth="04": strYear=Trim (Str (Year) ElseIf (Day=30) And (Month=4) Then ' 30 апреля strDay="01": strMounth="05": strYear=Trim (Str (Year) ElseIf (Day=31) And (Month=5) Then ' 31 мая strDay="01": strMounth="06": strYear=Trim (Str (Year) ElseIf (Day=30) And (Month=6) Then ' 30 июня strDay="01": strMounth="07": strYear=Trim (Str (Year) ElseIf (Day=31) And (Month=7) Then ' 31 июля strDay="01": strMounth="08": strYear=Trim (Str (Year) ElseIf (Day=31) And (Month=8) Then ' 31 августа strDay="01": strMounth="09": strYear=Trim (Str (Year) ElseIf (Day=30) And (Month=9) Then ' 30 сентября strDay="01": strMounth="10": strYear=Trim (Str (Year) ElseIf (Day=31) And (Month=10) Then ' 31 октября strDay="01": strMounth="11": strYear=Trim (Str (Year) ElseIf (Day=30) And (Month=11) Then ' 30 ноября strDay="01": strMounth="12": strYear=Trim (Str (Year) Else ' Любой другой день Day=Day+1 ' Ставим следующий день If (Day < 10) Then strDay="0" & Trim (Str (Day) Else strDay=Trim (Str (Day) If (Mounth < 10) Then strMounth="0" & Trim (Str (Mounth) Else strMounth=Trim (Str (Mounth) End IfIf Year < 10 Then strYear="000" & strYear ElseIf Year < 100 Then strYear="00" & strYear ElseIf Year < 1000 Then strYear="0" & strYear End IfStroka=Left (Stroka, Poz1) & strDay & strMonth & strYear & Mid (Stroka, Poz2) End SubКак видите, программа оказалась весьма непростой.

Знаете ответ?


Есть интересный вопрос? Задайте его нашему сообществу, у нас наверняка найдется ответ!
Делитесь опытом и знаниями, зарабатывайте награды и репутацию, заводите новых интересных друзей!
Задавайте интересные вопросы, давайте качественные ответы и зарабатывайте деньги. Подробнее...