üzenetek

hozzászólások


tobal
(tag)
Blog

Hát, nem mondom, hogy mindenhol pontos a megfogalmazás, de túl nagy ferdítések nincsenek, és kezdők számára így tényleg érthetőbb. Gratula hozzá.


Zwiebel
(tag)
Blog

Köszönöm szépen :R


SLD
(tag)

Egy nagyon fontos dolog hiányzik: példakód.
Biztos vagyok benne, hogy az előző írásban a "több elméletet" nem a példakód rovására, hanem a mellé bepakolására értették.
Így most dobálózol x szóval, amit Te értesz, akinek van programozási tapasztalata az is ért, de aki most kezdi, annak ez nem több mint a bio-aktiregularisz vagy mi, az Activia reklámokban... És azt a joghurtot sem azért eszik annyian mert áltudományos szavakat mondanak a reklámban, hanem mert egy szemléltető ábrán látják, ahogy eltűnik az alany gyomra és helyette csomó kis gömböcske egy nyíl alakban a nemi szervre mutat...
Szóval tégy be kérlek szemléltető ábrát -> példakódot, esetleg kommentekkel minden sorba, hogy mi mit csinál.. Nem kell extra, csak hozza létre a változókat írassa ki és kész, hogy lássa a tanuló gyakorlatban érvényesülni a leírtakat. (Pl. egy példakódon sokkal jobban el tudnád magyarázni a definíció és a deklaráció közti különbséget is.)

Véleményem szerint azért jó lesz ez, csak próbáld még inkább egy kezdő szeméből nézni a dolgokat, inkább feltételezd az olvasóról, hogy egy bogár, mint hogy egy szuperinteligens űrlény.


fred741
(csendes tag)

Az is nagyon fontos, hogy attol hogy definialtal egyvaltozot(azaz helyet foglaltal neki) az erteke meg nincs beallitva.
Nagyon fontos, hogy a definialt valtozoknak kezdoerteket adj! :)

Egyebkent tenyleg egesz jo,ertheto leiras. :)


Zwiebel
(tag)
Blog

Köszönöm szépen, betettem egy példakódot :) Remélem, hogy nem hagytam ki belőle semmit!


Zwiebel
(tag)
Blog

Köszönöm, javítottam :R


Vladi
(nagyúr)
Blog

Igen, jó lenne kicsit didaktikusabban. :K
Hogy olyan nem műszaki értelmiségiek is megértsék, mint pölö én. :D
(Ellenpélda a full circle magazinban lévő C sorozat. Na az kínai. :U )

Egyébként hajrá a sorozathoz!


sh4d0w
(nagyúr)
Blog

Hű, az nagyon tré... :K


TheVeryGuest
(senior tag)

"...előfordító indirektívát jelöl..." :] Mi az az indirektíva? Mert olyan van, hogy direktíva, egyébként utasítást, parancsot jelöl, melyet az jelen esetbe az előfordítónak címzünk.

Ez amit publikáltál egyébként eddig nem nagyon C++ specifikus, talán ez a két sor az, amiből rá lehet jönni, hogy ez nem C:
"- C++ nyelvben kettő logikai érték van : igaz (1) vagy hamis (0)
- Felsorolt konstansokat enum konstansoknak nevezzük."

Hiányolom a tematikát. Ez most egy sorozatnak egy része, vagy ez minden?

Egyébként mi értelme van kimásolni valamit egy magyar könyvből vagy fordítani angolból? Te jót gyakoroltál vele és ennyi. Meg megvan a benne leszek a TVben feeling. Szerintem először is azt kellene tisztázni, hogy kinek érdemes elkezdeni C/C++-szal foglalkozni. Ehhez tudni kell, hogy ez egy szigorúan típusos, gépközeli gépi kódra fordított nyelv. Gyakorlatilag egy C/C++ fordító egy kurva intelligens assembler. Tehát, ha valaki kezdő és C++-ozni akar az két dolgot jelenthet:
*valami funkciót akar megvalósítani, nagyrészt Ctrl+C-Ctrl+V használatával itt-ott átírva,
*érdekli a gépközeli programozás és szeretne jól megtanulni C/C++-ban programozni, mert érdekes, vagy ne adj isten ebből akar majd egyszer élni.
Az elsőnek érdemes inkább más nyelvet választania, a másodiknak meg nem kell a kedvcsináló, ő úgyis venni fog egy könyvet, vagy letölti a legutolsó ingyen elérhető C++ szabvány draftját.

