Hirdetés

2024. június 15., szombat

Gyorskeresés

Hozzászólások

(#4251) tototos válasza buherton (#4250) üzenetére


tototos
őstag

Csak azt nem értem, hogy miért a felszabadításnál jön a hiba? Az allokáció sikeresen lefut, csak fel akarnám szabadítani a területet. Na jó most irány haza mert már nem tudok gondolkodni.
Olyan mintha olyan címet akarnák felszabadítani amit nem lehet.

(#4252) tototos


tototos
őstag

Van különbség a két sor között?.

char** tokens;

free(*(tokens + i));
vs.
free(tokens[i]);

(#4253) buherton válasza tototos (#4252) üzenetére


buherton
őstag

Nincs. Teljesen azonos a kettő, és mivel azonos a kettő, ezért a fordító ezt is elfogja fogadni:

free([i]tokens);

mert ezt így fogja feloldani:

free(*(i + tokens));

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!

(#4254) tototos válasza buherton (#4253) üzenetére


tototos
őstag

Köszönöm, akkor még mindig értetlenül állok a free halál miatt. :F
Valamiért szar címet akar felszabadítani csak nem tudom, hogy miért.

(#4255) tototos


tototos
őstag

Sziasztok!

Egy újabb érdekes esettel fordulok hozzátok.
A split függvény helyett, egyik kollégám ajánlotta a sscanf függvényt, ami nekem pont tökéletes, lenne ha működne úgy ahogy szeretném.

Adott a következő char[80] line = "48,8,10;\n\000\000age\000\070\000\060\000;\n\000\000;\n\000\000;\n\000\065,51;\r\n21,52;\r\n1, ..."

ebből s zámomra szükséges rész az ez: 48,8,10;\n\0

na ezt szeretném beolvasni így:
ret = sscanf(line,"%hhu%*1c%hhu%*1c%hhu;\n",&frameID,&frameLength,&frameDelay);
a ret értéke 3, de a frameID és a frameLength 0 a frameDelay az 10.

Már próbáltam többféle képpen de egyszerűen nem akar jó lenni :S

(#4256) Jester01 válasza tototos (#4255) üzenetére


Jester01
veterán

Valami mágia van, ez nekem így ahogy van működik.

Jester

(#4257) skylaner válasza tototos (#4255) üzenetére


skylaner
senior tag

Itten is jó: [link]

[ Szerkesztve ]

(#4258) tototos válasza Jester01 (#4256) üzenetére


tototos
őstag

Hát ettől tartok én is :F Amúgy az érdekesség, hogy vannak olyan sorok ahol csak 2 szám van, ott tökéletesen működik.

(#4259) erahurka


erahurka
félisten

Sziasztok!

Félévi feladatot csinálok suliba, de elakadtam. Az az alapvető probléma, hogy külső fájlból szeretnék adatokat beolvasni, de amíg nincs létrehozva a külső fájl hibát dob (segmentation fault (core dumped)).

Van valami megoldás arra, hogy amíg nincs külső fájl addig ugorja át a beolvasást? Egy if-fel esetleg lehet-e ellenőrizni hogy megvan-e ez a fájl, vagy valami hasonló egyszerű dolog?

Ha más ötletetek van arra is vevő vagyok, csak értsem is (nem vagyok nagy c guru).

:R

(#4260) gygabor88 válasza erahurka (#4259) üzenetére


gygabor88
tag

(#4261) 0xmilan


0xmilan
addikt

Üdv, láncolt listába szeretnék beolvasni fájlból.
Így néz ki a struktúra:
typedef struct Kerdes{
int szint;
char *ker, *a, *b, *c, *d;
char valasz;
struct Kerdes *kov;
} Kerdes;

és a függvény:

Kerdes* beolvas(Kerdes *lista){
FILE *fp;
Kerdes *uj;
char c;
uj=(Kerdes*) malloc(sizeof(Kerdes));
lista=(Kerdes*) malloc(sizeof(Kerdes));
char tempk[256], tempa[50], tempb[50], tempc[50], tempd[50];
fp = fopen("loim.txt", "rt");
if (fp == NULL) printf("Nem sikerült megnyitni!");
else{
while(!feof(fp)){
fscanf(fp, "%d %s %s %s %s %s %c\n", &uj->szint, tempk, tempa, tempb, tempc, tempd, &uj->valasz);
uj->ker=(char*) malloc(strlen(tempk)*sizeof(char));
strcpy(lista->ker,tempk);
uj->a=(char*) malloc(strlen(tempa)*sizeof(char));
strcpy(lista->a,tempa);
uj->b=(char*) malloc(strlen(tempb)*sizeof(char));
strcpy(lista->b,tempb);
uj->c=(char*) malloc(strlen(tempc)*sizeof(char));
strcpy(lista->c,tempc);
uj->d=(char*) malloc(strlen(tempd)*sizeof(char));
strcpy(lista->d,tempd);
uj->kov=lista;
lista=uj;
}
}
fclose(fp);
return lista;
}

és így hívnám meg main-ben:
Kerdes *lista=NULL;
beolvas(lista);

Hiba nélkül lefut, de amint elindul, le is fagy. Mi lehet a gond?
(életem első fájlból olvasása lenne C-ben. korábban csináltam már C#-ban, de ott ugye nem kellett a dinamikus dolgokkal szórakozni. amúgy azt az infót kaptam, hogy ha így elszáll, akkor az pointerek miatt van, de fogalmam sincs hogy hol.)

[ Szerkesztve ]

(#4262) gygabor88 válasza 0xmilan (#4261) üzenetére


gygabor88
tag

Ket hibat latok elsore. Az egyik, hogy az "uj" char* elemeinek foglalsz helyet mallockal, de a "lista" inicializalatlan elemeibe probalsz masolni strcpyvel. A masik, hogy az ilyen inicializalasoknal
uj->ker=(char*) malloc(strlen(tempk)*sizeof(char));

nem veszed figyelembe, hogy majd a lezaro \0-nak is kellene egy hely a karakterlanc vegen.

+ nincs ertelme NULL-lal meghivni a beolvas fuggvenyt, bar ebben az esetben nem emiatt mukodik rosszul a kod.

[ Szerkesztve ]

(#4263) 0xmilan válasza gygabor88 (#4262) üzenetére


0xmilan
addikt

Tényleg, köszi! Nem is a listaba, hanem az uj-ba kellett volna beolvasnom, meg strcpy-zni aztán onnan meg a lista=uj és akkor elvileg az elejére fűződik.

átírtam az adott részt így:
uj->ker=(char*) malloc((strlen(tempk)+1)*sizeof(char));
lista->ker=(char*) malloc((strlen(tempk)+1)*sizeof(char));
strcpy(uj->ker,tempk);
uj->ker[strlen(tempk)+1]='\0';
uj->a=(char*) malloc((strlen(tempa)+1)*sizeof(char));
lista->a=(char*) malloc((strlen(tempk)+1)*sizeof(char));
strcpy(uj->a,tempa);
stb
.
.

és akkor a végére mindig be kéne szúrni a \0-t így?:
uj->ker[strlen(tempk)+1]='\0';

Ha jól tudom azért kell NULL-lal hívni, mert akkor az lesz a vége és így tudom bejárni, hogy a nullpointer a kilépési feltétel.

(ja amúgy ugyanúgy lefagy)

[ Szerkesztve ]

(#4264) gygabor88 válasza 0xmilan (#4263) üzenetére


gygabor88
tag

uj->ker[strlen(tempk)+1]='\0';

Ezeken a helyeken tulindexeled a tombot. Ha a tomb strlen(tempk) + 1 elembol all, akkor az utolso elemre az strlen(tempk) indexszel tudsz hivatkozni. Amugy a fenti explicit \0 iras nem szukseges, mert az strcpy a lezaro \0-t is atmasolja. Tovabba, ha mar ismert elore a stringek maximalis hossza, mint a temp valtozoid eseten, akkor erdemes lenne fix hosszal tarolni oket a struct-ban es egybol ezekbe olvasni. Igy megkimelned magad egy csomo pointerezestol es masolgatastol.
+ erdemes lenne megismerkedned valami debuggerrel, amivel sorrol sorra lepkedve tudnad futtatni a programodat, hogy az ilyen programmeghalos hibakat konnyebben megtalald. Kezdetben boven eleg lesz egy alap gdb tutorial a break, c, n, s parancsokkal

(#4265) 0xmilan válasza gygabor88 (#4264) üzenetére


0xmilan
addikt

Ezer köszi segítséget!
A túlindexelést egy levlistán olvastam, aztán bele se gondoltam, hogy hülyeség.
..Pont az a baj, hogy nem ismert a stringek hossza, és - bár megadhatnék egy max. hosszt - , a lényeg, hogy egy bájttal se használjak több memóriát, mint amennyi tényleg kell.

Kösz a tippet a dubeggerre. Korábban már használtam, de elszoktam tőle, aztán megmutatta, hogy működik a beolvasás, csak nem úgy, ahogy én azt gondoltam.
tempk-ba egy kérdést várnék (legyenönismilliomost írok), amiben ugye több szóköz van, én meg azt hittem, hogy majd kitalálja meddig tart a kérdés. :DDD Így utólag elég hülyének érzem magam.
Szóval elkezdte szépen bepakolni a kérdés egyes szavait a válaszok sztringjeibe.
Ezek szerint itt az fscanf nem is használható..? Mindenképpen karakterenként kéne beolvasni?

Olyat tudok, hogy karaktert vizsgálni, azon belül meg stringet olvasni?
pl így:

while (fgetc(fp) != '9'){ - elvileg a TAB kódja
fscanf(fp, "%s", &tempk);
...+ mindig hozzáfűzögetni az új szavakat;
}

(#4266) Jester01 válasza 0xmilan (#4265) üzenetére


Jester01
veterán

A 9 az a tab kódja, de akkor nem szabad aposztrófok közé tenni. Vagy írd úgy, hogy '\t'.

Jester

(#4267) 0xmilan válasza Jester01 (#4266) üzenetére


0xmilan
addikt

Köszi, azóta meglett a '\t'. Úgy néz ki karakterenkénti olvasás lesz belőle..

(#4268) Jester01 válasza 0xmilan (#4267) üzenetére


Jester01
veterán

Ne felejtsd el a fájl végét (és az esetleges hibákat) is kezelni. Előbbire persze az első futtatásnál magad is rá fogsz jönni ;)

Jester

(#4269) skylaner válasza 0xmilan (#4261) üzenetére


skylaner
senior tag

A láncolt listád sem úgy működik szerintem, mint ahogy te elvárnád.
Valahogy így nézhet ki.

(#4270) tototos válasza Jester01 (#4256) üzenetére


tototos
őstag

Hát debug sroán kiderült, hogy valamiért belerondít a memóriába 3 paraméter esetén. Abban maradtunk hogy temporális int változókba beolvasom és utána töltöm be csak a végleges helyére.

(#4271) randi


randi
újonc

Üdv mindenkinek!
Ebben az évben kezdtem foglalkozni C programozással, és a legutolsó házimmal nem boldogulok. A feladat a következő:
"Írjon cenzúrázó programot. A program beolvas egy mondatot, majd egy tiltott karaktersorozatot. A mondatban kicseréli a karaktersorozat minden előfordulását 3 csillag karakterre (a cenzúrázott szó helyett három csillagot rajzol). Végül kiírja a cenzúrázott mondatot.

A feladat megoldása közben csak a gets, scanf és a prinf függvények használhatók. NEM szabad előre megírt stringkezelő függvényeket használni.

Például:

Miben cenzurazzak?

Az ipafai papnak fapipaja van, tehat az ipafai papi pipa papi fapipa.

Tiltott szo? pa

A cenzurazott mondat:

Az i***fai ***pnak fapi***ja van, tehat az i***fai ***pi pi*** ***pi fapi***.

Press Enter to return to Quincy..."

Odáig eljutottam, hogyha megtalálja a tiltott szót, akkor a karaktereket csillagra cseréli. Sőt a mondatot is arrébb tudtam másolni. Csak az a baj, hogy annyi csillagot ír, ahány karakterből áll a tiltott szó, és nem - a feladatban megadott - hármat.
Ha valaki tudna segíteni, annak nagyon megköszönném. Ja, és nem vagyok már mai csirke :)

(#4272) buherton válasza randi (#4271) üzenetére


buherton
őstag

Nem tudom, hogy hogyan működik a programod, de talán jó irány lenne, ha egymásik karaktertömbbe rakosgatnád át pl. strncat-el, úgy hog ha "pa" van, akkor "***" teszel a helyére. Így a karaktertömbös shiftelést megúszoda, ami összességében több időbe kerül.

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!

(#4273) Jester01 válasza buherton (#4272) üzenetére


Jester01
veterán

Ha nem kötelező a memóriában előállítani a cenzúrázott verziót akkor a csillagozást a kiírásba is bele lehet tenni. Egyébként viszont vigyázni kell a tömb méretezéssel.

[ Szerkesztve ]

Jester

(#4274) 0xmilan válasza skylaner (#4269) üzenetére


0xmilan
addikt

Köszi, jogos.
Megnéztem egy régebbi példát, és annak mintájára külön függvénnyel fűztem a lista elejére.
Most így néz ki a működő verzió:
...
while(!feof(fp)){
fgets(temp, 256, fp);
sscanf(temp, "%d %[^\t] %[^\t] %[^\t] %[^\t] %[^\t] %c", &szint, &tempk, &tempa, &tempb, &tempc, &tempd, &valasz);
lista=elejere(lista, szint, tempk, tempa, tempb, tempc, tempd, valasz);
}
}

...
Kerdes* elejere(Kerdes *lista, int szint, char* tempk, char* tempa, char* tempb, char* tempc, char* tempd, char valasz){
Kerdes *uj;
uj=(Kerdes*) malloc(sizeof(Kerdes));
uj->szint=szint;
uj->ker=(char*) malloc((strlen(tempk)+1)*sizeof(char));
strcpy(uj->ker,tempk);
uj->a=(char*) malloc((strlen(tempa)+1)*sizeof(char));
strcpy(uj->a,tempa);
uj->b=(char*) malloc((strlen(tempb)+1)*sizeof(char));
strcpy(uj->b,tempb);
uj->c=(char*) malloc((strlen(tempc)+1)*sizeof(char));
strcpy(uj->c,tempc);
uj->d=(char*) malloc((strlen(tempd)+1)*sizeof(char));
strcpy(uj->d,tempd);
uj->valasz=valasz;
uj->kov=lista;
return uj;
}

Most fgets-szel beolvasok egy sort, aztán sscanf-fel meg tabulátoronként darabolom és aztán rakom új listaelembe.
A listának meg nem is kellett volna helyet foglalni, mert az csak egy pointer..
Még egyszer kösz a segítséget mindenkinek!

(#4275) maathe


maathe
senior tag

Lenne itt egy kis program: [link]
A gondom az, hogy ha üres sort ütök, akkor ugye kiírja, hogy: Üres sort ütött, vége a bekérésnek.
Viszont ki írja azt is, hogy: A pontszamnak [%d, %d] intervallumban kell elhelyezkednie.

Valaki megtudná mondani, hogy miért? :)

(#4276) axioma válasza maathe (#4275) üzenetére


axioma
veterán

Ha jol ertem, akkor a fejedben nem az a tabulalas van meg, amit a programnak adtal. Vagyis a 45. sorban levo "else" kene legyen a tenyleges feldolgozo a'g, csak nem raktad ki a zarojeleket, es az egyedul az ott kezdodo if-re vonatkozik. Ami veget er a 48.-ban, tehat a 49.-ben levo me'g ures sor eseten is vegrehajtando.
Rakd ki az else utan a blokk-kezdest, ami vegzodik a while vege elott, a 60. sornal.
Valoszinuleg az "osszenott" else if okozta, hogy nem latod pontosan a strukturat. Ilyen egybeirt else if -et en csak akkor szoktam csinalni, ha tobb darab, 1 sorba befero rovid vizsgalat es 1 soros rovid blokk tartozik hozza, szinte egy switch tipusu egymas melletti esetfelsorolas lenne, csak mas tipusu a feltetelem. Mondjuk ilyenkor annak megfeleloen is tabulalom, tehat minden else if blokkja az egybeirastol fuggetlenul uj szintre kerul be. Minden mas esetben hasznos, ha minden nagyobb else-hez kirakod a sajat kezdo-zaro parjat. Szigorubb coding standard szerintem alapbol meg is koveteli.

[ Szerkesztve ]

(#4277) zoli03


zoli03
őstag

Hogy tudnék egy tömbből adott feltételnek (pl adott betű, vagy szám) megfelelő elemet törölni a rá következő elemek balra tolásával? Próbálgattam, de eddig sehogy se jött össze.

(#4278) Jester01 válasza zoli03 (#4277) üzenetére


Jester01
veterán

Csinálsz egy ciklust ami végigmegy a tömbön (ez lesz a forrás pozíció) és egy változót ami a cél pozíciót tárolja. Ha az adott elemet meg kell tartani, akkor a forrásból a célba másolod és növeled a cél pozíciót, különben nem.

dst = 0;
for(src = 0; src < len; src++) {
if (!pred(a[src])) a[dst++] = a[src];
}

[ Szerkesztve ]

Jester

(#4279) Peter789


Peter789
senior tag

Sziasztok!

Hogyan lehet egy float változót egy string-be átrakni megformázva? Valami hasonlót keresek, mint amit itt csinál a printf, de egy karakterlánc string-be kellene kerülnie az eredménynek amit utána fel tudok használni pl egy fájlnév megadásánál az open függvényben...

float ftmp = 19.52466;
printf("%.1f",ftmp);

kimenet: 19.5

Előre is köszönöm a választ! :R

----------------------------------------------------------------------------------------------------------------- AquAgorA ...Pál apostol nyomában:                                                                          http://fleettracker.eu/index.php/component/aquagora

(#4280) skylaner válasza Peter789 (#4279) üzenetére


skylaner
senior tag

Amit keresel az a sprintf().

(#4281) Peter789 válasza skylaner (#4280) üzenetére


Peter789
senior tag

Köszi, ez volt amit kerestem... :R

Közben felmerült egy másik kérdés is: van elegánsabb/gyorsabb megoldás több fájl egyidejű törlésére, mint a system("rm valami*") ? Vagy ki kell listázni, szűrni és egyesével törölni? A platformfüggőség nem katasztrófa, lévén hogy ez a program kizárólag openwrt-n fog futni és a fejlesztés is ubuntun zajlik, viszont az erőforrásigényt jó lenne minimalizálni amennyire lehet...

----------------------------------------------------------------------------------------------------------------- AquAgorA ...Pál apostol nyomában:                                                                          http://fleettracker.eu/index.php/component/aquagora

(#4282) superfinest


superfinest
tag

Üdv!
A C++ nyelvvel szeretnék foglalkozni, azonban nem tudom honnan kellene elkezdeni ezt az egész dolgot. Nagyon alap programokat össze tudok dobni, de ennél többre nem futja. pl.:

#include <stdio.h>
void main(){
int a, b, c;
printf("Kerek egy szamot: ");
scanf("%d", &a);
printf("Kerek meg egy szamot: ");
scanf("%d", &b);
c = a + b;
printf("A számok osszege: ");
printf("%d", c);
}

Esetleg tudtok-e olyan magyar nyelvű oldalakat, ahonnan lehetne bővíteni/fejleszteni a tudásom.

A válaszokat előre is köszönöm! :R

(#4283) kingabo válasza superfinest (#4282) üzenetére


kingabo
őstag

Hali!

Ez a C és nem a C++ topik. Másrészt felül a téma összefoglalóban könyveket, oldalakat is ajánlanak. ;)

[ Szerkesztve ]

(#4284) superfinest válasza kingabo (#4283) üzenetére


superfinest
tag

Köszönöm. Azért írtam C++ mert úgy tudom, hogy a C is a C++-on belül van és szinte egy a kettő.

[ Szerkesztve ]

(#4285) Korcsii válasza superfinest (#4284) üzenetére


Korcsii
őstag

Két külön nyelv a kettő. Más kérdés, hogy a megfelelő headerek behívásával lehet használni a C-s függvényeket is C++ alatt. Éppen emiatt a fejlesztőkörnyezetek is általában támogatják mindkettőt.

Az általad írt példakód egyértelműen C.

Milyen megfontolásból szeretnél elkezdeni C nyelven tanulni?

[ Szerkesztve ]

(#4286) buherton válasza superfinest (#4284) üzenetére


buherton
őstag

Ebben nagyon is tévedsz. Az egy dolog, hogy a C++ visszafelé kompatibilis a C-vel, de ezzel nagyjából be is fejeződött a kapcsolat/hasonlóság. Döntsd el, hogy C-ben vagy C++-ban szeretnél-e megtanulni programozni, és a jövőben ne keverd a kettőt. Ha komolyan akarsz programozni, akkor a C++-t érdemes megtanulni.

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!

(#4287) kispx válasza superfinest (#4284) üzenetére


kispx
addikt

Nem egy a kettő, sok különbség van.

(#4288) superfinest


superfinest
tag

Üdv!
Elég sok szabad időm van. C-ben szeretnék megtanulni programozni, mivel úgy gondolom, hogy ez jó alapot ad az egyszerűbb nyelvekhez. pl. Java, Lua, Python-hoz
Programozni csupán hobby-ból szeretnék, mivel eléggé megtetszett ez az egész dolog. Olvastam pár elméleti dolgot a C-vel kapcsolatban, csupán a gyakorlatba vannak gondok amikor el kell kezdeni tényleges programozni. Jelenleg ezeket tanulmányozom:

[link1]
[link2]

Magyarázatot elolvasom és logika/megjegyzés alapján próbálom gyakorlatba csinálni a leírtakat.
Plusz egy-két könyvet is fogok kölcsönözni az alapok megtanulásához.
Csak el kellene kezdenem, valahol. :D De minden kezdet nehéz ugyebár.

[ Szerkesztve ]

(#4289) buherton válasza superfinest (#4288) üzenetére


buherton
őstag

Miért nem kezdesz akkor Java-val? Nem sok hasonlóság van a C és a Java nyelv között se. Ha megtanulod a C-t, akkor a Java-nál újra kell tanulnod még egyszer annyit, de inkább többet, mert teljesen más a paradigma. Bocsi de szerintem teljesen logikátlan, amit csinálsz. Ráadásul olyannal nyelvvel kezded, amire 99% az esély nem kell majd neked.

Én C-t tanultam, mert abban szerettem volna programozni, és abban is kell programoznom a munkahelyen.

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!

(#4290) superfinest válasza buherton (#4289) üzenetére


superfinest
tag

Igazából nekem 1-2 dologhoz kellene a programozás. pl.: San Andreas Multiplayer scripteléshez és/vagy Java alapú dolgok programozásához, úgyhogy tényleg hasznosabb lenne a Java, Pawno. Nemtudom, hogy ezt a 2 nyelvet lehet-e párhuzamosan tanulni.
Azért gondoltam először a C nyelvet tanulom, mert ez sok nyelv alapja "elvileg", javíts ha rosszul tudom.

(#4291) axioma válasza superfinest (#4290) üzenetére


axioma
veterán

Hiaba alap, a rae'pules pont azert van, mert pluszt nyujtanak a tovabbi nyelvek. Csak egy tokegyszeru pelda: dinamikus (futas kozben valtozo hosszu) tomb, lista, vagy barmi megvalositasa. Ha ansi C-ben megirod nullarol, megtanulsz egy csomo alacsonyabb szintu kezelest es kezdokent ve'rt izzadsz hogy jol kovesd le, jol foglalj helyet es szabadits fel stb. mig java-ban meg letrehozol egy (mondjuk) ArrayList-et, azt annyi. Nem beszelve arrol, hogy ha C-ben levo kodot kell egy nem kimondottan szepen kodolo embertol visszafejtene'd, az megint egy nyomozassal feler (persze java-ban is lehet ilyet elkovetni, foleg ha 2-3 betus valtozoneveket es/vagy mas nyelvu roviditeseket hasznal - multkor neztem egy ruszki programozo versenymegoldasat ahol ugye nincs ido csicsazni, eleg erdekes volt visszafejteni a core algot, de C-ben pont a nagyon nagy rugalmassag miatt nagyon nagy randasagot is el lehet kovetni ugy, hogy helyes, csak attekinthetetlen).

[ Szerkesztve ]

(#4292) Ereshkigal válasza superfinest (#4290) üzenetére


Ereshkigal
őstag

Ha belátható időn belül "csak" kedvtelésből akarsz programozgatni, akkor én személy szerint a Java-t vagy a C#-ot javaslom neked. Csomó mindent "elébed tesznek", csak használni kell. Könnyebben, gyorsabban fogsz leprogramozni olyan dolgokat, amikkel C-ben rengeteg időd elmenne...
Nem elfogultságból ajánlom ezt, mert az én szívem a C és a C++ felé húz, na de én sejtautomatákat programozok + sokat számolok. :U

(#4293) fordfairlane válasza superfinest (#4290) üzenetére


fordfairlane
veterán

Azért gondoltam először a C nyelvet tanulom, mert ez sok nyelv alapja "elvileg", javíts ha rosszul tudom.

Inkább csak hasonló szintaktikájúak bizonyos vezérlési szerkezeteket illetően. Jobban jársz magasabb szintű programnyelvvel, szerintem, hacsak nem hardverközeli programozást szeretnél megtanulni, mert akkor a gépközelibb C a jobb választás.

[ Szerkesztve ]

x gon' give it to ya

(#4294) kingabo válasza superfinest (#4288) üzenetére


kingabo
őstag

A C-hez és a Javahoz gyakorlatilag teljesen másmilyen gondolkodás mód szükséges, hiába vannak közös nyelvi elemek. Ahogy már mások is írták, emiatt nem lesz sok előnyöd a C megtanulása után ahhoz képest, aki egyből a Javaval kezd, viszont sok időd elmehet vele és valószínű vért fogsz izzadni. Ráadásul sok a kezdők szemében "hibára" vagy nehézségre a java már vagy tartalmaz valamilyen nyelvi elemet, vagy megoldást, amikkel az általad kitűzött célokat könnyebben és gyorsabban el tudod érni.

(#4295) bucsupeti válasza superfinest (#4290) üzenetére


bucsupeti
senior tag

Ahogy a többiek írták, rosszul gondolkodsz a dologról. Olyan mintha szeretnél egy sportautóval megtanulni száguldani, de előtte a biztonság kedvéért veszel egy markológépet amivel tök sok mindent meg lehet csinálni, és azon kezdesz tanulni vezetni, hiszen annak is négy kereke van.
Ha modern dolgokat akarsz akkor valamilyen objektum orientált nyelvet válassz, amihez van valamilyen jó framework. Ilyen nyelvek/környezetek a Java, C#, és a C++ is, de előtte keményen oop elméletet kell elsajátítani.
Ha rendszerprogramozás a cél akkor tökéletes a C.

Ha egyszerüen csak meg akarod tanulni a programozás alapjait, vezérlési szerkezeteit, akkor jó lehet a Pascal.

"Nem gond ha nem vágod a párologtatók bináris nyelvét..."

(#4296) alapz@j válasza bucsupeti (#4295) üzenetére


alapz@j
tag

Programozást nulláról tanulni szerintem az interpretált nyelvek a legjobbak, mert nem kell a fordítás nyűgjével és az esetleges hibák komolyabb következményivel foglalkozni: Python, Perl, Ruby, Lua, bár ez utóbbi kettő nem feltétlenül jó kezdőnyelv. Esetleg JavaScript és akkor egyből GUI is van :)

Ha az alapok megvannak, akkor lehet abban gondolkodni, hogy a kitűzött célhoz melyik nyelv illene e legjobban.

(#4297) bucsupeti válasza alapz@j (#4296) üzenetére


bucsupeti
senior tag

Én azt vettem észre hogy akik programozást kezdenek tanulni azok közül sokan nem tudják hogy mi is az a program, hogyan készül, mi van az egész programozás mögött. Annyit látnak hogy begépelik a programsorokat, jó esetben tudják a programnyelv elemeit használni és azt tudatosan teszik, de sajnos azzal hogy a forráskód megírása után mi is történik, miért szükséges fordítani (vagy egy virtuális gépnek átadni, esetleg egy interpreterrel feldolgoztatni) arról nincs fogalmuk.
Egy képletes példa: A király elhatározza hogy palotát épít, olyat amilyet még nem látott a világ. Az utazók kíváncsian fogják felkeresni a várost, hogy csodájára járjanak majd ennek a nem mindennapi építmények. A kőfejtőben, ahol a palotához hasítják a kőtömböket, megkérdeznek két munkást hogy mit gondolnak, mit csinálnak itt egész nap.
Az első azt mondja: Egész nap izzadok, fejtem a követ itt a koszos, poros bányában. Nem tudom meddig bírom, már nagyon unom az egészet, lehet hogy más munka után nézek.
A második ezt mondja: Én palotát építek!

A tanmesének vége. A lényeg hogy ha tudja az ember hogy mit csinál, sokkal nagyobb kedvvel, elhivatottsággal, lelkesedéssel, izgalommal telve végzi a munkáját.
Így van ez a programozással is. Kell hogy a programozó tisztában legyen a háttérben zajló dolgokkal, mert sokkal izgalmasabb lesz az egész programozás ettől! Akkor is ha interpretert használ, akkor is ha köztes bájtkódot és akkor is ha gépikódra fordított programot készít.

"Nem gond ha nem vágod a párologtatók bináris nyelvét..."

(#4298) alapz@j válasza bucsupeti (#4297) üzenetére


alapz@j
tag

A konklúzióval egyetértek, de a folyamattal nem. Egy programozást, mint hobbit megtanulni vágyó embernek soha nem kezdeném azzal az oktatását, hogy na, van a compiler, ami az "elso_valtozom = 0" programsorodat valami olyasmivé alakítja majd át, hogy "mov [elso_valtozom], 0", csak éppen binárisban, de előtt még írjál köré olyanokat, hogy "int main()" és "return 0".

[ Szerkesztve ]

(#4299) bucsupeti válasza alapz@j (#4298) üzenetére


bucsupeti
senior tag

igazad van. én sem kezdeném így. Azt viszont elmondanám hogy van a processzor, meg a memória stb. Aztán van egy olyan hogy oprendszer, ami müködteti az egészet. a programok hogyan hová töltődnek és hogy indulnak el stb... Ez nélkül nehéz elképzelni hogy valaki jó programozó lesz...

[ Szerkesztve ]

"Nem gond ha nem vágod a párologtatók bináris nyelvét..."

(#4300) axioma válasza bucsupeti (#4299) üzenetére


axioma
veterán

Ez azert olyan 20 evvel ezelott keringi "Az igazi programozo" c. irasra emlekezteto fordulat volt... szerintem ez egy kicsit generacios kerdes is. A gyerekemnek mar az lesz trivialitas, hogy leir (ha egyaltalan szo szerint iras lesz az me'g) egy kodsort es mar a masik ablakban fut is a modositott program. Az en szuleim korosztalyaban (o"k konkretan nem) levo, korai programozok viszont felvezeto szinten, nand kapukra felbontott logikai kifejezesek nelkul nem tudta elkepzelni, hogy valaki programozni fog tudni. [En valahol a ketto kozott vagyok.] Es ez me'g csak nem is azert van, hogy mi volt az elterjedtseg akkor, es mi most. Vagy hogy milyen a fejlesztokornyezet, es milyen most. Egyszeruen bovult az egesz "programozas" fogalom, es egyben specializalodott is. Egy magasszintu program megirasahoz szerintem nem alapveto tudas a forditas miertjenek melyrehatobb (meddig melyre?) ismerete, csak a szuksegessege es a modja (mondjuk ha ide vesszuk az internetet meg az rtfm-et is, akkor inkabb csak a szuksegesseg ismerete). Viszont mindig lesz olyan, aki meg hw-kozeli dolgokat csinal, es adott esetben aka'r lenezi a magas szinten programozokat, akik egy chip labait se tudjak megkulonboztetni egymastol, vagy nem tudja megmondani, hogy adott asm kod hany usec nagysagrendig fut.
Szerintem minden nagyon mulik a feladatokon, amiket meg kell oldani, nem lehet azt mondani hogy ez vagy az nelkul nem lehet programozni. Legfeljebb a programozas bizonyos alfaja't nem konnyu nelkule muvelni.

Copyright © 2000-2024 PROHARDVER Informatikai Kft.