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

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

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

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

01.08.2015, 13:54. Просмотров 199. Ответов 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++. uses crt; const a='+'; b='-'; var f : Text; st: String; i: Byte;...

работа с указателями - C++
Вспоминаю с++ и в связи с этим возникло несколько вопросов. 1) если сделать так : myobj *obj = new myobj(); то потом можно...

Прикол с указателями - C++
взял пример с http://www.cplusplus.com/reference/algorithm/find/, немного поэксперементировал и наткнулся на необъяснимый факт) Смотрим: ...

Работа с указателями - C++
Всем здравия. Нужна ваша помощь. Есть задание по С++. К сожалению работала в основном по С# да и с указателями не совсем лажу. Может кто...

задача с Указателями - C++
помогите!!как этот код написать с указателями?? #include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &quot;locale.h&quot; #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kerry_Jr
Модератор
Эксперт PHP
2168 / 1964 / 685
Регистрация: 14.05.2014
Сообщений: 5,747
Записей в блоге: 1
Завершенные тесты: 5
01.08.2015, 14:00     Тайные знаки и путанница ссылок с указателями #2
Nawar,
1) b - -c == b + c, т.е если с - отрицательное число, то при вычитании его из положительногоb, оно к b прибавится, а если b - отрицательное, то из с вычтется b. Хотя вопрос ещё и в том, как оно себя ведет и как нужно чтобы себя вело.
2) везде, где нужно использовать значение b(арифметические операции, присвоение нового значения, вывод значения в на консоль), перед этой самой b нужно поставить звездочку
MansMI
1136 / 933 / 240
Регистрация: 08.01.2012
Сообщений: 3,392
01.08.2015, 14:01     Тайные знаки и путанница ссылок с указателями #3
if (c<0) b+=c;
Tulosba
:)
Эксперт С++
4392 / 3235 / 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
2406 / 1100 / 238
Регистрация: 30.11.2013
Сообщений: 3,624
01.08.2015, 14:18     Тайные знаки и путанница ссылок с указателями #6
Начните перечитывать алгебру 6 класс.
3 + (-2) == 3 - 2
b += c всегда даст ВЕРНЫЙ результат не в зависимости какой знак у c

следовательно проверок c>0 c< 0 c==0 ненадо делать.
Tulosba
:)
Эксперт С++
4392 / 3235 / 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
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.08.2015, 15:03     Тайные знаки и путанница ссылок с указателями #11
Цитата Сообщение от Nawar Посмотреть сообщение
Если из c=-c убрать минус, "c" будет отрицательным.
Ты, похоже, вообще не понимаешь что значит запись:
C++
1
c=-c;
А значит она то, что у значения меняется знак на противоположный: было отрицательным - стало положительным. Понятно, что если ты уберешь минус, то число как было отрицательным, так им и останется.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2015, 15:06     Тайные знаки и путанница ссылок с указателями
Еще ссылки по теме:

Работа с указателями - C++
Написать программу работы с указателями. LONG *p1; ULONG x = 5; LONG y = -1; LONG *p2 = p1 + 50; p2 = p2 + x * y; *p2 = 1; ...

проблема с указателями - C++
struct magazin { int nomer; char nazvanie; char fio; int kol; double dohod; magazin *prev,*next; magazin *pt,*pg; } ...

Программа с «указателями» - C++
Всем привет! Ребят, требуется сдать последнюю программу на этот семестр, нужно написать прогу при помощи указателей, единственный человек...

Массив. с указателями с++ - C++
1. Задан массив из 10 целых чисел. Посчитать количество смен знаков заданных чисел. Перебор элементов массива должен осуществляться...


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

Или воспользуйтесь поиском по форуму:
Nawar
1 / 1 / 0
Регистрация: 09.06.2015
Сообщений: 15
01.08.2015, 15:06  [ТС]     Тайные знаки и путанница ссылок с указателями #12
Спасибо, что отвечаете даже на идиотские вопросы. Теперь, всё ясно на 100%.
Yandex
Объявления
01.08.2015, 15:06     Тайные знаки и путанница ссылок с указателями
Ответ Создать тему
Опции темы

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