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

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

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

Author24 — интернет-сервис помощи студентам
Суть задания:
Разработать алгоритм и написать программу вычисления
заданного целочисленного выражения для данных в формате 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2019, 20:51
Ответы с готовыми решениями:

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

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

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

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

14
Модератор
Эксперт С++
13505 / 10756 / 6411
Регистрация: 18.12.2011
Сообщений: 28,711
27.10.2019, 21:00 2
Цитата Сообщение от 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  [ТС] 3
Да-да, я забыл {}
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
27.10.2019, 21:02 4
Edelweiss02, Вы знаете, как в Си(++) делятся целые числа?
А они делятся так
1/2 = 0
7/3 = 2
и так далее
И покажите, какие числа вы вводите и что на выходе.
1
0 / 0 / 0
Регистрация: 27.10.2019
Сообщений: 8
27.10.2019, 21:07  [ТС] 5
Подскажите, а как сделать, чтобы программа проверяла условие и высчитывала значение переменной res

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

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

1-(2/4)=0,5

res=0,5

Добавлено через 2 минуты
В общем проблема в типе данных, сменил тип на double - работает
Но по условие задания "в формате 16 бит со знаком" должен быть short или какой тип данных?
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
27.10.2019, 21:13 6
Лучший ответ Сообщение было отмечено 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
Модератор
Эксперт С++
13505 / 10756 / 6411
Регистрация: 18.12.2011
Сообщений: 28,711
27.10.2019, 21:26 7
Байт, на мой взгляд для данного случая бессмысленно приводить к double, т.к. потом все равно надо получить short.
Зависит, конечно, от того, какой смысл заложен в формулах.
Если никакой, то и приводить не стоит.
0
0 / 0 / 0
Регистрация: 27.10.2019
Сообщений: 8
27.10.2019, 21:26  [ТС] 8
А все же, почему выдавало 0 и 1 при типе данных short? Что с ним не так? Как он работает?
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
27.10.2019, 21:29 9
Цитата Сообщение от zss Посмотреть сообщение
потом все равно надо получить short.
Это уже вопрос к дурной постановке задачи. Или к неправильному ее пониманию.

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

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

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

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

Так что, можете считать, что все вычисляется правильно.
Единственное - не предусмотрена проверка ошибки при делении на нуль (т.е. при a==0 в первом условии и при b==0 - во втором).
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
27.10.2019, 21:33 12
Ну, значит придется округлить.
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  [ТС] 13
ОДЗ я еще не проводил, это отработаю (насчет деления на нуль).

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

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

Решение

Цитата Сообщение от Edelweiss02 Посмотреть сообщение
Какая логика этого типа short? Он округляет значение?
Отбрасывает дробную часть
(short)(0.99999) = 0
0
0 / 0 / 0
Регистрация: 27.10.2019
Сообщений: 8
27.10.2019, 21:54  [ТС] 15
Вот за это пояснение огромное спасибо! Теперь все более-менее понятно!
0
27.10.2019, 21:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2019, 21:54
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru