Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/76: Рейтинг темы: голосов - 76, средняя оценка - 4.72
 Аватар для Aecttann
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359

Как проверить значение на нечётность и отрицательность?

14.11.2014, 23:28. Показов 14656. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как проверить значение на нечётность и отрицательность?
Кликните здесь для просмотра всего текста
C++
1
2
3
4
            if((i>0)&&(i%(-2)==0))
                return Invalid;
            else
                return Acceptable;

Не по теме:

модерам:
вообще это Qt, но вопрос не по поводу Qt, а по поводу if'а

0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.11.2014, 23:28
Ответы с готовыми решениями:

Целочисленный массив. Нечетность, отрицательность.
Задан целочисленный массив из 20 элементов определить и вывести на экран сумму тех элементов которые нечетны и отрицательны. Начинаю...

Как проверить отрицательность двух чисел в операторе Switch?
Мне нужно проверить координаты мыши X и Y на отрицательность. Что-то по типу этого: switch(PosMos.x, PosMos.y) { case > 0,...

Как проверить положительность или отрицательность суммы трёх чисел на сервере SQL Server ?
Есть 2 запроса SELECT возвращающих числа и есть известное число: SELECT count FROM sklad WHERE id_tovar = 34 ; - даёт первое число...

24
433 / 368 / 149
Регистрация: 06.08.2012
Сообщений: 961
14.11.2014, 23:39
C++
1
if ((i % 2 != 0) && (i < 0))
1
 Аватар для Aecttann
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
15.11.2014, 00:07  [ТС]
Issues, если вот так:
C++
1
2
3
4
5
6
            if ((i < 0) && (i % 2 != 0))
 
 
                return Acceptable;
            else
                return Invalid;
нет, так не работает, вообще ничего не вводится в редактор
0
433 / 368 / 149
Регистрация: 06.08.2012
Сообщений: 961
15.11.2014, 00:48
Aecttann,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
int main()
{
    int i = -11;
 
    if ((i < 0) && (i % 2 != 0))
        std::cout << "Acceptable \n";
    else
        std::cout << "Invalid \n";
 
    return 0;
}
1
 Аватар для Aecttann
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
15.11.2014, 00:59  [ТС]
в валидаторе эти условия не хотят одновременно работать.
по отдельности - работают
0
433 / 368 / 149
Регистрация: 06.08.2012
Сообщений: 961
15.11.2014, 02:19
Aecttann, кинь весь код
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
15.11.2014, 02:32
Возможно как то так:
C++
1
2
3
4
if (( i < 0 ) || ( i % 2 ))
   return Invalid;
else
   return Acceptable;
Или нужно проверить, является ли число одновременно и отрицательным и нечетным?
1
 Аватар для Aecttann
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
15.11.2014, 13:25  [ТС]
Issues,
хедер:
Кликните здесь для просмотра всего текста
C++ (Qt)
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
#ifndef AECTANN_H
#define AECTANN_H
 
class Aectan_Validator : public QValidator
{
    Q_OBJECT
public:
    Aectan_Validator(int pole = 0, QObject *parent = 0) : QValidator (parent) 
    {
        this->pole = pole;
    };
    int pole;
    virtual State validate ( QString & str, int & pos ) const
        {
        //  int counter;
        //  counter = 0;
            //str = 10;
            
            pos = str.length();
            
            bool ok;
            int i = str.toInt (&ok);
            
            //char b = '-';
 
 
            /*
            if ((i > 0) && (i % 2 == 0))
                 return Invalid;
            else
                return Acceptable;
            */
            
            if(i > pole)
                return Invalid;
            else
                return Acceptable;
 
        }
};
 
 
class Aectann : public QWidget
{
    Q_OBJECT
 
public:
    Aectann(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~Aectann();
    
 
    QSpinBox *spin;
    QLabel *lbl;
    QLabel *lbl2;
    QLineEdit *line;
    Aectan_Validator *lol;
public slots:
//  void slot_for_checking_QlineEdit();
};
 
#endif // AECTANN_H


cpp:
Кликните здесь для просмотра всего текста
C++ (Qt)
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
#include "stdafx.h"
 
Aectann::Aectann(QWidget *parent, Qt::WFlags flags)
    : QWidget(parent, flags)
{
    int a = 2;
    
    spin = new QSpinBox ( this);
    line = new QLineEdit (this); 
    lbl = new QLabel("spin: Alt+&A", this);
    lbl2 = new QLabel("edit: Alt+&B", this);
    
    spin->setMaximum(10000);
    spin->setMinimum(-10000);
 
//  spin->setSingleStep(a);
 
    spin->setPrefix(" ");
    spin->setSuffix (" pieces");
 
    spin->setButtonSymbols(QAbstractSpinBox::PlusMinus);
 
    int r = spin -> value();
    lol = new Aectan_Validator(r, this);
    line->setValidator(lol);
    line->move(0,30);
    
 
 
    lbl->move(0,50);
    lbl->setBuddy(spin);
 
    lbl2->move(0,70);
    lbl2->setBuddy(line);
 
    resize(200, 200);
}
 
Aectann::~Aectann()
{
 
}


pole - для того, чтобы задавать максимальное значение вводимых элементов счётчиком QSpinBox, но оно не работает, так же как и одновременное условие отрицательного нечётного числа

Добавлено через 8 минут
Toshkarik, да, эти условия должны выполняться одновременно
0
433 / 368 / 149
Регистрация: 06.08.2012
Сообщений: 961
15.11.2014, 16:10
del
0
 Аватар для Aecttann
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
15.11.2014, 16:15  [ТС]
Issues, что?
0
433 / 368 / 149
Регистрация: 06.08.2012
Сообщений: 961
15.11.2014, 16:23
Причина скорее не в условии, а в самом валидаторе. Или кинь весь проэкт и напиши что нужно сделать, или напиши в раздел Qt.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
15.11.2014, 20:25
Лучший ответ Сообщение было отмечено Aecttann как решение

Решение

То есть, если число отрицательное и нечетное, то возвращаем Acceptable, иначе Invalid?

Тогда вот так:

C++
1
2
3
4
if (( i < 0 ) && ( i % 2 ))
   return Acceptable;
else
   return Invalid;
Но у Вас несколько проверок в функции. Возможно, подойдет что то вроде этого:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
virtual State validate ( QString & str, int & pos ) const
{
     //  int counter;
        //  counter = 0;
            //str = 10;
            
            pos = str.length();
            
            bool ok;
            int i = str.toInt (&ok);
            
            //char b = '-';
   
   if (( i >= 0 ) || ( i % 2 == 0 ) || ( i > pole ))
      return Invalid;
   
   return  Acceptable;
}
1
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
15.11.2014, 20:44
если надо проверить одновременно четность и отрицательсность, то

C++
1
2
3
4
5
6
7
int mask = std::numeric_limits<int>::min() | 1;
 
if ((i & mask) == mask) {
    // нечетное и отрицательное
} else {
    // четное и не отрицательное
}
1
 Аватар для Aecttann
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
16.11.2014, 00:30  [ТС]
Цитата Сообщение от Toshkarik Посмотреть сообщение
Тогда вот так:
C++ (Qt)
1
2
3
4
if (( i < 0 ) && ( i % 2 ))
* *return Acceptable;
else
* *return Invalid;
нет, так не будет работать
к тому же я писал:
C++ (Qt)
1
2
3
4
            if ((i > 0) && (i % 2 == 0))
                 return Invalid;
            else
                return Acceptable;
потому что если по написать по Вашему примеру, то условие проверит первый символ, то есть либо положительно число, либо знак минус - и ничего не введётся, поэтому такие извращения

Цитата Сообщение от Toshkarik Посмотреть сообщение
Но у Вас несколько проверок в функции. Возможно, подойдет что то вроде этого:
Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
virtual State validate ( QString & str, int & pos ) const
{
* * *// *int counter;
* * * * // *counter = 0;
* * * * * * //str = 10;
pos = str.length();
bool ok;
* * * * * * int i = str.toInt (&ok);
//char b = '-';
if (( i >= 0 ) || ( i % 2 == 0 ) || ( i > pole ))
* * * return Invalid;
return *Acceptable;
}
вот так тоже не работает
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
16.11.2014, 01:43
Aecttann, в первую очередь Вам нужно проверять переменную ok. Если она == true, то мой последний вариант должен нормально работать.
1
 Аватар для Aecttann
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
16.11.2014, 01:59  [ТС]
Вот полный код, все файлы, постановка задачи. Идей уже ноль...
Хедер:
Кликните здесь для просмотра всего текста
C++ (Qt)
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
#ifndef AECTANN_H
#define AECTANN_H
 
class Aectan_Validator : public QValidator
{
    Q_OBJECT
public:
    Aectan_Validator(int pole = 0, QObject *parent = 0) : QValidator (parent) 
    {
        this->pole = pole;
    };
    int pole;
    virtual State validate ( QString & str, int & pos ) const
        {
            pos = str.length();
            
            bool ok;
            int i = str.toInt (&ok);
 
            if (( i < 0 ) && ( (i % 2)==0 ))
            {
                return Invalid;
            }
            else
            {
                return Acceptable;
            }
        }
};
 
 
class Aectann : public QWidget
{
    Q_OBJECT
 
public:
    Aectann(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~Aectann();
    
 
    QSpinBox *spin;
    QLabel *lbl;
    QLabel *lbl2;
    QLineEdit *line;
    Aectan_Validator *lol;
public slots:
//  void slot_for_checking_QlineEdit();
};
 
#endif // AECTANN_H


cpp:
Кликните здесь для просмотра всего текста
C++ (Qt)
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
#include "stdafx.h"
 
Aectann::Aectann(QWidget *parent, Qt::WFlags flags)
    : QWidget(parent, flags)
{
    int a = 2;
    
    spin = new QSpinBox ( this);
    line = new QLineEdit (this); 
    lbl = new QLabel("spin: Alt+&A", this);
    lbl2 = new QLabel("edit: Alt+&B", this);
    
    spin->setMaximum(10000);
    spin->setMinimum(-10000);
 
//  spin->setSingleStep(a);
 
    spin->setPrefix(" ");
    spin->setSuffix (" pieces");
 
    spin->setButtonSymbols(QAbstractSpinBox::PlusMinus);
 
    int r = spin -> value();
    lol = new Aectan_Validator(r, this);
    line->setValidator(lol);
    line->move(0,30);
    
 
 
    lbl->move(0,50);
    lbl->setBuddy(spin);
 
    lbl2->move(0,70);
    lbl2->setBuddy(line);
 
    resize(200, 200);
}
 
Aectann::~Aectann()
{
 
}



в main'е ничего лишнего:
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
#include "stdafx.h"
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Aectann w;
    w.show();
    return a.exec();
}


в stdafx 2 библиотеки:
C++ (Qt)
1
2
#include <QtGui>
#include "aectann.h"
Полная постановка задачи:
Кликните здесь для просмотра всего текста
Окно приложения содержит 1 однострочный текстовый редактор (класс QLineEdit), 1 счетчик (класс QSpinBox), 2 надписи. Надписи необходимо связать с редактором и счетчиком. В текстовый редактор можно вводить только целые положительные нечетные числа - для проверки на ввод данных можно использовать класс QValidator и его наследников. Счетчик позволяет задать максимальное количество разрядов вводимых чисел в текстовый редактор. Вводимые в редактор числа должны автоматически отображаться в заголовке окна приложения.


Добавлено через 31 секунду
Цитата Сообщение от Toshkarik Посмотреть сообщение
Если она == true, то мой последний вариант должен нормально работать.
сейчас попробую

Добавлено через 3 минуты
Toshkarik, работает! спасибо.
0
 Аватар для Aecttann
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
20.11.2014, 22:04  [ТС]
Toshkarik, каким способом можно ограничить ввод данных только до целых, отрицательных, нечётных чисел?
то есть чтобы в редактор нельзя было вводить буквы, символы и числа типа double.
валидатор:
Кликните здесь для просмотра всего текста
C++ (Qt)
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
class Aectan_Validator : public QValidator
{
    Q_OBJECT
public:
    Aectan_Validator(QObject *parent = 0) : QValidator (parent) 
    {
        //this->pole = pole;
    };
    //int pole;
    public slots:
 
 
virtual State validate ( QString & str, int & pos ) const
{
            pos = str.length();
            
            bool ok;
            int i = str.toInt (&ok);
   
   if ((ok!=false)&&((i%1)||( i >= 0 ) || ( i % 2 == 0 )))
      return Invalid;
   
   return  Acceptable;
} 
};
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
20.11.2014, 22:20
Aecttann, не используйте toInt. Проверяйте каждый новый введенный символ.
0
 Аватар для Aecttann
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
20.11.2014, 22:41  [ТС]
Toshkarik, проверять str? так а как тогда применить то же "%"?

Добавлено через 4 минуты
может, сделать какой-то дополнительный валидатор?
но что в нём проверять?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
20.11.2014, 22:48
Aecttann, а зачем его применять?

Добавлено через 7 минут
Мне вот немного непонятно стало. Ведь число 11, скажем, нечетное. Но 112 четное. По Вашей схеме ведь его не введешь? Или я чего то не так понял?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.11.2014, 22:48
Помогаю со студенческими работами здесь

Проверить число на отрицательность
Доброго времени суток! Подскажите как можно проверить число на &lt;0. Просьба помочь кодом и объяснениями. P.S. Подскажите понятную новичку...

Проверить число на отрицательность
проверяю так MAX_VALUE dw 32768 ... cmp ax, MAX_VALUE А можно как-то без MAX_VALUE?

Проверить число на нечетность
// zadanie 7_suma kubov ne chentich chisel.cpp: определяет точку входа для консольного приложения. // #include...

Проверить, можно ли построить треугольник из отрезков с длинами x, y, z. Предусмотреть проверку вводимых данных на отрицательность
Проверить, можно ли построить треугольник из отрезков с длинами x, y, z. Предусмотреть проверку вводимых данных на отрицательность.

Проверить нечетность числа (Турбо Си)
как указать нечётность в Турбо Си


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru