Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
válasz Dave-11 #1800 üzenetére
Pedig most rákerestem, és WonderCSabo elkezdte már neked magyarázni.
A C programozás topicban is érdemes lenne rákeresned, itt nagyon sok hsz.-ben szerepel a szó, de ahogy elnézem, kingabo egy igen hosszú hsz.-ben elég korrekt módon elmagyarázta a dolog lényegét:
[link]
Itt is van még egy.Sk8erPeter
-
Davs
tag
válasz Dave-11 #1800 üzenetére
Szerintem eloszor is egy kis alap memory management lecket kellene venned, aztan egyszerubb lesz megerteni (stack vs heap)..angol tudas jol jon, van par nagyon jo video Youtubeon (Stanford vagy MIT youtubeos videoi, egesz eloadassorozatok vannak fent playlistre osztva)
Azt meg, hogy mire jo, hat..tombokre pl., meg majd utananezhetsz a valtozok scope-janak (lokalis vs globalis valtozok) meg meg biztos kismillio dologra
[ Szerkesztve ]
-
szoke12
őstag
Jó napot emberek!
Van itt, aki linux alatt programioz?
Én is el szeretném kezdeni tanulni a nyelvet, csak nem tudom, hogyan kezdjek hozzá.
Kell fejlesztői környezet? Vagy az alap linuxos is jó?
Vázlatos, szórványos ismereteim vannak."Élj úgy, hogy ha majd lepereg előtted életed filmje, érdemes legyen végignézni!"
-
Dave-11
tag
Úúúúh na végre értem a pointereket!!
Ez a Tanuljuk meg a .... 24 óra alatt sorozat nagyon jó, aki valami nyelven tanulni szeretne annak csak ajánlani tudom Mikor megláttam hogy van C++ -szal foglalkozó változata tudtam hogy ez az ami kell nekem, így hát elkezdtem bújni, és most hogy a pointereknél járok és szépen haladok bégig rajta és magyaráz és hozza a példákat egyre jobban és jobban értem őket, nagyon fajaHa már ennél a témánál vagyok megkérdezem az itt fórumozgató nagy programfejlesztőket, hogy ti a projektjeitek során milyen gyakran használjátok őket, és mikre például?
:D Semmi :D
-
kispx
addikt
válasz Dave-11 #1811 üzenetére
Pontosan annyiszor használom őket ahányszor kellenek (se többször, se kevesebbszer )
Feleslegesen nem fogom tele pointerezni a forráskódot, azért mert csak azzal is meglehet vele oldani a feladatot. Végig kell gondolni a programot, hogy éri meg lekódolni és aszerint fejleszteni.Legtöbbször használom: (hirtelen ennyi jutott eszembe)
- ha külső függvénykönyvtárok megkövetelik
- char*
- ha olyan paramétert adok át aminek az értékét meg kell változtatni (bár ha már C++ a nyelv, akkor inkább referencia)[ Szerkesztve ]
-
kispx
addikt
válasz Dave-11 #1813 üzenetére
Karaktersorozat vagy string (szerk.: lehet, hogy a könyv jobban fog fogalmazni, mint a linkem)
"int main( ...,char* ) {"
Nem ezt láttad, hanem: int main(int argc, char *argv[]) vagy int main(int argc, char **argv)
[ Szerkesztve ]
-
Davs
tag
válasz Dave-11 #1813 üzenetére
Ha van egy tombod, pl int x[10], akkor az x valojaban egy pointer a tomb elso elemere..
x[0] az ugyanaz, mint a *(x+0), x[1] ugyanaz, mint az *(x+1), szoval a char *y lenyegeben karaktertombot jelez. Amugy pointereket akkor is szokjak meg hasznalni, ha egy funkcioban egy masik funkcio (pl akar a main() ) valtozoit akarod modositani, vagy ha dinamikusan hozol letre valtozokat (a konyv remelem jobban elmagyarazza majd, mint en ) -
Dave-11
tag
Srácok csak úgy kíváncsiságból megkérdezhetem, hogy az itt fórumozók közül ki melyik kategóriába sorolná magát?
-hobbiprogramozó
-épp tanulja a C++ (iskolára vagy tanfolyamra gondolok)
-C++ programozóként keresi a kenyerét
Én a hobbiprogramozó kategóriában vagyok, de később szeretnék ezzel foglalkozni és ilyen egyetemre vagy fősulira szeretnék menni, ahol ezt tudom tanulni. Ha esetleg van itt valaki, aki tanul/tanult egyetemen ilyen irányzatban, az el tudná mondani hogy hogyan zajlik egy nyelv tanulása ott?[ Szerkesztve ]
:D Semmi :D
-
Davs
tag
válasz Dave-11 #1816 üzenetére
Ha ertesz angolul, akkor ajanlanam a Stanford egyetem programozas-eloadas triojat. Nem csak c/c++ van benne, hanem altalanos programozas, memoriarol es assemblerrol is van kicsit szo, hogy tudd mi folyik a hatterben..Youtube-on keress ra a programming methodology, programming abstractions es programming paradigms-re(ebben a sorrendben), mindharom playlist kb 25-28 ~50perces eloadast tartalmaz (nagyon jok, nekem nagyon tetszenek). A methodology a legkonnyebb, Java nyelven "tanitanak", de nem is igazan a nyelvet, hanem amolyan bevetezest a programozasba (kezdoknek valo). Az abstractions mar c++ orientaltabb, mindenfele sorting-algorithm-eket, adatstrukturakat taglal (array, vector,map, hashmap, binary search tree, queue, stack stb - ezekkel nagyon jo tisztaban lenni, hogy tudd melyik hol eros es miben verzik el). Aztan a 3. a programming abstractions (most nezem, kb 10. eloadasnal tartok). C-vel kezdi, nagyon ramegy a pointerekre, hogy megtalnuld kezelni a memoriat, aztan most kezdi kicsit az assembly-t, hogy kb tudd mi tortenik a hatterben pl egy i++ parancsnal, vagy egy funkciohivasnal, aztan lesz szo alap concurrecy-rol is ("parhuzamositas", szoval multithreaded alapok)..a harmadik elegge low-level szintu (hardver-hez kozeli). Amugy lattam meg MIT-nek is eloadasaint iTunes-on, de meg nem lestem nagyon belejuk..Amugy en is hobbiprogramozonak vallom magam, viszont fosuli utan ebbol szeretnek megelni.
-
Dave-11
tag
Segítenétek tisztázni két dolgot?
1. Van ugye a main() rész vagy függvény? Melyik illik rá jobban? Szerintem a függvény de ti biztos tudjátok. Szóval. Miért szerepel előtte int? Pl.: int main() {....}
2. A void konkrétan mit jelent?:D Semmi :D
-
kispx
addikt
válasz Dave-11 #1818 üzenetére
Függvény.
A main függvénynek lehet visszatérési értéke:
- ha int akkor program visszaad egy hibakódot az oprendszernek (hívó programnak). 0 a sikeres végrehajtás (ilyenkor egy fordítási hibaüzenetet fogsz kapni, ha elfelejtkezel a return 0; utasításról)
- void, visszatérési érték hiánya semmit sem ad vissza -
Dave-11
tag
Az utolsó sort nem igazán értem. Igazából már mondták ezt nekem, hogy semmit sem ad vissza, de ez hogy lehet? Hogy hogy nem ad vissza semmit? Például mikor a könyvem példáit csinálom, létrehozok egy osztályt. És ennek az osztálynak az egyik tagja elé voidot írok. Tehát a deklarálásánál így néz ki:
void Osztaly::Tag(){...}
Mondjuk ebben kiszámítok valamit, és a végére odaírom hogy: return vegeredmeny; Akkor hogy-hogy nem tér vissza semmi? Vagy ez a visszatérés mást jelent?
És ha itt nem tér vissza semmi (void), akkor mi az aminél igen?:D Semmi :D
-
dabadab
titán
"A main függvénynek lehet visszatérési értéke"
A main()-nek kötelezően intet kell visszaadnia, se a void, se más visszaadott típus nem engedélyezett a C++ szabványban.
A main() által visszaadott érték lesz a végrehajtott program exit statusa.Dave-11: a "nem ad vissza semmit" pontosan ezt jelenti. Ha egy void függvénybe returnt írsz, akkor hibát dob a fordító. Mondjuk egy sin() függvénynél, vagy hasonlónál, nincs sok értelme a void-nak, mert ott vissza kell adni valamit, de van egy csomó olyan függvény, ami nem kiszámol valamit, hanem csak pl. egyszerűen kiír egy üzenetet, akármi, ahol nincs semmi, amit vissza lehetne adni, azok lesznek a void függvények.
[ Szerkesztve ]
DRM is theft
-
kispx
addikt
válasz Dave-11 #1820 üzenetére
Vannak olyan függvények amiknek nem kell visszaadnia értéket csupán csak valamit meg kell csinálniuk. (pl. clearerr) Ezeket eljárásoknak is nevezik.
C/C++-ban nincs külön kulcsszó a függvények és az eljárások megkülönböztetésére. C-ben ha eljárást szeretnénk csinálni akkor a visszatérési típusnak void-nak kell lennie. Ezzel jelezzük a fordítónak, hogy valójában semmit sem fog visszaadni a függvény. Egy ilyen függvényben értéket nem adhatunk vissza (pl.: return 1; ) mert ez fordítási hibához vezet. Viszont használhatjuk függvényből való visszatérésre a return; utasítást. (A függvényt lezáró kapcsos zárójel elé nem kötelező kitenni)
void f () { //.... }
az függvényt így hívjuk meg:
//...
f(); //változónak nem adhatunk vele értéketint g() { //.... return valami; }
a g függvényt így hívhatjuk meg:
int x = g(); //a g() visszatérési értékét az x változónak adjuk át
g(); // a g() visszatérési értékét minek sem adjuk át, így ez az érték elveszlikSzerk.:
"void Osztaly::Tag(){...}
Mondjuk ebben kiszámítok valamit, és a végére odaírom hogy: return vegeredmeny; Akkor hogy-hogy nem tér vissza semmi?"
Az fordítási hibához vezet.(#1821) dabadab
Régebben volt kezemben egy ősköri C++ fordító, ott lehetett main-nak void visszatérési értéke[ Szerkesztve ]
-
dabadab
titán
-
Dave-11
tag
Rendben eddig világos de ha a void nem ad vissza értéket akkor mi az ami igen?
:D Semmi :D
-
Karma
félisten
válasz Dave-11 #1824 üzenetére
Hát bármi más, amit visszatérési típusnak megadsz. Amíg helloworldözöl valószínűleg int, double, vagy egyéb primitív típusok főleg - ezt írod a void helyére és kész.
Egyébként a void *-nak különleges jelentése van, ez az általános pointer amihez nem tartozik típus. Manuális memóriakezelésnél (C-ben malloc/free) kerül elő főleg, de ideális viszonyok között C++-ban nem kellene ezzel találkoznod (magasabb szintű absztrakcióknak hála).
[ Szerkesztve ]
“All nothings are not equal.”
-
Dave-11
tag
Ahham. Tehát akkor elvileg ez a két függvény így rendben lenne?
1. Nem ad vissza értéket, csak kiír egy sort mikor meghívjuk a programban:
void kiir(){ std::cout << "Csak kiírom a szöveget."; }
2. Ez meg kiszámol egy értéket és a végén ezzel az értékkel tér vissza:
double pitagorasz( double a, b) {
double ertek;
ertek = sqrt(sqr(a)+sqr(b));
return ertek;
}:D Semmi :D
-
sztanozs
veterán
válasz dabadab #1823 üzenetére
Ja, valószínűleg makróként működött csak a for és valójában elöltesztelő ciklusra fordította le a fordító (nem neked írom, te biztosan tisztában vagy vele ):
for ( int c = 0 ; c < 10 ; c++ )
{
printf("Hello\n");
}
erre:
int c = 0 ;
while ( c < 10 )
{
printf("Hello\n");
c++;
}
Így látszik, hogy miért működik a cikluson kívüli értékadás.[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Dave-11
tag
Sziasztok!
Egy kis magyarázatot szeretnék kérni:
Van ugye a random szám generáltatása:
srand(12);
rand();
Itt hogy működik ez a két függvény?
A másik:
Hogyan tudom megadni, h a random szám mondjuk 1 és 50 közé essen?:D Semmi :D
-
Karma
félisten
válasz Dave-11 #1830 üzenetére
A srand(12)-vel mindig ugyanazokat a számokat fogod kapni, de ezt beláthatod, amint elolvastad a felső két linket.
Megadni meg nem tudod, helyette a % (modulo) operátorral csinálhatsz neked kellőt. Esetleg egyet hozzáadva, hogy jó offszet legyen.
“All nothings are not equal.”
-
kispx
addikt
válasz Dave-11 #1830 üzenetére
srand(); inicializálja a randomszámgenerátort. Mindig a legelső szám generálása előtt kell ezt megtenni.
"srand(12);" Konstanssal nem illik inicializálni, mert minden egyes futás során ugyanazokat a számokat fogja előállítani. Helyette olyan módszert kell választani, ami futásról futásra változik, pl idő:
srand ( time(NULL) );rand(), egy véletlen számot fog visszaadni 0 és RAND_MAX között.
Ha kisebb értéktartományon szeretnénk véletlen számot generálni akkor, akkor egy X számmal kell a maradékát képezni, pl
rand() % X ez [0; X-1] tartományban képez egy véletlen számot
Szerk.: látom túl sokáig írtam a hszt
[ Szerkesztve ]
-
dabadab
titán
válasz Dave-11 #1830 üzenetére
Az srand() inicializalja a randomgeneratort, ezt csak egyszer kell megcsinalni, praktikusan a program elejen. Ez altalaban nem tul bonyolult kod es elmondhato rola, hogy ha ugyanazzal a szammal inicializalod, akkor utana pontosan ugyanazokat a "veletlen" szamokat fogod kapni, ezert nepszeru megoldas, hogy a jelenlegi idovel inicializaljak, valahogy igy: srand( time() );
A rand() meg ezek utan egyszeruen visszaad egy veletlenszamot (ami a 0 - RAND_MAX intervallumba esik).
Ha intervallumot akarsz (mondjuk X es X+Y koze), akkor az egyszeru, ertheto es naiv megoldas az, hogy a rand altal visszaadott szamnak az Y-nal valo osztasanak a maradekat veszed es hozzaadod X-et. Konkretan a te peldadban (1-50, ahol X = 1 es Y = 49):
int random_number = rand() % 49 + 1;Es akkor most egy kicsit kenytelen vagyok arrol szolni, hogy valojaban miert istentelen nagy szivas ez az egesz veletlenszam-temakor: a fenti peldaban, ha Y nem ketto valamelyik egesz szamu hatvanya (1, 2, 4, 8, 16 stb), akkor a veletlen szamaid eloszlasat megnezve fel fog tunni, hogy nem azonos esellyel kapod a szamokat, hanem lesz egy hatar es az alattiak valamivel nagyobb valoszinuseggel fordulnak elo. A miert megmagyarazasat az olvasora bizom
A masik problema meg a kiszamithatosag: a Firefoxban (illetve akkor meg Mozillanak hivtak) volt egy olyan biztonsagi hiba, hogy a fenti modon inicializalta a randomgeneratort amikor titkositashoz generalt veletlenszamokat. Csakhogy - a fentiek miatt - a tamadonak eleg volt azt kitalalnia, hogy milyen idot mutatott a gep oraja, amikor legeneralta a titkositashoz szukseges szamokat, marpedig ha egy titkositott kapcsolatot 12:54-kor kezd a bongeszo, akkor jo esellyel a gep oraja is 12:54-et fog mutatni, vagy akornyeken valamit - es mivel a time() felbontasa csak masodperces, ezert nem is kellett olyan tul sok szamot vegigprobalni ahhoz, hogy fel lehessen torni a titkositast.
Szoval a veletlenszamgeneralas nehez problema, ahol komolyan erre van szukseg, ott valami plusz hardverrel generaljak, ami valami kellokeppen veletlenszeru fizikai folyamaton alapszik.
szerk: Latom, en irtam a legtobb ideig, de legalabb latszatja is van
[ Szerkesztve ]
DRM is theft
-
Karma
félisten
válasz dabadab #1833 üzenetére
A tesó topikban nem olyan rég már többen is írtunk látszatos magyarázatot
A veszélyeket kiemelni viszont jó húzás volt[ Szerkesztve ]
“All nothings are not equal.”
-
sztanozs
veterán
De, ha nem te inicializálod a véletlenszám-generátort hanem rendelkezésre áll valamilyen kellően nagy rendezetlenségű (és nem visszakövetkeztethető) információ-halmaz...
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
Játékoknál pl hasznos is lehet a beállítható seed - nem kell a pályaszerkezetet lementeni, csak azonos seed alapján a pályát generálni...
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Vico87
tag
A szerverekbe szánt chipsetekben szokott lenni random hardver (többnyire valamilyen kaotikus fizikai jelenséget idéznek elő és azt mintavételezik). Consumer chipsetekben ritka, ha jól tudom az Intel 810/815/840/845 chipsetekben volt csak.
Szerintem kriptográfián kívül senkinek sincs szüksége valódi véletlenre, hanem elég ha "ránézésre" az. Sőt, a reprodukálható "véletlen" hasznos tud lenni (pl. könnyebb debuggolni).
-
n00n
őstag
Sziasztok!
Van egy C++/Qt-s programom amin kicsit módosítanom kellene. Adott kettő ugyanolyan pendrive, amit felváltva használunk naponta. Azt kellene megoldani, hogy a program felismerje, hogy melyik van éppen bedugva. Ezt mi alapján lehetne, név alapján? Ötlet?
-
Karma
félisten
A legegyszerűbb az lenne, ha leraknál egy rejtett fájlt mindkét meghajtóra (azonos névvel+más tartalommal vagy eltérő nevekkel, ízlés dolga), és ezt ellenőrzöd.
Platformfüggetlenül szerintem nem nagyon van más megoldásod. Már a volume label olvasásához is WINAPI-t kell használnod, pl. így.
“All nothings are not equal.”
-
kispx
addikt
Sziasztok,
lenne a C++/Qt problémán (de inkább csak Qt-s)A Design nézetbe rápakolom a szükséges elemeket a QMainWindow-ra (2 db ListWidget és 2 db Graphics View). Beállítom a ezeknek a méretét és a helyét. Majd Layout-ba szeretném foglalni őket:
a 2 db Graphics View kerülne egy Horizontally Layout-ba, és az így keletkező layout a maradék 2 elemmel egy Vertically Layout-ba).De ekkor a már beállított méretűket felülírja. (És ezután meg nem lehet átméretezni egyenként az elemeket.) Layout-ot muszáj használni, mert azt akarom, hogy az ablak átméretezésekor méreteződjenek át az elemet, de úgy, hogy a méretarányukat megtartsák.
-
Dave-11
tag
Visual Studio 2010-ben szeretném a következőt megcsinálni:
Van egy ablak, az alján egy gomb és a tetején egy szöveg label. Azt akarom, ha megnyomom a gombot, a label szépen leúszik az ablak aljára.
Úgy terveztem, hogy van egy for cilus ami a következőt csinálja:
for(int i=1; i<=100; i++){
Form1->Location->Y-=1;
sleep(10);
}
De sajnos ez nem működik. Nem ismeri a sleep() függvényt, és a fenti második sorral is baja van. Próbáltam for nélkül, hogy csak egyszerűen átdobja egy másik pontba, de az se működik.
Ötlet? Tanács?:D Semmi :D
-
-
sztanozs
veterán
-
Dave-11
tag
válasz sztanozs #1849 üzenetére
Hát azt tudom Ezért mellékkérdés. Mert eredetileg a formon akartam kipróbálni, csak nem tudtam hogy hozzá tudok-e férni.
De akkor ha rendesen úgy írom hogy Form1->Location... akkor ez így jó? Tehát hogy hozzáférjek a form adataihoz ezt a nevet kell használni?:D Semmi :D
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Redmi Note 13 Pro+ - a fejlődés íve
- Path of Exile (ARPG)
- Samsung Galaxy S21 FE 5G - utóirat
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- LEGO klub
- Toyota topik
- Kerékpárosok, bringások ide!
- Szevam: Érzelmi magabiztosság/biztonság - miért megyünk sokan külföldre valójában?
- Hogy is néznek ki a gépeink?
- Luck Dragon: Asszociációs játék. :)
- További aktív témák...