Hirdetés
-
Retro Kocka Kuckó 2024
lo Megint eltelt egy esztendő, ezért mögyünk retrokockulni Vásárhelyre! Gyere velünk gyereknapon!
-
A streamingszolgáltatások összecsomagolása lehet a következő divat
it Ezúttal a Comcast kínálná egyben a Peacock, Netflix és Apple TV+ streamingszolgáltatásokat.
-
30 TB-ot meghaladó HDD-ket demonstrál a Toshiba
ph Az egyik HAMR, a másik MAMR technológiával éri el a komoly tárkapacitást.
Új hozzászólás Aktív témák
-
Jester01
veterán
-
Jester01
veterán
válasz don_peter #4841 üzenetére
Mikrokontrolleren számíthat, hogy >> i vagy >> 1 mert előbbi lehetséges, hogy csak egy ciklusban, egyesével valósítható meg. A kiírást tehát célszerű úgy csinálni, hogy csak egyet léptetsz, az értéket (ha módosítható) vagy a maszkot.
for(i=0; i<8; i++, bitek >>= 1) {
if (bitek & 1) {
...
}
}Bizonyos esetekben a visszafelé futó ciklus is kisebb/gyorsabb lehet.
Jester
-
Jester01
veterán
-
Jester01
veterán
válasz #68216320 #4894 üzenetére
A forrásfájl kódolása tetszőleges lehet és független a futásidejű kódolástól. Az aktuális locale beállításból jön, alapértelmezése pedig utf8. Persze meg is lehet adni a fordítónak, gcc esetén a -finput-charset kapcsolóval.
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main()
{
const wchar_t* text = L"árvíztűrő tükörfúrógép";
wchar_t buf[40];
setlocale(LC_ALL, "");
wprintf(L"Írd be, hogy %ls: ", text);
fgetws(buf, 40, stdin);
buf[wcslen(buf) - 1] = 0;
wprintf(L"Ezt írtad be: \"%ls\", %ls\n", buf,
wcscmp(text, buf) ? L"nem egyezik" : L"egyezik");
return 0;
}$ file test-utf8.c
test-utf8.c: C source, UTF-8 Unicode text
$ gcc -finput-charset=utf8 test-utf8.c
$ ./a.out
Írd be, hogy árvíztűrő tükörfúrógép: árvíztűrő tükörfúrógép
Ezt írtad be: "árvíztűrő tükörfúrógép", egyezik
$ iconv -f utf8 -t iso8859-2 < test-utf8.c > test-latin2.c
$ gcc -finput-charset=iso8859-2 test-latin2.c
$ ./a.out
Írd be, hogy árvíztűrő tükörfúrógép: árvíztűrő tükörfúrógép
Ezt írtad be: "árvíztűrő tükörfúrógép", egyezikMégegyszer, röviden: a forrás tetszőleges kódlappal lehet, ha azt megmondod a fordítónak. Futásidőben pedig a setlocale megfelelő használata szükséges. Ennyi.
Jester
-
Jester01
veterán
1. nem lehet tudni mit ír ki, mert nem definiált működés
2. itt nem kell az L, akkor kellene esetleg ha műveleteket végzel vele ami túlcsordulhat
3. nem tudjuk ennyiből megállapítani
5. a C ilyen buta
+1. ha nem az eredetit akarod módosítani, akkor foglalj dinamikusan memóriát (malloc)buherton:
[ Szerkesztve ]
Jester
-
Jester01
veterán
A beolvasás egyszerű feladatnak tűnik, mégis meglepően bonyolult jól csinálni.
Az fflush(stdin) nem szabványos, vagy működik vagy nem. Az ajánlott módszer teljes sorok olvasása fgets használatával, majd a beolvasott sor számmá alakítása strtol segítségével. A helyes megoldás a sor olvasásnál kezeli a túl hosszú sorokat, és az átalakítás után ellenőrzi, hogy maradt-e még feldogozatlan karakter.
Ennél egyszerűbb megoldás, ha az fflush(stdin) helyett egy fgetc(stdin) ciklussal kiolvasol mindent a sor (vagy a bemenet) végéig.
Az is rossz a kódban, hogy a scanf visszatérési értékét nem ellenőrzöd. Ha ugyanis nem számot írnak be, akkor nem tud mit konvertálni és az i értéke változatlan marad. Azt pedig nem is inicializáltad, tehát bármi lehet. Ha véletlenül 1 és 5 közé esik akkor a programod kilép a ciklusból.
[ Szerkesztve ]
Jester
-
Jester01
veterán
Azért mondja a nullára, hogy páros, mivel az A sorrend a rossz, először a nullát ellenőrizd és csak utána a paritást.
Egyébként a feladatnak nem felel meg a programod, hiszen van kiírás a (csodaszép nevű) e függvényben is. A visszatérési érték pedig mindig nulla.
Annak sem sok értelme van, hogy else if (a%2!=0), hiszen az else már magában is ezt jelenti, tekintve, hogy az előző feltétel if (a%2==0) volt.
Jester
-
Jester01
veterán
-
Jester01
veterán
válasz DrojDtroll #5036 üzenetére
Elvileg a SetConsoleMode függvénnyel ki kell kapcsolni az ENABLE_LINE_INPUT beállítást. De nem tudom, nekem linuxom van
Jester
-
Jester01
veterán
-
Jester01
veterán
-
Jester01
veterán
válasz dabadab #5196 üzenetére
Attól függ mi a feladat pontosan. Mert ha a transzponált mátrixot oda kell adni valami másik függvénynek az boldogtalan lesz ha nem transzponálod ténylegesen mert nem tudja, hogy fel kell cserélni a koordinátákat. Persze ha van valami társított flag ami mutatja és ezt minden tudja is kezelni, akkor jó megoldás.
A kérdésre válaszolva: végig kell iterálni az alsó vagy a felső hárömszögön és cserélgetni. Már ha nem kell új helyre másolni, mert akkor az egészen végig kell menni és felcserélve kiírni.
[ Szerkesztve ]
Jester
-
Jester01
veterán
Viszont ez minden elem elérésnél egy indirekt függvényhívás amit nem tud a fordító inline beágyazni. Bizonyos mennyiség fölött garantáltan sokkal lassabb lesz, mintha ténylegesen transzponáltad volna.
A másik, hogy a cache hatékonyságát nagyban befolyásolja a bejárás. Egy sorfolytonos bejárás sokkal gyorsabb lehet mint egy oszlopok szerinti. Az algoritmust ennek megfelelően választhattad meg, de ha a hívó egy függvénypointeresen transzponált mátrixot ad be, akkor amire a kód azt hiszi, hogy hatékony sorfolytonos az valójában nem az. Ugye bizonyos műveleteknél ezért éri meg ténylegesen transzponálni a mátrixot, a bejárás megváltoztatása helyett, még akkor is ha amúgy nincs függvénypointeres trükközés. Lásd még What every programmer should know about memory: "Through the simple transformation of the matrix we can achieve a 76.6% speed-up! The copy operation is more than made up. The 1000 non-sequential accesses really hurt. "
Virtuális mátrixokhoz viszont kétségkívül jó megoldás lehet.
Jester
-
Jester01
veterán
-
Jester01
veterán
válasz aviator #5542 üzenetére
Mindenképp egy pointer kell. Ha eleve pointered van akkor nyilván már semmi dolgod
Ha tömböd van akkor is írhatod például így: x + 3 vagy &x[3]
Ugye az a[b] definíció szerint egyenértékű a *(a+b) kifejezéssel, és az & jel arra kell hogy a *-ot kiüsse.[ Szerkesztve ]
Jester
-
Jester01
veterán
válasz ToMmY_hun #5545 üzenetére
Pedig éppenséggel pointer készítő, mivel nem csak egy számot (a címet) adja vissza hanem konkrétan egy megfelelő típusú pointert (aminek a belső reprezentációja lehet, hogy nem is csak egy szám). Arra a valamire mutató pointert gyárt neked amit operandusként megadtál. (Igen, tudom, hogy amúgy address operator a neve.)
"The result is a pointer to the object or function designated by its operand"
Jester
-
Jester01
veterán
memóriacímet tárolnak, ami egy darab szám
Ez persze nem igaz, a pointerek belső szerkezete implementációs kérdés. Például szegmentált memóriamodellben van ugye far pointer is, amiben 2 szám is van, vagy harvard architektúrán a szám mellé még azt is tudni kell adat vagy program memória stb.
Nyilván ha akarom akkor ez 1 szám mivel csak egy halom bit azt meg bármikor felírhatom számként Az is igaz, hogy a hétköznapi rendszerekben valóban elég egy szám.
Ezzel együtt az eredeti kiindulás az volt, hogy az & operátor nem egy számot ad vissza, hanem egy megfelelő típusú pointert. Emiatt aztán (int)&x + 1 és (int)(&x + 1) az nem ugyanaz (kivéve ha véletlenül x mérete 1 byte)
[ Szerkesztve ]
Jester
-
Jester01
veterán
válasz aviator #5570 üzenetére
Ez meg a híres tömb-pointer ekvivalencia. C-ben a tömb automatikusan konvertálódik az első elemére mutató pointerré:
Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type "array of type" is converted to an expression with type "pointer to type" that points to the initial element of the array object and is not an lvalue.
[ Szerkesztve ]
Jester
-
Jester01
veterán
válasz dobragab #5575 üzenetére
a címét nem képezhetjük, hiszen ahhoz először pointerré konvertálódik,
Szerinted. A szabvány szerint meg de. Idéztem ott feljebb kicsivel:
Except when it is the operand of the sizeof operator or the unary & operator
Tehát ha & operátort alkalmazol a tömbre akkor nem konvertálódik pointerré.
Jester
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Bestbuy játékok
- EAFC 24
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- Samsung Galaxy S24 - nos, Exynos
- iOS alkalmazások
- Samsung Galaxy A54 - türelemjáték
- Íme az Assassin's Creed Shadows első előzetese
- Router gondok
- Vezetékes FÜLhallgatók
- Budapest és környéke adok-veszek-beszélgetek
- További aktív témák...
- Új Lenovo Ideapad 5 Pro Bivaly Ultrabook -35% 14" RYZEN 5 6600HS 16/512 QHD+ 2,8K Radeon 2GB 90Hz
- Komplett épített pc eladó szükség esetén minden kiegészítővel
- Dell Precision 7530
- Yamaha MusicCast RX-A1070
- Prémium alkatrészek! RoG 3070 Ti Z590 11600K 1000 Watt Platinum Vízhűtés 32GB RAM 1TB NVME Garancia!
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Alpha Laptopszerviz Kft.
Város: Pécs