profile
Размещено 4 года назад по предмету Информатика от 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
    Как видите, программа оказалась весьма непростой.

Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 5 лет назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса 1. укажите личное местоимение: 1) некто 2) вас 3) ни с кем 4) собой 2. укажите относительное местоимение: 1) кто-либо 2) некоторый 3) кто 4) нам 3. укажите вопросительное местоимение: 1) кем-нибудь 2) кем 3) себе 4) никакой 4. укажите определительное местоимение: 1) наш 2) который 3) некий 4) каждый 5. укажите возвратное местоимение: 1) свой 2) чей 3) сам 4) себя 6. найдите указательное местоимение: 1) твой 2) какой 3) тот 4) их 7. найдите притяжательное местоимение: 1) самый 2) моего 3) иной 4) ничей 8. укажите неопределённое местоимение: 1) весь 2) какой-нибудь 3) любой 4) этот 9. укажите вопросительное местоимение: 1) сколько 2) кое-что 3) она 4) нами 10. в каком варианте ответа выделенное слово является притяжательным местоимением? 1) увидел их 2) её нет дома 3) её тетрадь 4) их не спросили

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.