Definícióról meg deklarációról meg önmagában nem érdemes beszélni. Ez a tankönyvek többségénél is hiba. Mert leírják a szabályokat, de azt nem, hogy miért ilyen. A preprocesszor direktívák és a deklaráció/definíció is akkor nyer értelmet, amikor az ember először rak össze egy komplex több modulos SWt. Ott kiderül, hogy mire is való a deklaráció, az extern előtag, a define/if(n)def guardok.

Ugyanez elmondható a típusok leírásáról. Élő embert nem láttam, aki unsigned long int-et kiírta volna az életben. Úgyis unsigned long-lesz, kivéve, ha karakterre fizetnek. Szóval az előállítható típusnavek felére nincs szükség, mert élő kódban nem fogsz vele találkozni.
A volatile teljesen felesleges egy kezdőnek ilyen alapon jöhetett volna a register meg az auto is. Egyébként eléggé kevéssé valószínű, hogy másik program módosítja az értéket, főleg a mai virtual address space-es világban, inkább egy másik thread használja, vagy valami hardveres regiszter olvasása szokott ilyen lenni, és azt jelzi a fordítónak, hogy ne optimalizáld ki ennek a változónak az írását olvasását CPU regiszterek használatával, mert bármikor megváltozhatnak a jelen kód futásától függetlenül.

Csodálom, hogy az export kulcsszóval nem foglalkoztál, mert már csak az lenne haszontalanabb lévén, hogy a fordítók 99%-ában nincs implementálva, de a szabványban benne van.

Egy kezdőnek, egyébként ezekre a dologra van szüksége:
*egy könvyvre a nyelvről valami olyan nyelven, amit ért.
*tanulásra készített kódrészletekre és feladatokra
*egy jó listára, hogy az adott fordító hibaüzenetei mit jelenthetnek, milyen hibára utalhatnak (a 2.96-os g++ hibaüzenetei például iszonyat szemetek voltak, pontosvesszőhiba esetén a következő sorra hivatkoznak meg ilyenek keményen szokni kell)


Zwiebel
(tag)
Blog

Köszönöm a kommenteket! :R

TheVeryGuest:
Ezzel nem igazán értem, hogy mit akarsz mondani:
"Egyébként mi értelme van kimásolni valamit egy magyar könyvből vagy fordítani angolból? Te jót gyakoroltál vele és ennyi."

Nem könyvből másoltam és nem is fordítottam! Az egészet fejből írtam. Ha ez nem így történt volna, akkor szerintem nem igazán maradtak volna ki belőle olyan dolgok amiket te most leírtál ide. ;)


#21810944
(csendes tag)

Köszönöm az írást, hasznos volt! Épp kapóra jött, a közeljövőben a c++ lesz a tananyag.
:R


Benmartin
(senior tag)

Sziasztok!

1.) Az int mióta változó? Én úgy tudtam típus.
2.) Ha leírod a típusmódosítókat, miért nem írod oda, hogy mire lehet használni?
3.) Az int tárolási intervalluma egyáltalán nem biztos, hogy annyi lesz, mint amit te odaírtál, a signed int-é már válószínűbb.
4.) Nem említettél minden típust. Hol a wchar_t?
5.) A double valós típus? Oké, hogy képes valós számot ábrázolni, de arra a float is képes, akkor az is valós típus? Vagy valótlan? Kétszeres pontosságú lebegőpontos szám tárolására használatos adattípus.
6.) Az adattípusok mérete számítógép, fordító, OS függű, mindenkori méretét a float.h és limits.h fejállományokból olvashatjuk ki.
7.) A bool az egy 1 bájtos változó, szerintem nem csak két értéke lehet, hanem 256 féle.
8.) Említést tettél az enumról, de gyakorlatilag semmit nem mondtál róla, az enum pedig típus, nem konstans, más kérdés, hogy azt tartalmaz.
9.) A konstansok csoportokra bontottad, a típusokat egyáltalán nem
10.) Különbséget tettél a definíció és a deklaráció között, bár az általad használt esetekben minden deklaráció egyben definíció volt, így mi értelme volt?

És ez most nem tízparancsolat. :D
Többen kifejtették már, miért nincs ennek így értelme.


N3ST1C
(tag)

Nagyon jó lett. Így tovább ;)


Benmartin
(senior tag)

Na tessék már rám is hatással van a hülyeség, szóval a bool az egy 1 bájtos típus. :)


isti84
(csendes tag)

Üdv!

Jó a cikk, de 1-2 dolog kimaradt, nem jelölted azt hogy a long illetve short no meg az unsigned miként módosítja a számok intervallumait. A char típus nem csak kis számok tárolására alkalmas, abban tárolsz karaktereket.

