Jump to content
GSForum - Segélyvonal

Programozás C/C++-ban


Recommended Posts

Posted

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.

Posted

Ha nem gond a C++, akkor a Map<T, E> tároló lesz a barátod a gyakorisággal kapcsolatban.

Posted

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õ.

  • 4 months later...
Posted

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?

Posted

Szia!

 

Ez kivitelezhetetlen, a boot folyamat elejét assemblyben kell megírni.

Posted (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 by tvili999
Posted

Hogy ami a dosba lefut a karakteresen azt itt hogy kell elindítani?

Posted

Mit értesz DOS alatt? :pislog: 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.

Posted

Ha egy egyszerû helloworld progit beteszek, ugyanúgy kifogja írni a printf-t karakteresen?

Posted

Köszönöm, most már tisztába vagyok ezzel, azt hittem hogy azt a villogó _ jelet is a dos csinálja.

Posted

Nem, az egy scanf, vagy valami ehhez hasonló függvény.

  • 1 month later...
Posted

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:)

Posted
#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;
}

  • 1 year later...
Posted

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.

Posted

É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.

  • 3 weeks later...
Posted

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?

Posted

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.

Posted

Igen, a megoldás valóban ez. :igen: 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.

Posted

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.

Posted

Ha valami C-kódot generál, azzal nekem már semmi dolgom, készen van :D 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

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.

Posted

@ KGigi: De én nem azt mondtam, hogy nyúljál bele kézzel. :D 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.

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...