-
2600 - 2501
6397 - 6001 6000 - 4001 4000 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1901 1900 - 1801 1800 - 1701 1700 - 1601 1600 - 1501 1500 - 1401 1400 - 1301 1300 - 1201 1200 - 1101 1100 - 1001 1000 - 901 900 - 801 800 - 701 700 - 601 600 - 501 500 - 401 400 - 301 300 - 201 200 - 101 100 - 1
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
-
Frissítve: 2014-04-25 14:12 Téma összefoglaló
Új hozzászólás Aktív témák
-
Jester01
veterán
ez nem jo:
if (*buffer-- == '\n'){
a -- csak a feltetel kiertekelese utan fog vegrehajtodni, ezert ez az if sose teljesul (mindig 0 lesz a buffer erteke amikor ideer). ezert a fuggvenyed mindig az utolso (nem null) karakterre mutato pointert ad vissza.Ilyenkor a *buffer-t hogyan viszem vissza a kezdeti pozícióba?
ne a buffer pointert vidd vissza, hanem hasznalj egy masikat a mozgasra (ahogy azt.Jester01 mar irta). a fuggvenyed elejen csinalj egy ilyet:char * q = buffer;
es azutan a q-val dolgozz, a vegen petig visszaterhetsz a bufferral
mas:
mikozben ezt probaltam elojott a kovetkezo hiba, miert segfaultol a devcpp erre?
char * a = "abcd";
*a = 'b';A string literálok konstansok, const char* típusúak, ezért nem lehet őket felülírni. Sima char* változóhoz hozzá sem lenne szabad rendelni.
Rossz:
char * a = "abcd";
*a = 'b';Jó:
char a[5] = "abcd";
*a = 'b'; -
CPT.Pirk
Jómunkásember
nem. ezek szerint nem erted a pointerek mukodeset.
egy darab stringed van, amit megkapsz a buffer valtozoban. ennek a valtozonak a tartalma egy memoriacim, ami a string elso karakterere mutat. a char *c = buffer; sor annyit csinal, hogy letrehoz egy masik pointert (mutatot), ami ugyan arra a memoriacimre fog mutatni. tehat a ket valtozo ugyanannak a stringnek az elejere mutat. ezutan a c-t hasznalod, hogy megkeresd a veget, visszalepj egyet. eddig a pontig csak a c pointert valtoztattad meg (tehat azt a memoriacimet ami a valtozoban van a stringet nem valtoztattad), a stringnek az utolso nem null karakterere mutat. ezutan a *c='\0'; sorral atirod azt a karaktert amire a c mutat (ezert van ott a csillag a c elott - a dereferencia operator). ezutan pedig a tomb elejere mutato pointerrel kell visszaternie a fuggvenynek, es az pedig a buffer valtozoban van.
Hú köszi, végre egy érthető példában láttam a pointer működését.
Anno bugyi, bugyis polc, meg bugyis polcra mutató valami közti kapcsolattal magyarázták a pointert, amikor nem sikerült megértenem. Később meg csak használtuk, de mivel nekünk nem fő profilunk (heti 1 órában hogy is lehetne) a C programozás, így érdemi pointer magyarázás a későbbiekben sem valósult meg, vagy én nem fogtam fel...Köszi nektek a segítségért.

Segfaulttal majd kezdek valamit, mert assertes test meg van csinálva hozzá, szerintem csak a codeblocks szórakozik velem.
-
Gyuri16
senior tag
nem. ezek szerint nem erted a pointerek mukodeset.
egy darab stringed van, amit megkapsz a buffer valtozoban. ennek a valtozonak a tartalma egy memoriacim, ami a string elso karakterere mutat. a char *c = buffer; sor annyit csinal, hogy letrehoz egy masik pointert (mutatot), ami ugyan arra a memoriacimre fog mutatni. tehat a ket valtozo ugyanannak a stringnek az elejere mutat. ezutan a c-t hasznalod, hogy megkeresd a veget, visszalepj egyet. eddig a pontig csak a c pointert valtoztattad meg (tehat azt a memoriacimet ami a valtozoban van a stringet nem valtoztattad), a stringnek az utolso nem null karakterere mutat. ezutan a *c='\0'; sorral atirod azt a karaktert amire a c mutat (ezert van ott a csillag a c elott - a dereferencia operator). ezutan pedig a tomb elejere mutato pointerrel kell visszaternie a fuggvenynek, es az pedig a buffer valtozoban van.
-
CPT.Pirk
Jómunkásember
Akkor az a sor helyett meg kellene valósítanom, hogy a c-ben lévő megváltoztatott string átkerüljön a bufferbe?
-
Gyuri16
senior tag
a buffer = c; sor nem kell bele.
annal a sornal a c a stringet lezaro nullara mutat (amit az elozo sorban raktal oda), te viszont a string elejere mutato pointert akarsz visszaadni. a buffer valtozot ezert nem kell valtoztatni. -
CPT.Pirk
Jómunkásember
ez nem jo:
if (*buffer-- == '\n'){
a -- csak a feltetel kiertekelese utan fog vegrehajtodni, ezert ez az if sose teljesul (mindig 0 lesz a buffer erteke amikor ideer). ezert a fuggvenyed mindig az utolso (nem null) karakterre mutato pointert ad vissza.Ilyenkor a *buffer-t hogyan viszem vissza a kezdeti pozícióba?
ne a buffer pointert vidd vissza, hanem hasznalj egy masikat a mozgasra (ahogy azt.Jester01 mar irta). a fuggvenyed elejen csinalj egy ilyet:char * q = buffer;
es azutan a q-val dolgozz, a vegen petig visszaterhetsz a bufferral
mas:
mikozben ezt probaltam elojott a kovetkezo hiba, miert segfaultol a devcpp erre?
char * a = "abcd";
*a = 'b';Lassan lassan talán felfogom már.
if (buffer && *buffer) {
char *c = buffer;
while (*c != '\0') {
c++;
}
c--;
if (*c == '\n'){
*c = '\0';
buffer = c;
}
return buffer;
}
return NULL;Kb. így gondoljátok?
-
Gyuri16
senior tag
Uhh tényleg.
char *strChomp(char *buffer)
{
if (buffer && *buffer) {
while (*buffer != '\0') {
buffer++;
}
if (*buffer-- == '\n'){
*buffer = '\0';
}
return buffer;
}
return NULL;
}Most ha minden igaz, elmegy a végére, ha odaért, megnézi a lezáró nulla előtti karaktert, és ha az \n, akkor átírja \0-ra.
Nekem csak vissza kell adni a módosított, vagy az eredeti stringet, ha nem volt \n a végén. Ilyenkor a *buffer-t hogyan viszem vissza a kezdeti pozícióba? Ez most elég amatőr kérdés lesz, de gondolom nem egy "ellenkező irányú" while ciklussal lépdeljek vissza.
ez nem jo:
if (*buffer-- == '\n'){
a -- csak a feltetel kiertekelese utan fog vegrehajtodni, ezert ez az if sose teljesul (mindig 0 lesz a buffer erteke amikor ideer). ezert a fuggvenyed mindig az utolso (nem null) karakterre mutato pointert ad vissza.Ilyenkor a *buffer-t hogyan viszem vissza a kezdeti pozícióba?
ne a buffer pointert vidd vissza, hanem hasznalj egy masikat a mozgasra (ahogy azt.Jester01 mar irta). a fuggvenyed elejen csinalj egy ilyet:char * q = buffer;
es azutan a q-val dolgozz, a vegen petig visszaterhetsz a bufferral
mas:
mikozben ezt probaltam elojott a kovetkezo hiba, miert segfaultol a devcpp erre?
char * a = "abcd";
*a = 'b'; -
CPT.Pirk
Jómunkásember
Ez még mindig nagyon rossz, mivel most is minden lépésben nézed a \n-t, továbbá a -- és a ++ szépen kiüti egymást.
Igen, majd ha jól működik akkor két 0 lesz a végén de ez mindegy mert a stringnek az első nullánál lesz logikailag vége.
A visszatérési értéknek ha az eredeti paramétert akarod, akkor célszerű másolatot csinálni belőle és azt piszkálni, az eredetit meg békénhagyni.
Uhh tényleg.
char *strChomp(char *buffer)
{
if (buffer && *buffer) {
while (*buffer != '\0') {
buffer++;
}
if (*buffer-- == '\n'){
*buffer = '\0';
}
return buffer;
}
return NULL;
}Most ha minden igaz, elmegy a végére, ha odaért, megnézi a lezáró nulla előtti karaktert, és ha az \n, akkor átírja \0-ra.
Nekem csak vissza kell adni a módosított, vagy az eredeti stringet, ha nem volt \n a végén. Ilyenkor a *buffer-t hogyan viszem vissza a kezdeti pozícióba? Ez most elég amatőr kérdés lesz, de gondolom nem egy "ellenkező irányú" while ciklussal lépdeljek vissza.
-
Jester01
veterán
Kezdem felfogni.
![;]](//cdn.rios.hu/dl/s/v1.gif)
if (buffer && *buffer) {
while (*buffer != '\0') {
if (*buffer-- == '\n') {
*buffer = '\0';
}
buffer++;
}
return buffer;
}
return NULL;Viszont azt nem tudom, hogy ez a felülírás amit mondtál, ez mit csinál. Mivel ha felülírjuk, akkor mindenképpen 2 darab \0 lesz a stringben. Ilyenkor magától levágódik a második \0?
Valamint hogy van ez a visszatérési érték helyreállítása?
Ez még mindig nagyon rossz, mivel most is minden lépésben nézed a \n-t, továbbá a -- és a ++ szépen kiüti egymást.
Igen, majd ha jól működik akkor két 0 lesz a végén de ez mindegy mert a stringnek az első nullánál lesz logikailag vége.
A visszatérési értéknek ha az eredeti paramétert akarod, akkor célszerű másolatot csinálni belőle és azt piszkálni, az eredetit meg békénhagyni.
-
CPT.Pirk
Jómunkásember
Ez megint nem jó, mert a ++ az ugyebár megnöveli a változót. Tehát ha megtalálta a \n-t és a rákövetkező byte a lezáró nulla, akkor azt önmagával akarja felülírni. Ha viszont nem nulla, akkor abban a lépésben a buffer kétszer lesz növelve. A visszatérési érték pedig továbbra is rossz, mivel akkor a buffer már a string végére fog mutatni.
Embertelenül túlbonyolítod a kérdést. Összesen annyit kell csinálni, hogy megkeresed a végjelet és megnézed, hogy az előtte lévő karakter \n-e és ha igen, akkor azt felülírod.
Kezdem felfogni.
![;]](//cdn.rios.hu/dl/s/v1.gif)
if (buffer && *buffer) {
while (*buffer != '\0') {
if (*buffer-- == '\n') {
*buffer = '\0';
}
buffer++;
}
return buffer;
}
return NULL;Viszont azt nem tudom, hogy ez a felülírás amit mondtál, ez mit csinál. Mivel ha felülírjuk, akkor mindenképpen 2 darab \0 lesz a stringben. Ilyenkor magától levágódik a második \0?
Valamint hogy van ez a visszatérési érték helyreállítása?
-
Jester01
veterán
No alakítottam rajta egy kicsit.
char *strChomp(char *buffer)
{
if (buffer && *buffer) {
while (*buffer != '\0') {
if (*buffer == '\n') {
if (*buffer++ == '\0') {
*buffer = '\0';
return buffer;
}
}
buffer++;
}
return buffer;
}
return NULL;
}Így most elvileg végigmegy a sztringen karakterenként a lezáró nulláig. Közben ha talál \n-et, akkor megnézi, hogy a rá következő karakter lezáró 0-e.
Egyébként van valami ordító hibám? Mert eddig csak és kizárólag segfaultot kaptam az assert teszteknél.
Ez megint nem jó, mert a ++ az ugyebár megnöveli a változót. Tehát ha megtalálta a \n-t és a rákövetkező byte a lezáró nulla, akkor azt önmagával akarja felülírni. Ha viszont nem nulla, akkor abban a lépésben a buffer kétszer lesz növelve. A visszatérési érték pedig továbbra is rossz, mivel akkor a buffer már a string végére fog mutatni.
Embertelenül túlbonyolítod a kérdést. Összesen annyit kell csinálni, hogy megkeresed a végjelet és megnézed, hogy az előtte lévő karakter \n-e és ha igen, akkor azt felülírod.
-
CPT.Pirk
Jómunkásember
Ennek már eleve a fordításnál el kellene "buknia":
c = buffer; Hiányzik egy csillag.
return *buffer; itt meg van egy fölösleges
if (c == "\n") ide karakter konstans kell, aposztrófok között nem idézőjelben
*buffer = *(buffer--); szerkezet nem szabályos
bár az if belsejét szépen behúztad, attól még oda kellene a kapcsoszárójel (így is fordul, csak mást csinál mivel a return *buffer; már nem lesz a feltétel hatása alattA logikáját amúgy sem értem. Ugye a while feltétel eleve növeli a pointert, tehát c-be a következő karakter kerül már. Ha ez \n (akárhol is van, tehát nem feltétlen a string végén) akkor ezt, és csak ezt, megpróbálja felülírni az ezt megelőző karakterrel és itt abba is hagyja a feldolgozást, visszatérési érték pedig a buffer aktuális értéke lesz (tehát nem a string eleje). Ha pl. a bemenet "abc\ndef" akkor a kimenet "cdef" esetleg "ccdef" lesz.
Mivel az a feladat, hogy szedje le az új sor jelet a string végéről, ezért egyszerűen meg kell keresni a lezáró nulla byteot és azt eggyel előrébb hozni ha az előző karakter \n volt.
No alakítottam rajta egy kicsit.
char *strChomp(char *buffer)
{
if (buffer && *buffer) {
while (*buffer != '\0') {
if (*buffer == '\n') {
if (*buffer++ == '\0') {
*buffer = '\0';
return buffer;
}
}
buffer++;
}
return buffer;
}
return NULL;
}Így most elvileg végigmegy a sztringen karakterenként a lezáró nulláig. Közben ha talál \n-et, akkor megnézi, hogy a rá következő karakter lezáró 0-e.
Egyébként van valami ordító hibám? Mert eddig csak és kizárólag segfaultot kaptam az assert teszteknél.
-
Jester01
veterán
Van nekem egy kódom, ami ránézésre nekem tetszik, de assertes teszten mindig elbukik. Mi a gáz vele?
char *strChomp(char *buffer)
{
char c;
if (buffer && *buffer)
while (*buffer++){
c = buffer;
if (c == "\n")
*buffer = *(buffer--);
return *buffer;
}
return NULL;
}Annyit kell csinálnia, hogy leszedi a sorvégi új sor jelet, ha van.
Ennek már eleve a fordításnál el kellene "buknia":
c = buffer; Hiányzik egy csillag.
return *buffer; itt meg van egy fölösleges
if (c == "\n") ide karakter konstans kell, aposztrófok között nem idézőjelben
*buffer = *(buffer--); szerkezet nem szabályos
bár az if belsejét szépen behúztad, attól még oda kellene a kapcsoszárójel (így is fordul, csak mást csinál mivel a return *buffer; már nem lesz a feltétel hatása alattA logikáját amúgy sem értem. Ugye a while feltétel eleve növeli a pointert, tehát c-be a következő karakter kerül már. Ha ez \n (akárhol is van, tehát nem feltétlen a string végén) akkor ezt, és csak ezt, megpróbálja felülírni az ezt megelőző karakterrel és itt abba is hagyja a feldolgozást, visszatérési érték pedig a buffer aktuális értéke lesz (tehát nem a string eleje). Ha pl. a bemenet "abc\ndef" akkor a kimenet "cdef" esetleg "ccdef" lesz.
Mivel az a feladat, hogy szedje le az új sor jelet a string végéről, ezért egyszerűen meg kell keresni a lezáró nulla byteot és azt eggyel előrébb hozni ha az előző karakter \n volt.
-
CPT.Pirk
Jómunkásember
Van nekem egy kódom, ami ránézésre nekem tetszik, de assertes teszten mindig elbukik. Mi a gáz vele?
char *strChomp(char *buffer)
{
char c;
if (buffer && *buffer)
while (*buffer++){
c = buffer;
if (c == "\n")
*buffer = *(buffer--);
return *buffer;
}
return NULL;
}Annyit kell csinálnia, hogy leszedi a sorvégi új sor jelet, ha van.
-
Tecsa
aktív tag
Talán ha megosztanád a kódodat, akkor leírnánk, hogy miért nem megy...
Közben megoldottam. Köszönöm a türelmetek.
-
WonderCSabo
félisten
Talán ha megosztanád a kódodat, akkor leírnánk, hogy miért nem megy...
-
Tecsa
aktív tag
És mit hoztál össze eddig? (mellesleg Google-ből 5 perc alatt össze tudnál ollózni ilyen megoldást (ez nagyon alap), keress angolul)
Gondoltam, hogy egy for ciklussal végig futtatom a tömb elemeit és azt nézem hogy, ezek valameike éppen a bekért szám-e, és ha nincs egyezés akkor a bekért szám kerüljön a másik tömb-be. Ezt meg is irtam, de ez nem működik megfelelően.
-
Sk8erPeter
nagyúr
-
Tecsa
aktív tag
Ebben mi a nehéz? Egy ciklussal végigszaladsz a tömbbön, és ellenőrzöd, hogy minden i. elem nem egyenlő-e a bekért számmal.
Erre gondoltam csak nem sikerült össze hozni, de akkor még nekifutok.
-
WonderCSabo
félisten
Sziasztok!
Kezdő vagyok c-programozással kapcsolatban, és egy kis problémába ütköztem.
Lenne 2 tömb. az 1-ik kézzel van feltöltve össze vissza számokkal, a másikat pedig billentyűzetről kellene feltölteni, mondjuk scanf-el, de csak olyan számokkal ami nincs benne az első tömb-ben. Ehez kérnék egy kis segítséget.
Maga a feltöltés menne, azzal van problémám, hogy a bekért szám szerepel-e a tömb-ben.
Segítségeteket előre is köszönöm.
Üdv: TecsaEbben mi a nehéz? Egy ciklussal végigszaladsz a tömbbön, és ellenőrzöd, hogy minden i. elem nem egyenlő-e a bekért számmal.
-
Tecsa
aktív tag
Sziasztok!
Kezdő vagyok c-programozással kapcsolatban, és egy kis problémába ütköztem.
Lenne 2 tömb. az 1-ik kézzel van feltöltve össze vissza számokkal, a másikat pedig billentyűzetről kellene feltölteni, mondjuk scanf-el, de csak olyan számokkal ami nincs benne az első tömb-ben. Ehez kérnék egy kis segítséget.
Maga a feltöltés menne, azzal van problémám, hogy a bekért szám szerepel-e a tömb-ben.
Segítségeteket előre is köszönöm.
Üdv: Tecsa -
_ATi_1
senior tag
valo igaz

(#2575) _ATi_1: en igy oldottam meg:
if(pid == 0)
{
while(j < m)
{
if(msgrcv(id, &u, sizeof(u.msg), (i + 1), 0777) == sizeof(u.msg))
{
u.mtype = (i + 2);
u.msg[0] = (u.msg[0] / u.msg[1]);
printf("%d\n", u.msg[0]);
msgsnd(id, &u, sizeof(u.msg), 0777);
++j;
}
}
}persze a j-t meg forkolas elott hoztam letre 0 kezdeti ertekkel.
Köszönöm.

-
j0k3r!
őstag
Dehát a return-el az egész fv-et lelövöd, tehát a ciklusból mindenképpen kilép. A break; már le se fut.
valo igaz

(#2575) _ATi_1: en igy oldottam meg:
if(pid == 0)
{
while(j < m)
{
if(msgrcv(id, &u, sizeof(u.msg), (i + 1), 0777) == sizeof(u.msg))
{
u.mtype = (i + 2);
u.msg[0] = (u.msg[0] / u.msg[1]);
printf("%d\n", u.msg[0]);
msgsnd(id, &u, sizeof(u.msg), 0777);
++j;
}
}
}persze a j-t meg forkolas elott hoztam letre 0 kezdeti ertekkel.
-
WonderCSabo
félisten
Dehát a return-el az egész fv-et lelövöd, tehát a ciklusból mindenképpen kilép. A break; már le se fut.
-
j0k3r!
őstag
nemtudom mire gondolsz, elkezdek 'fentrol' lefele haladni, es ha talalok olyan szamot, amelyik mind a ket szam osztoja, akkor a fv visszateresi erteke i, a ciklust meg leallitom (break), mivel felesleges tovabb keresni, ha mar megvan az elso (legnagyobb) elem.
-
_ATi_1
senior tag
-
Jester01
veterán
Sziasztok!
Szeretnék egy kis segítséget kérni Tőletek.
A feladat leírása: [link]
A félig kész forrás: [link] (Remélem nem gond, hogy így raktam fel)A gond, hogy nem fut le m-szer (2. paraméterben megadott szám) a számok bekérése. Pontosan nem tudom melyik részen van a hiba, de kifogott rajtam.

Ha egy hozzáértő esetleg tudna segíteni, megköszönném.Az a baj, hogy a gyerek processzek csak 1 üzenetet dolgoznak fel aztán kilépnek. Így a második számpárt bekéri ugyan a főprogram, de arra már nem kap választ ezért ott végtelen várakozásba kerül.
-
Jester01
veterán
Sziasztok!
Szeretnék egy kis segítséget kérni Tőletek.
A feladat leírása: [link]
A félig kész forrás: [link] (Remélem nem gond, hogy így raktam fel)A gond, hogy nem fut le m-szer (2. paraméterben megadott szám) a számok bekérése. Pontosan nem tudom melyik részen van a hiba, de kifogott rajtam.

Ha egy hozzáértő esetleg tudna segíteni, megköszönném.Hihi, ez olyan mint a #2521 ... nézem
-
_ATi_1
senior tag
Sziasztok!
Szeretnék egy kis segítséget kérni Tőletek.
A feladat leírása: [link]
A félig kész forrás: [link] (Remélem nem gond, hogy így raktam fel)A gond, hogy nem fut le m-szer (2. paraméterben megadott szám) a számok bekérése. Pontosan nem tudom melyik részen van a hiba, de kifogott rajtam.

Ha egy hozzáértő esetleg tudna segíteni, megköszönném. -
Sk8erPeter
nagyúr
-
followme
aktív tag
/* "Látható" típus */
typedef struct apiT
{
/* függvény-pointerek */
} apiT;
/* "Rejtett" típus */
typedef struct objT
{
apiT api;
/* belső paraméterek */
} objT;
/* "konstruktor" */
apiT* createObj()
{
objT* obj = (objT*)malloc(sizeof(objT));
/* belső paraméterek állítása */
/* api feltöltése */
return &obj->api;
}
/* példa egy api függvényre */
void apiFn(apiT* api)
{
objT* obj = (objT*)api;
/* belső paraméter módosítása */
}Remélem nem írtam el semmit és a lényeg átmegy

-
j0k3r!
őstag
Mondjuk nem hiszem, hogy az algoritmus implementálása bárkinek gondot okozna. Ha mégis, akkor az angol wikin ott van implementálva pszeudokódban, azt már csak át tudja írni C-re.

ezt nem is neztem, pedig ebben a felevben eleg sokszor hasznaltam irasban, mivel kellett az RSA-hoz : )
de ha mar itt tartunk: google a baratunk
-
WonderCSabo
félisten
-
j0k3r!
őstag
-
lordbonehu
csendes tag
Sziasztok! Olyan embereket keresek akik akik jártasak annyira a C nyelvben, hogy a következő feladatban segítsenek.
Kezdő programozóként, van egy ilyen forráskódom.
A feladat leírása a következő:
"Kulcstábla vagy Indextábla használata és beleépítése a programba (rendezéshez, törléshez)"
Ez egy házi feladat (egy adatbázisféleség) amit a félév során folyamatosan bővíteni kellet, eddig eljutottam, de sajnos innentől nem tudom hogy hogyan lehet ezt megoldani. Bárkinek a segítségét megköszönném, aki meg tudná mondani hogyan alakítsam ezt át, hogy benne legyen, a feladatban leírt dolog. -
WonderCSabo
félisten
Van egy pár, a legismertebb az Euklideszi algoritmus.
-
Cicero
őstag
progzh bukta. Két szám legnagyobb közös osztójára tudtok valami algoritmust?
-
Stanki6
csendes tag
-
shev7
veterán
pedig a linkelt fuggveny pont azt csinalja...
-
Stanki6
csendes tag
Itt lehet pár megvalósítást találni: [Google Code Search]
első: [link] (bár ez C++)Remélem ezek közt találsz megfelelőt.
Codesearch-ön körbenéztem már de nem pontosan azok vannak amik nekem kénének, mert ezeket a paramétereket kaptam:
/**
converts int to string
\param num number to convert
\param str target buffer, needs enough to store chars
\param radix of the conversion
*/ -
Sk8erPeter
nagyúr
Itt lehet pár megvalósítást találni: [Google Code Search]
első: [link] (bár ez C++)Remélem ezek közt találsz megfelelőt.
-
Stanki6
csendes tag
Sziasztok!
Lenne egy kérdésem hogy tudnám megvalósítani ezt a függvényt amit feladatként kaptam: char *itoa(int num, char *str, int radix).
Válaszotokat előre is köszönöm
-
Sk8erPeter
nagyúr
Nincs mit!
Mindig kerüld el ezeket a system(...) jellegű függvényhívásokat, mindig megoldható másképp, könyvtári függvényekkel is.
Ez egy feleslegesen erőforrásigényes rendszerhívás, ráadásul NEM platformfüggetlen.Jester01-nek igaza van, lehet tovább egyszerűsíteni és gyorsítani, így még jobb:
int tobbszor( int* pTomb, int size )
{
int i, j;
for ( i = 0; i < size; i++ ){
for ( j = i+1; j < size; j++){
if (pTomb[j]==pTomb[i])
return 1;
}
}
return 0;
}Tehát a belső for ciklusban i+1-től vizsgálódom, felesleges újra és újra végigmenni az egész tömbön, ráadásul így eleve az aktuális tömb utántól indul a vizsgálat.
======
(#2556) Jester01: you're right.
Először arra gondoltam, az úgy nem jó, mert nem rendezett a tömb, aztán rájöttem, hogy ez baromság, mert egyszer már az elejétől végigszaladgáltunk, minek újból, kicsit fáradt vagyok... 
-
Nyiscsák
aktív tag
Ezt a
system("PAUSE");
baromságot nagyon gyorsan felejtsd el (egyszer össze kéne számolni, hányszor hangzott el ez a topikban).
Gondolom valami gyökér tanár mutatta ezt a szarságot, vagy valami gány fórumon szedted össze.
Ott van helyette pl. a getchar();Ezenfelül jobb lenne, ha azonnal visszatérnél, amint egyezést találtál egy korábbi számmal (minek végigmenni rajta teljesen?).
if (pTomb[j]==pTomb[i])
ez a feltételvizsgálat nálad legalább egyszer mindenképp igaz lesz, amikor önmagával hasonlítod az elemet, felesleges ezt vizsgálni.
Szóval így is lehet:
int tobbszor( int* pTomb, int size )
{
int i, j;
for ( i = 0; i < size; i++ ){
for ( j = 0; j < size; j++){
if (i!=j && pTomb[j]==pTomb[i])
return 1;
}
}
return 0;
}Sajnos a systemes hülyeséget a tanár verte belénk a DevC++ használatakor, de igyekszem felejteni. A feladat egyszerűsítéséért pedig köszönet! Így sokkal átláthatóbb az egész.
-
Jester01
veterán
Ezt a
system("PAUSE");
baromságot nagyon gyorsan felejtsd el (egyszer össze kéne számolni, hányszor hangzott el ez a topikban).
Gondolom valami gyökér tanár mutatta ezt a szarságot, vagy valami gány fórumon szedted össze.
Ott van helyette pl. a getchar();Ezenfelül jobb lenne, ha azonnal visszatérnél, amint egyezést találtál egy korábbi számmal (minek végigmenni rajta teljesen?).
if (pTomb[j]==pTomb[i])
ez a feltételvizsgálat nálad legalább egyszer mindenképp igaz lesz, amikor önmagával hasonlítod az elemet, felesleges ezt vizsgálni.
Szóval így is lehet:
int tobbszor( int* pTomb, int size )
{
int i, j;
for ( i = 0; i < size; i++ ){
for ( j = 0; j < size; j++){
if (i!=j && pTomb[j]==pTomb[i])
return 1;
}
}
return 0;
}Sőt, elég a következő elemtől nézni a listát

-
Sk8erPeter
nagyúr
-
chabeee
aktív tag
-
Sk8erPeter
nagyúr
Sziasztok!
Van egy programom melynek annyi lenne a feladata, hogy megnézi egy tömb elemeit és ha van benne olyan szám mely többször előfordult akkor kiírja hogy van, egyébként meg nincs.
Ez lenne a kód, ami valamiért nem működik:
#include <stdio.h>
int tobbszor( int pTomb[], int size )
{
int i, j;
int db = 0;
for ( i = 0; i < size; i++ ){
db = 0;
for ( j = 0; j < size; j++){
if (pTomb[j]==pTomb[i])
db++;
}
if (db > (size-db))
return 1;
}
return 0;
}
int main()
{
int a[] = {11, 12, 22, 33, 2, 11, 11, 55};
int size=(sizeof(a)/sizeof(a[0]));
if (tobbszor( a, size ) == 1)
printf("van\n");
else
printf("nincs\n");
system("PAUSE");
return 0;
}Köszi előre is a segítséget!
Ezt a
system("PAUSE");
baromságot nagyon gyorsan felejtsd el (egyszer össze kéne számolni, hányszor hangzott el ez a topikban).
Gondolom valami gyökér tanár mutatta ezt a szarságot, vagy valami gány fórumon szedted össze.
Ott van helyette pl. a getchar();Ezenfelül jobb lenne, ha azonnal visszatérnél, amint egyezést találtál egy korábbi számmal (minek végigmenni rajta teljesen?).
if (pTomb[j]==pTomb[i])
ez a feltételvizsgálat nálad legalább egyszer mindenképp igaz lesz, amikor önmagával hasonlítod az elemet, felesleges ezt vizsgálni.
Szóval így is lehet:
int tobbszor( int* pTomb, int size )
{
int i, j;
for ( i = 0; i < size; i++ ){
for ( j = 0; j < size; j++){
if (i!=j && pTomb[j]==pTomb[i])
return 1;
}
}
return 0;
} -
skoda12
aktív tag
-
chabeee
aktív tag
-
Nyiscsák
aktív tag
-
j0k3r!
őstag
Sziasztok!
programozás közben szükségem lett volna pár matematikai függvényre, de sajnos ezt nem tette lehetőve a progi amit használok. Ubuntu alatt használok eclipset!
egyetemen még mutatták hogy vmi "-m"-et kell beírni csak nem tudom hova.
konkrétan az sqrt kellene!
a válaszokat előre is köszi
üdv#include <math.h>
[link]remelem erre gondoltal.
-
chabeee
aktív tag
Sziasztok!
programozás közben szükségem lett volna pár matematikai függvényre, de sajnos ezt nem tette lehetőve a progi amit használok. Ubuntu alatt használok eclipset!
egyetemen még mutatták hogy vmi "-m"-et kell beírni csak nem tudom hova.
konkrétan az sqrt kellene!
a válaszokat előre is köszi
üdv -
Jester01
veterán
Sziasztok!
Van egy programom melynek annyi lenne a feladata, hogy megnézi egy tömb elemeit és ha van benne olyan szám mely többször előfordult akkor kiírja hogy van, egyébként meg nincs.
Ez lenne a kód, ami valamiért nem működik:
#include <stdio.h>
int tobbszor( int pTomb[], int size )
{
int i, j;
int db = 0;
for ( i = 0; i < size; i++ ){
db = 0;
for ( j = 0; j < size; j++){
if (pTomb[j]==pTomb[i])
db++;
}
if (db > (size-db))
return 1;
}
return 0;
}
int main()
{
int a[] = {11, 12, 22, 33, 2, 11, 11, 55};
int size=(sizeof(a)/sizeof(a[0]));
if (tobbszor( a, size ) == 1)
printf("van\n");
else
printf("nincs\n");
system("PAUSE");
return 0;
}Köszi előre is a segítséget!
-if (db > (size-db))
+if (db > 1) -
Nyiscsák
aktív tag
Sziasztok!
Van egy programom melynek annyi lenne a feladata, hogy megnézi egy tömb elemeit és ha van benne olyan szám mely többször előfordult akkor kiírja hogy van, egyébként meg nincs.
Ez lenne a kód, ami valamiért nem működik:
#include <stdio.h>
int tobbszor( int pTomb[], int size )
{
int i, j;
int db = 0;
for ( i = 0; i < size; i++ ){
db = 0;
for ( j = 0; j < size; j++){
if (pTomb[j]==pTomb[i])
db++;
}
if (db > (size-db))
return 1;
}
return 0;
}
int main()
{
int a[] = {11, 12, 22, 33, 2, 11, 11, 55};
int size=(sizeof(a)/sizeof(a[0]));
if (tobbszor( a, size ) == 1)
printf("van\n");
else
printf("nincs\n");
system("PAUSE");
return 0;
}Köszi előre is a segítséget!
-
followme
aktív tag
Egyszerűbb lett volna, ha kapásból mutatsz példát mentegetőzés helyett.

Ez nem mentegetőzés, inkább lustaság, mert nem olyan egyszerű leírni röviden és érthetően
Majd este 
-
Korcsii
őstag
Bocsi, nem olvastam az elejét, csak átfutottam és megláttam amit írtál és az ütött szemet.
Igazad van, gyakorlatilag mindent lehet ilyen szempontból máshogy csinálni.
De akkor még egy példa arra, hogy miért kerüljük az implicit típuskonverziót:
uint16_t u16a = 40000;
uint16_t u16b = 30000;
uint32_t u32res;
u32res = u16a + u16b;
/* 70000 vagy 4464? */Ha van rá igény mutatok olyan példát, amikor másra is használható a castolás. Nagyon szépen lehet vele például OO szerű C kódot írni

Csak nem szeretném, hogy a fórumozók idegenkedjenek tőle

netalántán void*-gal általános függvények?

-
Sk8erPeter
nagyúr
Bocsi, nem olvastam az elejét, csak átfutottam és megláttam amit írtál és az ütött szemet.
Igazad van, gyakorlatilag mindent lehet ilyen szempontból máshogy csinálni.
De akkor még egy példa arra, hogy miért kerüljük az implicit típuskonverziót:
uint16_t u16a = 40000;
uint16_t u16b = 30000;
uint32_t u32res;
u32res = u16a + u16b;
/* 70000 vagy 4464? */Ha van rá igény mutatok olyan példát, amikor másra is használható a castolás. Nagyon szépen lehet vele például OO szerű C kódot írni

Csak nem szeretném, hogy a fórumozók idegenkedjenek tőle

Egyszerűbb lett volna, ha kapásból mutatsz példát mentegetőzés helyett.

-
followme
aktív tag
Ha kicsit figyelmesebben olvasol akkor látod, hogy alapvetően pointerek castolásáról van szó. Egyszerű típusokra jól definiált konverziók vannak amiket a fordító ismer is.
Ettől függetlenül a megadott példát is lehet szépen csinálni:res8 = ~p;
res8 >>= 3;Mindjárt kevesebb zárójelen kell az ember szemének jojóznia.
Az már csak a hab a tortán, hogy a te példád pont az én állításomat támasztja alá, miszerint a castolás "bizonyos esetekben szükséges rossz".
Bocsi, nem olvastam az elejét, csak átfutottam és megláttam amit írtál és az ütött szemet.
Igazad van, gyakorlatilag mindent lehet ilyen szempontból máshogy csinálni.
De akkor még egy példa arra, hogy miért kerüljük az implicit típuskonverziót:
uint16_t u16a = 40000;
uint16_t u16b = 30000;
uint32_t u32res;
u32res = u16a + u16b;
/* 70000 vagy 4464? */Ha van rá igény mutatok olyan példát, amikor másra is használható a castolás. Nagyon szépen lehet vele például OO szerű C kódot írni

Csak nem szeretném, hogy a fórumozók idegenkedjenek tőle

-
Jester01
veterán
Ha kicsit figyelmesebben olvasol akkor látod, hogy alapvetően pointerek castolásáról van szó. Egyszerű típusokra jól definiált konverziók vannak amiket a fordító ismer is.
Ettől függetlenül a megadott példát is lehet szépen csinálni:res8 = ~p;
res8 >>= 3;Mindjárt kevesebb zárójelen kell az ember szemének jojóznia.
Az már csak a hab a tortán, hogy a te példád pont az én állításomat támasztja alá, miszerint a castolás "bizonyos esetekben szükséges rossz".
-
followme
aktív tag
Tessék egy szemléletes példa, de igény szerint mondok még többet is

uint8_t p = 0x5a;
uint8_t res8;
/* Rossz */
res8 = (~p) >> 3;
/* Helyesen */
res8 = ((uint8_t)(~p)) >> 3; -
Jester01
veterán
Köszönjük, hogy ilyen részletesen indokolta véleményét, remélhetőleg máskor is megtisztel bennünket néhány tudásmorzsával.

-
followme
aktív tag
A castolás tulajdonképpen típus ráerőszakolása. Fontos, hogy C-ben ilyenkor (pointerek esetén) nincs semmi konverzió, vagyis a gép elhiszi neked, hogy az a pointer valóban az amire castolod.
Nagyon rossz példa
const char *text = "1234";
int x = *(int*)text;Ebben az esetben x nem 1 lesz, hanem az "1234" memória leképezésének int megfelelője. Ez ascii kódban a 0x31 0x32 0x33 0x34 byte sorozatot jelenti, ami 32 bites little-endian rendszerben integerként 0x34333231=875770417. Tehát még csak nem is hasonlít arra, amit szegény kezdő programozó gondolt. (Már ha nem a még rosszabb int x = (int)text; formát próbálta.)
A castolást lehetőség szerint kerülni kell, de bizonyos esetekben szükséges rossz. Most hirtelen jó példát nem is tudok rá hozni.
Tipikus hibát viszont igen: ez a void* oda-vissza castolása. Szabvány C-ben erre semmi szükség, mivel a konverzió mind a két irányba automatikus. Példák:
Rossz
int *p = (int*)malloc(10 * sizeof(int));
fwrite((void*)p, sizeof(int), 10, stdout);Helyes
int *p = malloc(10 * sizeof(int));
fwrite(p, sizeof(int), 10, stdout);Bizonyos API függvényekhez viszont szükséges castolni, például a bind ilyen:
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
Itt az addr argumentum valójában egy sereg struct valamelyike lehet, a címtartománytól függően, például sockaddr_un unix sockethez, sockaddr_in internet sockethez, stb. Ilyenkor castolni kell. Mivel semmi garancia nincs cast esetén, ezért ez semmivel sem jobb mintha az argumentum típusa egyszerűen void* lenne (amihez nem kellene cast), de sajnos a szabványba ez került be. Példa:
struct sockaddr_un my_addr;
...
my_addr.sun_family = AF_UNIX;
bind(sfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr_un));MOD: ja meg az accept is ilyen, azt meg te is használtad

"A castolást lehetőség szerint kerülni kell, de bizonyos esetekben szükséges rossz. Most hirtelen jó példát nem is tudok rá hozni."
Ezzel azért nem feltétlenül értek egyet, sőőőőt

-
gitanaa87
csendes tag
És mit adsz mindezért cserébe, egy határozott vállveregetést?

pénzt is áldoznék rá, mivel ezen múlik hogy lesz e plusz 1 év csúszásom. ezért kérek valakit aki megcsinálná nekem, írjon egy üzit.
-
Sk8erPeter
nagyúr
Sziasztok!
A Miskolci Egyetemre járok és ott tanulok műszaki informatikát és van két beadandó feladatom, de sajnos nem értem ezt a programozást teljesen. Ezen a két feladaton múlna a tárgyam, ezért nagyon hálás lennék ha valaki megcsinálná nekem a feladatokat és elküldené privátban.
1. C Grafikai feladat. Egy tetszőlegesen megadott z=f(x,y) kétváltozós függvény adott síkbeli
négyszögtartomány feletti maximumát (minimumát) kell keresni egy
megadott rácsközű koordinátarács fölött gradiens-eljárással. Meg kell
rajzolni egy extrémum-keresés pályagörbéjét megadott kezdőpontból
kiindulva, a mindenkori függvényértékek és koordinátáik táblázatos
megjelenítésével.2. Dolgozzon ki legalább kétszintű osztályhierarchiából és egyedekből álló objektum orientált megoldást C++ nyelven az alább megadott témakörökre! A feladat megoldásában alkalmazza a vektorok dinamikus foglalását. Definiálja az objektumok adattagjainak történő értékadást és lekérdezést lehetővé tévő tagfüggvényeket.
Hozza létre a Bútor osztályt a Súly, Jellemző anyaga és a Legnagyobb magassága adattagokkal. Származtassa belőle az Asztal és a Szekrény alosztályokat. Az Asztal osztályt lássa el Asztallap-alak és Fiókos adattagokkal. A Szekrény osztályt bővítse Üveges és Kulccsal zárható adattagokkal. Írjon programot, amellyel létrehozhatók az Asztal és a Szekrény egyedeket tároló vektorok. A program tegye lehetővé a feltöltést és a legnehezebb Üveges szekrény összes adatának kiiratását, valamint a Kulccsal zárható fémszekrények közül azoknak a kilistázását, amelyek ráadásul Üvegesek is.Nagyon hálás lennék, ha valaki szakítana egy kis időt rám és megoldaná. Üdv: Judit
És mit adsz mindezért cserébe, egy határozott vállveregetést?

-
gitanaa87
csendes tag
Sziasztok!
A Miskolci Egyetemre járok és ott tanulok műszaki informatikát és van két beadandó feladatom, de sajnos nem értem ezt a programozást teljesen. Ezen a két feladaton múlna a tárgyam, ezért nagyon hálás lennék ha valaki megcsinálná nekem a feladatokat és elküldené privátban.
1. C Grafikai feladat. Egy tetszőlegesen megadott z=f(x,y) kétváltozós függvény adott síkbeli
négyszögtartomány feletti maximumát (minimumát) kell keresni egy
megadott rácsközű koordinátarács fölött gradiens-eljárással. Meg kell
rajzolni egy extrémum-keresés pályagörbéjét megadott kezdőpontból
kiindulva, a mindenkori függvényértékek és koordinátáik táblázatos
megjelenítésével.2. Dolgozzon ki legalább kétszintű osztályhierarchiából és egyedekből álló objektum orientált megoldást C++ nyelven az alább megadott témakörökre! A feladat megoldásában alkalmazza a vektorok dinamikus foglalását. Definiálja az objektumok adattagjainak történő értékadást és lekérdezést lehetővé tévő tagfüggvényeket.
Hozza létre a Bútor osztályt a Súly, Jellemző anyaga és a Legnagyobb magassága adattagokkal. Származtassa belőle az Asztal és a Szekrény alosztályokat. Az Asztal osztályt lássa el Asztallap-alak és Fiókos adattagokkal. A Szekrény osztályt bővítse Üveges és Kulccsal zárható adattagokkal. Írjon programot, amellyel létrehozhatók az Asztal és a Szekrény egyedeket tároló vektorok. A program tegye lehetővé a feltöltést és a legnehezebb Üveges szekrény összes adatának kiiratását, valamint a Kulccsal zárható fémszekrények közül azoknak a kilistázását, amelyek ráadásul Üvegesek is.Nagyon hálás lennék, ha valaki szakítana egy kis időt rám és megoldaná. Üdv: Judit
-
moszkita
csendes tag
-
ArchElf
addikt
Sziasztok! Infóra kellene beadandót csinálnom, de mivel lényegében nem tanítanak semmit, így elég nehéz :S
Kompletten el se tudom kezdeni
Borland C-ben kellene ezt megírni:
"Megrajzolandó a háromszög köré írt kör, ha a háromszög csúcspontjainak koordinátáit a felhasználótól kérjük be."Ezer hála és köszönet aki tud ebben segíteni.

Privátba is jöhet, nagy respect aki megcsinálja.
A matek része megy a feladatnak (papíron, geometriailag meg tudod oladni a problémát)?
AE
-
moszkita
csendes tag
Sziasztok! Infóra kellene beadandót csinálnom, de mivel lényegében nem tanítanak semmit, így elég nehéz :S
Kompletten el se tudom kezdeni
Borland C-ben kellene ezt megírni:
"Megrajzolandó a háromszög köré írt kör, ha a háromszög csúcspontjainak koordinátáit a felhasználótól kérjük be."Ezer hála és köszönet aki tud ebben segíteni.

Privátba is jöhet, nagy respect aki megcsinálja.
-
Drizzt
nagyúr
C++ban van gyakorlatom, kb. másfél év, nem mindig közvetlen c++ programozással telt ugyan, de nagyrészt kellett C++ kódot nézni, hibákat keresni, javítani, stb.
Viszont új munkám lesz, s ott C-vel fogok foglalkozni első körben. Milyen könyvet lenne addig érdemes elolvasni, ha az említett C++ tapasztalat van meg részemről?
-
j0k3r!
őstag
elszamoltam magam, azthittem kulon kell az utolso processeknek kuldeni egy-egy uzenetet a szulonek, de mar latom, hogy az utolso gyerekprocess (i + 2) -es tipusu uzenete az pont (n + 1), szoval valo igaz ketszer kuldtem el szulonek, nemcsoda hogy ido elott torolt sleep nelkul.
koszonom szepen a segitseget, mostmar sleep nelkul is mukodik es szepen torli is az uzenetsort (ipcs szerint is)
-
Jester01
veterán
1. a kimenet meg mindig jo
2. mostmar igen, de sajnos meg mindig van benne sleep() (kod), pedig szerintem logikailag mar jo lenne (ha kiveszem a sleepet, akkor hamarabb zarja le, minthogy megerkezne az utolso uzenet, pedig a ciklusban az utolsoprocess vizsgalat es a szulonek valo uzenet kuldese a 'sima' uzenetkuldes utan van)
3. : )Valami általam érthetetlen okból kifolyólag beleírtál még plusz üzenetküldést (60-64. sorok) így persze, hogy idő előtt kilép.
-
j0k3r!
őstag
1. a kimenet meg mindig jo
2. mostmar igen, de sajnos meg mindig van benne sleep() (kod), pedig szerintem logikailag mar jo lenne (ha kiveszem a sleepet, akkor hamarabb zarja le, minthogy megerkezne az utolso uzenet, pedig a ciklusban az utolsoprocess vizsgalat es a szulonek valo uzenet kuldese a 'sima' uzenetkuldes utan van)
3. : ) -
Jester01
veterán
hello!
1. koszonom szepen a tanacsokat, megprobaltam kijavitani a leirtak alapjan.
erre jutottam: c, sh, kimenet2. uzenetsor torlese ele beraktam egy sleep(1);-et (ez valoszinuleg ganyolas). mivel lehetne legegyszerubben leellenorizni, hogy mar elment az n * m db uzenet, ami utan mehet a torles? (en arra gondoltam, hogy letrehozok a foprogramban egy int valtozot (shmat es tarsai, hogy elerjek a gyerekprocessek is), amit novelek minden egyes sikeres uzenetkules utan, de hatha van egyszerubb megoldas is)
3. mivel 'vizsgalodtal', hogy ezekre problemakra rajottel?
1. a kimenet jónak tűnik
2. elolvastad a feladatkiírás 10. pontját?
3. a szememmel
-
j0k3r!
őstag
További vizsgálódás után még az alábbi dolgokat figyeltem meg:
1) a főprogram még azelőtt törli az üzenetsort, mielőtt a gyerkőcöknek lenne esélyük kiolvasni az üzenetet. Mivel az msgrcv hívások sikerességét nem ellenőrzöd ezt nem veszed észre. Lásd még: feladatkiírás 10. pontja.
2a) a főprogram már akkor beteszi a következő üzenetet mielőtt az előző feldolgozása megtörtént volna.
2b) az előző pont miatt az első gyerek például rögvest megcsinálhat több feldolgozást is, ezért a kimenetben összekeverednek az eredmények. Erre azonban semmi megkötés nincs a feladatkiírásban szóval szerintem ez nem baj.
3) ugyanabba fájlba párhuzamosan szeretnének írni, emiatt vesznek el adatok. A fájlt hozzáfűzésre (append) kell megnyitni akkor jó leszhello!
1. koszonom szepen a tanacsokat, megprobaltam kijavitani a leirtak alapjan.
erre jutottam: c, sh, kimenet2. uzenetsor torlese ele beraktam egy sleep(1);-et (ez valoszinuleg ganyolas). mivel lehetne legegyszerubben leellenorizni, hogy mar elment az n * m db uzenet, ami utan mehet a torles? (en arra gondoltam, hogy letrehozok a foprogramban egy int valtozot (shmat es tarsai, hogy elerjek a gyerekprocessek is), amit novelek minden egyes sikeres uzenetkules utan, de hatha van egyszerubb megoldas is)
3. mivel 'vizsgalodtal', hogy ezekre problemakra rajottel?
-
Jester01
veterán
További vizsgálódás után még az alábbi dolgokat figyeltem meg:
1) a főprogram még azelőtt törli az üzenetsort, mielőtt a gyerkőcöknek lenne esélyük kiolvasni az üzenetet. Mivel az msgrcv hívások sikerességét nem ellenőrzöd ezt nem veszed észre. Lásd még: feladatkiírás 10. pontja.
2a) a főprogram már akkor beteszi a következő üzenetet mielőtt az előző feldolgozása megtörtént volna.
2b) az előző pont miatt az első gyerek például rögvest megcsinálhat több feldolgozást is, ezért a kimenetben összekeverednek az eredmények. Erre azonban semmi megkötés nincs a feladatkiírásban szóval szerintem ez nem baj.
3) ugyanabba fájlba párhuzamosan szeretnének írni, emiatt vesznek el adatok. A fájlt hozzáfűzésre (append) kell megnyitni akkor jó lesz -
Jester01
veterán
hello!
van egy kis gondom. van ez a c kod, ez a bash script, es a megoldando feladat.
a gondom az, hogyha siman terminalbol inditom a c programot, akkor kiirja a kepernyore a helyes ertekeket, de ha ezt atiranyitom fileba (>), akkor egyatlan nem jo kimenetet ad.
a jo megoldas helyett (a feladatban benne van) ezt irja bele peldaul:
8
9
25
4
3
5
2
1
1
(itt peldaul lemaradtak az elso uzenetek, de nem mindig ez a kimenet, hiaba ugyanaz a bemenet)
ha van valakinek valami otlete szivesen fogadom
Még csak rápillantottam, de nekem már terminálban sem működik rendesen.
Valami időzítési/versenyhelyzet (race condition) lehet a háttérben. -
!wannabe
tag
Ezek nem fordítók, ami a kérdés volt, hanem fejlesztőkörnyezetek.

Mondjuk más kérdés,hogy gondolom a kérdező is erre gondolt, csak fogalmi képzavarban van. Meg a kérdés eleve rossz volt, nincs olyan, hogy "legjobb fordító".
Hehe, én is elgondolkodtam a kérdésen
mert arról, hogy milyen fordítót is használok az ugrott be, hogy gcc-t. Aztán gondoltam, hogy nem erre gondol hanem a fejlesztőkörnyezetekre ezért leírtam amit használok. -
Sk8erPeter
nagyúr
Ezek nem fordítók, ami a kérdés volt, hanem fejlesztőkörnyezetek.

Mondjuk más kérdés,hogy gondolom a kérdező is erre gondolt, csak fogalmi képzavarban van. Meg a kérdés eleve rossz volt, nincs olyan, hogy "legjobb fordító".
-
j0k3r!
őstag
hello!
van egy kis gondom. van ez a c kod, ez a bash script, es a megoldando feladat.
a gondom az, hogyha siman terminalbol inditom a c programot, akkor kiirja a kepernyore a helyes ertekeket, de ha ezt atiranyitom fileba (>), akkor egyatlan nem jo kimenetet ad.
a jo megoldas helyett (a feladatban benne van) ezt irja bele peldaul:
8
9
25
4
3
5
2
1
1
(itt peldaul lemaradtak az elso uzenetek, de nem mindig ez a kimenet, hiaba ugyanaz a bemenet)
ha van valakinek valami otlete szivesen fogadom
-
RexpecT
addikt
hello!
ha jol latom, akkor s2-be fog kerulni a mar atalakitott 'string' (mivel a szoveg fgv visszateresi erteke char *).
dinamikus memoriafoglalasnal a malloc visszateresi erteke void*, szoval felesleges castolgatni, de ez mar Jester01 is leirta a minap.
system("PAUSE"); -> [link]szerk: Gyuri16 kozben megirta a lenyeget
Köszönöm! A System Pause megoldást már többször is mondták és azt is hogy mivel lehetne jól megcsinálni,de mivel az nekem nem futott így ezt használom(gyakorlaton is ezt használjuk).
-
j0k3r!
őstag
Sziasztok!
Lenne két kérdésem.
Az első:
Írjunk függvényt, amely az 1. paraméterében megkap egy
string-et, a 2. paraméterében a string '\0' karakter nélküli
hosszát, és a 3. paraméterében egy számot (m).
Ha m=0 vagy m<0, akkor adjon vissza NULL értéket.
Egyébként adjon vissza egy új string-et, amelyet s-ből állítunk
elő úgy, hogy minden m. karaktert nagybetűsen hagyunk meg belőle,
a többi karaktert kisbetűsen. Az angol ABC betűin kívül csak a
számjegy karaktereket hagyjuk meg!
Az új string maximális hossza legyen n+1.
A függvényt próbáld is ki konkrétan egy main() programban.
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
char *szoveg(char *s, int n,int m)
{
int i,k=0;
char *t;
t=(char*)calloc(n+1,sizeof(char));
if (m<=0)
return NULL;
for (i=0;i<n;i++)
{
if (isalnum(s[i]))
{
if (((i+1)%m)==0)
t[k++]=toupper(s[i]);
else
t[k++]=tolower(s[i]);
}
}
t[k]='\0';
return t;
}
int main()
{
char s[]="TesZtSzoveg19SzovegTeSZt**éáéáéá43242SzovegszoveGszoVeg323",*s2;
s2=szoveg(s,strlen(s),3);
puts(s2);
system("PAUSE");
return 0;
}A karaktertömb deklarálásánál mire szolgál *s2 mutató?
A második:
//7. Másold át a listaelemeket a t tömbbe!
int *masol(LISTA list){
ELEM *e;
int n = elemszam(list), idx = 0;
int *t=(int*)malloc(n * sizeof(int));
//Járd be a láncot a szokott módon. A cikluson belül másold az elemet, és növeld a tömb indexet!
for( e = list.fej;e;e=e->kov)
{
t[idx]=e->adat;
++idx;
}
return t;
}
Hogyan tudom kiíratni a tömb összes elemét?
hello!
ha jol latom, akkor s2-be fog kerulni a mar atalakitott 'string' (mivel a szoveg fgv visszateresi erteke char *).
dinamikus memoriafoglalasnal a malloc visszateresi erteke void*, szoval felesleges castolgatni, de ez mar Jester01 is leirta a minap.
system("PAUSE"); -> [link]szerk: Gyuri16 kozben megirta a lenyeget
-
Gyuri16
senior tag
Sziasztok!
Lenne két kérdésem.
Az első:
Írjunk függvényt, amely az 1. paraméterében megkap egy
string-et, a 2. paraméterében a string '\0' karakter nélküli
hosszát, és a 3. paraméterében egy számot (m).
Ha m=0 vagy m<0, akkor adjon vissza NULL értéket.
Egyébként adjon vissza egy új string-et, amelyet s-ből állítunk
elő úgy, hogy minden m. karaktert nagybetűsen hagyunk meg belőle,
a többi karaktert kisbetűsen. Az angol ABC betűin kívül csak a
számjegy karaktereket hagyjuk meg!
Az új string maximális hossza legyen n+1.
A függvényt próbáld is ki konkrétan egy main() programban.
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
char *szoveg(char *s, int n,int m)
{
int i,k=0;
char *t;
t=(char*)calloc(n+1,sizeof(char));
if (m<=0)
return NULL;
for (i=0;i<n;i++)
{
if (isalnum(s[i]))
{
if (((i+1)%m)==0)
t[k++]=toupper(s[i]);
else
t[k++]=tolower(s[i]);
}
}
t[k]='\0';
return t;
}
int main()
{
char s[]="TesZtSzoveg19SzovegTeSZt**éáéáéá43242SzovegszoveGszoVeg323",*s2;
s2=szoveg(s,strlen(s),3);
puts(s2);
system("PAUSE");
return 0;
}A karaktertömb deklarálásánál mire szolgál *s2 mutató?
A második:
//7. Másold át a listaelemeket a t tömbbe!
int *masol(LISTA list){
ELEM *e;
int n = elemszam(list), idx = 0;
int *t=(int*)malloc(n * sizeof(int));
//Járd be a láncot a szokott módon. A cikluson belül másold az elemet, és növeld a tömb indexet!
for( e = list.fej;e;e=e->kov)
{
t[idx]=e->adat;
++idx;
}
return t;
}
Hogyan tudom kiíratni a tömb összes elemét?
A karaktertömb deklarálásánál mire szolgál *s2 mutató?
ezt az egy sort:
char s[]="TesZtSzoveg19SzovegTeSZt**éáéáéá43242SzovegszoveGszoVeg323",*s2;
at lehet irni igy is:char s[]="TesZtSzoveg19SzovegTeSZt**éáéáéá43242SzovegszoveGszoVeg323";
char *s2;deklaralsz egy char tombot (s), es egy mutatot charra (s2). utobbi a fuggvenyed visszateresi ertekere kell
Hogyan tudom kiíratni a tömb összes elemét?
gondolom itt az a kerdes, hogy honnan tudod a dinamikus tomb nagysagat. a jo megoldas az, hogy a fuggvenyednek lesz egy pointer parametere ami visszaadja az elemek szamat. (lasd pl getline fv). -
RexpecT
addikt
Sziasztok!
Lenne két kérdésem.
Az első:
Írjunk függvényt, amely az 1. paraméterében megkap egy
string-et, a 2. paraméterében a string '\0' karakter nélküli
hosszát, és a 3. paraméterében egy számot (m).
Ha m=0 vagy m<0, akkor adjon vissza NULL értéket.
Egyébként adjon vissza egy új string-et, amelyet s-ből állítunk
elő úgy, hogy minden m. karaktert nagybetűsen hagyunk meg belőle,
a többi karaktert kisbetűsen. Az angol ABC betűin kívül csak a
számjegy karaktereket hagyjuk meg!
Az új string maximális hossza legyen n+1.
A függvényt próbáld is ki konkrétan egy main() programban.
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
char *szoveg(char *s, int n,int m)
{
int i,k=0;
char *t;
t=(char*)calloc(n+1,sizeof(char));
if (m<=0)
return NULL;
for (i=0;i<n;i++)
{
if (isalnum(s[i]))
{
if (((i+1)%m)==0)
t[k++]=toupper(s[i]);
else
t[k++]=tolower(s[i]);
}
}
t[k]='\0';
return t;
}
int main()
{
char s[]="TesZtSzoveg19SzovegTeSZt**éáéáéá43242SzovegszoveGszoVeg323",*s2;
s2=szoveg(s,strlen(s),3);
puts(s2);
system("PAUSE");
return 0;
}A karaktertömb deklarálásánál mire szolgál *s2 mutató?
A második:
//7. Másold át a listaelemeket a t tömbbe!
int *masol(LISTA list){
ELEM *e;
int n = elemszam(list), idx = 0;
int *t=(int*)malloc(n * sizeof(int));
//Járd be a láncot a szokott módon. A cikluson belül másold az elemet, és növeld a tömb indexet!
for( e = list.fej;e;e=e->kov)
{
t[idx]=e->adat;
++idx;
}
return t;
}
Hogyan tudom kiíratni a tömb összes elemét?
-
!wannabe
tag
en meg nem foglalkoztam vele, csak egyszer utanaolvastam egy kicsit. nemtudom mibol tanulsz, de ahogy lattam sok helyen ezt(magyar forditas), vagy az eredetit ajanljak. en majd nyaron akarnek valami 'egyszerubb' progit osszetakolni. (meg nem tudom, hogy c vagy c++) esetleg, ha van valami jegyzeted azt nyugodtan linkeld be, szivesen fogadom.
Jaja ezeket ismerem, azért kösz
-
!wannabe
tag
Legtöbbször Geany vagy csak terminal + text editor combo. ZH-kon Eclipse a kötelező. MIndegyik jó. A kisebb feladatokra próbálgatásokra szerintem érdemes egy könnyedebb IDE-t használni vagy szövegszerkesztőt. Komolyabb projekthez persze komolyabb IDE.
-
#23538816
törölt tag
Ti milyen c fordítót használtok, melyik a legjobb?
-
j0k3r!
őstag
en meg nem foglalkoztam vele, csak egyszer utanaolvastam egy kicsit. nemtudom mibol tanulsz, de ahogy lattam sok helyen ezt(magyar forditas), vagy az eredetit ajanljak. en majd nyaron akarnek valami 'egyszerubb' progit osszetakolni. (meg nem tudom, hogy c vagy c++) esetleg, ha van valami jegyzeted azt nyugodtan linkeld be, szivesen fogadom.
-
!wannabe
tag
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <graphics.h>
#include <process.h>
main()
{
int gdrv,gmde;
clrscr();
void INITGRAPH();
{
registerbgidriver(EGAVGA_driver);
detectgraph(&gdrv,&gmde);
initgraph(&gdrv,&gmde,"");
}
getch();
restorecrtmode();
}Borland C alatt így lehet elővarázsolni a grafikus módot. Az alattad író fórumtárs meg leírta az algoritmust.
moha 21, nagyon állat az avatarod!
-
!wannabe
tag
Undorító dolog ez a socket progrramming vagy csak én nem látom benne a szépségét?!
-
dabadab
titán
A castolás tulajdonképpen típus ráerőszakolása. Fontos, hogy C-ben ilyenkor (pointerek esetén) nincs semmi konverzió, vagyis a gép elhiszi neked, hogy az a pointer valóban az amire castolod.
Nagyon rossz példa
const char *text = "1234";
int x = *(int*)text;Ebben az esetben x nem 1 lesz, hanem az "1234" memória leképezésének int megfelelője. Ez ascii kódban a 0x31 0x32 0x33 0x34 byte sorozatot jelenti, ami 32 bites little-endian rendszerben integerként 0x34333231=875770417. Tehát még csak nem is hasonlít arra, amit szegény kezdő programozó gondolt. (Már ha nem a még rosszabb int x = (int)text; formát próbálta.)
A castolást lehetőség szerint kerülni kell, de bizonyos esetekben szükséges rossz. Most hirtelen jó példát nem is tudok rá hozni.
Tipikus hibát viszont igen: ez a void* oda-vissza castolása. Szabvány C-ben erre semmi szükség, mivel a konverzió mind a két irányba automatikus. Példák:
Rossz
int *p = (int*)malloc(10 * sizeof(int));
fwrite((void*)p, sizeof(int), 10, stdout);Helyes
int *p = malloc(10 * sizeof(int));
fwrite(p, sizeof(int), 10, stdout);Bizonyos API függvényekhez viszont szükséges castolni, például a bind ilyen:
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
Itt az addr argumentum valójában egy sereg struct valamelyike lehet, a címtartománytól függően, például sockaddr_un unix sockethez, sockaddr_in internet sockethez, stb. Ilyenkor castolni kell. Mivel semmi garancia nincs cast esetén, ezért ez semmivel sem jobb mintha az argumentum típusa egyszerűen void* lenne (amihez nem kellene cast), de sajnos a szabványba ez került be. Példa:
struct sockaddr_un my_addr;
...
my_addr.sun_family = AF_UNIX;
bind(sfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr_un));MOD: ja meg az accept is ilyen, azt meg te is használtad

"Mivel semmi garancia nincs cast esetén, ezért ez semmivel sem jobb mintha az argumentum típusa egyszerűen void* lenne"
De, annyival azért jobb, hogy a függvény deklarációjából látszik, hogy ott valamiféle sockaddr struktúrát vár: ne felejtsd el, hogy a kódot nem csak a fordítóprogram, hanem a programozó is olvassa

-
Jester01
veterán
A castolás tulajdonképpen típus ráerőszakolása. Fontos, hogy C-ben ilyenkor (pointerek esetén) nincs semmi konverzió, vagyis a gép elhiszi neked, hogy az a pointer valóban az amire castolod.
Nagyon rossz példa
const char *text = "1234";
int x = *(int*)text;Ebben az esetben x nem 1 lesz, hanem az "1234" memória leképezésének int megfelelője. Ez ascii kódban a 0x31 0x32 0x33 0x34 byte sorozatot jelenti, ami 32 bites little-endian rendszerben integerként 0x34333231=875770417. Tehát még csak nem is hasonlít arra, amit szegény kezdő programozó gondolt. (Már ha nem a még rosszabb int x = (int)text; formát próbálta.)
A castolást lehetőség szerint kerülni kell, de bizonyos esetekben szükséges rossz. Most hirtelen jó példát nem is tudok rá hozni.
Tipikus hibát viszont igen: ez a void* oda-vissza castolása. Szabvány C-ben erre semmi szükség, mivel a konverzió mind a két irányba automatikus. Példák:
Rossz
int *p = (int*)malloc(10 * sizeof(int));
fwrite((void*)p, sizeof(int), 10, stdout);Helyes
int *p = malloc(10 * sizeof(int));
fwrite(p, sizeof(int), 10, stdout);Bizonyos API függvényekhez viszont szükséges castolni, például a bind ilyen:
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
Itt az addr argumentum valójában egy sereg struct valamelyike lehet, a címtartománytól függően, például sockaddr_un unix sockethez, sockaddr_in internet sockethez, stb. Ilyenkor castolni kell. Mivel semmi garancia nincs cast esetén, ezért ez semmivel sem jobb mintha az argumentum típusa egyszerűen void* lenne (amihez nem kellene cast), de sajnos a szabványba ez került be. Példa:
struct sockaddr_un my_addr;
...
my_addr.sun_family = AF_UNIX;
bind(sfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr_un));MOD: ja meg az accept is ilyen, azt meg te is használtad

-
!wannabe
tag
El tudná valaki magyarázni nekem akár egy példán keresztül, hogy mit jelent az, hogy egy mutatót castolni kell?
Hát ha még a legjobb programozók is hibáznak akkor rendben

Szerencsére én nem török effajta babérokra csak a sulit akarom túlélni egyelőre
-
Sk8erPeter
nagyúr
Azért nem akartam mert rossz fényt vetne rám. A kód alján volt egy kikommentezett rész: while(1)
{
socklen_t struct_len = sizeof(struct sockaddr_in);
struct sockaddr_in client_addr;
int client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &struct_len);
printf("Kapcsolódott egy kliens\n");
}Ez azért lett kikommentezve mert error volt az első sorban. Azt gondoltam, hogy enélkül is futnia kellene egyébként a servernek azért tettem fel itt a kérdést. Syntax error volt csak benne, tehát egy elírás, de persze csak akkor tűnt fel amikor már nem tudtam szerkeszteni az előző posztomat. Ezért mondtam, hogy ne gondolkodjatok már rajta.
Jah és még annyi, hogy ez nem echo server mert még nem adja vissza amit beírunk az majd később lesz.
Értem. Egyébként nem vet rád rossz fényt, mivel gyorsan rájöttél a saját hibádra, és a legjobb programozó is hibázik, úgyhogy nem gond, előfordul.

-
!wannabe
tag
Mi volt a megoldás?
Nem mintha átnyálaztam volna a kódodat, csak akkor már illik leírni, ha bedobsz a fórumba egy kérdést, és közben megoldódott.
Azért nem akartam mert rossz fényt vetne rám. A kód alján volt egy kikommentezett rész: while(1)
{
socklen_t struct_len = sizeof(struct sockaddr_in);
struct sockaddr_in client_addr;
int client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &struct_len);
printf("Kapcsolódott egy kliens\n");
}Ez azért lett kikommentezve mert error volt az első sorban. Azt gondoltam, hogy enélkül is futnia kellene egyébként a servernek azért tettem fel itt a kérdést. Syntax error volt csak benne, tehát egy elírás, de persze csak akkor tűnt fel amikor már nem tudtam szerkeszteni az előző posztomat. Ezért mondtam, hogy ne gondolkodjatok már rajta.
Jah és még annyi, hogy ez nem echo server mert még nem adja vissza amit beírunk az majd később lesz.
-
Sk8erPeter
nagyúr
-
!wannabe
tag
Sziasztok,
Van egy kódom ami ugyan lefut warning nélkül mégsem működik megfelelően. Ez egy echo server megvalósítás és a 8000-es porton kellene tudnom hallgatózni, de mégsem inditja el a servert amikor lefuttatom.
Most ismerkedek a témával tehát attól tartok eléggé triviális a válasz a hozzább értők számára.
Már nem aktuális...

-
!wannabe
tag
Sziasztok,
Van egy kódom ami ugyan lefut warning nélkül mégsem működik megfelelően. Ez egy echo server megvalósítás és a 8000-es porton kellene tudnom hallgatózni, de mégsem inditja el a servert amikor lefuttatom.
Most ismerkedek a témával tehát attól tartok eléggé triviális a válasz a hozzább értők számára.
-
#90999040
törölt tag
Igen, így még valóban lehet optimalizálni.

Jester01: valóban igazad volt, hogy a feltétel módosításával működőképes a kód. Mondjuk első nekifutásra nem is néztem meg olyan részletesen a #2497-es hozzászólásomban említett okok miatt, inkább működő alternatívákat kerestem, és csak a #2498-as hozzászólásod után tértem vissza az eredeti kódra.
-
kingabo
őstag
Szerintem ez a feltétel megfordításával sem lesz jó.
1. Keveri az osztandót és az osztót.
2. Miért kell ehhez 3 ciklus, mikor 2 bőven elég?
A külső ciklus az osztandót növeli, a belső pedig az adott osztandó mellett az osztót.Ha mindenképpen do-while, akkor én így csinálnám:
int main() {
int n, oszto, osztando, prim;
printf("Melyik szamig nezzem meg?");
scanf("%d", &n);
for (osztando=2; osztando<=n; osztando++) {
prim=0;
oszto=1;
do {
if (osztando % oszto == 0) {prim++;}
oszto++;
} while ((prim<=2) && (oszto<=osztando));
if (prim==2) printf("%d\n", osztando);
}
return 0;
}Egyébként pedig így:
int main()
{
int osztando,oszto,k,hatar;
printf("Melyik szamig nezzem meg? ");
scanf("%d",&hatar);
for (osztando = 2;osztando <= hatar; osztando++) {
k=0;
for (oszto = 1; oszto <= osztando; oszto++) {
if (osztando % oszto == 0) {k++;}
if (k > 2) {break;}
}
if (k==2) {printf("%d\n",osztando);}
}
return 0;
}Sőt 3-tól mehetne a cv növelés 2-vel is, mert fölösleges a többi páros számot vizsgálni.

Új hozzászólás Aktív témák
-
2600 - 2501
6397 - 6001 6000 - 4001 4000 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1901 1900 - 1801 1800 - 1701 1700 - 1601 1600 - 1501 1500 - 1401 1400 - 1301 1300 - 1201 1200 - 1101 1100 - 1001 1000 - 901 900 - 801 800 - 701 700 - 601 600 - 501 500 - 401 400 - 301 300 - 201 200 - 101 100 - 1
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Parkside szerszám kibeszélő
- Nem indul és mi a baja a gépemnek topik
- Samsung Galaxy Felhasználók OFF topicja
- Xbox Series X|S
- Bluetooth hangszórók
- Forza sorozat (Horizon/Motorsport)
- Eredeti játékok OFF topik
- sziku69: Fűzzük össze a szavakat :)
- Építő/felújító topik
- Okos otthon - Home Assistant, openHAB és más nyílt rendszerek
- További aktív témák...
- BESZÁMÍTÁS! Sony PlayStation 5 Slim 1TB SSD lemezes konzol garanciával hibátlan működéssel
- Dell 7430 2in1 360 áthajtós touchos! i7-1265U 16GB 1000GB SSD FHD IPS 1 év gar
- BESZÁMÍTÁS! AsRock H510M i5 10400 32GB DDR4 512GB SSD RTX 2060 Super 8GB Rampage SHIVA FSP 500W
- ÚJ Asus TUF A14 FA401 -14"2.5K 165Hz - Ryzen 7 260 - 32GB - 1TB - Win11-RTX 5060 -2 év gari - MAGYAR
- BESZÁMÍTÁS! LENOVO Legion Pro 5 GAMER notebook - R9 8945HX 32GB DDR5 1TB SSD RTX 5060 8GB WIN11
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

![;]](http://cdn.rios.hu/dl/s/v1.gif)





Majd este 
Először arra gondoltam, az úgy nem jó, mert nem rendezett a tömb, aztán rájöttem, hogy ez baromság, mert egyszer már az elejétől végigszaladgáltunk, minek újból, kicsit fáradt vagyok... 




