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

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

Войти
Регистрация
Восстановить пароль
 
Nawar
1 / 1 / 0
Регистрация: 09.06.2015
Сообщений: 15
#1

Тайные знаки и путанница ссылок с указателями - C++

01.08.2015, 13:54. Просмотров 200. Ответов 11
Метки нет (Все метки)

Всего два вопроса.

C++
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
#include <iostream>
using namespace std;
 
void fn(int& b)
{
     int c = 0;
     do
     {
          cout << "Введите число:";
          cin >> c;
          
          if (c>0) {b+=c;}
          if (c<0) {c=-c;  b-=c;}
          
          cout << "b=" << b << endl;
          
     }while(c!=0);
};
         
int main()
{
    setlocale(0,"");
    int bal = 0;
    fn(bal);
    
    system("pause");
    return 0;
}
Почему строка
C++
1
if (c<0) {c=-c;  b-=c;}
работает, как надо, а вот эта строка
C++
1
if (c<0) {b-=c;} // Тоже самое, только без c=-c
работает не так, как надо.

И второй вопрос. Как можно было бы сделать ту же самую программу, используя в функции fn не (int& b), а (int* b) ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2015, 13:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Тайные знаки и путанница ссылок с указателями (C++):

Путанница - C++
Доброго времени суток. Некая проблема возникла, решение которой мне неизвестно. Вот всё хорошо: выводится ошибка, если вместо...

Заменить в файле все знаки "+" на знаки "-", а знаки "-" на знаки "+" - C++
Добрый день помогите перевести код на Паскале на язык C++. uses crt; const a='+'; b='-'; var f : Text; st: String; i: Byte;...

ARP путанница - Сети
Доброго времни суток всем. Запутался вот.... Какие записи должна содержать таблица маршрутизации шлюза, объединяющего две сети для...

Путанница с кодировками - MySQL
Здравствуйте, буду очень признателен помощи. В общем перед правкой сайта сделал бэкап БД. Потом что-то намудрил в phpMyAdmin с...

Прохождение S.T.A.L.K.E.R.: Тайные тропы - Action/FPS игры
Дайте пожалуйста ссылку на полное прохождение на эту игры (S.T.A.L.K.E.R. Новый сюжет 5+Тайные тропы)

базы данных: тайные потоки - Базы данных
Всем привет! Нужна информация про тайные потоки баз данных. Может кто знает...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kerry_Jr
Модератор
Эксперт PHP
2186 / 1982 / 692
Регистрация: 14.05.2014
Сообщений: 5,792
Записей в блоге: 1
Завершенные тесты: 5
01.08.2015, 14:00 #2
Nawar,
1) b - -c == b + c, т.е если с - отрицательное число, то при вычитании его из положительногоb, оно к b прибавится, а если b - отрицательное, то из с вычтется b. Хотя вопрос ещё и в том, как оно себя ведет и как нужно чтобы себя вело.
2) везде, где нужно использовать значение b(арифметические операции, присвоение нового значения, вывод значения в на консоль), перед этой самой b нужно поставить звездочку
MansMI
1164 / 956 / 249
Регистрация: 08.01.2012
Сообщений: 3,495
01.08.2015, 14:01 #3
if (c<0) b+=c;
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.08.2015, 14:01 #4
Цитата Сообщение от Nawar Посмотреть сообщение
работает не так, как надо.
Работает так, как написано. Лучше скажи, чего ты ожидаешь, т.к. "работает не так" слишком размытое понятие.
Цитата Сообщение от Nawar Посмотреть сообщение
используя в функции fn не (int& b), а (int* b) ?
Везде, где раньше в теле функции было b следует писать *b. Вся разница.
Nawar
1 / 1 / 0
Регистрация: 09.06.2015
Сообщений: 15
01.08.2015, 14:13  [ТС] #5
Со вторым вопросом всё понятно. Но с первым, чёрт...
Если разложить математически.
c=-c. Значит, если c = -c, то первая строка и будет давать плюс. Ведь, если c = -c, а b-=с (т.е. b = b - - c, что == b =b+c). Из этого следует, что именно строка {c=-c; b-=c;} не будет давать желаемого результата, а строка {b-=c, т.е. b=b-c} должна этот результат давать. Но всё происходит наоборот. Я явно чего то не понимаю. Объясните, пожалуйста)
rikimaru2013
C++ Game Dev
2429 / 1123 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
01.08.2015, 14:18 #6
Начните перечитывать алгебру 6 класс.
3 + (-2) == 3 - 2
b += c всегда даст ВЕРНЫЙ результат не в зависимости какой знак у c

следовательно проверок c>0 c< 0 c==0 ненадо делать.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.08.2015, 14:18 #7
Цитата Сообщение от Nawar Посмотреть сообщение
Я явно чего то не понимаю.
Распиши на конкретных числах и всё поймешь.
Nawar
1 / 1 / 0
Регистрация: 09.06.2015
Сообщений: 15
01.08.2015, 14:29  [ТС] #8
Точно, так и есть. Чёрт, какой же я тупой.
Спасибо, господа)
Tulosba
01.08.2015, 14:32
  #9

Не по теме:

Цитата Сообщение от Nawar Посмотреть сообщение
Спасибо, господа)
Заходи, если что

Nawar
1 / 1 / 0
Регистрация: 09.06.2015
Сообщений: 15
01.08.2015, 15:00  [ТС] #10
В общем.

Добавил я оператор вывода.

C++
1
if (c<0) { c=-c; cout << c << endl; b-=c;}
Здесь "c" положительное число. Если из c=-c убрать минус, "c" будет отрицательным. Что это за накладка минуса на минус?

Исходя из этого, строка if(c<0) {b+=c} намного проще и ничем, кроме длинны от {c=-c;b-=c;} не отличается. Но как он минус на минус накладывает?

Добавлено через 5 минут
Всё ясно, вопрос отпадает.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.08.2015, 15:03 #11
Цитата Сообщение от Nawar Посмотреть сообщение
Если из c=-c убрать минус, "c" будет отрицательным.
Ты, похоже, вообще не понимаешь что значит запись:
C++
1
c=-c;
А значит она то, что у значения меняется знак на противоположный: было отрицательным - стало положительным. Понятно, что если ты уберешь минус, то число как было отрицательным, так им и останется.
Nawar
1 / 1 / 0
Регистрация: 09.06.2015
Сообщений: 15
01.08.2015, 15:06  [ТС] #12
Спасибо, что отвечаете даже на идиотские вопросы. Теперь, всё ясно на 100%.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2015, 15:06
Привет! Вот еще темы с ответами:

Тайные функции Opera, о которых мало кто знает... - Софт
Вот стал бить по клавиатуре:D, и нажал клавишу Del в цифровой части клавиатуры.:umnik: Появилось окно поиска по сайту. Вводим слово, а...

Посторить множество, в состав которого входят знаки операций отношения и знаки препинания - Turbo Pascal
дана непустая последовательность символов. нужно посторить и напечатать множину к составу которой входят знаки операций отношения и знаки...

Восклицательные знаки и знаки процента в именах файлов - CMD/BAT
Здравствуйте! Помогите решить задачу. Коротко: Проблема в знаках ! и % в именах файлов. (Восклицательный знак и знак процента) P.S....

Даны номерные знаки нескольких автомашин. Опредеите, есть ли среди них знаки,имеющие код города не 77,90 или 99. - Pascal
Даны номерные знаки нескольких автомашин. Опредеите, есть ли среди них знаки,имеющие код города не 77,90 или 99. program a3; uses...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.08.2015, 15:06
Ответ Создать тему
Опции темы

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