Hol tanulhatok meg C-ben programozni???

Fórumok

Sziasztok!

Az lenne a kérdésem, hogyan/honnan tanulhatok meg C-ben programozni egyetem és főiskola nélkül. Tudtok javasolni valami tanfolyamot, könyvet, sorrendet amiből egy kezdő összeszedheti magát?
Számtek technikus a szakmám, de a suliban csak belekóstoltunk programozásba, ami a turbo pascallal ki is merült.

Bocs a hülye kérdésért és köszönöm a válaszokat előre is!

Gábor

Hozzászólások

Keress egy egyszerű feladatot, vegyél egy jó könyvet és láss
neki. A Pascal jó alap.

> Sol omnibus lucet.

Egyetertek. Szerintem is pascallal indulj tovabb (ez egyebkent is oktatasi celokkal keszult eredetileg, a nyelvi szintaxist is ehhez igazitottak). Ha mar a pascalt kened-vagod sokkal konnyebb lesz megerteni a C-t. ;-)

Minél korszakalkotóbb ötlettel állsz elő, annál több hülyén kell átverekedned magadat.

Egyetértek. Pascallal nem nagyon lehet jutni sehova. A Delphi jövője is bizonytalan, a FreePascal meg kb. a hobbistáknak jó, na meg arra, hogy a Turbo/Borland Pascal programokat futtasd vele, ha neadjisten még ma is olyanokra lenne szükséged. Én is a K&R C könyvet ajánlom. A másik, amit állandóan ajánlgattak nekünk a BME-n az a Computerbooks kiadótól a "Programozzunk C nyelven!", de én speciel ezt utálom, mert száraz, referencia-szerű és Borland meg DOS-specifikus dolgok (is) vannak benne. A K&R az logikusan felépített, olvasmányos és érdekes.

Én még a '90-es évekbeli kiadásából tanultam belőle. (A '90-es években.)

És mivel más géphez nem tudtam hozzáférni, amin lett volna C fordító, így egy AT&T féle SysVR4-en tudtam a benne lévő példákat kipróbálni! ;-)
A getc() meg egyéb conio.h-s baromságokat eleve skippeltem/helyettesítettem értelmesen. A megértésen nem változtat.

Viszont rögtön sikerült is érdekes pofonokba belerohannom vele: volt egy remek kis példa benne .dbf fájlok felolvasására. A gép, amin meg a Unix futott, ahol kipróbáltam természetesen nagy-indiános risc procijú volt (m88k), úgyhogy rögtön lehetett is szépíteni a kódot, hogy akkor előbb a dbf-ből felolvasott bájtokat sorbateszem, mert ott csak simán a kis-indián sorrend szerint beleböfögte a .dbf-ba az adatot a beleböfögője.

Viszont mivel előtte volt _rendes_ pascal tudásom, ezért a pointereken már nem ütköztem meg, csak tapasztaltam, hogy itt még jobban oda kell rájuk figyelni. Ennyi.

"
Vannak jó Turbo Pascal könyveim. Győrben még mindig ingyen elvihetők. Nem nagyon kapkodnak érte. :)"

írtam mailt, megkaptad?

Jaj, azért ne essetek egymásnak mert hülyéket kérdezek! :D

Totál zöldfüles vagyok, bocs ha nektek már hülyeségnek számít amit kérdezek! :)

----------------------------------------------------------------
"Értem én hogy villanymotor, de mi hajtja!?

Javaslom először nézz körül a neten, mert tucatnyi oktatóanyagok állnak rendelkezésedre ha utánnakeresel. pl itt és itt, vehetsz könyveket is, amit alkalmankétt 1xübb is kezelni. Ha úgy látod, hogy továbbra is érdekel a téma akkor kezdj el valamiylen nagyobb programokat írogatni, mélyülj el az elméleti részekben, sajátits el új algoritmusokat, nézz bele a neten fellelhető forráskódokba, stb.
Ha tényleg akarod, akkor átverekeded magad minden akadályon, és elsajátítod a nyelvet...

Legolcsóbb, ha bepofátlankodsz egy egyetemi/főiskolai előadáskurzusra, ÉS veszel egy jó könyvet.

Ha már van könyv/jegyzet, szvsz keress neten gyakorlat, laboranyagot. Lesz egy csomó példád, feladatod kidolgozva. Mikor középsulis koromban próbáltam gyakorolni programozni, mindig gondban voltam kreatív, nem unalmas feladatok kitalálásával :)
--
"Mégse ment el, valami mailer démon visszaküldte....figyelem már egy ideje, nagy g*ci:))"

Petho" A'da'm: C c. konyve. Nagyon jo, bar nem tudom hol lehet mostanaban beszerezni ('92-es kiadas van meg nekem, kb azokbol az ido"kbo"l). Az ad egy olyan szemleletet, ami szerintem kell ahhoz, hogy valaki jol el tudja sajatitani a C dolgait.

A.

Klikk ide, itt a konyv 2006-os kiadasa: http://www.kiskapu.hu/index.php?BODY=BookInfo&OP=details&ID=5907

Nemreg szereztem be en is, mert bar vizsgaztam belole az egyetemen, de jo pap holtig tanul...

A masik szinten ajanlhato konyv a C melle vagy esetleg helyett Stroustup C++-a:
http://www.kiskapu.hu/index.php?BODY=BookInfo&OP=details&ID=19100

Programozas temaban me'g jo lehet meg ez is (ingyenes ebookok): http://www.janiry.com/bruce-eckel/

Én abból tanultam. Tehát meg lehet belőle. :)
Annyi gond van vele, hogy Borland C specifikus kissé.
Viszont van benne egy pascal vs C fejezet ami elég hasznos. Feltéve, hogy a Pascal-t ismered.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Brian W. Kernighan-Dennis M. Ritchie - A C programozási nyelv

ETO: 519.682 C
ISBN 963 10 6100 0 -> 1. kiadás
ISBN 963 11 9931 8 -> 3. kiadás

Csak hogy a könyvtárban is megtaláld ha az új nincs bent.

Én is csak azt tudom javasolni, mint elöttem már mások is: magadtól, könyvek és neten talált leírások/példák segítségével. Ez a legjobb.
- Először egy natúr C alap könyvet, ami bevezet a nyelvezet felépítésébe, működésébe
(sokan szídják Angster Erzsébet irományait, de szerintem használhatóak)
- aztán olyan C++ könyvet, ami jól tárgyalja az objektumokat

Ha már megismerted valamelyest az objektum orientált programozás mibenlétét, javaslom ezt:
Bjarne Stroustrub: A C++ programozási nyelv

(Bjarne Stroustrub... A kimondhatatlanul hülye neve miatt én csak Kimondhatatlanul Hülye Nevű Ficzkónak nevezem.)
Valamit azért tudhat a pacák, mivel ő alkotta a C++ nyelvezetet :-)

Hidd el, többre mész, mint egy főiskolai előadáson. A saját tematikád szerint szárnyalhatsz egyik témáról a másikra, mivel te érzed azt, hogy adott pillanatban mi az, amit meg kell fejteni. Ezáltal te magad állítod össze az infókat kész használható tudássá.

------------------------------------
[Debian Sarge; ASUS P4T533-4; 2.4GHz CPU; 512MB RAM; XFree86; FluxBox]

!!!Ne zavarjuk össze a topiknyitót!!!

Egyértelműen C-ről beszél és nem C++-ról. Nem tudom van-e értelme
nekiugrani a C++-nak, ha nem kupálódott ki C-ből! Én azt javaslom,
egyelőre a C-re koncentrálj.

A C++ egy MÁSIK programnyelv.

> Sol omnibus lucet.

