Страницы: 1 2 След.
RSS
Проверка существования даты, обучение с 0
 
Преподаватель дал задачу по условиям, но сказал что надо будет самой искать способ решения. Вот:
Код
'Дана дата из трех чисел (день, месяц и год). Вывести
'yes, если такая дата существует (например, 12 02 1999 - yes, 22 13 2001 - no).
'Считать, что в феврале всегда 28 дней

Сейчас изучаем условия If, Else, Elseif, End If.
Изменено: Юрий М - 04.10.2022 12:43:58
 
Georgetta Monson, ваши попытки отсутствуют?
Код
If IsError(DateSerial(Year,Month,Day)) Then MsgBox "No" Else MsgBox "Yes"
Изменено: Jack Famous - 04.10.2022 09:14:32
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
ваши попытки отсутствуют?
А кто говорил про попытки? Задача как стоит?
Цитата
Georgetta Monson написал:
надо будет самой искать способ решения
Вот, способ решения найден - спросить на форуме  :D
Скажи мне, кудесник, любимец ба’гов...
 
Нет. не то.
Именно ДАНЫ три числа, т.е.:
Код
Sub homework029()
          
          Dim a As Integer, b As Integer, c 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
....
                          
End Sub

Мои попытки:

Далее с ними надо отработать по условиям:

Код
Dim d As Integer, m As Integer, y As Integer 'здесь пытаюсь задать числам что есть день, месяц, год
if a >=1 and a<=21 then a=dend ifif b>=1 and <=12 thenb = mend ifif c>=1 thenc = y ' годы могут быть бесконечныend if'теперь как-то надо для февраля задать условие, что он не может быть больше 28if m =2 then d >=1 and <=28 'вот здесь я сомневаюсьend if'......

начало пока такое....

 
Цитата
Georgetta Monson написал:
'Считать, что в феврале всегда 28 дней
а это с какого перепугу? если есть год, то понятно сколько дней в этом году было в феврале
Цитата
Georgetta Monson написал:
Сейчас изучаем условия If, Else, Elseif, End If.
судя по этому решение нужно в VBA но фраза
Цитата
Georgetta Monson написал:
Дана дата из трех чисел (день, месяц и год)
абсолютно не обьясняет где они даны?
1. лежат в ячейках? (каких)
2. нужно запросить у пользователя?
3. прочитать из файла? (какого)
4. взять с интернета? (адрес страницы, где они лежат)
этот перечень можно продолжать долго. продолжать? или вы сами обьясните "даны" - это как и где???
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Именно ДАНЫ три числа, т.е. работать нужно с тремя данными.

Код
Sub homework029()
          
          Dim a As Integer, b As Integer, c 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
          
'......
                
End Sub

Вот моя попытка:
Код
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<=31 then
a=d
end if
if b>=1 and b<=12 then
a=m
end if
if c>=1 then 'годы могут быть бесконечны
a=y
end if
'надо задать условие для февраля, что не более 28 дней
if m=2 then
' здесь у меня затык....
                
End Sub


Вот такое начало....
 
Цитата
Georgetta Monson написал:
Вот такое начало....
т.е. если a лежит в диапазоне от 1 до 31, то мы его обнуляем. Это еще без учета месяцев с 30 днями и февраля
 
Не надо ничего обнулять, возможно, я допускаю ошибки в коде. ))
 
Цитата
Georgetta Monson написал:
годы могут быть бесконечны
Не совсем так. 9999 - максимум

не a=d, а d=a
месяцы m=d
годы y=c
Это для начала

Функции дат вы еще не проходили, насколько я понимаю?
Обработку ошибок тоже?
Goto проходили?
Изменено: _Boroda_ - 04.10.2022 10:09:48
Скажи мне, кудесник, любимец ба’гов...
 
могу предложить вам функцию
Код
Function IsLegalDate(d, m, y) As Boolean
  IsLegalDate = Len("" & y) > 1 And d & "." & m & "." & y = _
  Format(DateSerial(y, m, d), "D.M." & String(Len("" & y), "Y"))
End Function

