- A Panasonic is nyit a TiVo okostévé rendszer irányába?
- Rengeteg csatlakozó van a HP legfrissebb, irodai célú monitorgóliátján
- Computex 2024: teljesen integrált hibrid hűtéssel közeleg az MSI új csúcs-VGA-ja
- Támogatja a legújabb Windows frissítést az új AIDA64
- Fürge M.2 2230-as SSD-vel jelentkezett az IRDM
Hirdetés
-
Computex 2024: teljesen integrált hibrid hűtéssel közeleg az MSI új csúcs-VGA-ja
ph Az AD102 GPU-ra épülő típus 4,5 slotos, viszont ebben benne van a radiátor és a megszokottnál 90 százalékkal rövidebb csövezés is.
-
Törvénnyel pörgetné fel az európai zöldtechnológiát az EU
it A napelemek, szélturbinák, hőszivattyúk és egyéb zöldtechnológiák 40 százalékát az EU-n belül kell majd gyártani.
-
A Z Flip6 jókora, a Galaxy Ring parányi akkumulátort kap
ma A telepadatok az FCC listázásában jelentek meg.
Új hozzászólás Aktív témák
-
Karma
félisten
válasz tototos #3810 üzenetére
Persze hogy van, csak egy kicsit el kell rugaszkodnod a struktúrától. A megoldás az ún. getter/setter függvények írása, amivel szabályozod a hozzáférést.
Röviden írnod kell olyan függvényeket, melyeknek az első paramétere egy pointer a struktúratípusodra; a getternél nincs más, a setternél meg ott az új érték másodiknak. És csak ezeket a függvényeket használod a struktúrád birizgálásához, közvetlenül nem nyúlsz bele.
C-ben ezt egyébként elég könnyen garantálni is tudod, ha a struktúrád definícióját külön .c fájlba rakod.
“All nothings are not equal.”
-
Karma
félisten
válasz Vasinger! #3832 üzenetére
Hátde az első sorban megírtad a megoldást, miért nem használod ugyanezt a szintaktikát a nullától különböző indexre?
Egyébként halálfejesen rossz megoldás, mert túlindexeléssel reccsen, ha a string végén szóköz van. Miért nem touppereled meg az egész stringet rendezésnél? Megspórolod a szóközkereső mágiát.
Másrészről viszont az ékezetes karakterekkel csak a baj van. Ezt a problémát már sokszor megoldották a világban, úgy nevezik, hogy collation.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz PumpkinSeed #3843 üzenetére
Mi a kérdés? A kígyó mozgása konkrétan (azaz hogyan tárold a kanyarodásokat), vagy maga a folyamatos léptetés (game loop)?
“All nothings are not equal.”
-
Karma
félisten
válasz PumpkinSeed #3845 üzenetére
Noshát. A game loop nagyon leegyszerűsítve egy végtelen ciklus, ami addig tart, ameddig a játéknak nincs vége. A ciklusmagban pár dolgot kell elvégezned kötötten:
1) Fogadnod kell a felhasználótól a bemenetet. Ez lehet polling jellegű (amikor ideérsz, megnézed milyen gombok vannak lenyomva), vagy eseményalapú, de az előbbi egyszerűbb.
2) Frissítened kell a szereplők állapotát egy lépéssel (folyamatos idejű játéknál egy valamekkora időszelettel). Ehhez felhasználod az előzőleg begyűjtött inputot, meg az esetleges AI döntéseket.
3) Frissíted a világ állapotát, azaz kezeled az ütközéseket, halálokat, születéseket.
4) (legegyszerűbb eset) Újra kell rajzolnod a képernyőt.
5) Be kell aludnod párszáz milliszekundumra.Ezt kell ismételgetned.
Az SDL, Allegro és társai mind ehhez adnak alapot.“All nothings are not equal.”
-
Karma
félisten
válasz tototos #3847 üzenetére
A válasz meg még mindig az, hogy írj egy
uint16_t signal_get_id(const signal_struct const* signal)
{
return signal->id;
}függényt a signal.c-be, és a struktúra tagdefinícióját is átrakod oda. A headerben meg csak a forward deklarációk maradnak, így ha a headert használja valaki, nem tudja még a tagok offszetjét ye, ergo nem tudja változtatni.
“All nothings are not equal.”
-
Karma
félisten
válasz PumpkinSeed #3899 üzenetére
Egy egyszerű megoldás, ha a koordináták azonnal léptetése előtt megnézed, hogy lehetséges-e az adott lépés (korlát, pályaszéle, akármi), és ha nem, akkor nem állítod be
“All nothings are not equal.”
-
Karma
félisten
válasz PumpkinSeed #3909 üzenetére
Egy egyszerű Windows alatti megoldás, ha fogod az econio forrását, és együtt fordítod a programoddal. Nem véletlen, hogy Czirkos is ezt ajánlja
A C Free-t nem ismerem, de biztos van valami egyszerű módja, hogy a projektedhez add.
“All nothings are not equal.”
-
Karma
félisten
válasz PumpkinSeed #3976 üzenetére
Nem, akkor lenne buborék rendezés, ha a szomszédos elemeket cserélgetnéd.
Ez most egy sok felesleges kört futó valami“All nothings are not equal.”
-
Karma
félisten
válasz PumpkinSeed #3978 üzenetére
Elkezdtem szerkeszteni a hozzászólást, csak közben spontán meeting lett
Van egy nagyon súlyos hiba: 1-től indexeled a tömböt, nem pedig 0-tól. Ezzel az első elem kimarad az összehasonlításokból, így hülyeség a vége.
A fordított sorrend, amit bizonyára tapasztalsz, az meg azért van, mert a belső ciklusodat nem az első elemtől, hanem i+1-től kell indítani. Enélkül amellett, hogy túl sokszor mész végig a teljes tömbön, még egyszer megfordítod az egészet...
Ha ezt javítod (0-tól kezdeni a külső, i+1-től a belső ciklust), már működő négyzetes lépésszámú (azaz lassú) rendezést kapsz.
De nem lesz ettől még buborékrendezés, mert annak a sajátossága, hogy az összehasonlítások és cserék mindig szomszédos elemek között történnek (pl. J és J+1).
Papírforma szerinti kiválasztásos rendezéssé könnyebb átalakítani, ha nem cserét végzel a belső ciklusban, csak megjegyzed a legkisebb szám indexét, és a belső ciklus után csinálsz egy cserét az i. és a minimumelem között. De annyira nem kritikus.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
GTK+-hoz is kell OOP szemlélet, és bár nem szeretem, szerintem maga az objektummodell nem olyan rossz.
Persze a kettőből a Qt-ra szavaznék én is, sok más mellett azért is, mert könnyebb megtanulni és intuitívabb; pár extern "C" és mehet is a C-ben írt banzáj.
[ Szerkesztve ]
“All nothings are not equal.”
-
-
Karma
félisten
A C standard qsort függvény tényleg nem stabil, azaz átrendezheti az egyenlő elemeket.
Viszont nem kell n!-szor végigjárnod a tömböt (ez még a legegyszerűbb beszúrásos rendezésnél is rosszabb gondolat, ami csak n^2-es lépésszámú).
Nézz szét a rendezési algoritmusok között, keress egyet ami tetszik és stabil, és implementált. Javaslom az összefésüléses rendezést, ahogy a wiki is említi, a C++ STL-ben ez érhető el stable_sort néven.
(De ha kicsit keresgélsz, találhatsz implementációt készen is. Nem teszteltem.)
“All nothings are not equal.”
-
Karma
félisten
válasz krisztianAMG #4050 üzenetére
Elvileg ha az a _kbhit() függvényhívás nem lenne ott, ennek a kódnak működnie kéne - az F1-12 és más spéci gombok kezelése már benne van a switchben (00 és E0). Próbáld meg azt az if-et kivenni, egyébként sincs semmi értelme.
Ezt most csak spekulálom, de szerintem ha az benne van, végtelen ciklusban pörgeti a CPU-t (egy magot 100%-on), amíg nem ütsz le egy billentyűt. Ami nagyon gáz.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz buherton #4094 üzenetére
Hát de az nem fasza, hogy lefordítja az ex_init4-et egyszer, aztán az ex_task4-et is (amiben benne van az include miatt az ex_init4 tartalma, és ezért van benne __heap_start...), és egymás mellé rakja őket. Elég egyértelműen rossz felépítés.
Rá kell venned az Eclipse-et, hogy csak az ex_task4-et fordítsa le, vagy vedd ki az include-ot és hagyd hogy a linker tegye a dolgát.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz Dementor01 #4103 üzenetére
Az shmget után kéne egy shmat (attach), hogy szerezz egy pointert a memóriaterületre. Ez, meg még sokkal több (pl. szemaforok) elég jól le van írva ezen az oldalon.
“All nothings are not equal.”
-
Karma
félisten
válasz buherton #4197 üzenetére
Már hogyne volna C stílusú ez a fajta zárójelezés. Amellett, hogy Ritchie eléggé a nyelv alkotója, nagy open source projektekben is előfordul, hogy ez a forma mellett döntenek.
De persze az is gyakori, hogy új sorba rakják. C-ben én is úgy szoktam, de ettől nem lesz univerzális igazság.
“All nothings are not equal.”
-
Karma
félisten
válasz buherton #4217 üzenetére
"Szerintem azért, mert sokan elfelejtik, hogy a realloc-nak a visszatérési értékét kell odaadni a pointernek."
Pont ezt nem szabad csinálni azelőtt, hogy megnézné az ember hogy NULL-t adott-e vissza a realloc – mert ha igen, akkor elveszted az eredeti memóriaterületet.
Ettől függetlenül se a realloctól, se a calloctól való félelmet nem értem az oktatásban, bár lehet hogy anno megmagyarázták; én meg elfelejtettem.
“All nothings are not equal.”
-
Karma
félisten
Gyanús hogy azért nem fogadta el, mert azt akarta, hogy kézzel implementáld le ugyanezt. A helyszínen kellett volna kifejtetni vele az ítéletét.
Az oldalon lévő szöveg is csak annyit mond, hogy lassú lehet – de ez éppúgy igaz arra is, ha kézzel mallocolsz nagyobb területet, átmásolod memcpyval, és felszabadítod az előzőt.
A kulcsmondat igazából ez: "Ne írjunk olyan programokat, amelyek gyakran méreteznek át tömböket!"
A szabvány alapján nincs arra garancia, hogy ha kisebbre reallocolsz, akkor nem fogja mozgatni a memóriát. Mindenképpen le kell kezelned a visszatérési értéket helyesen, azaz nézni a NULL választ, és nemNULL esetben kicserélni az előzőt siker esetén; ha fel-, ha leméretezel.
“All nothings are not equal.”
-
Karma
félisten
válasz tototos #4241 üzenetére
Ha törölni akarod azt a szakaszt, akkor ÉSelned kell egy olyan számmal, ami a kívánt bitszakaszon 0, körülötte 1. Ha beállítani, akkor meg VAGYolnod kellegy olyannal, ami a szakaszon 1, mindenhol máshol 0.
Pl. 01010101 & 11100011 = 01000001,
Ill. 01010101 | 00011100 = 01011101Persze az előbbi megoldás teljesebb, mert a maszkot is megcsinálja és konkrét értéket is tud
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz Jester01 #4363 üzenetére
Na igen, a qemunál karcsúbban elég nehéz megúszni
Axioma, az hogy big endian valami, még nem sok mindent definiál szerintem. Kérdés az architektúra (ARM, MIPS, SuperH, MicroBlaze, stb.), meg a szoftverkörnyezet is (Linux, valamilyen RTOS, nyers kód a vason). Csak mert ettől is függ, hogy mit kéne emulálni vagy szimulálni.
Szerk.: na jó, második nekifutásra mégse olyan fontos kérdések, mert maga a program elmondásod szerint elég minimalista. Ettől függetlenül nem nagyon lehet megúszni a QEMU-t és a Limux telepítést, csak hogy legyen min futtatni.
Itt egy MIPS útmutató, és itt ugyanez SPARC-kal. Valamelyiket lenyomod, és kész is leszel
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
Most nézem, hogy a leírásom elavult, a benne lévő Debian letöltési linkek már nem aktuálisak. Így az kuka.
Viszont cserébe találtam aktuális image-eket, leírással, menetkészen Még telepíteni se kell.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz TheProb #4385 üzenetére
Kapásból a char visszatérési érték helyett szerintem te char *-ot akartál inkább visszaadni -- a teljes számsort egyetlen karakter helyett.
Másrészt a stacken létrehozott char tömböt visszaadni öngyilkosság (a függvény végén megsemmisül -> érvénytelen pointer -> GAME OVER ☠).
Két lehetőséged van: vagy mallockal foglalsz egy dinamikus memóriaterületet, aminek a kezdőcímét adod vissza a függvény végén (és a hívónak fel kell majd szabadítania); vagy úgy írod át a függvényt, hogy bemenő paraméterként kapja meg azt a char tömböt (és annak max méretét), ahova az eredményt írhatja.
“All nothings are not equal.”
-
Karma
félisten
válasz TheProb #4387 üzenetére
Az előző álláspontomat szem előtt tartva azért csak kifejtem egy kicsit.
Az alapprobléma az, hogy C-ben és más alacsonyabb szintű nyelveken a memóriakezelést tudatosan kell csinálni, mert nincs az ember alatt védőháló. Mindig tisztában kell lenned azzal, hogy egy adott változó, tömb, karaterlánc hol jön létre, és mikor, ki által fog megsemmisülni. Olyan meg soha nincs, hogy a semmiből memória fakad és pont azt csinálja amit szeretnél.
A mutatott kódodban a romai változódat úgy deklaráltad, hogy egy 20 karakteres tömb, ami a függvényen belül él csak, amint véget ér, felszabadul, te meg nem férhetsz hozzá többet. Ez a sorsa mindennek, ami a stacken jön létre. A befoglaló függvény végén kaputt.
Ilyen minden lokális változó függvényen belül, a függvényeknek átadott paraméterek, az egymás után láncolt függvényhívások köztes eredményei, stb.
Memóriafoglalás tekintetében még két lehetőséged van: a magyar oktatásban "dinamikus memóriának" csúfolt heap; illetve nagyon leegyszerűsítve a "globális változók", a static terület. Utóbbinak inkább ne játssz a gondolatával se.
A programodat azon a két módon lehet megjavítani, amit az előbb is írtam:
1) vagy behozod a heapkezelést és az eredményt oda mented (malloc/free);
2) vagy egy olyan függvényt írsz, mint például az snprintf: a hívó fél gondoskodik arról, hogy legyen hova tenni az eredményt. Javaslom, hogy nézd meg annak a függvénynek a leírását.Ez utóbbi azért különösen jó, mert maga a rómaira átalakító függvényednek nem kell törődnie a memóriakezeléssel egyáltalán. Nem érdekli, hogy a hívója hol foglalt memóriát (stack/heap/static), csak az átalakítással kell törődnie. Nem az ő felelőssége.
Az intes részre nem tudok válaszolni, mert nem sikerült értelmeznem a kérdést.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz TheProb #4393 üzenetére
2) Mert amikor a malloc lefoglalja a területet, az még korábbi szeméttel van tele. Bármi lehet ott, beleértve a Shakespeare összest Azért kell a 0, hogy biztosan üres string legyen belőle.
Alternatívái a memset függvény (az egész területet egységesen nullázhatod vele, illetve a malloc helyett calloc fv. kapásból tiszta területet ad.
“All nothings are not equal.”
-
Karma
félisten
válasz TheProb #4399 üzenetére
Túl kevés memóriát foglalsz, ezért robban fel. n = 4, de az eredmény bőven hosszabb ennél
Ha azt nézzük, hogy egy számjegy római alakja maximum 4 karakter lehet, a 4*n+1 byte biztosan elég lesz. Arra átírtam a callocot, és ki is írta az eredményt hiba nélkül.
Egyébként megéri IDE-vel debuggolni a programot. Egyrészt menet közben látod hogy melyik változód milyen értéket vesz fel, másrészt egy kicsit több infód lesz az összeomlásról is, nem csak hogy "kifagy".
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz TheProb #4401 üzenetére
Az strcat_s azért jó, mert odafigyel arra, hogy a célterületből véletlenül se szaladjon ki. Ha egy négy hosszú blokkba beleírnád azt, hogy "MCCXXXIV", akkor az strcat kifut és felrobban, a safe változat beírja hogy "MCC" és csöndben megy tovább.
A debuggert használod most is, csak tud sok hasznos dolgot még Például a programsoraid mellett bal oldalt kattintasz, breakpointot raksz be, aminél a program megáll és lépésenként követheted a menetét.
buherton: Tényleg előfordulhatnak felesleges warningok, de ez egyáltalán nem az! Konkrétan elkerülhető lett volna a crash. Az strcat_s tényleg nem szabványos, de az strncat igen, ami szintén egy biztonságos alternatíva más platformon.
Meg úgy egyébként a warningok azért vannak, mert valamit rosszul csinál az ember. Tanulásnál különösen fontos megérteni hogy mit...
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
-
Karma
félisten
válasz buherton #4416 üzenetére
A legtöbb nyelv platformfüggetlen. A tényleges munkavégzéshez bevonzott frameworkök meg nem (merthát lehet több féléven át helloworldözni STL-el, de a valóságban azért hálózat, adatbázis, IPC, meg ki tudja mi jön szembe). És máris nem olyan fontos szempont.
Meg ugye a Linux desktop kit érdekel </troll>
A Vuze mindig Java-alapú volt szerintem, még Azureus korában is. Az OpenOffice meg főleg natív, Java kiegészítésekkel.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
-
Karma
félisten
válasz dabadab #4433 üzenetére
A Java kód vizsgálatához meg a jitwatch elég bíztatónak tűnik. Majd otthon megnézem tüzetesebben.
“All nothings are not equal.”
-
Karma
félisten
válasz SPeti1984 #4438 üzenetére
Ha nem lennének változók a történetben, akkor így kéne meghívnod a printf-et:
printf("%10.3lf", d);
Ez annyiban bonyolódik, hogy az elsó paraméterben lévő formátumstringet neked kell előállítanod egy snprintf hívással.
Szerk.: akkor jó.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz don_peter #4463 üzenetére
Például úgy, hogy nem számként olvasod be a scanf-fel, hanem szövegként (pl. az fgets függvénnyel).
A feladathoz szokás adattípusokat választani, nem pedig hangulatból.
Azt mondjuk nem tudom, hogy ha valóban és szigorúan egy szám a bemeneti adat, akkor osztogatni éri meg jobban, vagy egyszer átkonvertálni stringbe és azon futtatni a ciklust. A paraszti eszem szerint a string, mert sokkal olvashatóbb, hogy mit csinálsz.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
válasz don_peter #4467 üzenetére
Lebegőpontos számot hány tizedesjegyig szeretnél számolgatni? A definíció szerinti pontatlanságon túl ez is egy fontos szempont.
Továbbra is fenntartom az állításomat, hogy ez nem egy számítási, hanem egy karakterkezelési feladat. A tizes számrendszer emberi fogyasztásra alkalmas csak egyébként is. Jó szórakozást hozzá, én kiszálltam.
[ Szerkesztve ]
“All nothings are not equal.”
Ú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!
- 500 GB 2,5" HDD és SSHD eladó (100/100)
- Dell Latitude 7480,14",FHD,i7-6600U,8GB DDR4,256GB SSD,WIN10,TOUCH
- Bomba ár! HP EliteBook 840 G5 - i5-8G I 8GB I 128GB SSD I 14" FHD I HDMI I Cam I W10 I Gari!
- Bomba ár! Dell Latitude 5490 - i5-7GEN I 8GB I 256GB SSD I 14" HD I HDMI I Cam I W10 I Gari!
- Bomba ár! Dell Latitude 5580 - i5-G6 I 8-16GB I 256 SSD I 15,6" FHD I HDMI I CAM I W10 I Garancia
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Ozeki Kft.
Város: Debrecen