• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak w C++ zwiększyć liczby niezależnie od znaku ?

Object Storage Arubacloud
+1 głos
1,040 wizyt
pytanie zadane 20 czerwca 2016 w C i C++ przez Pixel040 Gaduła (3,100 p.)
Cześć,

Jak w C++ zwiększyć liczby niezależnie od znaku (+, -) ?

np.

-2 + 1 = -3

2 + 1 = 3

czy da się to zrobić bez if'ów ?
komentarz 20 czerwca 2016 przez Szahid Pasjonat (20,930 p.)
Z ciekawości zapytam dlaczego nie chcesz użyć ifów ?

9 odpowiedzi

+4 głosów
odpowiedź 20 czerwca 2016 przez niezalogowany
od kiedy -2+1 daje -3??
komentarz 21 czerwca 2016 przez draghan VIP (106,230 p.)
Pomijając kwestię błędnego zapisu w sensie arytmetycznym, można takie działanie zinterpretować jako przesunięcie wektora.
+1 głos
odpowiedź 20 czerwca 2016 przez draghan VIP (106,230 p.)

Da się, chociaż Twój formalny zapis jest niepoprawny. -2 + 1 =/= -3

Kod, realizujący to zadanie bez instrukcji warunkowych może wyglądać tak (przy założeniu nieujemnej wartości dodawanej):

#include <cmath>
#include <iostream>

int add(int x, unsigned y)
{
    return (std::abs(x) + y) * (std::pow(-1, (x<0)));
}

int main()
{
    std::cout<<add(-2, 1);
}

 

1
komentarz 20 czerwca 2016 przez Szahid Pasjonat (20,930 p.)
Ten kod jest nie optymalny bo działa tylko z przykładem który podał.
komentarz 21 czerwca 2016 przez draghan VIP (106,230 p.)
Mógłbyś rozwinąć?
komentarz 21 czerwca 2016 przez Szahid Pasjonat (20,930 p.)
Mój błąd. Kod jest w porządku.
+1 głos
odpowiedź 20 czerwca 2016 przez niezalogowany
n+k*n/wartość_bezwzględa(n) gdzie n-liczba, k-druga liczba :)
0 głosów
odpowiedź 20 czerwca 2016 przez Konrad Nabożny Stary wyjadacz (13,460 p.)
Nie wiem czy dobrze rozumuję, ale chcesz robić wartości bezwzględne z liczb i dopiero wtedy je dodawać? W takim wypadku najłatwiej będzie mnożyć ujemne liczby * -1. Przykład: if (x<0) { x *= -1; }

A czy bez ifów? Na pewno, ale nic nie przychodzi mi do głowy.
komentarz 20 czerwca 2016 przez Garniturek Użytkownik (820 p.)
fabs(liczba) daje wartość bezwzględna zmiennej liczba ;)
komentarz 20 czerwca 2016 przez Konrad Nabożny Stary wyjadacz (13,460 p.)
A tak, pamiętam kiedyś to używałem ale wyleciało mi z głowy. Dzięki ;)
komentarz 21 czerwca 2016 przez niezalogowany
Funkcje fabs używa się dla typów zmiennoprzecinkowych. Dla typów całkowitych jest funkcja abs.
komentarz 21 czerwca 2016 przez draghan VIP (106,230 p.)
W C++ przeciążono funkcję std::abs() dla argumentów typów zmiennoprzecinkowych i całkowitoliczbowych. :)
komentarz 21 czerwca 2016 przez niezalogowany
Rzeczywiście.
0 głosów
odpowiedź 20 czerwca 2016 przez Szahid Pasjonat (20,930 p.)
edycja 20 czerwca 2016 przez Szahid
Myślałem myślałem i wymyśliłem :)

 

Możesz użyć operatora ?

Działa to tak samo ja ify.

Podam Ci książkowy przykład żebyś zobaczył jak to działa.

 

5>3 ? 10:12 // 5 jest większe od 3 więć wartością tego wyrażnia jest liczba 10 ( jeśli prawda to brana jest wartość z lewej strony dwukropka a jeśli fałsz to z prawej)

 

