Páros számok meghatározása C-ben?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
unsigned short i = 1;
unsigned int osszeg = 0;
for (; i < argc; i++) {
osszeg += atoi(argv[i]) * !(atoi(argv[i]) % 2);
}
printf("Összeg: %d\n", osszeg);
return 0;
}
Semmiféle vizsgálat nincs benne, úgyhogy ha hülyeséget adsz be neki, akkor is lefut.
A ternális operátoros megoldás is jó, de ha maradékot képzel kettővel, akkor páros szám esetén ugye 0 a maradék, ezt tagadod, akkor páratlan szám esetén ez egy lesz, azzal szorzod a számot, és így adod hozzá összeghez.
Tehát !(x modulo 2) páratlan szám esetén 1, összeg = összeg + x * (!(x modulo 2)).
Nem tudom, hogy ciklust lehet-e használni, de tetszőleges mennyiségű szám esetén így lehet megcsinálni. Ha ha csak fixen 4 számod van, akkor kibonthatod a ciklust.
"akkor páratlan szám esetén ez egy lesz"
Akarom mondani, páros szám esetén lesz egy.
(!(a & 1)) ? a : 0
Ternális operátor, annyit tesz hogy három operandusa, "bemenete" van. Az első egy feltétel, amit kiértékelünk. Ha igaz, akkor a második (a kérdőjel utáni), ha hamis akkor a harmadik (kettőspont utáni) kifejezést adja vissza.
A & bitenkénti ÉS művelet. A két (kettes számrendszerben ábrázolt) szám mindegyik helyiértékére kiszámolod a logikai ÉS eredményét. (Itt nyernek értelmet a logikai műveletek, amiket felteszem már tanultatok, de nem igazán használtatok.) Az 1 kettes számrendszerben mindenhol nulla, csak a legutolsó helyiértéken 1: pl. 0000 0001. Az "a" változó értéke legyen mondjuk 3: 0000 0011.
0000 0011
0000 0001 &
-----------
0000 0001
Az "& 1" miatt csak az utolsó helyiérték "marad meg", vagy 0 vagy 1 lesz az eredmény. Páratlan "a" esetén 1, páros esetén 0. ez volt eddig a (a & 1) rész. A felkiáltójel ezt negálja, szimplán 0 -> 1, 1 -> 0 lesz. A 0 és 1 ugye értelmezhető booleanként, azaz hamisként és igazként, így értékeli ki a program ezt a kifejezést. Ha a (!(a & 1)) igaz, akkor a szám páros, és a ternális operátor második részét kapod meg. Ha páratlan, akkor a harmadikat.
A ternálissal használhatod a modulot, azaz a % operátort, ez két szám osztása után keletkező maradékot adja meg. Tehát 7 % 2 = 1. Ekkor a ternálisod valahogy így nézne ki: (a % 2 == 0) ? a : 0
Vagy meg is fordíthatod: (a % 2 == 1) ? 0 : a
Vagy "egyszerűsíthetsz": (a % 2) ? 0 : a. Ugyan az egyenlőségvizsgálat elhagyásával rövidebb kódot írtunk, de kicsivel nehezebben olvasható.
Egyébként, léteznek ternális /tehát nem analóg vagy bináris/ számítógépek is.
Ajánlom ezek megtekintéséhez, a működésükbe való bepillantáshoz a témában elérhető youtoube videókat.
Keyword: ternary computer
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!