profile

Опубликовано 6 лет назад по предмету Информатика от aksinenkva

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

  1. Ответ
    Ответ дан mefody66
    Во-первых, каков формат года? Должно быть 4 знака, то есть гггг = [0001, 2020]
    Во-вторых, каков формат самой даты? Это число без разделителей? ддммгггг?
    Или с разделителями - точками, что более естественно? дд.мм.гггг?
    Или с разделителями - слешами, по-американски? дд/мм/гггг?
    Или совсем по-американски, месяц впереди дня? мм/дд/гггг?
    Или без разделителей, но в обратном порядке? ггггммдд? Я и такое видел!
    Будем считать, что это число без разделителей, 1 вариант, ддммгггг. 8 цифр.
    Тогда проверка должна быть примерно такой:
    Пишу на бейсике, на паскаль сами переводите.
    Poz1 = 1: Poz2 = 0
    Do 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 ' Устанавливаем начало нового слова
    Loop
    End Sub

    Sub 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 If
    If Year < 10 Then
         strYear = "000" & strYear
    ElseIf Year < 100 Then
         strYear = "00" & strYear
    ElseIf Year < 1000 Then
         strYear = "0" & strYear
    End If
    Stroka = Left(Stroka, Poz1) & strDay & strMonth & strYear & Mid(Stroka, Poz2)
    End Sub
    Как видите, программа оказалась весьма непростой.

Войдите или зарегистрируйтесь, чтобы добавить ответ или свой вопрос на сайт


Другие вопросы
Шалаш
Другие предметы - 1 год назад

Пытался написать сочинение по егэ по русскому не могу понять как,написать хотелось бы пример увидеть по этому тексту. (1)в солнечный день я приехал в старинный посёлок гусь-железный полюбоваться на озеро, искупаться, поплавать в нём. (2)доехал до речки, поднялся на бугор, глянул и... (3)о ужас! (4)нет озера. (5)по широкой впадине, окаймлённой дальней опушкой бывшего прибрежного леса, текла, извиваясь, узкая, местами пересыхающая речушка. (6)и старинной плотины, высокой, кирпичной, с чугунными шлюзами, в тёмных казематах которой, по преданию, разбойная братия чеканила фальшивые деньги, тоже не было. (7)шлюзы, регулировавшие сток, убрали, засыпали – и затянуло озеро тиной да ряской. (8)на месте этом проходила теперь обыкновенная дорожная насыпь; дорога делала крутой поворот, огибала белый двухэтажный барский дом, похожий на длинную казарму, заломанный чахлый парк и снова вырывалась на простор. (9)главный врач детского санатория, размещённого в барском доме, показал мне давние фотографии этого исчезнувшего озера, высокой кирпичной плотины, торговых рядов с доисторическими портиками, он водил по внутренним покоям огромного дома, заново перегороженного, приспособленного для иных надобностей. (10)переделка и ремонт когда-то выполнены были наспех: половицы скрипят и хлябают под ногами, двери перекошены, в оконные рамы задувает свежий ветерок. – (11)сохранилась хоть одна комната от давнего времени? – спросил я. – (12)с полами, дверями и окнами? – (13)полы, двери и прочее – всё порастащили. (14)а вот стены и потолок сохранились в одном месте. (15)идёмте, покажу. (16)он ввёл меня в зал, кажется, в теперешнюю столовую, с белыми строгими пилястрами, с лепным потолком. – (17)полы здесь были, говорят, из наборного паркета, двери из орехового дерева с бронзовой инкрустацией, люстра позолоченная висела. – (18)жалко, – говорю, – что не сохранилось всё это. – (19)о чём жалеть? (20)архитектурной ценности этот дом не имеет, – сказал доктор. (21)я взглянул на него с удивлением. (22)не шутит ли? (23)нет, смотрит прямо в глаза, даже с каким-то вызовом. (24)задиристый хохолок на лысеющем лбу топорщится, как петушиный гребешок. – (25)как не имеет ценности? – говорю. – (26)это ж дом! (27)большой, крепкий, красивый, полный когда-то дорогого убранства. – (28)барские покои, и больше ничего. (29)таких в россии тысячи. – (30)так ведь и народу нашему пригодились бы такие покои. – (31)людям нашим нужны другие ценности. (32)вы ещё храм пожалейте. (33)теперь это модно. – (34)а что, не жаль храма? – (35)и храм цены не имеет. (36)архитектура путаная. (37)специалисты приезжали, говорят – эклектика. (38)потом, правда, всё-таки восстановили храм этот. – (39)и парка не жаль? – (40)парк – природа, и больше ничего. (41)в одном месте убавилось, в другом прибавилось. (42)в любую минуту его насадить можно. (43)мы стояли возле окна, внизу под нами раскинулся обширный посёлок. – (44)смотрите, – говорю, – сколько домов. (45)приличные дома, большинство новых. – (46)здесь живёт в основном торговый люд, кто чем торгует, работы хватает. – (47)вот и хорошо, – говорю. – (48)увеличился посёлок за полвека? – (49)увеличился. – (50)а теперь подумайте вот о чём: раньше, ну хоть ещё в тридцатые годы, здесь меньше жило народу, но успевали не только свои рабочие дела делать. (51)ещё и плотину чинили, озеро в берегах держали и парк обихаживали. (52)а теперь что ж, времени на это не хватает или желания нет? – (53)а это, – говорит, – знакомый мотив. (54)это всё ваше писательское ворчание. (55)что озеро спустили – это вы заметили. (56)что над каждой крышей телевизионная тарелка поставлена – этого вы не замечаете. (57)спорить с ним трудно, почти невозможно: доводы ваши он не слушает, только глаза навострит, тряхнёт головой и чешет без запинки, как будто доклад читает… – (58)есть писатели-патриоты. (59)их книги читают, фильмы по книжкам их смотрят наравне с футболом и хоккеем, потому что яркие, незабываемые образы. (60)а есть писатели-ворчуны, которые всем недовольны. (61)и всё им что-то надо. (62)вот одного такого лечили, а он нас же, медиков, опозорил в своём последнем сочинении. (63)за что, спрашивается? (64)да, не раз вспомянешь в дальней дороге бессмертного писателя земли русской николая васильевича гоголя: «россия такая уж страна – стоит высмеять одного околоточного надзирателя, как вся полиция обидится».