Dałem Ci pomysł jak zrobić to bez ifów lecz jeśli chcesz to moge jeszcze napisać konkretnie jak to ma wyglądać w Twoim przypadku lecz zachęcam żebyś spróbował sam to zrobić i wytawić poniżej efekt swojej pracy :)

 

EDIT

W pod tym linkiem  masz działający kod .

http://wklej.org/id/2602023/
0 głosów
odpowiedź 20 czerwca 2016 przez Avernis Nałogowiec (27,400 p.)

możesz użyć funkcji zmieniającej 1 na -1. Wyglądało by to mniej więcej tak:-

int func(int x)
{
    return -x;
}

 

komentarz 20 czerwca 2016 przez Szahid Pasjonat (20,930 p.)
Wtedy -2+  funkcja(1) będzie działało

Jednak bez ifa nie będziesz wiedział kiedy ją stosować a kiedy nie bo 2+1 ma dać 3
komentarz 20 czerwca 2016 przez Avernis Nałogowiec (27,400 p.)
nie aplikujesz tego wszędzie, tylko tam gdzie liczba będzie na +
komentarz 20 czerwca 2016 przez Szahid Pasjonat (20,930 p.)
Rzecz w tym że nie wiesz kiedy będzie i to jest wyzwanie . Gościu podał taki przykład żeby pokazać o co mu chodzi.. To rozwiązanie nie zadziała kiedy liczby nie bedą znane przed kompilacją programu
0 głosów
odpowiedź 20 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)
edycja 21 czerwca 2016 przez MetRiko

A to moje rozwiązanie : )

int liczba=-2;
liczba+=liczba<0?-1:1;
//liczba jest równa -3
komentarz 21 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)
Nie rozumiem po co ten minus.. : /
Przecież osobie, która wstawiła ten post chodziło o zwiększenie odległości liczby na osi liczbowej od punktu 0 o 1. Ten kod robi dokładnie to. Co prawda dla wartości 0 to działanie doda 1.. ale można to naprawić w taki sposób:
liczba+=liczba<0?-1:liczba>0?1:0;
Teraz wynik dla zera to dalej będzie zero.
komentarz 21 czerwca 2016 przez Aisekai Nałogowiec (42,190 p.)
Nie ja dałem -, ale wg mnie autor podał tylko taki przykład. Niekoniecznie chodzi mu o to, żeby przesuwać o 1, a o jakąkolwiek (niekoniecznie) inną liczbę. Pewnie stąd ten -
komentarz 21 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)
Wtedy wystarczy zamienić 1 i -1 na dowolną inną wartość a i -a.
komentarz 22 czerwca 2016 przez Aisekai Nałogowiec (42,190 p.)
A co jeśli twoja pierwsza liczba będzie dodatnia, powiedzmy 3, a druga będzie ujemna, powiedzmy -1?
0 głosów
odpowiedź 21 czerwca 2016 przez CharlieGG Użytkownik (900 p.)

Wymyśliłem coś takiego, bez żadnych ifów, ani funkcji, ani skróconego ifa:

liczba += 1 - (2 * (liczba < 0));
–4 głosów
odpowiedź 21 czerwca 2016 przez hubot Dyskutant (9,090 p.)

Weź kolego się najpierw naucz matematyki i podstaw programowania bo nawet liczyć nie potrafisz. Od kiedy to -2 + 1 = -3? Jak chcesz to bez if-ów zrobić? Po co kombinujesz niepotrzebnie? Co za problem napisać (VB.NET - mój ulubiony język do edukacji)

If -2 < 0 Then
    Console.WriteLine(-2 + 1)
Else
    Console.WriteLine(2 + 1)
End If

???

Podobne pytania

0 głosów
1 odpowiedź 2,980 wizyt
+1 głos
3 odpowiedzi 365 wizyt
0 głosów
2 odpowiedzi 578 wizyt

92,632 zapytań

141,500 odpowiedzi

319,878 komentarzy

62,012 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...