KGigi Posted November 7, 2010 Posted November 7, 2010 Ezek már nem alap algoritmusok. Egy halmaz/lista/tömb leggyakoribb eleme valóban elég kézzelfogható, ugyanakkor nehéz hatékony algoritmust írni rá. Minden azon múlik, hogy milyen implementációt választasz az adott struktúrához. Egyébként a valóban alap algoritmusokat programozási tételek néven megtalálod. Összegzés, számlálás, maximumkiválasztás, keresés, össze- és szétfuttatás stb.
Pjotr Posted November 7, 2010 Posted November 7, 2010 Ha nem gond a C++, akkor a Map<T, E> tároló lesz a barátod a gyakorisággal kapcsolatban.
KGigi Posted November 8, 2010 Posted November 8, 2010 Már amikor. Egy multihalmaznál pl. nagyon nem hatékony. Egy mezei tömbnél, fõleg ha sok száz soros, elég kézenfekvõ.
tvili999 Posted March 9, 2011 Posted March 9, 2011 Sziasztok! Hogy kell úgy írni c++-ban operációs rendszert, tehát hogy nem parancssorból indul a program hanem egybõl VMWare-ból, nem is kell hozzá a dos, meg semmi, és hogy elinduljon, a boot sectort is megírni?
KGigi Posted March 9, 2011 Posted March 9, 2011 Szia! Ez kivitelezhetetlen, a boot folyamat elejét assemblyben kell megírni.
tvili999 Posted March 9, 2011 Posted March 9, 2011 (edited) Köszi a gyors választ, az assembly-s részt megtaláltam, de a rendszert nem tudom hogy hogy fogjak hozzá. A többit hogy kell? Edited March 9, 2011 by tvili999
tvili999 Posted March 9, 2011 Posted March 9, 2011 Hogy ami a dosba lefut a karakteresen azt itt hogy kell elindítani?
KGigi Posted March 9, 2011 Posted March 9, 2011 Mit értesz DOS alatt? Az egy ezer éves operációs rendszer. Mi a probléma? Az assembly után már a kernel betöltése következik, az pedig már C(++)-ban van írva.
tvili999 Posted March 9, 2011 Posted March 9, 2011 Ha egy egyszerû helloworld progit beteszek, ugyanúgy kifogja írni a printf-t karakteresen?
tvili999 Posted March 9, 2011 Posted March 9, 2011 Köszönöm, most már tisztába vagyok ezzel, azt hittem hogy azt a villogó _ jelet is a dos csinálja.
KGigi Posted March 9, 2011 Posted March 9, 2011 Nem, az egy scanf, vagy valami ehhez hasonló függvény.
tvili999 Posted May 8, 2011 Posted May 8, 2011 Na most megint én szeretnék c-ben egy norton commander féle programot, ilyen egyszerű fájlkezelőt ahol lehet másolni, törölni, stb. csak nem tudom elkezdeni mert nem tudom mi az a parancs ami a pascalban a findfirst és a findnext. Elmagyarázná valaki ezt c-ben vagy c++-ban hogy hogy kell használni? Köszönöm:)
arpsoft Posted May 8, 2011 Posted May 8, 2011 #include <stdio.h> #include <dir.h> int main(void) { struct ffblk ffblk; int done; printf("Directory listing of *.*\n"); done = findfirst("*.*", &ffblk, 0); while(!done) { printf(" %s\n", ffblk.ff_name); done = findnext(&ffblk); } return 0; }
KGigi Posted November 18, 2012 Posted November 18, 2012 Adott két fájl. Az első tartalma: int v[] = { ... }; A második tartalma: extern int* v; ... void f() { v[0]++; } Miért helytelen v[0]++? Percek óta ezen gondolkodom, biztosan valami nagyon triviális, de nem esik le.
KGigi Posted November 21, 2012 Posted November 21, 2012 Érdekel valakit a megoldás? Ha nem, akkor nem szenvedek vele, hogy elmagyarázzam, mert a megérzésemmel ellentétben egyáltalán nem triviális.
kléni Posted December 7, 2012 Posted December 7, 2012 A címben lévő két nyelv közül melyiket érdemes elkezdeni tanulni? Azt olvastam, a C++ jobb alkalmazások fejlesztésére, viszont mások azt mondták, a C-vel érdemes kezdeni. Ti mit ajánlotok?
Fujitsu Posted December 7, 2012 Posted December 7, 2012 Az attól függ, mit akarsz csinálni. Ha szeretnél objektumorientált programokat írni, akkor csak a C++ jöhet szóba. Ha nem, akkor talán érdemesebb a C89/C90-es C-vel kezdened. @ KGigi: Ott lesz a gond, hogy az extern int *v nem tömböt deklarál a második fájlodban, tehát ezt a compiler itt nem tömbként kezeli, mert fordítási időben nem tudja, hogy ez a pointer egy tömbre mutat. Megoldás: extern int v[], ebből már érteni fog.
KGigi Posted December 8, 2012 Posted December 8, 2012 Igen, a megoldás valóban ez. Egyik esetben sem tömböt deklarál, csak azonos fájlon belül a fordító van olyan okos, hogy végrehajtson egy konverziót. Külső változóval ez nyilván nem megy. @kléni A C egy őskori nyelv, a modern programozási feladatokra teljesen alkalmatlan. Leginkább hardverközeli programozásra használják, mert nagyon-nagyon hatékony. Pl. operációs rendszerek, driver-ek, firmware-ek, vezérlők. Éppen ezért pl. a mérnök informatikusok a mai napig ezzel kezdik a programozást. Mi a programtervező informatikus szakon minimálisan foglalkozunk hardverekkel, így eleve C++-szal kezdünk, ami mellé a második évben szakiránytól függően bejön a C# vagy a Java. A C++-ról azt kell tudni, hogy a C objektumorientált kiterjesztése, de nem objektumorientált nyelv. Két évvel ezelőtt azt mondtam volna, hogy ilyen célra nem is nagyon érdemes tanulni, legyen inkább C# vagy Java. Viszont az új C++ szabvánnyal hatalmasat léptek előre, és bár a szintaxis néha még mindig eléggé döcögős (köszönhetően egyrészt annak, hogy nem objektumorientált nyelvnek indult, másrészt annak, hogy sokkal nagyobb hangsúlyt fektet a hatékonyságra), elég jól felzárkóztak. Én azt mondanám, hogy C++-t kezdj el, de egyelőre ne használd nagyon az STL-t. Pl. ne használj vektort, listát, for_each-et, iterátorokat, shared pointert stb. Viszont feleslegesnek tartom a bohóckodást a printf-fel és társaival, amikor ott van az std::cout, főleg ha kezdő vagy. Ha grafikus felületet is szeretnél, akkor vagy a MS-féle Visual C++-t nézd meg, vagy a Nokia Qt-jét. Én utóbbit tanultam, és talán jobban is fejlesztik.
Fujitsu Posted December 9, 2012 Posted December 9, 2012 Az attól függ, mit tekintünk modern programozási feladatnak. Felhasználói programok fejlesztésére nem igazán alkalmas, ez tény. Ugyanakkor még a legkorszerűbb hardverek vezérlőszoftvereit is alapvetően C-ben írják. Igazából szinte minden mérnöki területen alap a C nyelv valamilyen fokú ismerete. (Pl. a Matlab Simulink és társai is maximálisan C-alapúak.) A C rengeteg helyen előjön, pl. a Maple és a Mathematica is tud C kódot generálni. És hát még elég sok C-alapú nyelv használatos manapság. Nyilván ha az objetumorientált tervezés és felhasználói szoftverek írása a cél, akkor C++-szal kell kezdeni. De ha nem, akkor szerintem nem árt, ha az ember szerez némi gyakorlatot egy kis C90-es C-vel, ahol nincs minden a feneke alá tolva, és még egy dinamikus tömb létrehozása is ügyeskedést igényel. A tuti persze az, ha az ember assemblyvel kezd (abból lehet aztán igazán jól megérteni a gép működését), de ahhoz kell "némi" előismeret digitális technikából, úgyhogy azt majd inkább csak egyetemen (vagy középiskola szakmai évfolyamán). Persze FPS játékot abban se nagyon akarjál írni.
KGigi Posted December 9, 2012 Posted December 9, 2012 Ha valami C-kódot generál, azzal nekem már semmi dolgom, készen van A Haskell fordító is C-re fordít, hiába funkcionális, de nem fogok belenyúlni, azzal az egész értelmét nyírnám ki. És egy C-alapú nyelvet a C++ alapján is megértesz, még ha nem is tudnál biztos kézzel belenyúlni. Ez nem érv a C mellett. Tulajdonképpen ugyanazt mondjuk. Csak nálam a gyakorlatszerzésbe nem tartozik bele a printf, a malloc, az strcpy és egyéb über szívások. Azok majd jöhetnek, ha az egyszerűbb módon már megy, és ha valaha szüksége lesz rá. Én C-t a BSc ötödik félévében, operációs rendszereken, assemblyt hatodik félévben, fordítóprogramokon tanultam, és tök jól elvoltam nélkülük. Nyilván sok mindent meg lehet velük érteni, de ennek nem ez az egyetlen módja. Arról nem is beszélve, hogy nem kell tudnod assemblyben programoznod ahhoz, hogy megértsd, hogyan és mire fordul egy ciklus vagy egy függvényhívás.
[OP]Destroy-man Posted December 9, 2012 Posted December 9, 2012 Nekem a C# jött be a mostani modern nyelvek közül. Viszonylag könnyen tanulható, logikus felépítésű, és nagyon sok tutorial érhető el hozzá, sőt még magyar nyelvű video tutorialok is vannak. További előnye, hogy nem csak szoftver, hanem weblapfejlesztésre is használható, tehát kettőt egycsapásra. Persze a C++-ról sem szeretnék lebeszélni senkit. Sőt! Az MS pár hónapja jelentette be, hogy az utóbbi években eléggé elhanyagolták a natív nyelveket (itt a C++ra gondoltak), és bejelentették, hogy most azt fogják fejleszteni. Ráadásul várhatóan a .Net-hez hasonló függvénytár is fog érkezni hozzá, ami nem egy rossz dolog.
Fujitsu Posted December 9, 2012 Posted December 9, 2012 @ KGigi: De én nem azt mondtam, hogy nyúljál bele kézzel. Egy C-alapú szimulációs nyelvet sokkal könnyebb megérteni, ha vágod a C-t. De hozhatnám példának akár a PHP-t is: önállóan is tanulható (amikor azt én elkezdtem, legfeljebb a Hello World-öt ismertem a C-ből), de mennyivel királyabb, ha már ismered a C-t, és akkor rájössz, hogy egy csomó minden szinte ugyanaz, csak jól ki van ganézva alóla. Persze az teljesen igaz, hogy a C++ is C, de hogy mi legyen előbb, azzal kapcsolatban én fordítva gondolkozom: szerintem a jót könnyű megszokni, utána nagyobb szívás rájönni, mit csinál a calloc. Én pl. nem voltam boldog, mikor meg kellett írnom a saját file_get_contents függvényemet, ami ugye PHP-ban alap. Az elemi lépésekre lebontást (ami tulajdonképpen a programozás lényege ) pedig talán jobban lehet érezni, ha pl. a veremkezelést meg a listák kezelését is saját függvényekkel kell megoldanod. A C kihagyását vagy elnapolását csak akkor tartom indokoltnak, ha csak felhasználói programok írása a cél. Ebben az esetben nyilván időpocsékolás lenne egy csomó időt eltölteni a C-vel, amikor ott vannak a sokkal magasabb szintű programozást lehetővé tevő eszközök is. De hát honnan tudjam én, hogy robotot akar programozni vagy számlázó szoftvert? És igen, nem kell tudnod az assemblyt ahhoz, hogy nagy vonalakban megérts bizonyos dolgokat. Sőt, nyilván teljesen jól meg lehet lenni úgy, hogy az ember konkrétan nem tudja, mi megy ott a "mélyben". De amíg nem fordítottam papíron assemblyt gépi kódra, illetve amíg nem láttam, hogy néz ki pl. egy PPI vagy egy USART kezelése Z80 assemblyben, addig nem volt konkrét elképzelésem arról, hogyan is "gondolkozik" egy processzor. Mert azért ez – lássuk be – elég misztikus, hogy írok egy kódot, azt valami lefordítja, előbb-utóbb lesz belőle gépi kód, és akkor már fut is. Hol, min, pontosan hogyan? Hogy néz ki a gépi kód? Mi az az akkumulátor-regiszter, mi az a program counter, miért felejtős a goto (már a kódolástechnikai szempontokon túl)? Ezeket az assembly ismerete nélkül szerintem nem igazán lehet megérteni.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now