Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 1
Регистрация: 16.03.2011
Сообщений: 52

деление на 0!

14.03.2013, 00:50. Показов 1554. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В процессе создания калькулятора MFC, не показывает окно с ошибкой при делении на 0.

C++
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
// primer1Dlg.cpp : файл реализации
//
 
#include "stdafx.h"
#include "primer1.h"
#include "primer1Dlg.h"
#include "afxdialogex.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
 
// Диалоговое окно CAboutDlg используется для описания сведений о приложении
 
class CAboutDlg : public CDialogEx
{
public:
    CAboutDlg();
 
// Данные диалогового окна
    enum { IDD = IDD_ABOUTBOX };
 
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // поддержка DDX/DDV
 
// Реализация
protected:
    DECLARE_MESSAGE_MAP()
};
 
CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}
 
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
}
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
 
 
// диалоговое окно Cprimer1Dlg
 
 
 
 
Cprimer1Dlg::Cprimer1Dlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(Cprimer1Dlg::IDD, pParent)
    , val1(0)
    , val2(0)
    , result(0)
    , oper(0)
    , str(_T(""))
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
 
void Cprimer1Dlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Text(pDX, EditControl, str);
}
 
BEGIN_MESSAGE_MAP(Cprimer1Dlg, CDialogEx)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(ButtonReset, &Cprimer1Dlg::OnBnClickedButtonreset)
    ON_BN_CLICKED(IDC_BUTTON2, &Cprimer1Dlg::OnBnClickedButton2)
    ON_BN_CLICKED(IDC_BUTTON3, &Cprimer1Dlg::OnBnClickedButton3)
    ON_BN_CLICKED(buttonplus, &Cprimer1Dlg::OnBnClickedbuttonplus)
    ON_BN_CLICKED(ButtonEq, &Cprimer1Dlg::OnBnClickedButtoneq)
    ON_BN_CLICKED(IDC_BUTTONtochka, &Cprimer1Dlg::OnBnClickedButtontochka)
    ON_BN_CLICKED(buttonminus, &Cprimer1Dlg::OnBnClickedbuttonminus)
    ON_BN_CLICKED(IDC_BUTTON1, &Cprimer1Dlg::OnBnClickedButton1)
    ON_BN_CLICKED(IDC_BUTTON14, &Cprimer1Dlg::OnBnClickedButton14)
    ON_BN_CLICKED(IDC_BUTTON5, &Cprimer1Dlg::OnBnClickedButton5)
    ON_BN_CLICKED(IDC_BUTTON6, &Cprimer1Dlg::OnBnClickedButton6)
    ON_BN_CLICKED(IDC_BUTTON7, &Cprimer1Dlg::OnBnClickedButton7)
    ON_BN_CLICKED(IDC_BUTTON9, &Cprimer1Dlg::OnBnClickedButton9)
    ON_BN_CLICKED(IDC_BUTTON10, &Cprimer1Dlg::OnBnClickedButton10)
    ON_BN_CLICKED(IDC_BUTTON11, &Cprimer1Dlg::OnBnClickedButton11)
    ON_BN_CLICKED(buttonmulty, &Cprimer1Dlg::OnBnClickedbuttonmulty)
    ON_BN_CLICKED(buttondelenie, &Cprimer1Dlg::OnBnClickedbuttondelenie)
END_MESSAGE_MAP()
 
 
// обработчики сообщений Cprimer1Dlg
 
BOOL Cprimer1Dlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
 
    // Добавление пункта "О программе..." в системное меню.
 
    // IDM_ABOUTBOX должен быть в пределах системной команды.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);
 
    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }
 
    // Задает значок для этого диалогового окна. Среда делает это автоматически,
    //  если главное окно приложения не является диалоговым
    SetIcon(m_hIcon, TRUE);         // Крупный значок
    SetIcon(m_hIcon, FALSE);        // Мелкий значок
 
    // TODO: добавьте дополнительную инициализацию
 
    return TRUE;  // возврат значения TRUE, если фокус не передан элементу управления
}
 
void Cprimer1Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else
    {
        CDialogEx::OnSysCommand(nID, lParam);
    }
}
 
// При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом,
//  чтобы нарисовать значок. Для приложений MFC, использующих модель документов или представлений,
//  это автоматически выполняется рабочей областью.
 
void Cprimer1Dlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // контекст устройства для рисования
 
        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
 
        // Выравнивание значка по центру клиентского прямоугольника
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
 
        // Нарисуйте значок
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialogEx::OnPaint();
    }
}
 
// Система вызывает эту функцию для получения отображения курсора при перемещении
//  свернутого окна.
HCURSOR Cprimer1Dlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
}
 
 
 
void Cprimer1Dlg::OnBnClickedButtonreset()
{
    val1=val2=result=0;
    oper=0;
    str=_T("");
    UpdateData(false);
}
 
 
void Cprimer1Dlg::OnBnClickedButton2()
{
    UpdateData(true);
    str+="1";
    UpdateData(false);
}
 
 
void Cprimer1Dlg::OnBnClickedButton3()
{
    UpdateData(true);
    str+="2";
    UpdateData(false);
}
 
 
void Cprimer1Dlg::OnBnClickedbuttonplus()
{
    oper=1;
    UpdateData(true);
    val1=_wtof(str.GetString());
    str=_T("");
    UpdateData(false);
}
 
 
void Cprimer1Dlg::OnBnClickedButtoneq()
{
    UpdateData(true);
    val2=_wtof(str);
    switch (oper)
    {
    case 1 :result=val1+val2;
    break;
    case 2 :result=val1-val2;
    break;
    case 3 :result=val1*val2;
    break;
    case 4 :result=val1/val2;
    break;
    }
    str.Format(_T("%g"),result);
    UpdateData(false);
}
 
 
void Cprimer1Dlg::OnBnClickedButtontochka()
{
    UpdateData(true);
    if (str.Find(_T("."))==-1)
        str+=_T(".");
    UpdateData(false);
 
}
 
 
void Cprimer1Dlg::OnBnClickedbuttonminus()
{
    oper=2;
    UpdateData(true);
    val1=_wtof(str.GetString());
    str=_T("");
    UpdateData(false);
}
 
 
void Cprimer1Dlg::OnBnClickedButton1()
{
    UpdateData(true);
    str+="3";
    UpdateData(false);
}
 
 
void Cprimer1Dlg::OnBnClickedButton14()
{
    UpdateData(true);
    str+="4";
    UpdateData(false);
}
 
 
void Cprimer1Dlg::OnBnClickedButton5()
{
    UpdateData(true);
    str+="5";
    UpdateData(false);
}
 
 
void Cprimer1Dlg::OnBnClickedButton6()
{
    UpdateData(true);
    str+="6";
    UpdateData(false);
}
 
 
void Cprimer1Dlg::OnBnClickedButton7()
{
    UpdateData(true);
    str+="7";
    UpdateData(false);
}
 
 
void Cprimer1Dlg::OnBnClickedButton9()
{
    UpdateData(true);
    str+="8";
    UpdateData(false);
}
 
 
void Cprimer1Dlg::OnBnClickedButton10()
{
    UpdateData(true);
    str+="9";
    UpdateData(false);
}
 
 
void Cprimer1Dlg::OnBnClickedButton11()
{
    UpdateData(true);
    str+="0";
    UpdateData(false);
}
 
 
 
 
void Cprimer1Dlg::OnBnClickedbuttonmulty()
{
    oper=3;
    UpdateData(true);
    val1=_wtof(str.GetString());
    str=_T("");
    UpdateData(false);
}
 
 
void Cprimer1Dlg::OnBnClickedbuttondelenie()
{
    oper=4;
    UpdateData(true);
    if(val2 != 0)
        result=val1/val2;
    else
        AfxMessageBox("На 0 делить нельзя!!!");
    val1=_wtof(str.GetString());
    str=_T("");
    UpdateData(false);
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2013, 00:50
Ответы с готовыми решениями:

Задача про деление яблок (целочисленное деление)
Ребят,помогите с задачкой,как написать input.txt и output.txt? Помогите решить задачу. C++. Заранее спасибо! N школьников делят K яблок...

Умножение, деление и деление с остатком
Рассмотрим эти операции на примере. static void Main() { int i = 100, j = 15; double a = 14.2, b = 3.5; ...

Деление знаковых чисел с выводом ошибки "Деление на ноль"
Собственно поставили передо мной задачу - написать прогу деления двух чисел, причем что бы учитывался знак, и помимо всего прочего при...

13
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
14.03.2013, 01:20
342 строки кода!
Вот представь себе, что это написал не ты, а кто-то другой. И просит тебя разобраться. Возьмешься?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
14.03.2013, 06:20
Цитата Сообщение от Skreen Посмотреть сообщение
не показывает окно с ошибкой при делении на 0.
а где он должен показать?
Цитата Сообщение от Skreen Посмотреть сообщение
case 4 :result=val1/val2;
* * break;
ты же не проверяешь аргумент

Компьютер думать не умеет,он просто исполняет то что ему приказано
0
14.03.2013, 10:02

Не по теме:

Skreen, дурацкая реализация со строчной записью чисел, поле ввода делай даблом и не ломай голову с преобразованиями(куча ошибок просто сама отвалится).




Не по теме:

Байт, из 342 строк около 200 дефалтно делает компилятор, остальные 142 строки надо делить на 3 ибо содержат тела обработчиков нажатий кнопок;)PS:а ты действительно способен разобраться в MFC проекте?:)

0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
14.03.2013, 10:16
Skreen, чтобы ты внял словам про поле ввода дабл, ниже аттачу свой зимний проект фриланса MFCCalculator (программа необычная - её движок в DLL модуле, а сам калькулятор - диалог подгружающий движок)
Миниатюры
деление на 0!  
Изображения
 
