Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 27.10.2019
Сообщений: 8

Не понимаю, почему получаются в ответе только нули и единицы

27.10.2019, 20:51. Показов 3083. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть задания:
Разработать алгоритм и написать программу вычисления
заданного целочисленного выражения для данных в формате 16 бит со знаком,
используя оператор IF. Промежуточные вычисления могут проводиться с
использованием любых типов данных (с обоснованием выбора типа
данных), а тип результата Х - тоже должно быть 16 бит со знаком.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
int main()
{
    short a, b, res; 
    cout << "Input a: ";
    cin >> a;
    cout << "Input b: ";
    cin >> b; 
    if (a > b)
        res = 1 - b / a;
    else if (a == b)
        res = -10;
    else  
        res = (a - 5) / b;
    cout << "Result = "<< res;
    return 0;
}
В результате вычисления выводит 0 или 1, а мне нужно числовое значение. Подскажите, как исправить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.10.2019, 20:51
Ответы с готовыми решениями:

Скопировать в новый текстовый файл все символы исходного, заменив все нули на единицы, а единицы на нули
Дан текстовый файл f. Переписать в файл g все компоненты файла f с заменой символа 0 на символ 1 и наоборот

Дано целое число N и набор из N целых чисел, содержащий только нули и единицы.
Дано целое число N и набор из N целых чисел, содержащий только нули и единицы. Найти номер элемента, с которого начинается самая длинная...

Замена нулей на единицы и единицы на нули в матрицах с использованием функций
Всем доброго времени суток! Пишу программу в которой должна производиться замена нулей, в третьем столбце, на единицы в матрице а. А в...

14
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
27.10.2019, 21:00
Цитата Сообщение от Edelweiss02 Посмотреть сообщение
выводит 0 или 1
для каких a и b Вы считаете, что получается неправильный результат?

p.s. надеюсь Вы учитываете, что b/a дает целый результат,
а, так как, эта дробь выполняется при условии a>b, то при положительных a,b результат нуль.

Попробуйте вводить числа с разными знаками и увидите не только 0 и 1 ответы
1
0 / 0 / 0
Регистрация: 27.10.2019
Сообщений: 8
27.10.2019, 21:00  [ТС]
Да-да, я забыл {}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
27.10.2019, 21:02
Edelweiss02, Вы знаете, как в Си(++) делятся целые числа?
А они делятся так
1/2 = 0
7/3 = 2
и так далее
И покажите, какие числа вы вводите и что на выходе.
1
0 / 0 / 0
Регистрация: 27.10.2019
Сообщений: 8
27.10.2019, 21:07  [ТС]
Подскажите, а как сделать, чтобы программа проверяла условие и высчитывала значение переменной res

Мне нужно, чтобы при a > b выполнялось вычисление выражения 1-b/a

То есть: b = 2 a = 6

1-(2/4)=0,5

res=0,5

Добавлено через 2 минуты
В общем проблема в типе данных, сменил тип на double - работает
Но по условие задания "в формате 16 бит со знаком" должен быть short или какой тип данных?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
27.10.2019, 21:13
Лучший ответ Сообщение было отмечено Edelweiss02 как решение

Решение

Edelweiss02, a и b пусть остаются short. res - double.
C++
1
2
3
4
5
6
    if (a > b)
        res = 1 - 1.0*b / a;
    else if (a == b)
        res = -10;
    else  
        res = 1.0*(a - 5) / b;
Можно и так
C++
1
2
3
4
5
6
    if (a > b)
        res = 1 - b / (double)a;
    else if (a == b)
        res = -10;
    else  
        res = (a - 5) / (double)b;
Правило простое. Если один из операндов double, то и другой к нему приводится.
Более общо - приводится к более "емкому" типу.
1
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
27.10.2019, 21:26
Байт, на мой взгляд для данного случая бессмысленно приводить к double, т.к. потом все равно надо получить short.
Зависит, конечно, от того, какой смысл заложен в формулах.
Если никакой, то и приводить не стоит.
0
0 / 0 / 0
Регистрация: 27.10.2019
Сообщений: 8
27.10.2019, 21:26  [ТС]
А все же, почему выдавало 0 и 1 при типе данных short? Что с ним не так? Как он работает?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
27.10.2019, 21:29
Цитата Сообщение от zss Посмотреть сообщение
потом все равно надо получить short.
Это уже вопрос к дурной постановке задачи. Или к неправильному ее пониманию.

