Страницы: Пред. 1 2
RSS
Проверка существования даты, обучение с 0
 
А #11?
Скажи мне, кудесник, любимец ба’гов...
 
Условие такое, что три числа уже даны. ЛЮБЫЕ.
Т.е. МОЖНО задать, например,  -28 и  658 и 12564.
И только после проверки всех трёх чисел выдаётся результат, YES or NO.
Пока же вижу что есть ограничения на ввод каждого числа. т.е. не даёт ввести день 32, к примеру, или месяц 37.
 
Цитата
Georgetta Monson написал:
И только после проверки всех трёх чисел выдаётся результат, YES or NO.
Надеюсь, вы в состоянии скорректировать приведенные коды под это условие?
Скажи мне, кудесник, любимец ба’гов...
 
Цитата
_Boroda_ написал: Владимир, а 31 апреля?
Соответствует заданию, а что? Мы же помогаем с заданием, а не с соответствием календарю.
 
Пробую идти в этом направлении. Опять с февралём проблема.
Код
Sub homework029()
          
          Dim a As Integer, b As Integer, c As Integer
          Dim d As Integer, m As Integer, y As Integer
            
            a = InputBox("Number 1")
            Cells(1, 1) = a
            b = InputBox("Number 2")
            Cells(1, 2) = b
            c = InputBox("Number 3")
            Cells(1, 3) = c
            
        'прописываем дни
         If a >= 1 And a < 32 Then
         d = a
         Else: d = 0
         End If
        'прописываем месяцы
         If b >= 1 And b < 12 Then
         m = b
         Else: b = 0
         End If
         'прописываем месяцы
         If c >= 1 And c <= 9999 Then
         c = y
         Else: y = 0
         End If

         'прописываем февраль (затык здесь)
         If b = 2 Then
         d >1 and d <29
         End If
         
         'идея такая, что если сумма d+m+y=0, то ответ NO. иначе YES
         
                
End Sub
Изменено: Georgetta Monson - 04.10.2022 13:21:15
 
Цитата
написал:
Надеюсь, вы в состоянии скорректировать приведенные коды под это условие?
Вот пытаюсь, исходя из ваших предложений.
 
Цитата
ZVI написал:
Соответствует заданию
Разве? Задание "Вывести 'yes, если такая дата существует ". Ограничение только на февраль - 29 февраля не существует вообще по условию. На остальные даты никаких условий нет, поэтому 31 апреля должно давать No - такой даты нет
Скажи мне, кудесник, любимец ба’гов...
 
Цитата
написал:
Цитата
ZVI написал:
Соответствует заданию
Разве? Задание "Вывести 'yes, если такая дата существует ". Ограничение только на февраль - 29 февраля не существует вообще по условию. На остальные даты никаких условий нет, поэтому 31 апреля должно давать No - такой даты нет
В коде ZVI не даёт вводить "неправильные" числа, сразу сообщает об ошибке ввода. В задании пользователь может ввести что угодно.

Пробую так, всё равно неверно.
Код
Sub homework029()
          
          Dim a As Integer, b As Integer, c As Integer
          Dim d As Integer, m As Integer, y As Integer, x As Integer
            
            a = InputBox("Number 1")
            Cells(1, 1) = a
            b = InputBox("Number 2")
            Cells(1, 2) = b
            c = InputBox("Number 3")
            Cells(1, 3) = c
            
        'дни
         If a >= 1 And a < 32 Then
         d = a
         Else: d = 0
         End If
        'месяцы
         If b >= 1 And b < 12 Then
         m = b
         Else: b = 0
         End If
         'годы
         If c >= 1 And c <= 9999 Then
         c = y
         Else: y = 0
         End If

         'проверка февраля
         If b = 2 Then
            If a <= 29 Then
            m = b
            Else
            End If
            m = 0
         End If
         
         'если сумма  d+m+y=0, то вывести NO
         x = d + m + y
         If x = 0 Then
         MsgBox ("NO")
         Else: MsgBox ("YES")
         End If
                
End Sub
Всё равно не работает. При вводе второго числа "14" в итоге мне выдал YES, хотя не бывает месяца 14.
 
Код
Sub homework029()
  Dim a As Integer, b As Integer, c As Integer
  Dim d As Boolean, m As Boolean, y As Boolean
  a = InputBox("День")
  Cells(1, 1) = a
  b = InputBox("Месяц")
  Cells(1, 2) = b
  c = InputBox("Год")
  Cells(1, 3) = c
   'прописываем год
   y = c >= 1 And c <= 9999
   'прописываем месяцы
   m = b >= 1 And b < 12
   'прописываем февраль (затык здесь)
   'прописываем дни
   d = a >= 1
   d = d And a < 32
   If b = 2 Then
     d = d And a < 30
     If c Mod 4 Then d = d And a < 29
   End If
   If d And m And y Then
     MsgBox "Ok"
   Else
     MsgBox "День: " & IIf(Not d, "not!  ", "") & "Ok" & vbLf & _
     "Месяц: " & IIf(Not m, "not!  ", "") & "Ok" & vbLf & _
     "Год: " & IIf(Not y, "not!  ", "") & "Ok"
   End If
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Georgetta Monson написал(а):  ZVI , Ваш код сразу выдаёт ошибку при неправильном вводе ... В условии задачи при неправильном любого одного из чисел вывести "No".
"No" там выводится в шапке (Title) сообщения. Если что, замените все строки с MsgBox на MsgBox "No", а последний - на  MsgBox "Yes". Если нужна проверка не сразу, а после ввода 3-х чисел, то так:
Код
Sub homework029()
  
  Dim a As Integer, b As Integer, c As Integer
  Dim d As Integer, m As Integer, y As Integer

  ' Ввод числа
  a = InputBox("Введите день", "Число: 1 ... 31")
  ' Записать в ячейку A1
  Cells(1, 1) = a

  
  ' Ввод месяца
  b = InputBox("Введите номер месяца", "Месяц: 1 ... 12")
  ' Записать в ячейку B1
  Cells(1, 2) = b
  
  ' Ввод года
  c = InputBox("Введите год", "Год: 1900 ... 9999")
  ' Записать в ячейку C1
  Cells(1, 3) = c
  
       
  ' Проверить корректность ввода числа
  If a >= 1 And a <= 31 Then
    ' Правильный ввод
    d = a
  Else
    ' Сообщить об ошибке ввода числа
    MsgBox "Неправильное число: " & a, , "No"
    ' Завершить выполнение кода
    Exit Sub
  End If
      
      
  ' Проверить корректность ввода месяца
  If b = 2 Then
    If a <= 28 Then
      ' Число и месяц февраля правильные
      m = b
    Else
      ' Сообщить об ошибке ввода числа февраля
      MsgBox "В феврале 28 дней: " & a & "." & b, , "No"
      ' Завершить выполнение кода
      Exit Sub
    End If
  ElseIf b >= 1 And b <= 12 Then
    ' Правильный ввод
    m = b
  Else
    ' Сообщить об ошибке ввода месяца
    MsgBox "Неправильный месяц: " & b, , "No"
    ' Завершить выполнение кода
    Exit Sub
  End If
      
  ' Проверить корректность ввода года
  If c >= 1900 And c <= 9999 Then
    ' Правильный ввод
    y = c
  Else
    ' Сообщить об ошибке ввода
    MsgBox "Неправильный год: " & c, , "No"
    ' Завершить выполнение кода
    Exit Sub
  End If
      
  ' Отобразить результат
  MsgBox d & "." & m & "." & y, , "Yes"
  
End Sub
vbCritical убрал из строк с MsgBox раз не изучали, это устанавливало грозный формат сообщения об ошибке (с красным перечеркнутым кругом).
Название темы: "VBA: учебное задание с If-ElseIf-Else-End If" на примере ввода числа, месяца, года"
P.S. В правилах ничего про реальность ника и фото нет.
У меня и то и другое - реальные, но это исключение, которое обычно и не рекомендуется с т.з. приватности в сети.
Изменено: ZVI - 04.10.2022 14:21:26
 
ZVI, так-то #40 работает...  Но что-то мне подсказывает что неверно выполняется условие задачи. У Вас выдаёт ошибку по конкретному обработанному числу (либо месяц, либо день, год), но не в купе по всем трём, как в условии.
... не знаю.
Изменено: Georgetta Monson - 04.10.2022 15:29:00
 
Цитата
Georgetta Monson написал: ... по конкретному обработанному числу (либо месяц, либо день, год), но не в купе по всем трём
Так и нужно по условию задания, терпите :)
Страницы: Пред. 1 2
Наверх