Jó dolog :)
A C és a C++ más-más programnyelv. A gondolkodásmód is különböző. Ezért inkább ne a C-re alapozza a C++ -t. Pláne ne Pascallal alapozzon C-re. Az megint más gondolkodásmód.
A Kiskapu kiadónak van egy egész jó Linux C könyve. Azzal érdemes kezdeni.
--
unix -- több, mint kód. filozófia.
Life is feudal

Én assemblyvel kezdtem, az után nagyon könnyű volt a C.
Azt átláttam, hogy a C++ NAGYON más, és nem nekem való.
(Azért az átjárás nem lehetetlen.) A topiknyitó C-t akar
tanulni, segítsük őt ebben.

A Pascal szerintem egy általános alap. Eredetileg oktató
nyelv volt, azaz ezen keresztül akarták tanítani a
programozást. Ezért kezdik ezzel mind a mai napig szinte
mindenhol.

Ha nagyon el akarok vonatkoztatni a konkrét dolgoktól,
akkor azt mondom: nem a nyelv a lényeg! Kódolni könnyű.
A mögötte lévő tartalmon van a hangsúly. Vannak persze
nyelvek, amik alkalmasabbak egyik vagy másik feladatra,
biztos nem akarnék pl adatbáziskezelőt írni C-ben.
A lényeg az: megtaláld egy probléma megoldását, és
találd meg a megoldáshoz szükséges megfelelő eszközt IS.

És még egy fontos dolog: a programozás veleje az
időzítés (szinkronizálás). Mindig ezzel van a gond.
Ha papíron megoldottad a szinkronizálást, megoldottad
magát a feladatot is.

> Sol omnibus lucet.

Én assemblyvel kezdtem,

nem viccelsz ;] Anno, a dos-os idokben, egy codeview nevu debuggerben veletlenul megnyomtam az f3-at, az valt at C nezetbol vegyes (C+asm) es/vagy vegytiszta asm ne'zetre es csak ne'ztem hogy mi a fene ez ("pop si", tetszett ;]), aztan megtanultam...

C++ NAGYON más

Ez beza igy van... legalabbis en a c++-ban szinte semmire se tudom hasznalni ~10 e'v C-s tapasztalatait... Pl. amit c-ben megszoksz, hogy fv-pointer, callback-ek, minden vacak, azt c++-ban "nem szokta'k", helyette jonnek (allitolag) ezek a virtual-ok meg egyeb ize'k, amik, ha't, e'g e's fold... pedig jo az a callback.

És még egy fontos dolog: a programozás veleje az
időzítés (szinkronizálás).

Ezmiez?


#include <iostream>

class B
{
public:
   virtual void operator()(int) const =0;
};



void
func(const B& cb, int i)
{
  cb(i);
}


// ---8<---

class C : public B
{
public:
   void operator()(int k) const  { while (k-->0) { std::cout << "ha"; } std::cout << " :)\n"; }
};


int
main()
{
   func(C(),2);
   return 0;
}

icallbacknek mi koze a virtualhoz? :-)

hat ezaz ;) Egy OO-ban jartas szakembertol kerdeztem meg egyszer, miutan a callback-ek es a fuggvenypointereket visszaado fuggvenyek "letjogosultsagarol" beszelgettunk, hogy egy olyan klasszikus callback-es peldat, mint rendeze's, hogy csinalnak meg OO-ban. Ugye adott valami kvazi bonyolult algoritmus (quick sort vagy balanced tree-n alapulo sort) aminek barmilyen compare() fuggvenyt atadsz mint callback, es akkor azalapja'n rendez. Es erre mondta, hogy ilyenkor azt csinalja'k, hogy a rendeze's egy osztaly, aminek egyik fv-e (a compare) virtual, az osztaly azt hivogatja rendeze's kozben, de egy adott cucc rendezesenel orokoltetned kell ezt, es peldanyositani a virtualt, immaron a cucc rendezesenek megfelelo compare()-vel.

Blah. El se hiszem hogy fent ezt en irtam, lehet hogy nagy hulyese'g ;] Egyszer majd kiprobalom azert, hatha magamtol is...

A.

Vagy, mint a java - definialsz egy Comparable interfeszt es csak azok az objektumok sortolhatoak, amik ezt implementaljak (interfesz az olyan, mint egy teljesen absztrakt osztaly - ezzel "oldja meg" a java a tobbszoros oroklodest).

Amugy ez mar messzebbre mutat: a tervezesi mintak kerdeskorere. Es igen, valoban - az ojjektumorientalt paradigmat megtanulni az sokkal inkabb a tervezesi mintak szerinti gondolkodas elsajatitasat jelenti, es nem a nyelvi elemek (class, virtual, interface, template, akarmi) elsajatitasat... Rengetegen tudnak nagyon szepen strukturaltan programozni ojjektumorientalt nyelveken is... (vesd össze: egy igazi programozó bármilyen nyelven tud fortranban programozni:)

Hát, ez egy megoldás a sok közül.

Az stl pl. nem így csinálja. Egy gyors és könnyű példa:

http://www.sgi.com/tech/stl/Multimap.html

Amúgy én ilyen esetben default-ból template-ekkel csinálnám a dolgot. Ha nem lehet template-ként, akkor vagy azt amit Te írtál, vagy vmi olyasmit, amit linkeltem, vsgy a kettő keverékét. Bár sajnos nem szeretem a C++-template-eket, mert csúnyák, de sajan praktikusak. :(

De a józan ész mindig lehetővé teszi, hogy a legegyszerűbb és legátláthatóbb megoldást programozzuk le. :))))

Az assemblyben azt szerettem, ami a hátránya :)
Nem tipusos :) Lehetett is trükközni remekül, amikor az ember magát a kódot módosítgatta futás közben. De ez már a régmúlt :(
BTW én a C felé segítettem a kérdezőt, mert C-s könyvet ajánlottam neki.
--
unix -- több, mint kód. filozófia.
Life is feudal

Jó kis overlay-es gépi kódú programok! Nekem minden
programom 50.000 byte volt. PSP+sajátkönyvtár+overlay
terület+stack. Lehet nevetni.

Amikor megcsináltam a saját C könyvtáraimat (ezeket
használom mind a mai napig!), fogtam az assembly listát
és sorról sorra írtam át C-be. Ezen is lehet nevetni (-::

> Sol omnibus lucet.

A programnyelv szerintem nem az, hogy hogyan néz ki az if, meg a for, hanem a gondolkodásmódját kell megérezni és onnan kezdheted el a programozást. Ezért szerintem pascal és c között nem csak az a különbség, ahogy létrehoz szintaktikailag egy for ciklust. Ezért ég és föld egy c-pascal, vagy egy C-C++ összehasonlítás.
--
unix -- több, mint kód. filozófia.
Life is feudal

A szinkronizálással nem kell törődni, egyszer kell megírni a megfelelő könyvtárat (vagy meglévőt felhasználni), aztán többet nincsen gond vele.

Nem lenne szabad úgy programozni, hogy nem lett előtte legalább vázlatosan (nyelvtől függetlenül!!!) megtervezve. Márpedig sokan - helytenelül - így járnak el, eredmény totál gányolás, és dokumentálatlan, átláthatatlan szemétdomb.

Azt hiszem a szinkronizálás (időzítés) kérdéskörben félre
értjük egymást. Nem baj, majd máskor kitérünk erre is (-::

Tényleg assemblyvel kezdtem. És mikor már javában C-ben
írogattam mindent, még akkor is visszanéztem az assembly
kódot, hogy jól csinálja-e a fordító. Később erről
leszoktam. Azt azért elmondanám még, hogy a fordítók
NAGYON jó kódot készítenek!

> Sol omnibus lucet.

A Pascal szerintem egy általános alap. Eredetileg oktató
nyelv volt, azaz ezen keresztül akarták tanítani a
programozást. Ezért kezdik ezzel mind a mai napig szinte
mindenhol.

Oktató nyelvnek szánták? Szerintem nem. Nem a BASIC-el kevered? Annak a nevében is benne van: Beginners' All-purpose Symbolic Instruction Code.

Mondhatjuk, de nem lesz igaz... egyrészt nem ismer eljárásokat csak szubrutinokat (amiket a sorszám alapján talál meg!), másrészt, bár lehet benne struktúráltan programozni, meglehetősen fárasztó:

1000 IF NOT felt THEN 1050
1001 ... THEN-ág
1049 GOTO 1100

1050 ... ELSE-ág
1100 REMARK IF-vége

(Gondolom most jön valaki, aki megpendíti, hogy ilyen meg amolyan kiterjesztett és továbbfejlesztett BASIC mi mindent tud... kétségtelen, de az nem BASIC, hanem mondjuk "BASIC eredetű, de azzal semmilyen irányban sem kompatibilis programozási nyelv")

Bár, ha belegondolok, hogy begépelt ezer soron belülre bevinni újjabb 15 sort, az elég nehéz, ha a soreleji sorszámozás nem kellően lazán lett megadva.
Akkor lehet újra sorszámozni az egész programot és nézni, hogy hol lettekk elszva a hivatkozások...
--
unix -- több, mint kód. filozófia.
Life is feudal

Azért, ha valami szisztematikus módszerrel sorszámozol, akkor könnyen megoldható, hogy ne keveredj el. Nem arra találták ki, hogy nagy programokat írj benne (a gépek is kicsik voltak, és kezdő nyelvnek is szánták). Pl. a példádat sokkal áttekinthetőbbé, karbantarthatóbbá teszi, ha úgy írod meg, hogy


10       IF NOT feltétel THEN 1000
20          THEN ág első utasítása
30          THEN ág második utasítása
             ...
989         REM THEN ág vége
990         GOTO 2000
1000     REM IF ág eleje
1010        IF ág első utasítás
1020        IF ág második utasítás
...
1999        REM IF ág vége
2000     REM ENDIF
2010     ...

Persze ezzel is van két baj: az első a sorhosszlimit (bár ez a legtöbb implementációban azért nem 72 karakter volt), a másik, hogy az ilyen szabályok betartásához már kell némi gyakorlat, tehát pont a kezdet kezdetén sz*p az ember ahelyett, hogy sikerélménye lenne.
(A hasonló kellemetlenségek a Fortranban épp emiatt kevésbé voltak zavaróak: azt hosszabb programokhoz, gyakorlottabb programozóknak szánták. De ugyanúgy, ahogy a Fortranból is sorban kiiktatták a Fortran 66 kellemetlenségeit (Fortran 77, Fortan 90, Fortran2003), teljesen továbbfejleszthető lenne a basic is egy struktúrált programozásra tényleg alkalmas, a régivel (nagyjából) felülről kompatibilis nyelvvé.
Azt, hogy a szubrutinok is hozzáférnek a hívó szubrutin változóihoz, tényleg elvetemült ötletnek tűnnik ma, de egy 16K-s gépen még így sem lehetett könnyű egy egészen Fortranszerű nyelv interpreterét megírni.)

C++-t a C után tanulni felér egy öngyilkossággal. Kell pár év, mire az ember kiheveri a procedurálisról OO személetre történő váltás okozta traumát.

Komolyra fordítva a szót: aki C-ben kezd, az nagyon nehezen alkalmazkodik a C++ által elvárt gondolkodáshoz. Lényegében továbbra is C-ben programozik, csak pl. gcc helyett g++-t fog írni, és egy-két apróság miatt már nem fordulna le sima C fordítóval. Egyszerűen nem éri meg.

barmilyenlinux:/usr/share/man/man[23]/*

elobbi (man2): rendszerfuggvenyek (alacsonyszintu file i/o, socket-ek, rendszerhivasok, multitaszk, netinet fuggvenyek, kb. ~300 fuggveny es makro van itt, kvazi minden telepitesnel)
utobbi (man3): magasabbszintu konyvtari fuggvenyek (printf, kettes szintu file i/o, stringkezeles, memoriakezeles es az osszes API referencia is idekerul/ gyk. libakarmi-dev dokumentacioi/, nalam kb. ~3000 fv van itt).

A.

"Ha már megismerted valamelyest az objektum orientált programozás mibenlétét, javaslom ezt:"

Mi az az objektum?!
Én még úgy tudom, hogy annak a folyosóját mostuk bakaruhában! :D :D

El magyarázná valaki, magyarul?!(érthetően)

Meg azt hogy miért, akarja némely "ismertető" anyag
"lerajzolni"(szemlélteni, vagy inkább összezavarni?!) a szilicium chipben a verem helyét és szegletét, meg az "exe" fájl helyét?

Ki az, aki megtudja mondani?

Ez, színvonalában arra emlékeztet, amikor egyik alkoholista (katonai) vezetőm, le akarta rajzolni hogy nyöszörög a magnóba a .
Ez a füllentős katona szemléltetése akart lenni! :D

----------------------------------------------------------------
"Értem én hogy villanymotor, de mi hajtja!?

Nem válaszol senki? :(

Jó tudom hogy nektek hülyeség, de nekem nem az! :)
Mer pl "ojjektum" kifejezésre más asszociáció van bennem.
Nem lehet valahogy olyan kif.-seket használni amivel nem az erdőbe vezetik a rosszul asszociáló emberkét?!
Lehet röhögni is, de akkor sem értem! :D

----------------------------------------------------------------
"Értem én hogy villanymotor, de mi hajtja!?

Nem, nem hulyeseg a kerdes... Nekem is egy kicsit furcsa hogy minden OO konyv olyan kaliberu peldakkal jon, van az "emberek" osztaly es akkor azonbelul a "ffi" meg a "no" meg a postas meg a vasutas, meg egyebek... Hat, hogy effele peldak meg absztrakciok a gyakorlatban (najo az en gyakorlatomban) mikor jonnek elo", az jo kerdes... Az "OO terveze's" tematikaju konyvek meg tulontul elvontak...

Értem én hogy villanymotor, de mi hajtja!?
A villanymotor egy objetum. Amit hajt, az is. Ami hajtja, az is. ;)

mit tudsz? miért nem érted?

mondjuk ezt érted?:
Az objektum egy osztály egy példánya.
Pl. Ha vannak emberek, ezeknek van keze-lába, és tudnak trollkodni, akkor Pistike -aki az emberek egy példánya- tud trollkodni.
Jelen esetben az objektum Pistike, az emberek pedig mint osztály szerepelt.

Még egyszer.
Szóval "ojjektum != osztály" vagy "ojjektum == pistike"?

De hogy kerül ide az osztály?

"mondjuk ezt érted?:"
Már nem. :D

"Az objektum egy osztály egy példánya."
Az osztály jelentése? (asszociáció)

----------------------------------------------------------------
"Értem én hogy villanymotor, de mi hajtja!?

/* Egye fene, ha offolunk akkor en is beszalok. :-) */

Teljesen jogos egyebkent a felvetesed, az IT-ben (is) az elnevezesek okozzak a legtobb problemat kezdoknek mire megertenek egy-egy temat.

Ha mar oop-nal vagyunk miert ne hozhatnank fel a "method"-ot (modszer), aminek egyebkent semmi koze semmifele modszerhez, mintsem inkabb egy algoritmus logikai leirasat valositja meg egy osztalyon belul.

Aztan "shell" (he'j). 30 evvel ezelott meg megallhatta a helyet, de ma mar szinte minden client-server megoldasnal hivhatnank a kliensoldalt ugyanigy.

Aztan "file". (akta, reszelo) Ugyanezzel a logikaval az osszes adatbazis sort/mezot is hivhatnank ugyanigy, lehetne gyartani okokat is.

Aztan a unixos baromsagokrol mar nem is beszelve, az egy kesz agyrem: cat (macska), nice (kedves, aranyos), daemon (de'mon), skeleton (csontvaz).

Meg szebb amikor ezeket a dolgokat leforditjak mas nyelvekre is, raadasul sokszor rosszul. :-(

Az egyik kedvencem az az oop-ben az "overload" fogalma magyaritva: tultoltes. Az angolban meg ugy-ahogy megallja a helyet, de a magyarban mar messze felrevezeto. Ehelyett nyugodtan lehetett volna "(parameter/argumentum)utantoltes"-nek forditani.

stb.

Minél korszakalkotóbb ötlettel állsz elő, annál több hülyén kell átverekedned magadat.

En tultoltest olvastam vhol, mindenesetre elhiszem. :-)
En azert az "utantoltes"-nel maradnek. /* Pl.: utantoltok ujabb metodusokat, melyek mas argumentumlistaval rendelkeznek, vagy esetenkent uj argumentumokat toltok a meglevok utan. */

Minél korszakalkotóbb ötlettel állsz elő, annál több hülyén kell átverekedned magadat.

A magyar szaknyelv a "túlterhelés"-t használja, abból a
megfontolásból, hogy pl egy fv nevet többszörösen is
felhasználhatsz tehát maga a NÉV van túlterhelve.

(őszintén: minek két féle függvényre ugyanazt a nevet
használni? Marha szar lehet az ilyen kódot trappelni.)

> Sol omnibus lucet.

Jó az overloading, mert rugalmas kódot tesz lehetővé. A neve meg tök mindegy, hogy mennyire értelmes. Ha van jobb ötlet, felőlem az is lehet a hivatalos mostantól, de mondhatjuk mákostésztának is :) Ilyen alapon a compiler helyett mondhatnánk convertert is, nem? :)
--
unix -- több, mint kód. filozófia.
Life is feudal

itt a hupon rengeteg szakerto van
toluk batran
aztan gyorsan kezdjel neki linux kernelbe kodot kommitolni
koszike
--
"en csak hupot olvasok" al3x
http://litch.eu/blog

"itt a hupon rengeteg szakerto van
toluk batran
aztan gyorsan kezdjel neki linux kernelbe kodot kommitolni
koszike"

Hááát, aki elmagyarázza hogy a klasszikus példában,
"Hello World" Hol az ojjjektum.......?

----------------------------------------------------------------
"Értem én hogy villanymotor, de mi hajtja!?

haha, oop hello world, tessek:

a hello_world egy objektum, van egy - maradva a c-nel - char* adattagja, ami a "hello world" stringre mutat. a hello_world a greetings osztalyba tartozik, aminek van egy print metodusa. ez a print annyit tartalmaz, hogy kiirja a kepernyore a char* altal mutatott stringet.

a fentebbi char*-os megoldassal c++-ban


#include <stdio.h>

class greetings
{
public:
   greetings(char*);   // ezek itt a deklaraciok
   void print(); 
private:
   char* ptr;          // olyan mint egy struct, lenyegeben.
};

greetings::greetings(char* _ptr)
{
  ptr=_ptr;
}

void
greetings::print()
{
  printf("%s\n", ptr);
}

int main()
{
   greetings   hello_world("hello world");
   hello_world.print();
   return 0;
}

--

ugyanez igy nez c-ben, ha oop-ot akarunk mimelni:


#include <stdio.h>

struct greetings
{
    char* ptr;
};

void
greetings_ctor(struct greetings* this, char* _ptr)
{
        this->ptr=_ptr;
}

void
greetings_print(struct greetings* this)
{
        printf("%s\n",this->ptr);
}

int main()
{
        struct greetings        hello_world;
        greetings_ctor(&hello_world, "hello world");
        greetings_print(&hello_world);
        return 0;
}

dereng mar a dolog?

b+! Ha példát írsz, akkor normálisat, ne C-gányt!


#include <iostream>
#include <string>

using namespace std;

class greetings
{
public:
   greetings(const string&);   // ezek itt a deklaraciok
   void print(); 
private:
   std::string str;
};

greetings::greetings(const string& _str)
{
  str = _str;
}

void
greetings::print()
{
  cout << str << endl;
}

int main()
{
   greetings   hello_world("hello world");
   hello_world.print();
   return 0;
}

" a hello_world egy objektum, van egy - maradva a c-nel - char* adattagja, ami a "hello world" stringre mutat. a hello_world a greetings osztalyba tartozik, aminek van egy print metodusa. ez a print annyit tartalmaz, hogy kiirja a kepernyore a char* altal mutatott stringet."

Lassaban nem lehetne? :(

"dereng mar a dolog?"

úgy látszik menthetetlen vagyok.

----------------------------------------------------------------
"Értem én hogy villanymotor, de mi hajtja!?

"forumtopicban kurvanehez magyarazni"

Inkább az gondom hogy hiába olvasom a könyveket, netről letöltött doksikat, nem világosodik itt belül! :D
Ezek úgy szólnak, minha kész programozó zseni lenne
a kezdő(zöldfülű). :)

"Tehát az osztály az egy adatstruktúra + a kezeléséhez szükséges programrészletek gyűjteménye, ennek egy példánya az objektum."

Ezt mire feldolgozom........! :)

"+ a kezeléséhez szükséges programrészletek"

Ezek a header-ek?
Bocs ha hülye kérdés! :D

----------------------------------------------------------------
"Értem én hogy villanymotor, de mi hajtja!?

Nem a headerek, hanem a függvénymezők. A példában: az adat, az maga az üznet. A kezeléséhez szükséges programrészlet: a kiíratás. Persze ez csak egy példa, ilyen egyszerű feladatra nem érdemes használni. De pl. ha racionális számokkal kell valamit számolnod, akkor:
Adatmezők:
számláló, nevező (egészek), ezek védettek lehetnek (ne lehessen elrontani a törtet, pl 27/0)
Konstruktorok:
létrehozás (másolással, inicializálatlanul, két egészből, stb.)
Operátorok:
*,/ (tört szorzása, osztása törttel, egésszel)
=
<< (kiíratás streamre)
>> (beolvasás)
Függvénymezők:
számláló_kiolvasás() (publikus)
nevező_kiolvasás() (publikus)
egyszerűsítés (lehet rejtett, a műveletek használják)
Ekkor ez egy osztály, és ha azt mondod, hogy


...
racionalis a(3,2);
...

Akkor a egy a racionális osztályba tartozó objektum (egy racionális szám), értéke 3/2.

Ha jol emlekszem az objektum fogalma erdekel. Mivel az ember altalaban vizualisan gondolkodik, megprobalom illusztralni hasonlokeppen. Remelem sikerulni fog. :-) Atfutottama fenti thread-eket, ha jol vettem ki akkor proceduralis nyelveket mar lattal.

Meg mielott beleszaladnek az objektum fogalmaba, eloszor vesezzuk ki a class (osztaly) fogalmat.

Kepzelj el egy tablazatot, ahol a tablazat minden oszlopa egy kulon adatot kepvisel. Egy tablazatba tesszuk oket mert ezek az adatok kesobb kapcsolodnak egymashoz valamilyen logika szerint.

Nezzunk ra egy egyszeru vizualis peldat:

1. Pelda

Osztaly = DolgozokTablazata
Mezok: "Nev" "SzuletesiIdo" "SzuletesiHely" "Lakcim" "Fizetes"

Lathato, hogy a fentiek mind adatmezok, amelyek majd egymassal kapcsolatban levo valos adatokat fognak tartalmazni.

Nezzunk ra egy masik vizualis peldat, ezuttal valodi adatokkal:

2. Pelda

DolgozokTablazataValodiAdatokkal
Objektum1 = "Gipsz Jakab" "1949-02-03" "Budapest" "Aknamezo utca 8." "50000"
Objektum2 = "Jakabovics Gizimari" "1969-07-09" "Paks" "Kekmezo ter 3." "60000"

Tehat, az adatstrukturat, a tarolasi logikat az osztaly (class) irja le, az objektum pedig mar az ezzel a modszerrel tarolt valos adat lesz.

A fentiekben csak az adatokkal foglalkoztunk - mint jellemzo - , ezeket az oop-ban mezoknek (field) hivjuk.

Mint mindenhol itt is szuksegunk lehet algoritmusokra. Pl, ha szeretnenk elore kiszamolni a dolgozok eves szabadsagat, tudnunk kell hozza az eletkorat (Szerk: ez nemtom Mo-n hogy van, lehet, hogy egyseges minden eletkorra). Ezt az algoritmust esszeruen valahova olyan helyre kelle tenni aminek koze van a fenti mezokhoz. Hova tennek mashova, mint ezt is ugyanabba az osztalyba, hiszen a vegen, a kiszamolt szabadsagot is illene tarolnunk valahol, ez pedig egyebkent is kapcsolodik minden dolgozohoz.

Az egyes peldank igy fog alakulni:

3. Pelda

Osztaly = DolgozokTablazata
Mezok: "Nev" "SzuletesiIdo" "SzuletesiHely" "Lakcim" "Fizetes"
Metodusok:

"GetEletkor"
{
VisszateroErtek = MaiDatum() - SzuletesiIdo;
}

Tovabbfejesztettuk az osztalyunkat, most mar kepes megmondani a dolgozo eletkorat is. Viszont esszeru lenne ezt eltarolni, hogy kesobb ne kelljen minden alkalommal ujraszamolni (tiz dolgozonal ez az adat nem tetel, de bonyolultabb feladatoknal + 100000 dolgozonal mar lehet).

Celszeru ezt akkor elvegezni, amikor felvisszuk az uj dolgozot.

4. Pelda

Osztaly = DolgozokTablazata
Mezok: "Nev" "SzuletesiIdo" "SzuletesiHely" "Lakcim" "Fizetes" "Eletkor"
Metodusok:

"GetEletkor()"
{
VisszateroErtek = MaiDatum() - SzuletesiIdo;
}

"TaroldElAzUjDolgozot()"
{
Eletkor = GetEletkor();
UjDolgozoTarolasa();
}

Tehat osszegezzunk:
Az osztaly az, ami meghatarozza a tarolasi strukturat, illetve egyuttal a adatkezeleshez szukseg logikat is hordozza magaval.

Az objektum az maga a valos adat az osztaly altal meghatarozott szabalyok szerint. Ebbol annyi peldanyt hozunk letre ahanyszor tarolni akarunk az osztaly altal meghatarozott formaban. (Vagyis ahany dolgozonk van).

Az osztalyon belul mezo tartalmaz egy-egy adatot. Pongyolan fogalmazva valtozo. (nem helyes a "valtozo" kifejezes, de igy erthetobbe valik a feladatkore)

A metodus az osztalyban definialt olyan algoritmus, mely az adatok - rendszerint belso - kezeleset valositja meg.

Hat diohejban ennyi. ;-)