Вложения
Тип файла: rar MFCCalculator.rar (34.5 Кб, 5 просмотров)
0
14.03.2013, 10:16

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Байт, из 342 строк около 200 дефалтно делает компилятор,
так то что делает компилятор читается как песня
а вот вручную:cry:
Цитата Сообщение от Skreen Посмотреть сообщение
void Cprimer1Dlg::OnBnClickedButton1()
..................
* * str+="3";
*.....
void Cprimer1Dlg::OnBnClickedButton14()
........
* * str+="4";
............
да и читать не удобно
все таки лучше проект выкладывать или проблемные куски

0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
14.03.2013, 10:21
ValeryS, обработчики кнопок следует вынести в один универсальный аля
void CMFCCalculatorDlg::AddDigit(int iDigit)
функция которая просто будет пристыковывать цифры к введённом, а в коде делать подобный вызов для обработчика
C++
1
2
3
4
5
void CMFCCalculatorDlg::OnButton9() 
{
    // TODO: Add your control notification handler code here
    AddDigit(9);
}
тогда и кода будет меньше да и понятней будет + все пристыковки цифр можно будет проконтролировать при отладке в одной функции.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
14.03.2013, 11:54
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ValeryS, обработчики кнопок следует вынести в один универсальный аля
ну если уж на то пошло
я бы сделал один обработчик нескольких кнопок через ON_COMMAND_RANGE
C++
1
2
3
4
void CMFCCalculatorDlg::OnButtonNamber(int Id_but) 
{
 int nam=Id_but-ID_BUTTON0;
.........
речь то я вел о другом
если выкладываешь сюда код, так хоть причеши
адекватные имена, коменты ..........
люди ведь читать будут
и не факт что доберутся до проблемного участка, раньше глаза сломают
вот тебе пример
я прокомментировал этот участок кода


Цитата Сообщение от Skreen Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void Cprimer1Dlg::OnBnClickedButtoneq()
{
UpdateData(true);
val2=_wtof(str);
switch (oper)
 {
 case 1 :result=val1+val2;
 break;
 case 2 :result=val1-val2;
 break;
  case 3 :result=val1*val2;
 break;
 case 4 :result=val1/val2;
 break;
 }
 str.Format(_T("%g"),result);
 UpdateData(false);
}
а ниже еще одно деление

Цитата Сообщение от Skreen Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
void Cprimer1Dlg::OnBnClickedbuttondelenie()
{
oper=4;
UpdateData(true);
if(val2 != 0)
  result=val1/val2;
 else
  AfxMessageBox("На 0 делить нельзя!!!");
   val1=_wtof(str.GetString());
   str=_T("");
 UpdateData(false);
}
и где проблема??
0
0 / 0 / 1
Регистрация: 16.03.2011
Сообщений: 52
14.03.2013, 22:30  [ТС]
ругается на это
C++
1
AfxMessageBox("На 0 делить нельзя!!!");
, я хочу чтобы при деление на 0 и нажатие на = выходило окно в котором было бы написанно "На 0 делить нельзя!!!"
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
14.03.2013, 22:34
А ты вообще в функцию заходишь?
отладчиком смотрел?

у тебя в двух функциях происходит деление
1
0 / 0 / 1
Регистрация: 16.03.2011
Сообщений: 52
14.03.2013, 22:43  [ТС]
Ошибка 1 error C2665: AfxMessageBox: ни одна из 2 перегрузок не может преобразовать все типы аргументов c:\users\....\desktop\primer1\primer1\pr imer1\primer1dlg.cpp 337



и



2 IntelliSense: отсутствуют экземпляры перегруженная функция "AfxMessageBox", соответствующие списку аргументов
типы аргументов: (const char [22]) c:\Users\....\Desktop\primer1\primer1\pr imer1\primer1Dlg.cpp 337
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
14.03.2013, 22:46
Цитата Сообщение от Skreen Посмотреть сообщение
AfxMessageBox:
напиши так
C++
1
MessageBox(_T("На 0 делить нельзя!!!"));
1
0 / 0 / 1
Регистрация: 16.03.2011
Сообщений: 52
14.03.2013, 22:56  [ТС]
спасибо, только вот почему то оно вылазиет раньше чем я ввожу значение 2ой переменной..
0
0 / 0 / 1
Регистрация: 16.03.2011
Сообщений: 52
15.03.2013, 00:38  [ТС]
разабрался, всем спс.сделал еще подсчет корня и возведение в степень)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.03.2013, 00:38
Помогаю со студенческими работами здесь

Деление a/b
Добрый день. Сразу хочу спросить как правильно называется этот тип языка? код: mvi a,01;регистр а=1 stor a,A;сохранить регистр а...

Деление на 0
задача: Условие Имеется N человек и матрица А размера N´N. Элемент A матрицы равен 1, если человек i знаком с человеком j (если...

Деление
Деление знаковых чисел, в результате почему-то 0 выскакивает( не могли бы вы найти ошибку? .model small .data input1 db...

Деление на 2^16
Нужно разделить 2х байтовое число на 2^16, очевидно, что делитель больше и получиться дробное число, но как это посчитать на атмеге я так и...

Деление на 0
Выдает деление на 0 хелп. ; (b1*(w1-b2)-w2*b3)/w3+d1/b4 ;1. (w1-b2)*b1 xor bx,bx mov ax,w1 mov bl,b2 sub ax,bx ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru