Софтуерно Инженерство
Loading...
GogoK avatar GogoK 80 Точки

Математика за 1ви клас

Здравейте,

имам главоблъсканица с простите изчисления, малко помощ моля. -1-1-1=1 ?  -1+1+1= -3.. шаш!

int aa = - 1 - 1 - 1;                        Console.WriteLine(aa);                   Out:  -3
int bb = c - c - c;                           Console.WriteLine(bb);                   Out:   1

int a = -5;
int b = 5;
int c = -1;

int sumA = a - b;                           Console.WriteLine(sumA);             Out:  -10
int sumB = b - a;                           Console.WriteLine(sumB);             Out:  10
int sumC = a - a - a - a - a;            Console.WriteLine(sumC);             Out:  15  
int sumD = a + a;                          Console.WriteLine(sumD);             Out: -10
int sumE = c + c + c + c + c;         Console.WriteLine(sumE);              Out:  -5

Защо се получава така че 'a' и 'b' само с разменени позиции си променят резултата(при sumA и sumB), след като се извършва една и съща операция? Да кажем че при другите (C,D,E) може да се хване някаква идея макар че ми е абсурдна, но не разбирам за (A и B) какво се случва.

Който е наясно нека обясни моля да не гадая, че си чупих главата пак с задача заради тези.. Благодаря.

Тагове:
-2
Общи приказки 23/01/2015 04:12:27
oconne avatar oconne 113 Точки
Best Answer

Минуса и плюса могат да бъдат и унарни и бинарни операции.

В случая когато са унарни използваме следните правила:

    а) -(-х)=х, -(+х)=-х което е еквивалентно на -(х)=-х, +(-х)=-х, +(+х)=х.

Както виждаш '-' е обратима -(-х)=х.

    а.1) При това правило трябва да имаш предвид че като унарни опреции те са с по голям приоритет пред останалите.

     (Първо се изчисляват унарните там където се очаква такава интерпретация)

     Т.е    х-(-х) не е равно на -0, а е равно на х*2, или х-(-а) не е равно на -(х-а), а някои твърдят даже (х-а).

  а.2) Освен това '-' е дистрибутивен -(а+х)=-а-х;

  б) В общият случай бинарните операции не са комутативни т.е.  хОа \neаОх (при размяна на местата стойноста на израза се променя). Минуса е некумотативна, а плюса е комутативна опреция:

  б.1) Плюса е кумутативна: а+х=х+а;

  б.2) Минуса е некумотативна х-а \neа-х, доказателство: х-а=-(-х)-а=-(-х+а)=-(а-х), от тук се вижда -(а-х) не може да е равно на а-х (-А\neА при А\ne0), единствно ако а-х=0 или х=0, и а=0 е възможно равенство.

Това е много, много грубо доказателство  и дефиниця на правилата а)-б). Съществуват много по фини и изискани анализи на тези случаи в множеството на реалните числа. Но, пак е нещо като ориентир.

 

2
23/01/2015 12:58:14
GogoK avatar GogoK 80 Точки

Като цяло, след като присвоим отрицателна стойност в даден израз, той си запазва отрицателната стойност, но визуално при решението на задачата по напред, той губи знакът си(визуално) за отрицателна стойност.

int minusNomber = -1;     и вече пресвоил отрицателна стойност, но визуално няма знак "-" за него! И в последствие при мен заблудата беше "plusNomber - minusNomber"

И понеже на това ниво аз поне повече внимавам с синтаксиса на езика, приемам елементарната математика за даденост и започва и заблудата че ако израз няма знак за "-" той не може да е отрицателен макар и да го знаеш че е така. Отговорът ти е пред очите, но не достигаш до него, защото всичко останало ти е като китайски език, и допускаш че грешката ти е в синтаксиса на C#.

Както казах по горе, разбрах къде греша след като пуснах темата, но предполагам че и други може да имат подобен проблем затова и оставих темата, а не я изтрих.


Благодаря за обобщителния отговор!

0
oconne avatar oconne 113 Точки

Да, точно така, трябва да се прави разлика между име на променлива и нейната стойност, както в математическите изрази така и в програмният код. Абсурдно е да кръстим някоя променлива -х, т.е int -x; e неприемливо, дори забранено, за това както казваш ти, променливата крие своята стойност, т.е нейното име е само пълномощник или референция, но не и същност (стойност) .

0