/* Trollereknek elore leszogeznem, hogy tisztaban vagyok vele, hogy a fenti peldat a valosagban nem igy hasznaljuk, es azzal is, hogy a szintaktikai abrazolast most improvizaltam. Kotekedjenek inkabb egy vodor Palmatex-szel, az pont arra valo! */

Minél korszakalkotóbb ötlettel állsz elő, annál több hülyén kell átverekedned magadat.

Itt a "greeting" egy osztály. Ez megadja, hogy egy üdvözlethez mi tartozik: kiíratás és egy adatmező, amiben az üdvözlő szöveget tárolod, meg egy-két technikai részlet, pl. egy konstruktor, amivel létrehozol egy üdvözletet (belerakod az üdvözlő szöveget).
Ennek egy példánya a hello_world objektum: ez az üdvözlet osztályba tartozik (van benne üzenet, és kiíratás), és a "Hello Word!" string-et tartalmazza.
Lehetne még egy objektumod:


...
greetings mryxmas("Merry Christmas!");
mryxmas.print();
...

Az objektum létrehozásakor lefut a konstruktor, beállítja a ptr értékét. Utána egy tagfüggvényét használjuk ennek a kiíratására.

Tehát az osztály az egy adatstruktúra + a kezeléséhez szükséges programrészletek gyűjteménye, ennek egy példánya az objektum.

OFF-on
Elég parázs zsongás alakult ki, hogy C meg inkább C++ vagy egyiket igen másikat ne, meg mit mi után.

Szerintem igenis fontos, hogy a C-t tanulja meg az ember előbb alaposan és azután kezdjen el C++-ban próbálkozni. Éspedig azért, mert a C tanulása során elég jól el lehet sajátítani az alapvető nyelvi lehetőségeket, amelyeknek a C++-ban történő felhasználásának a háttere jobban érthetővé válik.

Mindkét nyelvnek (C,C++) vannak alőnyös és kevésbé előnyös dolgai. Attól függően, hogy mi a cél, lehet egyiket, vagy másikat használni. Alkalmasságukat egy adott feladatra szerintem elsősorban nem az effektív lehetőségeik alapján, hanem a feladat mérete, összetettsége alapján lehet meghatározni. Az meg tuti biztos, hogy aki nulláról elkezd C++-t használni, előbb utóbb olyan alapvető problémákon fog fönnakadni és helybentopizni, amelyeket egy alapos C előtanulmánnyal könnyebben lehet venni.

Értem ezalatt a különféle fogalmak fordítási és futásidőbeni létezését, az automatikus és dinamikus tárkezelés problematikáját, pointerkezelést, típusok megértését, inicializását stbstb.
Amíg ezekkel a dolgokkal nincsen tisztában valaki, addig felesleges találkoznia olyannal, hogy konstruktor, meg osztály, meg virtuális függvény.

Szerintem a legtöbb problémát a következetes konvenciók nélküli durbelebumm stílusó programozás jelenti. C-ben alapvetően a pointeraritmetika, meg a kapcsolódó dinamikus tárkezelés és a pointerek inicializálásának dolgai jelentik a fő témát. Ezeket ha valaki jól abszolválja, akkor lehet továbblépni. Addig csak bizonytalan alapokra történő építkezésről beszélhetünk.

OFF-off

Visszatérve a topic témájára, valamilyen olyan könyv(ek) olvasgatása segíthet, amelyek fejlesztőezköz független módon írják le a dolgokat, tehát nem Visual Studio tutorialok, vagy Turbo C, vagy C++ Builder szájízzel öntik a dolgot, hanem magát nyelvet, annak lehetőségeit mutatják meg.

Előzőekben többen is ajánlottak igen jó könyveket. Én anno a Pethő véle C programozási könyvet használtam, meg ami elérhető volt, de sajnos magyar nyelven igen kevés jó anyag volt. Ma más a helyzet.

A K&R C könyvet kezdőknek nem ajánlanám, mert eléggé szőkszavú és nem utolsó sorban kissé elhaladt felette az idő, mivel a C++ fejlődése sok helyen visszahatott a C szabványosulására is.

A Gábor Dénesen használják még azt hiszem most is a C/C++ programozás könyvet, aminek a C-s részét volt szerencsém elkövetni, a C++-osra meg volt szerencsém nemtudni időt szakítani megírni. Szerintem kezdőknek ez a könyv elég tömör és lényegretörő. Nem referencia kézikönyv, azt akárhol lehet találni.

Szerintem ásd elő ezt, vagy ha nem elérhető már, akkor küldök neked egy verziót belöle, ha kell és adsz egy emilcímet.

Üdv,
t

Még annyi, hogy C++-ilag meg mindenkinek tudom ajánlani a "Design and Evolution of C++" Bjarne Stroustrup.

Ebből sokmindent meg lehet tudni a C++ létrehozásának miértjeiről és igen jól le vannak írva benne, hogy egyes nyelvi tulajdonságok mögött milyen fizikai kényszerek vannak, milyen dolgokat kellett mérlegelni, hogy így, vagy úgy valósítsanak meg dolgokat a C++-ban.

Szerintem a C++ programozási nyelv mellett alapkönyv.

Ez egy jó kis vallásháború lett :)
Szerintem tanuljon C-t, ha azt akar. Erre meg már mondtam, hogy Pere László C-könyve is jó. Az legalább Linuxra is jó és olyan dolgokat is elmagyaráz, amit a ComputerBooks C- könyve meg se említ. De IMHO C++ előtt C-t tanulni holtvágány. Vagy vállalni kell azt, hogy jó sok energiával előbb kigyógyul a C-ből és átáll az agya a C++ ra.
--
unix -- több, mint kód. filozófia.
Life is feudal

"De IMHO C++ előtt C-t tanulni holtvágány. Vagy vállalni kell azt, hogy jó sok energiával előbb kigyógyul a C-ből és átáll az agya a C++ ra."

Épp ezt próbáltam (lehet, hogy nem sikerrel, de) megvilágítani, hogy a C-ből éppenhogy egyenes átmenet van a C++-ba, nem pedig kidobott idő a C. Aki mégis ezt gondolja annak a fentebbi témakörök tekintetében a nem alapos ismeretek miatt rossz programozási beidegződései, szokásai vannak, voltak, amelyeket "a C++-hoz le kell vetni". Elismerem, hogy ez nagy szivacs, de nem amiatt, mert a C ilyen vagy olyan.

Komolyan érdemes a fentebb emlegetett Strustrup könyvet elolvasni. Olyan dolgokat tud meg az ember belőle, amitől kissé a "hitvilága" is megváltaozhat. Ajánlom mindenkinek.

Üdv,
t

Megrendeltem az említett könyvet. Sajnos 4-6 hét alatt jön meg :(
Kinéztem magamnak egy PYTHON könyvet. Az sincs raktáron :(
Ehh! Mind1! Majd lesz belőle, oszt majd akkor veszek...
Az, hogy C++ előtt kell-e C-t tanulni...?
Nemtom. Szerintem nem. Nem az az érdekes, hogy pölö egy for ciklus kinézete ugyanolyan C++ alatt, mint C-ben. Ez tök lényegtelen. A lényeg az, hogy karaktertömböt az ember használjon C-ben, de C++ alatt erre van más megoldás, ami C++ osabb. Ha C-tanulással beidegződik a * char, vagy char[], akkor tudatosan kell törekedni arra, hogy az ember megtanulja, hogy van más is C++ -ban arra a problémára, amit addig C alatt így oldott meg. Ez a nem mind1 szerintem.
Az, ha a C-ben mexokott char[] -t használod C++ nyelven, az olyan, mintha a számítógépedet, netedet csak arra használnád, hogy kinyomtasd a leveled és borítékba téve elgyalogolj a postára, hogy eljuttasd a haverodnak ahelyett, hogy e-mailt küldenél. Meg lehet oldani így is, de nem elég elegáns, nem a lehetőségekhez alkalmazkodó megoldás.
--
unix -- több, mint kód. filozófia.
Life is feudal

"Az, ha a C-ben mexokott char[] -t használod C++ nyelven, az olyan, mintha a számítógépedet, netedet csak arra használnád ..."

Nem értek egyet ezzel. Ismét jelezném, hogy feladata válogatja. Ha úgy tetszik C-ben is lehet dolgokat sokféleképpen megoldani. Az hogy a C++ ehhez még hozzárak néhány szabadságfokot, az egy dolog.
Mondjuk például parser írás során a vicinális, nagymennyiségű, bugyuta, de bolondbiztos, gyors feldolgozó funkciókat tutira C-s karaktertömb kezeléssel érdemes csinálni. Ezek után meg ha fel lett olvasva a dolog, akkor az intelligenciát a reportoláshoz, konverzióhoz lehet nyomni C++ módon. A minap épp egy hasonló feladatom volt.

Ezen túlmenően meg, ha nagyobb rendszert fejleszt az ember, ráadásul keresztplatformosan, akkor meg minél inkább a lelkivilágáig le kell menni a C++-nak, azaz saját típusok, opertátorok overloadolva (a new is, alatta saját memmanagerrel). Az alját itt "igénytelen" C-ben csinálja az ember. Volt szerencsém CAD-es rendszerfejlesztéshez, ahol ez elengedhetetlen volt. És én lepődtem meg a legjobban, hogy C-s pofával meg C++-os pofával is meg lehet valósítani szinte ugyanazt hasonló eredménnyel.

:)

Jó, én ezt elfogadom! Akkor én tudtam rosszul, de annyit azért kimondtál, hogy C-ben csináltad az alját :) Azaz bár C++ fordítóval etetted meg a kódot, de C-kódot alkalmaztál :) OK! Nem kekeckedek! :)
Akkor is: Pere László C-könyve rulez! :)
--
unix -- több, mint kód. filozófia.
Life is feudal

Kernighan & Ritchie könyvet letöltöttem, mos ezen rágom magam át.
Első átfutásra ígéretesnek látszik.
Majd a példa feladatoknál jövök megint a hülye kérdésekkel! :D :D
Most az alapos olvasásnál tartok.

----------------------------------------------------------------
"Értem én hogy villanymotor, de mi hajtja!?

k&r c könyv. ~2k huf, nemrég vettem meg, újra kiadták. itt-ott elektronikusan is hozzá lehet jutni. a többi nem olyan jó. ezután érdemes elolvasi Pethő gnu/linux unix c programozását. betekintést ad a gnu libc ezköztárába. ezt e kiskapu adta ki. jó tanulást!

(flamebait)
(oop-t meg szerintem ne erőltessed, ha nem ebből akarsz megélni, ha meg igen, akkor ógyis kell a papír)
(/flamebait)

Szerintem tanulj meg eloszor assemblyben programozni, utana mar konnyu lesz a C.
(az assembly meg ugyis jon, ha sokat pascalozol, mert ott szinte mindent csak asm betetekkel lehet megoldani).

A'rpi