правда она не имеет никакого отношения к изучаемым вами if, elseif, else ...
в вашем случае после того, как получили от пользователя а, в, с
Msgbox IsLegalDate(a,b,c)
напишет вам прошли проверку а, в, с или нет
или так:
Код
Sub test()
  MsgBox IsLegalDate(29, 2, 2000)
  MsgBox IsLegalDate(29, 2, 2001)
End Sub
получите Истина а потом Ложь, т.е. 29 февраля в 2000 году было, а в 2001 - нет(((
Изменено: Ігор Гончаренко - 04.10.2022 10:43:57
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Название темы "Проверка существования даты"

С учетом того, что
Цитата
Georgetta Monson написал:
Сейчас изучаем условия If, Else, Elseif, End If.

То есть, если кто еще смотреть будет - этот код только под заданное условие задачи. В общем случае он неверен!!!

Код
Sub homework029()
    Dim a As Integer, b As Integer, c As Integer

    a = InputBox("Введите день")
    'здесь должна быть проверка на то, что ввели именно число
    If a < 1 Or a > 31 Then
        MsgBox "No"
        Exit Sub
    End If

    b = InputBox("Введите месяц")
    'здесь должна быть проверка на то, что ввели именно число
    If b < 1 Or b > 12 Then
        MsgBox "No"
        Exit Sub
    End If

    c = InputBox("Введите год")
    'здесь должна быть проверка на то, что ввели именно число
    If с < 1 Or с > 9999 Then    ' вообще-то, если строго подойти, то не с<1, а с<-1900, но сделаем вид, что не знаем про это )))
        MsgBox "No"
        Exit Sub
    End If

    If b = 2 Then
        If a > 28 Then
            MsgBox "No"
            Exit Sub
        End If
    ElseIf b = 4 Or b = 6 Or b = 9 Or b = 11 Then
        If a > 30 Then
            MsgBox "No"
            Exit Sub
        End If
    End If

    MsgBox "Yes"
End Sub
Изменено: _Boroda_ - 04.10.2022 10:48:28
Скажи мне, кудесник, любимец ба’гов...
 
OFF
Georgetta Monson, если вы мужчина, то зачем вам модельная женская фотография и псевдоним? Так охотнее помогают?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Добрый день всем!
Чтобы не путать конкретное учебное задание с корректностью дат, напомню, что DateSerial допускает и месяц = 13, но по заданию это недопустимо (см. #1).
Вариант кода по заданию на If-ElseIf-Else-End If:
Код
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
  ' Проверить корректность ввода
  If a >= 1 And a <= 31 Then
    ' Правильный ввод
    d = a
  Else
    ' Сообщить об ошибке ввода
    MsgBox "Неправильный ввод: " & a, vbCritical, "No"
    ' Завершить выполнение кода
    Exit Sub
  End If
  
  ' Месяц
  b = InputBox("Введите номер месяца", "Месяц 1 ... 12")
  ' Записать в ячейку B1
  Cells(1, 2) = b
  ' Проверить корректность ввода
  If b = 2 Then
    If a <= 28 Then
      ' Число и месяц февраля правильные
      m = b
    Else
      ' Сообщить об ошибке ввода
      MsgBox "В феврале 28 дней: " & a & "." & b, vbCritical, "No"
      ' Завершить выполнение кода
      Exit Sub
    End If
  ElseIf b >= 1 And b <= 12 Then
    ' Правильный ввод
    m = b
  Else
    ' Сообщить об ошибке ввода
    MsgBox "Неправильный ввод: " & a & "." & b, vbCritical, "No"
    ' Завершить выполнение кода
    Exit Sub
  End If
  
  ' Год
  c = InputBox("Введите год", "Год 1900 ... 9999")
  ' Записать в ячейку C1
  Cells(1, 3) = c
  ' Проверить корректность ввода
  If c >= 1900 And c <= 9999 Then
    ' Правильный ввод
    y = c
  Else
    ' Сообщить об ошибке ввода
    MsgBox "Неправильный ввод: " & c, vbCritical, "No"
    ' Завершить выполнение кода
    Exit Sub
  End If
      
  ' Отобразить результат
  MsgBox d & "." & m & "." & y,  ,"Yes"
  
End Sub
Изменено: ZVI - 04.10.2022 11:28:01
 
Владимир, а 31 апреля?
Скажи мне, кудесник, любимец ба’гов...
 
Цитата
ZVI написал:
DateSerial допускает и месяц = 13
и день 33
но IsLegalDate напишет что такие даты плохие
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
Функции дат вы еще не проходили, насколько я понимаю?Обработку ошибок тоже?Goto проходили?
Верно.
Ни даты, ни ошибки, ни GoTo.
 
Цитата
написал:
если вы мужчина, то зачем вам модельная женская фотография и псевдоним? Так охотнее помогают?
OFF
Почему мужчина????  8-0
Лучше бы по делу.
Изменено: Georgetta Monson - 04.10.2022 11:55:24
 
Цитата
Georgetta Monson написал:
Почему мужчина????
[offtop] интернет он все помнит :) [/offtop]
 
OFF
Цитата
Georgetta Monson: Почему мужчина?
лжецов здесь не любят, а мужчин, выдающих себя за женщин - тем более. Готовы утверждать обратное? Фото тоже ваше?
Изменено: Jack Famous - 04.10.2022 12:04:57
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
OFF
О бинарности слышали? Навернка, да.

Может, по делу всё-таки? Вот код от ZVI мне по душе.
Попробую. Правда, не знаю, что такое vbCritical, не изучали.
Похоже, на уведомление пользователя окошком.
Изменено: Georgetta Monson - 04.10.2022 12:13:09
 
И никого не смутило название темы?
 
Цитата
написал:
лжецов здесь не любят,
+

В бан его. https://ru.pinterest.com/pin/alexis-loves--34269647142296124/
 
МатросНаЗебре, симпатишный "бинарник" (я думал, это про эффективный поиск) :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
Цитата
написал:
лжецов здесь не любят,
+

В бан его.  https://ru.pinterest.com/pin/alexis-loves--34269647142296124/
Ну, исходя из Вашей логики, в бан всех, у кого не своё фото. (((

Опять не в тему. Очень жаль, что МОЯ ПЕРСОНА стала стержнем обсуждения темы, а не сама тема.
Просьба к модераторам: можно удалить все сообщения, не относящиеся к теме?
Изменено: Georgetta Monson - 04.10.2022 12:26:52
 
Цитата
Юрий М написал:
И никого не смутило название темы?
Я предложил вариант
Цитата
_Boroda_ написал:
Название темы "Проверка существования даты"
Скажи мне, кудесник, любимец ба’гов...
 
OFF
Цитата
Georgetta Monson: в бан всех, у кого не своё фото…МОЯ ПЕРСОНА стала стержнем обсуждения темы
ваша персона не тянет на обсуждение (во всяком случае, не здесь) — меня раздражает ложь. И да - я, представьте себе, не кот, а человек и только больной человек может подумать иначе. А у вас - намеренное введение в заблуждение (вероятно, чтобы получить помощь за красивые "бинарные" глазки).

Не нужно выпячивать свою "оригинальность" — у нас в стране за это можно получить нечто серьёзнее бана.
Изменено: Jack Famous - 04.10.2022 12:35:03
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
ZVI, Ваш код сразу выдаёт ошибку при неправильном вводе любого из трёх чисел (например, даты 32).
В условии задачи при неправильном любого одного из чисел вывести "No".
Т.е. пользователь может ввести 55 93 -0258.
Т.е., это должно произойти в конце обработки всех трёх чисел.
 
Georgetta Monson,
чем Вам не понравился вариант из #2? вроде бы If тоже присутствует
Изменено: evgeniygeo - 04.10.2022 12:42:33
 
название темы:
проверить задают-ли введенные пользователем день, месяц, год соответствующую дату
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
Georgetta Monson,
чем Вам не понравился вариант из #2? вроде бы If тоже присутствует
Да вроде всё нравится, но не выдерживаются условия задачи.
Страницы: 1 2 След.
Наверх