Az előzőhöz képest sokkal jobban sikerült, ha így haladunk akkor a végéra könyv lesz belőle.

Üdv!


isti84
(csendes tag)

A C-ben nincs logikai érték, a C++-ban van 1 bájton tárolja a bool értékeket, mivel ez egy előre definiált típus két numerikus értékkel. C-ben int-tel oldották meg a dolgot, ha 1 igaz, ha más értéket vesz fel, akkor hamis


SLD
(tag)

Hmm, 7.) -essel vitatkoznék. Egy bool típusú változó valóban egy bájtot foglal normál esetben, és valóban megadhatsz neki 256-ot értékként, sőt 600.000.000-t is, de végül minden ami nem 0 az 1 lesz. Szóval végeredményben, _csak_ 0 és 1, false és true lehet.

A sorozatnak meg valóban _így_ nincs észlelhető értelme, ám én jelenleg a fő hibát az igénytelenségnél (vagy az igénytelenség nem felismerésében) látom, ami viszont egy fejleszthető képesség / érzék vagy valami...
És ha van kedve, miért ne csinálja? Árt valakinek? Aki eddig is tartózkodott ettől a nyelvtől, az a csomó rendszertelen és félinformáció miatt továbbra sem fog belevágni, aki meg tényleg meg akarja tanulni, az már - ahogy TheVeryGuest írta - vett magának egy könyvet a témában. Nagyon nagy hülyeséget meg nem tud írni, mert a kommentekben javításra kerül, aki meg nem olvassa el hozzá őket, az magára vessen... Tehát bizonyos szempontból minden marad úgy, ahogy eddig. Feltéve persze, hogy a következő részekben nem érünk el jelentős javulást. (Ez tudom fura egy szemlélet és nem túl fair a bátortalan kezdőkkel szemben, de ez van.)

Zwiebel:

Az becsülendő, hogy mindezt fejből írtad, ám ez meg is látszik rajta.
Egy igényes cikket legalább egy hétnyi kemény könyvolvasásnak és googlizásnak kell megelőznie (ált. az a jó amikor már azzal a kérdéssel kelsz reggel és fekszel este, hogy: biztos így van ez?), hogy minőségi cikk születhessen. És emellett nem csak a tartalom helyességére kell figyelni, hanem a tálalásra is, pl. ott van még csomó formázó gombocska, amiket még nem használtál, pedig sokat dobhatna rajta. Meg el kéne dönteni, hogy mit mivel jelölsz, mert néha a felsorolt szöveg feltűnőbb mint a cím. Ha pedig egy könyvben írtnál nem tudod jobban megfogalmazni, akkor meg idézd azt, nem szégyen forrást használni.

[ Szerkesztve ]


Benmartin
(senior tag)

Helló!

Ezt most miért mondod nekem?


dabadab
(titán)
Blog

A cikkel van par problema:

1. Teljesen koncepciotlan: nincs semmi strukturaja, nem jut el sehonnan sehova, nem igazan magyaraz el semmit, a mindenfele felosztasok teljesen esetlegesek es erosen furcsak (a konstansok harom nagy tipusa a decimalis, az okta meg a hex? WTF?).

2. Tele van hibakkal: konkret targyi tevedesek, befejezetlen mondatok.

3. A szerzo lathatoan nem ert a C++-hoz - es bar van a regi mondas, miszerint aki ert hozza, az csinalja, aki meg nem, az tanitja, de...


Nunder
(őstag)
Blog

Nagyon hasznos, köszönjük! Így talán könnyebb lesz elsajátítani.


isti84
(csendes tag)

Üdv!

Nem neked szólt! Valamiért behalt a böngészőm és nem jkelenített meg 1-2 dolgot a hozzászólásokból, mint pl, azt a kb 10 pontots megjegyzésedet :D

Elnézést mégegyszer.

Üdv


orbano
(félisten)

remélem kevesen tanulnak C++-t a stroustrup könyv (és Porkoláb advancd C++ órái) nélkül. a cikk szerzője tuti hogy még csak kirakatban sem látta, különben tudná és értené, hogy hogyan is épül fel a nyelv. sajnos sokan tanulnak így C++ul, nem csoda, hogy sok a lassan készülő, bugos, memory leakes program.


orbano
(félisten)

a
bool L = false;
L = true == 23
az igaz értéket ad vissza?


SLD
(tag)

Nem, persze hogy nem. Ez esetben számként kezeli őket és persze, hogy 1 nem lesz egyenlő 23-al. Én erre gondolok:

#include <iostream>
using namespace std;

int main() {
bool b = 600000000;
cout << b << endl;
cout << sizeof(b) << " bájt" << endl;
return 0;
}

Tehát, alapértékként megadhatunk neki akár ennyit is, de ezt a compiler szépen konvertálja 1-re vagy 0-ra. Jelen esetben 1-re.
De pl. vehetjük a Te példádat is, ha később a b-nek (nálad L-nek) 23-at adsz értékként és kiíratod, akkor az újra 1 lesz, mert megtörtént a típusátalakítás a compiler által. Sőt ha már nagyon igaz-hamis vizsgálatot szeretnél akkor lehet így is csinálni:

#include <iostream>
using namespace std;

int main() {
bool b = 600000000;
cout << b << endl;
b = 23;
if(b) {
cout << b << endl;
}
cout << sizeof(b) << " bájt" << endl;
return 0;
}

Szerk: BEGIN

Sőt csinálhatjuk ezt is, hogy még szemléletesebb legyen (persze ez nem a szép módja a típuskonverziónak, de példának jó):

#include <iostream>
using namespace std;

int main() {
bool b = 600000000;
cout << b << endl;
b = 23;
if(b == (bool) 569) {
cout << b << endl;
}
cout << sizeof(b) << " bájt" << endl;
return 0;
}

Szerk:END

Remélem így már érthető mire akartam kilyukadni.

Azt meg végképp nem értem miért Te és miért nem Benmartin kérdez ilyeneket, hisz ő írt hülyeséget... no mindegy.

#22 :

Aki tud németül, annak szintén jó választás lehet a: C++ von A biz Z, Jürgen Wolf-tól. Ellentétben a magyar kiadásokkal ez most éppen 2009-es és nem a 2001-es fordításának 2006-os kiadása...

#21 isti84 :

Pedig akár szólhatott volna Neki is...

[ Szerkesztve ]


orbano
(félisten)

én csak "oktatási célzattal"/kukacoskodásból kérdeztem a dolgot, mert félreérthetőnek tartottam, jómagam tisztában vagyok még úgy-ahogy a C++ működésével kapcsolatban (Porkolábnál 20 perc alatt szereztem meg a 4-es gyakjegyet, ha mond ez Neked valamit :D)


SLD
(tag)

Ok, igaz. Néha túl lövök a célon. :))
De remélem, így 3 példával már nem félreérthető :D
(Meg azt is hogy nem én tudom rosszul, bár a g++ fordító mellém állt, mindhárom esetben)

Ő nála hacsak fizika helyett nem infot/programozást választok egy ideig nem fogok megfordulni, de elhiszem, hogy ez egy pozitívum :)


Benmartin
(senior tag)

Miért írtam hülyeséget?


SLD
(tag)

#12-es hozzászólás, 7-es pont:

"A bool az egy 1 bájtos változó, szerintem nem csak két értéke lehet, hanem 256 féle."

Javításra került a mondat, a 14-es hozzászólásban erre:

"Na tessék már rám is hatással van a hülyeség, szóval a bool az egy 1 bájtos típus."

Egy bool típusú változó értéke az Istenért, NEM LEHET 256 féle, hány féle képpen kell még leírnunk ezt Neked?! Csak, csak is kizárólag KÉT ÉRTÉKET VEHET FEL.
Ezért hívják boolean-nak, George Boole nyomán.
Nem is értem, hogy honnan jött ez Neked, de itt egy példa, hogy lásd a te feltevésedet gyakorlatban:

0 = hamis;
1 = kicsit hamis;
2 = hamiskás;
3 = majdnem hamis;
4 = közel hamis;
...
253 = közel igaz;
254 = majdnem igaz;
255 = teljesen igaz.

Komolyan gondolod, hogy a gép különbséget tud tenni ezek között?!

Nincs baj azzal ha tévedsz, azzal van baj, hogy tévesen javítasz ki valakit, majd utána ahelyett, hogy utánanéznél, tetteted a hülyét...

Ha nem hiszed, itt van a #24-esben pár példakód, fordítsd le, próbáld ki. De kérlek ne valami szabványt nem követő fordítót használj, mint a C topicban tetted, mert persze hogy azzal még ilyen hülyeségeket is tudsz csinálni...
Ha esetleg nem emlékeznél a C topicos részekre itt egy kis emlékeztető: [link]

A többi Olvasótól elnézést ezért a sok cifra formázási karakterért, csak már nem tudom, hogyan lehetne jobban felfogatni a lényeget Benmartin-nal...


godga
(csendes tag)
Blog

Pár megjegyzést fűznék a cikkhez, cikksorozathoz és a hozzászólásokhoz...
1. Cikksorozat: Jó ötlet, gyenge-közepes megvalósítás. A fő hiba, hogy igazán senkinek sem szól. Kezdők ezzel semmit nem tudnak kezdeni, kezdőknek példák kellenek, magyarázatokkal. Középhaladók, már túl vannak ezen a szinten, a fölött pedig legyintenek...
2. Cikk: Példák nélkül ez így olyan mint egy gyengén összerakott fogalom gyűjtemény, pontatlan fogalmazással, hiányokkal, félrevezető magyarázatokkal.
3. Szerző: Példás, hogy ilyen lelkesedéssel írod a cikket, és a kommentekre is reagálsz, de saját véleményem szerint vagy több időt kellene a cikkek írására fordítani, vagy kicsit még várni kellett volna, egy intenzív tanulófázis végezetéig...
4. Egyetemi/főiskolai prog órák: c++ oktatása egy minimális készség kialakítására alkalmas csak, megjegyzem Stroustrup bibliája egy c++ kezdőkönyv, onnan még nyelvi szinten is lehet bőven fejlődni, programozás elméletben pedig nagyon-nagyon sokat...


Benmartin
(senior tag)

Most komolyan minek tovább folytatni ezt? Nagyon jól tudom, hogy mit akartál a példával mondani, ha beírom a boolnak hogy 234, akkor az true, mert 0-tól eltér, és ha kiíom, akkor is 1 lesz, mert true. Inkább csak félreértetted, amit mondani akartam a 7-es ponttal.

Idegeskedni meg kár ezért.


Benmartin
(senior tag)

Csak, hogy tisztább legyen:

#include <iostream>
using namespace std;
struct A
{
bool a:1,b:1,c:1,d:1,e:1,f:1,g:1,h:1;
};
A t;
int main()
{

t.e = 1;
t.f = 0;
t.g = 1;
t.h = 0;

// (1010)2 = 10, maximális tárolható érték: 2^8-1 = 255, plusz 0, tehát 256 féle érték

cout << t.a * (1 << 7) + t.b * (1 << 6) + t.c * (1 << 5) + t.d * (1 << 4)
+ t.e * (1 << 3) + t.f * (1 << 2) + t.g * (1 << 1) + t.h << endl;

cout << sizeof(t) << endl;
return 0;
}


SLD
(tag)

Valóban félreértettem, illetve inkább túlságosan "csőlátásban" néztem a hozzászólásodat. Ennek a csőlátásnak pedig egyik paramétere az volt, hogy ez egy kezdőknek szóló cikk második része, ahol még sem a bitekről, sem a bitműveletekről, sem a memóriában foglalat helyről nem esett szó, tehát nyílván a kritika is igyekszik megtartani ezt a szintet. Tévedtem.
Azt is elismerem, hogy mindig is könnyelműen bántam a lehetetlen, esélytelen szavakkal, valamint ezeknek szinonimáival, pedig pont a programozás/számtech. az ahol csak a hardware és az emberi találékonyság szab határt.

Idegeskedtem volna? Én csak a lényeget akartam kiemelni; és látod, végre sikerült megértened és rájönnöd, hogy én félreértettem már az elejétől fogva, szerintem sikerként könyvelhetjük el.

De azt továbbra is nehezemre esik elhinni, hogy Te szerinted, Zwiebel-nek, ahelyett, hogy a bool igaz vagy hamis lehet, azt kellett volna írnia, hogy "a bool értéke 256 féle lehet, ugyan eredetileg logika értékek tárolására szánták, de egy kis biteltolással pik-pak megvagyunk és máris használhatjuk valami tök másra mint amire kitalálták."
Szóval én elhiszem, hogy már kezdettől fogva erre gondoltál azzal a mondattal, de ha erre gondoltál, akkor ez a tipikus szőrszálhasogatás és látod mekkora galibát tud okozni.

Mindenestre: köszönöm!
Itteni első hozzászólásodig még sosem gondoltam arra, hogy bool-t használjak char helyett kis számok (avagy nem logikai értékek) tárolására... Mindig úgy indultam neki, hogy: miért is használná az ember saját fejét egy szög beveréséhez, ha ott a kalapács is...
Tanulságos és eredményes volt itteni beszélgetésünk... bár kicsit pazarló, de valamit valamiért.


Benmartin
(senior tag)

Mert nyilván én is csak kötekedtem, velem is szoktak, én is szoktam, ez ilyen. :) És én sem így tárolnék kis számokat, de attól még lehetséges.

üzenetek