+1
Szerintem is, a magasabb szintű nyelv használatának megvan az az előnye, hogy az _algoritmust_ és az _adatstruktúráidat_ fogod optimalizálni, és nem a MOV-ok és JMP-k számát.
Szerintem ma már csak nagyon speciális feladatok esetén van szükség arra, hogy az ember asm szinten optimalizálgasson, akkor is csak egy-egy függvény egy-egy legbelső ciklusmagját. ezt pedig legjobban akkor tudod megtenni, ha már van egy működő programod, és felméred, hogy mivel megy el benne az idő, megvizsgálod, hogy a lehető legjobb algoritmust használod-e, a lehető legjobb módon tárolod-e az adatokat, és ha ez még mind nem volt elég a kívánt sebességhez, akkor egy-egy részletet átteszel ASM-be.
(Ld. D.E. Knuth és E. W. Dijkstra véleményét az optimalizálásról: "Az idő előtti optimalizálás minden rossz forrása." Ez persze nem jelenti azt, hogy ha már megvan a program, [b]helyesen múködik[b], és tudod, hol telik el az idő, akkor ne lehetne szükség esetén assembly részeket beleépíteni.)
Az viszont szerintem nem kerülhető el, hogy azért valamilyen (MIX-szerű) gép belső működésével, az adatok tárolásának a módjával, a számábrázolás módjával és korlátaival tisztában legyél.

Az eredeti kérdés, hogy hol és miből tanulj meg programozni C-ben?
Otthon, a Kernihghan Ritchie féle zöld könyvből. Ha C kell, akkor ne assemblyt és ne Pascalt tanulj. A C++ persze mindenképpen kelleni fog.

Ha ram halgatsz ne c-t akarjal tanulni inkabb problj meg gondolkozni. A nyelv csak eszkoz ha mindig a leguljabb dolgokat koveted es a kodokat nezed csak bele zavarotsz. En anno ebbol tanultam
"Programming Role-playing Games With DirectX - fly.pdf" es meg volt 1 ami az adatszerkezetekrol es algoritmusokrol szolt.
Mellesleg foiskolaval nagy eselyed van elfelejteni gondolkodni.

Aki küldött emilcímet annak elküldtem egy példányt PDF-ben a munkásságomról.

Szerintem eloszor magaddal tisztazd, hogy mire szeretned "hasznalni" a programozas tudasodat? Tudom, ez elsore hulyen hangzik de, alapvetoen harom teljesen kulon agat latok:

- desktop programok. Itt szinte biztos, hogy OOP fejlesztoeszkozokkel tudsz csak boldogulni. (Persze sokan felhorkannak, hogy lehet C-ben is desktop programot irni, de ez olyan, hogy a versenyautoval is lehet "utcaiautokazni" es utcai autoval is lehet versenypalyan hajtani, egyik sem tul celravezeto)

- hardware kozeli programozas. Linux kernel, celgepek, gadgetek programozasa. Itt egy darabig az OOP meg nem rug labdaba, mert egyszeruen "nem fer el". Ez a C igazi nagypalyaja.

- server oldali kiszolgalo programok. Itt nagyreszt a Java ill. php dominal, bar lattam C-ben es Delphi-ben irt retteneteket is:). A Java OOP a vegtelensegig, meg az int-nek is van Objektum megfeleloje :). A php meg az ami, itt nem szeretnek vitat nyitni :)

Jomagam, Z80 Asm-mel es Turbo Pascal-lal kezdtem, majd Delphi es Java kovetkezett. Ezutan jottek C like nyelvek, C, Perl, Awk stb. Igy utolag a Pascal zsakutca volt, nagyon nem illik a kepbe.

Szereny velemenyem szerint az asm mar a mult, nehany even belul a microcontroller-ekbol is ki fog szorulni. Nem volt rossz az asm gondolkodas a C megertesehez (pointer, pointeraritmetika), de ezert ne ugorj bele :)

A javaban azert van az intnek is objektum-megfelelje, mert tisztan objektumorientalt nyelv, itt nem tudod keverni a strukturalt kodot az objektumorientalttal, mint Pascalban vagy C++-ban. Szal sztem ez nem megmosolyogni valo. Mindenesetre van, amikor nem hatekony. De hat tudjuk jol, elagazas, ciklus, szerkvencia segitsegevel minden megvalosithato. :D

En egyaltalan nem mosolygok rajta, olyannyira, hogy nagyon is elvezem a Java alatti programozast. Szerintem (es ez a szigoru maganvelemenyem) sokkal jobb es kenyelmesebb, mint c++-ban programozni. Sokkal atgondoltabb a felepitese.
Nemregiben egy epuletgepesz hallgato (aki c++-ban programoz) kerdezte, miben jobb a Java mint a C++, azt valaszoltam neki:
Regen a futesszereles csak hegesztessel keszult, mara sokkal hatekonyabban hegesztes nelkul is lehet csinalni.

Sziasztok!

Nagyon szépen köszönöm a segítséget és a sok hasznos linket! Úgy látom az olvasások alapján jó kis témát sikerült feldobnom :)
Azért esett a választásom a C-re, kernel driver modulokat szeretnék írni, külső, saját gyártású perifériák kezelésére. Bár ez még csak 1 álom, meglátjuk meddig jutok.
Már csak azt kellene eldöntenem, melyik disztrót használjam...

Köszönöm mégegyszer a sok hozzászólást, és bocs a kései reakcióért. Eddig nem voltam olyan hosszú ideig netközelben, hogy érdemben végig tudjam olvasni a hozzászólásokat.

Köszönettel Gábor

Mivel temaba vag es nem akartam uj topicot nyitni, ezert ide teszem fel a kerdesemet:
Szeretnem melyebben megismerni a C nyelvet, peldaul, hogy a program honnan tudja, hogy egy tombnek hany eleme van. Viszont nem talaltam meg azt a konyvet, amely kello melysegben mutatja be a nyelvet a standard ismeretek mellett.
Nos, lehet, hoyg ratalaltam az igazira, viszont - mivel nem birom fizikailag kezbefogni, atlapozni - nem tudok rola tul sokat.

Stephen G. Kochan - Programfejlesztes C nyelven

Meg van-e valakinek ez a konyv, es ha igen, tudna-e rola nyilatkozni? Peldaul, hogy:
* tartalmazza-e a standard konyvtari fuggvenyek peldakkal bemutatott hasznalatat
* maguknak a konyvtaraknak a leirasat (melyik fuggvenyeket tartalmazzak)
* a 'felszines' tudas mellett bemutatja-e a hatterben zajlo folyamatokat is
* ...

A masik, amire faj a fogam:

Andrew Koenig - C csapdak es buktatok

Ugyan ez kello melysegekbe merul, viszont nem ad alltalanos informaciokat.

Ki mit ajanl, van-e mas otlet a problemamra? Elore is koszi!

--
Azt akarom, hogy az emberek ne kenyszerbol tanuljanak, hanem azert, mert tudni akarnak.
Ui.: Kezdo Linux-os vagyok, emberi nyelven valaszoljatok! Koszi! :)

Ha jol sejtem a memoriaterulet bajtokban megadott meretet. Nezd meg egy int es egy char mereteit, majd az ugyanilyen tipusu tombok sizeof erteket.
Ebbol kovetkezik a tomb elemeinek szama:

tomb_elemei = (sizeof tomb) / (sizeof tomb[0])

--
Azt akarom, hogy az emberek ne kenyszerbol tanuljanak, hanem azert, mert tudni akarnak.
Ui.: Kezdo Linux-os vagyok, emberi nyelven valaszoljatok! Koszi! :)

Motiváció és jó tanárok. Az előbbi nekem megvan az utóbbiból inkább hiányt szenvedek. :D

Egyik ismerőeöm most talált egy Autohotkey nevű interpretert, aminek triviálisan egyszerű nyelve, illetve bináris fordítója is van!
Amúgy szerintem pascallal kezdeni felesleges önszopatás... Kezdj perl-el...

vicces, hogy valaki 3 év után új topicot indít egy régiben, de az a legjobb, mikor ezek után mások az eredeti kérdezőnek kezdenek válaszolgatni :)

--
joco voltam szevasz