Добавлено через 1 минуту
Цитата Сообщение от Edelweiss02 Посмотреть сообщение
почему выдавало 0 и 1 при типе данных short?
Покажите несколько вводов. А мы попробуем вам показать - почему. И внимательнее читайте ответы. В частности, пост 4.
0
0 / 0 / 0
Регистрация: 27.10.2019
Сообщений: 8
27.10.2019, 21:31  [ТС]
Так а как мне все же получить short (если вообще этот тип нужен)?
Условие задания вот:

Разработать алгоритм и написать программу вычисления
заданного целочисленного выражения для данных в формате 16 бит со знаком,
используя оператор IF. Промежуточные вычисления могут проводиться с
использованием любых типов данных (с обоснованием выбора типа
данных), а тип результата Х - тоже должно быть 16 бит со знаком.

Может быть, я что-то не так понял?

Добавлено через 1 минуту
https://prnt.sc/pou4k8 Вот пример ввода и вывода
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
27.10.2019, 21:31
Цитата Сообщение от Edelweiss02 Посмотреть сообщение
почему выдавало 0 и 1
Я же объяснил: для положительных a и b числитель был меньше знаменателя (т.е. целая часть от деления равна нулю).
Возьмите числа разных знаков - получите другие значения.

Так что, можете считать, что все вычисляется правильно.
Единственное - не предусмотрена проверка ошибки при делении на нуль (т.е. при a==0 в первом условии и при b==0 - во втором).
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
27.10.2019, 21:33
Ну, значит придется округлить.
C++
1
2
3
4
double resdu;
short res;
res = resdu; // С отбасыванием дробной части
res = resdu + 0.5; // округление в сторону ближайшего целого
0
0 / 0 / 0
Регистрация: 27.10.2019
Сообщений: 8
27.10.2019, 21:38  [ТС]
ОДЗ я еще не проводил, это отработаю (насчет деления на нуль).

Почему выдавало 1 и 0 понял, спасибо.
Очень люблю эти лабы, в которых половина задания не ясна. Надеюсь, что правильно выполнил задание.

Спасибо за оперативную помощь, но все же остался вопрос - почему, когда значение дроби меньше единицы в ответе выдает 0 и 1? Какая логика этого типа short? Он округляет значение?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
27.10.2019, 21:47
Лучший ответ Сообщение было отмечено Edelweiss02 как решение

Решение

Цитата Сообщение от Edelweiss02 Посмотреть сообщение
Какая логика этого типа short? Он округляет значение?
Отбрасывает дробную часть
(short)(0.99999) = 0
0
0 / 0 / 0
Регистрация: 27.10.2019
Сообщений: 8
27.10.2019, 21:54  [ТС]
Вот за это пояснение огромное спасибо! Теперь все более-менее понятно!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.10.2019, 21:54
Помогаю со студенческими работами здесь

В ответе нули
Только начинаю. Нужно было написать банальную формулу, чтобы просто подставлять х ((-1)/x^2 ). Если х=1, то ответ выводит Если х -...

почему в ответе выводит нули?
program Project77; {$APPTYPE CONSOLE} uses SysUtils; var a:arrayof Real; b:arrayof Real; c:arrayof...

Как вокруг матрицы построить только одни нули или единицы ?
Как вокруг матрицы построить только одни нули или единицы ? Например у нас есть матрица 4*4 со случайными числами ) 5 2 3 4 2 4 3...

Дан массив из 13 байт. Посчитать количество байт содержащих только нули или единицы
ПОЖАЛУЙСТА! РЕШИТЕ ЗАДАЧКИ!!!:) Задача №1 дан массив из 13 байт. посчитать количество байт содержащих только нули или единицы. ...

Требуется вывести квадратную матрицу, где первый квадрат-единицы, квадрат внутри него-нули, потом снова единицы и т.д.
Требуется вывести квадратную матрицу, где первый квадрат-единицы, квадрат внутри него-нули, потом снова единицы и так далее. Прошу...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru