Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
#1

Программа с непонятным выводом - C++

02.03.2011, 16:14. Просмотров 840. Ответов 11
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
 #include <iostream>
using namespace std;
 
int main() {
  int s,b,a;
 
  cout << "Vvedite summu: ";
  cin >> s;
   a = s / 100; // 1 разряд
   b = (((s / 10) / 10.0) - a) * 10; // 2 разряд числа
   cout << b << '  ' <<  (((s / 10) / 10.0) - a) * 10; 
  return 0; 
}
Почему ответы при выводе разные получаются если я ввожу число 827 в качестве переменной s?? Хотя выражения при этом одинаковые ,но почему - то в переменной b выводит 1 ,а в том что рядом выражении 2.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Форумчанин
Эксперт С++
4469 / 2831 / 224
Регистрация: 12.12.2009
Сообщений: 7,201
Записей в блоге: 1
Завершенные тесты: 1
02.03.2011, 16:28     Программа с непонятным выводом #2
C++
1
b = (s % 100) / 10; // 2 разряд числа
1-ую цифру можно получить так:
C++
1
с=s%10;
Добавлено через 2 минуты

Не по теме:

эээ, или суть задания не в этом?

easybudda
Эксперт С++
9454 / 5467 / 926
Регистрация: 25.07.2009
Сообщений: 10,490
02.03.2011, 16:37     Программа с непонятным выводом #3
C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main(void){
    int number;
 
    while ( printf("Number: ") && scanf("%d", &number) == 1 && number > 99 && number < 1000 )
        printf("%d-%d-%d\n", number / 100, (number / 10) % 10, number % 10);
 
    return 0;
}
Kastaneda
Форумчанин
Эксперт С++
4469 / 2831 / 224
Регистрация: 12.12.2009
Сообщений: 7,201
Записей в блоге: 1
Завершенные тесты: 1
02.03.2011, 16:41     Программа с непонятным выводом #4
easybudda, а что вы скажете по этому поводу:
но почему - то в переменной b выводит 1 ,а в том что рядом выражении 2.
Я скомпилил, действительно так, вот сижу голову ломаю.
easybudda
Эксперт С++
9454 / 5467 / 926
Регистрация: 25.07.2009
Сообщений: 10,490
02.03.2011, 16:51     Программа с непонятным выводом #5
Цитата Сообщение от Kastaneda Посмотреть сообщение
Я скомпилил, действительно так, вот сижу голову ломаю.
У меня оно вообще ересь какую-то вывело
Программа с непонятным выводом
Kastaneda
Форумчанин
Эксперт С++
4469 / 2831 / 224
Регистрация: 12.12.2009
Сообщений: 7,201
Записей в блоге: 1
Завершенные тесты: 1
02.03.2011, 16:55     Программа с непонятным выводом #6
ага, там один пробел лишний в
C++
1
cout << b << '  ' <<  (((s / 10) / 10.0) - a) * 10;
между одинарными ковычками 2 пробела, просто их не видно. Уберите там один пробел и будет выведенно "1 2"

P.S.а меня MinGW предупредил по поводу пробела.
easybudda
Эксперт С++
9454 / 5467 / 926
Регистрация: 25.07.2009
Сообщений: 10,490
02.03.2011, 16:58     Программа с непонятным выводом #7
Да и вообще код полон ереси, если присмотреться

Цитата Сообщение от ElvenDragon Посмотреть сообщение
b = (((s / 10) / 10.0) - a)
почему первое деление целочисленное, а второе вещественное? компиляторы, кстати, на это отчаяно ругаются, но кто бы на них внимание обращал...
второе: если убрать вещественное деление и делить два раза на 10, а потом отнять то, что при делении на 100 осталось - получится ноль. Если после второй десятки убрать точку с нулём - выведется два нуля, что в общем и не удивляет.

Добавлено через 13 секунд
Цитата Сообщение от Kastaneda Посмотреть сообщение
между одинарными ковычками 2 пробела
ага, и это тоже
Kastaneda
Форумчанин
Эксперт С++
4469 / 2831 / 224
Регистрация: 12.12.2009
Сообщений: 7,201
Записей в блоге: 1
Завершенные тесты: 1
02.03.2011, 17:08     Программа с непонятным выводом #8
Цитата Сообщение от easybudda Посмотреть сообщение
почему первое деление целочисленное, а второе вещественное?
Это вопрос к ТС, кстати результатом такого кода (((s / 10) / 10.0) - a) * 10; действительно будет второй разряд числа, где ТС его откопал...

Цитата Сообщение от easybudda Посмотреть сообщение
компиляторы, кстати, на это отчаяно ругаются
да вроде ругаться не на что (разве что настройки компилятора максимально "ругательные")), везде будет использованно неявное приведение типов.
easybudda
Эксперт С++
9454 / 5467 / 926
Регистрация: 25.07.2009
Сообщений: 10,490
02.03.2011, 17:10     Программа с непонятным выводом #9
Цитата Сообщение от Kastaneda Посмотреть сообщение
да вроде ругаться не на что
это похвалить бывает не за что, а обругать причина всегда найдётся!
andrew@rd-andrew ~/cpp/shitcode
$ g++ -o bebe bebe.cpp
bebe.cpp: In function `int main()':
bebe.cpp:12: warning: converting to `int' from `double'
bebe.cpp:13:17: warning: multi-character character constant
Kastaneda
02.03.2011, 17:13
  #10

Не по теме:

Цитата Сообщение от easybudda Посмотреть сообщение
bebe.cpp:13:17: warning: multi-character character constant
вот же тоже на лишний пробел ругается.

ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
02.03.2011, 21:04  [ТС]     Программа с непонятным выводом #11
Поясняю код с 2 разрядом c числом 827
s / 10 отбрасывает 7 и получается 82
дальше я делю на 10.0 чтоб получить 8.2 а не 8
после этого от 8.2 отнимаю 8 это первый разряд a = s / 100
получается 0.2 * 2 под конец и получаю 2 разряд который равен 2.
Но почемут когда я присваиваю целочисленной переменной b он каким то волшебным образом в 1 превращается.
А если не присваить а вывести выражение то все ок. Но если объявить b c плавающей точкой то тоже все ок. Так в чем проблема?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2011, 21:35     Программа с непонятным выводом
Еще ссылки по теме:

ошибка с выводом переменной C++
Что с выводом на консоль? C++
Exe с выводом текста C++
Ошибка с выводом C++
C++ Непонятки с выводом

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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт С++
9454 / 5467 / 926
Регистрация: 25.07.2009
Сообщений: 10,490
02.03.2011, 21:35     Программа с непонятным выводом #12
ElvenDragon, а типы за Вас Страуструпп приводить будет? Я же Вам показал, как на цифры число проще разложить, зачем Вам эта ересь?
Yandex
Объявления
02.03.2011, 21:35     Программа с непонятным выводом
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru