3 / 3 / 1
Регистрация: 09.04.2017
Сообщений: 290

Неправильная работа программы

12.04.2018, 09:32. Показов 1323. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа должна выполнять деление одного числа на другое, и при делении на 0, вызывать окно с ошибкой (не стандартной).

Эта программа, сразу после вопроса после вопроса про ввод данных, выводит ошибку.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub Кнопка0_Click()
Dim srtInput As String, strM As String
Dim A As Integer, B As Integer
 
On Error GoTo ErrorTable
Do While True
   strInput = MsgBox("Будут введены значения", vbOKCancel + vbQuestion, "Вопрос")
   If srtInput = 2 Then Exit Do
    strInput = InputBox("Ввод 1 числа", "Деление")
    A = CInt(strInput)
    strInput = InputBox("Ввод 2 числа", "Деление")
    B = CInt(strInput)
    strM = "Результат деления" & vbctrf & A & "" & B & "=" & A \ B
    MsgBox strM, vbInformation, "Результат"
    Loop
    Exit Sub
    
ErrorTable:
 strM = "Деление на 0 невозможно"
 MsgBox strM, vbCritical, "Ошибка"
 
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.04.2018, 09:32
Ответы с готовыми решениями:

Неправильная работа программы
Программа вычисляет значение выражение, во вложении скрин выражения data segment y db 0 data ends st1 segment stack 'stact' db...

Неправильная работа программы
Написал код. Компилируется. Проблема в своенравном поведении программы. Нужная логика Push enter если "out" ...

Неправильная работа программы
была программа, которая считывает английский текст из файла и выводит на экран слова, начинающиеся с гласных букв. вот она) ...

21
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
12.04.2018, 09:48
Цитата Сообщение от nameless1399 Посмотреть сообщение
Dim srtInput As String
Цитата Сообщение от nameless1399 Посмотреть сообщение
If srtInput = 2
как это понимать?
0
3 / 3 / 1
Регистрация: 09.04.2017
Сообщений: 290
12.04.2018, 09:59  [ТС]
alvk, Объявление переменной типа строки с именем srtInput

Visual Basic
1
Dim srtInput As String
Если переменна с именем srtInput = функции с именем vbCansel (у функции есть еще числовое значение - 2, потому, для быстроты написали 2)

Visual Basic
1
If srtInput = 2
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,937
Записей в блоге: 4
12.04.2018, 10:01
закомменте для начала строку On Error GoTo ErrorTable
отладьте программу для нормальных чисел, например 4 и 2, 5 и2 ,5 и 3
а уж потом займитесь делением на 0
0
3 / 3 / 1
Регистрация: 09.04.2017
Сообщений: 290
12.04.2018, 10:01  [ТС]
alvk, я знаю, что это старый или не актуальный способ написания программы, но нас учат именно таким способом описывать кнопки в формах MS Access
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,671
12.04.2018, 10:13
как-то так (наверное)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Кнопка0_Click()
Dim srtInput As String, strM As String
Dim A As Integer, B As Integer
 
 
Do
aaa:   
MsgBox("Будут введены значения", vbOKCancel + vbQuestion, "Вопрос")
   
    strInput = InputBox("Ввод 1 числа", "Деление")
    A = CInt(strInput)
    If A = 2 Then Exit Do
    strInput = InputBox("Ввод 2 числа", "Деление")
    B = CInt(strInput)
if B=0 then msgbox "Деление на 0": goto aaa:
    strM = "Результат деления" & vbctrf & A & "" & B & "=" & A \ B' странно - почему результат это  целая часть числа
    MsgBox strM, vbInformation, "Результат"
    Loop While True
 
    
 
 
End Sub
0
3 / 3 / 1
Регистрация: 09.04.2017
Сообщений: 290
12.04.2018, 10:24  [ТС]
shanemac51, если без этого блока программы и вместо 2 написать имя функции vbCansel, то программа совсем не производит никаких действий.

Добавлено через 11 минут
snipe, Во-первых:
Visual Basic
1
If A = 2 Then Exit Do
Если А будет равна 2, выход - это бессмысленное исключение. В этом if мы должны сравнивать выбор пользователя с функцией vbCansel (у которой значение 2).

Во-вторых:
Visual Basic
1
MsgBox("Будут введены значения", vbOKCancel + vbQuestion, "Вопрос")
Это вопрос который задается в диалоговом окне о действиях пользователя, а не сообщение об ошибке.

В-третьих: у вас вообще запущен бесконечный цикл.

В-четвертых: в условии не указано каким именно должно быть деление. Главное, чтоб при делении на 0 выводило диалоговое окно с сообщение.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,937
Записей в блоге: 4
12.04.2018, 10:37
Цитата Сообщение от nameless1399 Посмотреть сообщение
Программа должна выполнять деление одного числа на другое, и при делении на 0, вызывать окно с ошибкой (не стандартной).

Эта программа, сразу после вопроса после вопроса про ввод данных, выводит ошибку.

Private Sub Кнопка0_Click()
Dim srtInput As String, strM As String
Dim A As Integer, B As Integer

On Error GoTo ErrorTable
Do While True
strInput = MsgBox("Будут введены значения", vbOKCancel + vbQuestion, "Вопрос")
If srtInput = "2" Then Exit Do
strInput = InputBox("Ввод 1 числа", "Деление")
A = CInt(strInput)
strInput = InputBox("Ввод 2 числа", "Деление")
B = CInt(strInput)
strM = "Результат деления" & vbctrf & A & "" & B & "=" & A \ B
MsgBox strM, vbInformation, "Результат"

Loop
Exit Sub

ErrorTable:
strM = "Деление на 0 невозможно"
MsgBox strM, vbCritical, "Ошибка"

End Sub[/VB]
добавьте в код строку Option Explicit и исправьте ошибки компиляции
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
12.04.2018, 10:51
Вообще с msgbox я поступаю обычно так и без переменных:

Visual Basic
1
2
3
4
5
If MsgBox("Продолжить выполнение?", vbYesNo) <> vbYes Then
      Вариант для нет
     Else
      Вариант для да
end if
и в глубину также
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
12.04.2018, 10:53
nameless1399,

Что такое vbctrf ?

Опечатки - Ваша фишка ?

И в коде, и в тексте сообщений...

Компилировать код нужно.
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,671
12.04.2018, 10:59
nameless1399,
как все замечательно
если переменной с типом стринг присвоить значение с типом integer то vba автоматом конвертирует это значение в стринг
т.о. бессмысленно строковую переменную сравнивать с числом всегда будет false
и Ваш цикл ни когда не выйдет из цикла
т.к. предусловием стоит значение true а не какое-то условие
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
12.04.2018, 12:56
Цитата Сообщение от snipe Посмотреть сообщение
если переменной с типом стринг присвоить значение с типом integer то vba автоматом конвертирует это значение в стринг
т.о. бессмысленно строковую переменную сравнивать с числом всегда будет false
Второе утверждение противоречит первому.

Проверим?
Visual Basic
1
2
3
4
5
6
7
8
Function FF()
 Dim S As String, _
     K As Integer
 K = 2
 S = K
 Debug.Print S = "2"
 Debug.Print S = K
End Function
Результат в Immediate
Visual Basic
1
2
3
Call FF
True
True
Добавлено через 36 минут
Цитата Сообщение от nameless1399 Посмотреть сообщение
переменна с именем srtInput
Переменная определена с именем srtInput (Гм-м... Явная опечатка...)
Но присвоение значения осуществляется переменной strInput.
Разницу замечаете?

Еще раз повторяю: Вы катастрофически невнимательны.
Тьма опечаток везде.
Вот даже в этом коротеньком процитированном отрывке пропущена буква в слове "переменная".

Резюме такое:

1. В объявлении переменных
Dim srtInput As String
заменить на
Dim strInput As String

2. Тут две ошибки - неверное имя переменной и сравнение не с тем, чем надо.
Нужно отслеживать OK, а не Cancel.
Вот это
If srtInput = 2
заменить на
If strInput = 1
Хотя это нелепо, вместо специальной константы использовать число. И смысл теряете.
В If srtInput = vbOk смысл виден.

Но у Вас же критерий - быстрота.
Цитата Сообщение от nameless1399 Посмотреть сообщение
для быстроты написали
Быстрота Вас погубит. Все Ваши опечатки тому доказательство.

В общем, сделаете по-моему, все заработает.

И лучше скопируйте отсюда и вставьте у себя, а то еще штук десять опечаток внесете.

Добавлено через 5 минут
Цитата Сообщение от nameless1399 Посмотреть сообщение
вместо 2 написать имя функции vbCansel,
И тут умудрились имя константы (а не функции) исказить... vbCancel правильно.
Может, Вам другим делом заняться, не столь требовательным к концентрации внимания?

Добавлено через 32 минуты
Да, еще.
Но об это уже раньше писала, Вы проигнорировали.
Поэтому повторяю. Очередное искажение от "быстроты" исправьте.

3. Замените vbctrf на vbCrLf.

Ну и ну.
1
3 / 3 / 1
Регистрация: 09.04.2017
Сообщений: 290
12.04.2018, 18:17  [ТС]
Capi, а вы видели, что написано после vbCansel (2)? Там написана функция выхода из цикла.
В чем же тогда, по вашему, будет прослеживаться логика, если пользователь, при ответе на вопрос "Будут введены значения?"; "Да" - будет выходить из цикла?

Не по теме:
и уж простите, что я всего лишь человек и могу делать ошибки. Вам же и в голову прийти не могло, что у меня могли быть причины для совершения опечатки.

Добавлено через 3 минуты
Capi, спасибо за указание на опечатки

Добавлено через 4 минуты
Capi, при исправлении опечаток, все работает.
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
12.04.2018, 18:19
...vbCansel...
Опять и снова...
Теперь я вижу, что у Вас и правда необоримая потребность в опечатках.
Согласна, это причина серьезная.
Продолжайте в том же духе.

а вы видели, что написано после vbCansel (2)? Там написана функция выхода из цикла.*
В чем же тогда, по вашему, будет прослеживаться логика, если пользователь, при ответе на вопрос "Будут введены значения?"; "Да" - будет выходить из цикла?
Сначала сделайте то, что предложено.
Запустите, проверьте.
Тогда и будем обсуждать.
Но думаю, в результате выполнения этих действий необходимость в дебатах у Вас отпадет.
А возникнет необходимость поблагодарить.

Нет, Вы предпочитаете тратить время (не только свое, между прочим) на пустые слова.
0
3 / 3 / 1
Регистрация: 09.04.2017
Сообщений: 290
12.04.2018, 18:23  [ТС]
Capi, С П А М И Б О
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
12.04.2018, 18:43
С П А М Б О
Оооо.........

Это задумано было, как "спасибо", что ли ?

Убили наповал.
И он еще спорит...

Добавлено через 16 минут
Ага, поправили на
С П А М И Б О
Что ж, тоже неплохой вариант...
Сдаюсь. Вы победили.)))

Вы всеми двадцатью пальцами по клавиатуре стучите, наверное.
0
3 / 3 / 1
Регистрация: 09.04.2017
Сообщений: 290
12.04.2018, 19:04  [ТС]
Capi, предпочитаю использовать двадцать один палец
0
Эксперт MS Access
 Аватар для Eugene-LS
13173 / 5872 / 1504
Регистрация: 05.10.2016
Сообщений: 16,489
13.04.2018, 00:04
Цитата Сообщение от nameless1399 Посмотреть сообщение
предпочитаю использовать двадцать один палец
Аккуратнее пожалуйста, я за Capi могу и чего плохого сказать.
Аккуратнее.
Щас гляну ваш вопрос на тестах = будет видно что к чему ....

Добавлено через 12 минут
nameless1399, может вы имели ввиду это:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub cmdTest01_Click()
Dim iInput As Integer, strM As String
Dim A As Integer, B As Integer
 
On Error GoTo ErrorTable
Do While True
   iInput = MsgBox("Будут введены значения", vbOKCancel + vbQuestion, "Вопрос")
   If iInput = 2 Then Exit Do
    iInput = InputBox("Ввод 1 числа", "Деление")
    A = iInput
    iInput = InputBox("Ввод 2 числа", "Деление")
    B = iInput
    strM = "Результат деления" & vbCrLf & A & "" & B & "=" & A \ B
    MsgBox strM, vbInformation, "Результат"
    Loop
Exit Sub
    
ErrorTable:
 strM = "Деление на 0 невозможно"
 MsgBox strM, vbCritical, "Ошибка"
 
End Sub
0
296 / 257 / 68
Регистрация: 18.06.2015
Сообщений: 570
13.04.2018, 08:33
Опечатки без требований объявления переменной - смерть. Вы погрязнете в непонятном поведении программы, достаточно ошибиться в одной букве и будете долго искать причину, как в данном случае. Поэтому сразу порсле установки офиса идем в настройки VBA редактора и ставим флаг обязательного объявления переменных

А во всех существующих модулях в начало добавляем строку
Visual Basic
1
Option Explicit
В новых с установленным флагом эта строка будет добавляться автоматом

После этого делаем Debug->Compile Database и исправляем все обнаруженные компилятором ошибки. Вы удивитесь, сколько их.
1
Эксперт MS Access
 Аватар для Eugene-LS
13173 / 5872 / 1504
Регистрация: 05.10.2016
Сообщений: 16,489
13.04.2018, 08:47
Цитата Сообщение от MrShin Посмотреть сообщение
Опечатки без требований объявления переменной - смерть. Вы погрязнете в непонятном поведении программы ...
Спасибо, но у меня уж много лет как всё это включено.
А совет полезный - поддерживаю!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.04.2018, 08:47
Помогаю со студенческими работами здесь

неправильная работа программы
Извините народ если отвлекаю но не кто не сможет мне помочь... дело в том что у меня при нажатии кнопки на которой описано событие ...

Бесконечный цикл и неправильная работа программы
#include &quot;pch.h&quot; #include &lt;string&gt; #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;conio.h&gt; using namespace std; struct...

Неправильная работа программы по учебнику Дейтелов
Всем доброго времени суток. Изучаю книгу Дейтелов &quot;Как программировать на С/С++&quot; , попутно выполняя написанные там программы ...

Неправильная работа программы после разбития ее на функции
Ребята, кому не сложно, помогите найти ошибку. При выборе первого кейса меню все хорошо ввожу строку как положено, перехожу ко второму...

Неправильная работа программы после создания Artifacts
Программа имеет интерфейс на JavaFX через который задаем ориентир. Есть один дочерний поток, в котором происходит считывание полей из txt...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru