Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

02.03.2011, 16:14. Просмотров 890. Ответов 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.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2011, 16:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа с непонятным выводом (C++):

программа по непонятным мне причинам работает неверно - C++
#include &lt;cstdio&gt; #include &lt;iostream&gt; #include &lt;clocale&gt; using namespace std; int main() { setlocale(LC_ALL,...

Вылет по непонятным причинам! - C++
вот мой код....правда не полный...потомучто ошибка гдето тут: #include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include&lt;time.h&gt; ...

Проблема с выводом - C++
Здравствуйте.Приношу извинения за банальный вопрос,но ,к сожалению, никак не могу разобраться самостоятельно. Проблема: -Код: ...

Проблемы с выводом - C++
Подскжите пожалуйста почему не работает эта программа ? Почему точнее не работает вывод ? #include&lt;iostream&gt; #include&lt;string&gt; ...

Непонятки с выводом - C++
Задание гласит: Вычислить приближенное значение конечной суммы с точностью e:0.0005 ...

Помогите с выводом - C++
// Подключение Библиотек #include &lt;iostream.h&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; ...

11
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,355
Записей в блоге: 2
Завершенные тесты: 1
02.03.2011, 16:28 #2
C++
1
b = (s % 100) / 10; // 2 разряд числа
1-ую цифру можно получить так:
C++
1
с=s%10;
Добавлено через 2 минуты

Не по теме:

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

1
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
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;
}
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,355
Записей в блоге: 2
Завершенные тесты: 1
02.03.2011, 16:41 #4
easybudda, а что вы скажете по этому поводу:
но почему - то в переменной b выводит 1 ,а в том что рядом выражении 2.
Я скомпилил, действительно так, вот сижу голову ломаю.
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
02.03.2011, 16:51 #5
Цитата Сообщение от Kastaneda Посмотреть сообщение
Я скомпилил, действительно так, вот сижу голову ломаю.
У меня оно вообще ересь какую-то вывело
Программа с непонятным выводом
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,355
Записей в блоге: 2
Завершенные тесты: 1
02.03.2011, 16:55 #6
ага, там один пробел лишний в
C++
1
cout << b << '  ' <<  (((s / 10) / 10.0) - a) * 10;
между одинарными ковычками 2 пробела, просто их не видно. Уберите там один пробел и будет выведенно "1 2"

P.S.а меня MinGW предупредил по поводу пробела.
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
02.03.2011, 16:58 #7
Да и вообще код полон ереси, если присмотреться

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

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

Цитата Сообщение от easybudda Посмотреть сообщение
компиляторы, кстати, на это отчаяно ругаются
да вроде ругаться не на что (разве что настройки компилятора максимально "ругательные")), везде будет использованно неявное приведение типов.
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
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
0
Kastaneda
02.03.2011, 17:13
  #10

Не по теме:

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

0
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 плавающей точкой то тоже все ок. Так в чем проблема?
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
02.03.2011, 21:35 #12
ElvenDragon, а типы за Вас Страуструпп приводить будет? Я же Вам показал, как на цифры число проще разложить, зачем Вам эта ересь?
0
02.03.2011, 21:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2011, 21:35
Привет! Вот еще темы с ответами:

Ошибка с выводом - C++
Patient: Фамилия, Имя, Отчество, Адрес, Номер медицинской карты, Показатель температуры. Определить отклонения температуры пациента от ...

Проблемы с выводом - C++
Это часть программы. При вводе фамилии , имени, телфон, дату и вводишь &quot;*&quot; вывод получаеться правильный( выводить фамилия и имя). При вводе...

трабла с выводом строки - C++
вот код который неправильно работает: void Cue::Out() { char ch; for (int i=0; i&lt;curInd; ++i) { ch = Str; ...

Проблема с выводом строки - C++
#include&lt;iostream&gt; #include&lt;string&gt; #include&lt;conio.h&gt; #define SIZE 100 using namespace std; class Adress { char fam; ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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