1, Teach Yourself C/C++ sorozatokat ajánlanám, nekem a KR C-könyv nagyon nem tetszett. Nekem. Ellenben az előbbi nagyon jól követhető, részletesen elmagyaráz mindent, persze érdemes tudni angolul.

2, Ha ezeken átrágtad magad, utána NAGYON SOK gyakorlás, amit persze csak munkák kapcsán fogsz tudni abszolválni, otthoni hobbisufni szinten nemigazán ( ha már az egyetem/fősuli kilőve ).

3, Scott Meyers: Effective C++, és More Effective C++ könyveit ajánlanám az igazán mély tudáshoz. Ezek persze már biztos alapot feltételeznek.

Ha dobsz egy privátot, tudok Neked küldeni egy teljes egyetemi kurzus anyagát ( C/C++), ugyanis tanítottam pár évig.

Krisz

Az a kérdés, hogy mit akarunk megtalnulni:
1./ Programozni
2./ (Tudunk már programozni,) csak a C nyelvet
3./ Programozni, úgy hogy kikötjük a C nyelv használatát.
4./ ...

A téma indítjója (2007-ben :-D), vélhetőleg a 3. változatot akarta. Neki egy Teach ... típusú könyv jó indulás lehet, de a KR sem rossz. A KR könyv azoknak jó, akiknek az algoritmikus gondolkodás magától értetődő. Ha ez nem így van, akkor nyelvtől függetlenül, kísérletet kell tenni az ilyen gondolkodás megtanulására is.

-----
Dropbox tárhely igénylése: https://www.getdropbox.com/referrals/NTI2MzM2MjA5

Csak en erzem ugy, hogy a nyelv nem annyira lenyeg mint amennyire itt mindenki hangsulyt helyez ra...?!
Azt meg ertem, hogy funkcionalis nyelv nem ugyanaz mint egy imperativ, vagy OOP, vagy assembly , de tenyleg ennyire szamitana, hogy valaki pascalt tanul vagy C-t, vagy python-t vagy PHP-t vagy akarmit?!
==
`Have some wine,' the March Hare said in an encouraging tone.
Alice looked all round the table, but there was nothing on it but tea.

Éppenséggel felsoroltál kettő erősen típusos, egy teljesen OO, meg egy gyengén típusos nyelvet példaként.
Elsőre én mindenképpen valami erősen típusos nyelvet tanulnék, mert ezeknek a tanulásával sok olyan fontos "részletre" is fény derül, amit egy tisztán OO vagy gyengén típusos nyelv "elrejt" előled. Elég morgás szokott itt is meg máshol is lenni, amikor olyan rosszul működő programokba sikerül belefutni valakinek, amik azért nem jók, mert a programozója nem ismerte (eléggé) a gép és programozási nyelv mélyebb működését. Ha másért nem is, hát ezért nem mindegy, hogy valaki mivel kezd. Mert utána kevesebb lesz a szívás esetleg azzal a nyelvvel, amivel végül is majd "komolyabb" dolgokat kell alkotni.

Sziasztok!
Nekem is az lenen a kérdésem, hogy egy kezdő, aki életében nem látott még programot sorokban,az mivel kezdje. (Suliban mivel nem volt meg a létszám ezért emelt infónk nem volt, így nem tudtam sehova se járni ilyeneket tanulni:S.) Tervek szerint jövőre egyetem, műszaki fősuli vagy egyetem, és ha jól tudom, C-ben kell megtanulni programokat írni... és ami legnehezebb, le is vizsgázni majd belőle:P:) Nem akarom a fél évre hagyni, nem is biztos hogy megtudnám tanulni:) Inkább neki kezdek valamennyire, de ahhoz a Ti segítségetek kellene!
Van egy nagyon régi Pascalos könyvem: Gordon Erzsébet - Körtvélyesi Gézáné - Sós István - Székely Zoltán: Pascal programozási nyelv, és hogy neki kezdjek ennek, vagy kihagyhatom, és inkább a C-nek kezdjek neki? Teljesen kezdő vagyok, szal algoritmusok, rendezések stb. azt se tudom mi fán terem:)
Mit ajánlatok, hogy kezdjem, mivel?
Előre is köszönöm a válaszokat:)
Pacsee

-1

Első körben a szigorúan logikus gondolkodást kell programozói szemlélettel elsajátítani.
Ehhez a Pascal tökéletes, jobb is, mint a C, mert a C-nél "könyékig olajos" érzeted lesz, mire egy egyszerű programozási példafeladatot megoldasz.

Ha a programozási szemléleted már megvan, lehet tovább menni C felé.

Másik suliban is előszór TurboPascalt vettek, és utána kezdték C++-szal, vagy C-vel... előtte meg adatbázis programozás (MS Acces).
Pascal könyvet tudtok javasolni? TurboPascal, vagy sima Pascal? Aki Pascal-t ajánlotta, mert jobban hasonlit C-re, mivel ott is mindent le kell írni, míg a TurboPascalban már könnyített a dolog. Nem tudom ti értetek jobban hozzá, úgyhogy akkor valami tipp?:D

Pascalozzal kezdetnek.
Borland Pascal 7.0 -t szerezd be.
Ha alap pascal peldakkal megvagy, akkor szanj egy-ket honapot a Turbo Visionre, meg az OOP ra - alapnak tokeletes.
Csinalj egy-ket egyszeru progrmaot Turbo Visionnel, aztan felejtsd el a strukturalis nyelveket, a tovabbiakban foglalkozz csak OOP -vel.

Van ajándékba néhány C könyvem.
Átvehető Gyulán, Békéscsabán illetve Békés megyében elég sokfelé járok.

A C nyelvet én teljesen amatőr módon, könyvekből és gép mellett kipróbálva tanultam. A filozófiáját kell leginkább megérteni! Nagyon érdekes és fontos például a változókezelés, a paraméterátadás ill. veremkezelés megértése. A változókezelés és a verem nagyon összefügg! A lokális változókat például oda helyezi el, míg a statikus változók máshol vannak.
De hát ezeket inkább a könyvből!

Nekem az a véleményem, hogy tanfolyamokért pénzt adni nem szabad!
(Persze nem az iskolai oktatásról beszélek)
Mindent meg lehet tanulni önerőből, ha van egy kicsi kitartás és akarat!

Nem értem, hogy miért kell mindenfélével erőlködni. Ha valakinek matematikát akarnak tanítani, azt is először összeadni-kivonni tanítják meg, nem differenciál egyenleteket megoldani...

Először az alapokat. Arra a Pascal is nagyon jó nyelv.

Utána lehet szopni a pointerekkel C-ben. Egy kezdőt eléggé meg tud zavarni (jó, tudom, vannak itt 260-s IQ-val rendelkező zsenik, akik ASM tudást már az anyatejjel szopták ki...)

----------------
Lvl86 Troll

A számítógéped mellett. (Persze közben a C-vel foglalkozni! Nem egyébbel!)

Hali!

Van itt egy könyv, Ivor Horton - Beginning C From Novice to Professional, 4th edition.

itt

(Valaki belinkelt fentebb egy oldalt, ahol egy listából ez tűnt a legszimpatikusabbnak. Garanciát nem vállalok... :] )

Sok google találaton átástam magam, mire találtam egy helyet, ahonnan végre le is lehetett szedni, gondoltam, hátha valakit pont ez érdekel...

nem tudom, hány éves vagy, de szerintem reálisan tanulj előbb nyelveket, aztán töltsed az idődet programozással. hidd el, a nyelvtanulásra nagyjából 17-20 éves korodig tud rendesen lenni időd, programozni meg lehet tanulni később is. persze ha még csak 10 éves vagy, akkor visszaszívtam :)