Hirdetés

Új hozzászólás Aktív témák

  • Sk8erPeter
    nagyúr

    Hali!

    Van néhány txt-fájlom, amelyeknek minden sorában az első 4 karaktert szeretném kitörölni.
    Mi lenne ennek a legegyszerűbb módja?
    1.) Milyen függvénnyel lenne a legjobb beolvastatni a szöveget? (soronként olvassa be, és tárolja el? :F vagy hogy?)
    2.) Ezen belül a fájlok elérési útját hogyan adom meg?
    3.) Hogyan születik meg a javított kimeneti fájl?

  • cellpeti
    nagyúr

    Hoopsz :)) Ez a meleg már az agyamra ment, úgy tűnik. De hogy mentsem magam: Nyári házi / gyakorló feladat?

    Újra kezdem a sulit és gondoltam gyakorlok,a könyv elején van ez. De nem megy sajnos. Most neki álltam a Ritchie könyvnek. Abba vannak alapfeladatok is,meg magyarázat is.

  • SLD
    tag

    Bauer papa el szokta mondani oran ami kell, a ciklus meg a tomb meg a legelejen elokerul...
    btw most nyariszunet van, nem? :D

    Hoopsz :)) Ez a meleg már az agyamra ment, úgy tűnik. De hogy mentsem magam: Nyári házi / gyakorló feladat?

  • doc
    nagyúr

    Ha tudsz németül itt találhatsz néhány alap dolgot: C von A bis Z Openbook
    Amúgy miért adnak olyat, amit még nem tanultál?
    És ha tömbök nagyon nem mennek, akkor össze lehet hozni, for és if ciklusokkal egészen szépen.

    Bauer papa el szokta mondani oran ami kell, a ciklus meg a tomb meg a legelejen elokerul...
    btw most nyariszunet van, nem? :D

  • SLD
    tag

    oké,köszönöm...tudnám mi az a tömb és milyen ciklussal állnék neki... :O :O :U

    Ha tudsz németül itt találhatsz néhány alap dolgot: C von A bis Z Openbook
    Amúgy miért adnak olyat, amit még nem tanultál?
    És ha tömbök nagyon nem mennek, akkor össze lehet hozni, for és if ciklusokkal egészen szépen.

  • cellpeti
    nagyúr

    Kétdimenziós tömbökkel állj neki, és egy ciklusban kell majd ellenőrizni az indexeket.

    oké,köszönöm...tudnám mi az a tömb és milyen ciklussal állnék neki... :O :O :U

  • skoda12
    aktív tag

    üdv,megint itt volnék.

    lenne egy két kérdésem:

    feladatom az,hogy egy 21x21 területen csillag karakterek felhasználásával jelenítsek meg egy keresztet a 11.sor és 11. oszlop feltöltésével, jelenítsem meg a főátlót(bal felső - jobb alsó), a mellékátló(jobb felső - bal alsó), majd egyszerre mindkettőt az az egy X-et! by Bauer Péter(SZIF) :U

    Kétdimenziós tömbökkel állj neki, és egy ciklusban kell majd ellenőrizni az indexeket.

  • cellpeti
    nagyúr

    üdv,megint itt volnék.

    lenne egy két kérdésem:

    feladatom az,hogy egy 21x21 területen csillag karakterek felhasználásával jelenítsek meg egy keresztet a 11.sor és 11. oszlop feltöltésével, jelenítsem meg a főátlót(bal felső - jobb alsó), a mellékátló(jobb felső - bal alsó), majd egyszerre mindkettőt az az egy X-et! by Bauer Péter(SZIF) :U

  • kampi_
    csendes tag

    Sziasztok!

    Megint lenne egy jó kérdésem. Hogyan tudom C-ben lekérdezni egy gép MAC címét? Van erre valami függvény, vagy nekem kell megcsinálni? Meg az is érdekelne, hogy ha van egy gép, ami ki van kapcsolva, de háló és táp rá van dugva, akkor le tudom-e kérdezni a MAC címét valahogyan?

    Előre is köszi a segítséget!

    kampi

  • sghc_toma
    senior tag

    kampi_ (#1074): bocs, hogy nem valaszoltam, nyaraltam, es a Vodafone-os mobilnettel nem jottek be az oldalon a hsz-ek..

    Jester01 (#1088): az OpenProcess doksijaban le van irva, hogy NULL-t ad vissza hiba eseten, szoval ebben nincs semmi meglepo.. ami meglepo lehetne, hogy rossz handle-t jelezhet NULL es IVALID_HANDLE_VALUE is (fuggevnye valogatja), de ezen meg azert nem lepodunk meg, mert tudjuk, mennyire konzisztens a Win32 API :) amugy azert letezik az IVALID_HANDLE_VALUE, mert egy par Win32 fv 16 bites elode -1-gyel tert vissza, es meg kellett orizni a kompatibilitast..

  • kampi_
    csendes tag

    Sziasztok!

    Fennti progim működik úgy ahogy kell, de felmerült egy probléma. Win 2000 esetén mindig az utolsó process ablakát teszi aktívvá. Erre tudnátok valami megoldást, hogy hogyan tudnám azt megcsinálni, hogy ne tegye mindig az utolsó processt aktívvá?

    Előre is köszi a segítséget!

    kampi

  • kampi_
    csendes tag

    Ok, az OpenProcess tényleg NULL-t ad vissza (de hogy miért, azt csak a microsoft tudja).
    Azt, hogy miért csak kettőt indít el, így ránézésre nem tudom. Tipp 2 dolog lehet: vagy nem megy bele a while-ba háromszor vagy nem sikerül elindítani a CreateProcess-sel. Debuggold és/vagy tegyél bele kiíratást no meg hibakezelést.

    Az üres sort elég egyszerű felismerni, mert a hossza nulla. A levágott sort meg az jelzi, hogy a végén nem soremelés van.

    Hi!

    Már rájöttem mi volt a baj! Ugye a fájl tartalma így nézett ki pl, hogy :
    notepad
    maspaint
    notepad

    És az volt a gáz, hogy ugye a sor végén volt egy "\n". Na ezért indult el scak kettő. Levágtam a soremeléseket és már jó is. Hibátlanul megy. 13 processra próbáltam ki, és megy simán. Azért köszönöm a segítséget :)

    Az rendben van hogy a hossza nulla, de hogy nézem meg egy sor hosszát?
    fgets(tmp, sizeof tmp, appfile) == NULL . Erre gondolsz?

    És hogyan lehetne levágott egy sor? Gondolom ha nem férne bele a tmp-be,nem? De azért 16 Kb-ba már csak belefér minden :)

    Köszi mégegyszer a segítséget!

    kampi

  • Jester01
    veterán

    Hi!

    Igen egyenlőre tényleg 3 processznak van helye, mert most csak tesztelem. De ettől függetlenül is, csak kettőt nyit meg! Az fgets előtt megnézem, hogy létezik-e fájl, és hogy üres-e? Azt tény, hogy azt nem tudom hogy lehet megnézni, hogy üres-e egy sor, vagy hogy az egész megvan-e, de ha te tudod, akkor elmondhatnád :) Az OpenProcess elvileg NULL-t ad vissza. Legalábbis én azért gondolom, mert ha nem lenne NULL akkor nem teljesülne ez a feltétel : if (phandle==NULL) createproc(proc_data[i].proc_name,i,proc_data); De teljesül mert ha bezárom, akkor megnyitja megint a process-t, tehát teljesülnie kell,nem? A while(1) cilusbanpedig csak elfelejtettem átírni a current-et i-re.:( De már kijavítottam. De ettől függetlenül azt nem mondtad meg, hogy miért csak kettő process nyílik meg és nem több? :) Vagy ez lehet ezek a hibák miatt? A CloseHandle-es részt nem igazán értem hogy mire gondoltál. Sajnos ezeket a handleket meg a createprocess-t nem teljesen vágom, hogy hogyan műkődnek. Ezért is kértem segítséget :)

    Kampi

    Ok, az OpenProcess tényleg NULL-t ad vissza (de hogy miért, azt csak a microsoft tudja).
    Azt, hogy miért csak kettőt indít el, így ránézésre nem tudom. Tipp 2 dolog lehet: vagy nem megy bele a while-ba háromszor vagy nem sikerül elindítani a CreateProcess-sel. Debuggold és/vagy tegyél bele kiíratást no meg hibakezelést.

    Az üres sort elég egyszerű felismerni, mert a hossza nulla. A levágott sort meg az jelzi, hogy a végén nem soremelés van.

  • kampi_
    csendes tag

    Hát ez sajnos elég szörnyűre sikerült :(
    Amivel mindenképpen baj van:
    * 3 processznek van helyed statikusan, és sehol nem ellenőrzöd nem lesz-e esetleg több
    * az fgets-nél nem nézed nem üres sor jött-e illetve, hogy az egész sor megvan-e
    * az OpenProcess nem NULL-t fog visszaadni, hanem INVALID_HANDLE_VALUE-t.
    * a CloseHandle akkor is fut, ha a handle null (invalid)
    * a while(1) ciklusban a "current" változó elmegy a végtelenbe (és nem is nulláról indul)

    A többi hiba ezekhez képest elhanyagolható.

    Hi!

    Igen egyenlőre tényleg 3 processznak van helye, mert most csak tesztelem. De ettől függetlenül is, csak kettőt nyit meg! Az fgets előtt megnézem, hogy létezik-e fájl, és hogy üres-e? Azt tény, hogy azt nem tudom hogy lehet megnézni, hogy üres-e egy sor, vagy hogy az egész megvan-e, de ha te tudod, akkor elmondhatnád :) Az OpenProcess elvileg NULL-t ad vissza. Legalábbis én azért gondolom, mert ha nem lenne NULL akkor nem teljesülne ez a feltétel : if (phandle==NULL) createproc(proc_data[i].proc_name,i,proc_data); De teljesül mert ha bezárom, akkor megnyitja megint a process-t, tehát teljesülnie kell,nem? A while(1) cilusbanpedig csak elfelejtettem átírni a current-et i-re.:( De már kijavítottam. De ettől függetlenül azt nem mondtad meg, hogy miért csak kettő process nyílik meg és nem több? :) Vagy ez lehet ezek a hibák miatt? A CloseHandle-es részt nem igazán értem hogy mire gondoltál. Sajnos ezeket a handleket meg a createprocess-t nem teljesen vágom, hogy hogyan műkődnek. Ezért is kértem segítséget :)

    Kampi

  • Jester01
    veterán

    Sziasztok!

    Az előző kérdéseimet már megoldottam, de most felmerült egy újabb. Szóval ugye egy olyan progit csinálok, ahol egy fájlban megadom a programok elérési útonalait, és a progi elindítja őket.Ha bezárom valamelyik általam megnyitott progit akkor pedig megnyitom újból. Most már minden szép és jó, viszont felmerült egy olyan probléma, hogy csa kettőt hajlandó megnyitni a program. Ez lehet a createprocess miatt? Itt a program is:

    #include <windows.h>
    #include <stdio.h>
    #include <conio.h>

    #define Buf_Size 16*1024

    struct proc {
    char proc_name[300];
    int proc_id;
    };

    void file_exists(const char * filename);
    void filempty(char * filename);
    void createproc (char * str, int i, proc *);
    int count(char * file);

    struct proc proc_data[3];

    int main ()
    {
    int i;
    FILE *appfile;
    char tmp[Buf_Size];
    bool fute;

    int current,ret,line;

    current=0;
    line=0;

    file_exists("Application.txt");
    filempty("Application.txt");
    line = count("Application.txt");
    //struct proc proc_data[line];

    appfile = fopen("application.txt","r");

    while ( fgets(tmp, sizeof tmp, appfile) != NULL )
    {
    createproc(tmp,current,proc_data);
    current++;
    }//while

    fclose(appfile);

    i=0;
    while (1)
    {
    if (i==line) i=0;
    current++;
    Sleep(2000);
    HANDLE phandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, proc_data[i].proc_id);
    if (phandle==NULL) createproc(proc_data[i].proc_name,current,proc_data);
    CloseHandle(phandle);
    i++;
    }//while

    }//main

    void createproc (char * str, int i,proc *proc_data)
    {
    STARTUPINFO StartInfo;
    PROCESS_INFORMATION ProcInfo;
    memset(&ProcInfo, 0, sizeof(ProcInfo));
    memset(&StartInfo, 0 , sizeof(StartInfo));
    StartInfo.cb = sizeof(StartInfo);
    StartInfo.wShowWindow = SW_HIDE;
    CreateProcess(NULL, str, NULL, NULL, false, 0, NULL, NULL, &StartInfo, &ProcInfo);

    strcpy(proc_data[i].proc_name,str);
    proc_data[i].proc_id = ProcInfo.dwProcessId;

    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
    }//createproc

    Ha valaki lát benne hibát legyen szíves szóljon, mert én nem találom, és fontos lenne! Vagy ha esetleg más megoldást tudtok mondani, amivel 2-nél több alkalmazást tudok megnyitni (ha esetleg a createprocess lenne a ludas) akkor jelezzétek!

    Előre is köszönöm a segítséget!

    kampi

    Hát ez sajnos elég szörnyűre sikerült :(
    Amivel mindenképpen baj van:
    * 3 processznek van helyed statikusan, és sehol nem ellenőrzöd nem lesz-e esetleg több
    * az fgets-nél nem nézed nem üres sor jött-e illetve, hogy az egész sor megvan-e
    * az OpenProcess nem NULL-t fog visszaadni, hanem INVALID_HANDLE_VALUE-t.
    * a CloseHandle akkor is fut, ha a handle null (invalid)
    * a while(1) ciklusban a "current" változó elmegy a végtelenbe (és nem is nulláról indul)

    A többi hiba ezekhez képest elhanyagolható.

  • kampi_
    csendes tag

    Sziasztok!

    Az előző kérdéseimet már megoldottam, de most felmerült egy újabb. Szóval ugye egy olyan progit csinálok, ahol egy fájlban megadom a programok elérési útonalait, és a progi elindítja őket.Ha bezárom valamelyik általam megnyitott progit akkor pedig megnyitom újból. Most már minden szép és jó, viszont felmerült egy olyan probléma, hogy csa kettőt hajlandó megnyitni a program. Ez lehet a createprocess miatt? Itt a program is:

    #include <windows.h>
    #include <stdio.h>
    #include <conio.h>

    #define Buf_Size 16*1024

    struct proc {
    char proc_name[300];
    int proc_id;
    };

    void file_exists(const char * filename);
    void filempty(char * filename);
    void createproc (char * str, int i, proc *);
    int count(char * file);

    struct proc proc_data[3];

    int main ()
    {
    int i;
    FILE *appfile;
    char tmp[Buf_Size];
    bool fute;

    int current,ret,line;

    current=0;
    line=0;

    file_exists("Application.txt");
    filempty("Application.txt");
    line = count("Application.txt");
    //struct proc proc_data[line];

    appfile = fopen("application.txt","r");

    while ( fgets(tmp, sizeof tmp, appfile) != NULL )
    {
    createproc(tmp,current,proc_data);
    current++;
    }//while

    fclose(appfile);

    i=0;
    while (1)
    {
    if (i==line) i=0;
    current++;
    Sleep(2000);
    HANDLE phandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, proc_data[i].proc_id);
    if (phandle==NULL) createproc(proc_data[i].proc_name,current,proc_data);
    CloseHandle(phandle);
    i++;
    }//while

    }//main

    void createproc (char * str, int i,proc *proc_data)
    {
    STARTUPINFO StartInfo;
    PROCESS_INFORMATION ProcInfo;
    memset(&ProcInfo, 0, sizeof(ProcInfo));
    memset(&StartInfo, 0 , sizeof(StartInfo));
    StartInfo.cb = sizeof(StartInfo);
    StartInfo.wShowWindow = SW_HIDE;
    CreateProcess(NULL, str, NULL, NULL, false, 0, NULL, NULL, &StartInfo, &ProcInfo);

    strcpy(proc_data[i].proc_name,str);
    proc_data[i].proc_id = ProcInfo.dwProcessId;

    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
    }//createproc

    Ha valaki lát benne hibát legyen szíves szóljon, mert én nem találom, és fontos lenne! Vagy ha esetleg más megoldást tudtok mondani, amivel 2-nél több alkalmazást tudok megnyitni (ha esetleg a createprocess lenne a ludas) akkor jelezzétek!

    Előre is köszönöm a segítséget!

    kampi

  • skoda12
    aktív tag

    Pont egy olyan tutorialt ajánlasz, amiben a main függvényt voidnak deklarálják? :)

    Tényleg benéztem. Csak a témakörök címét figyeltem, meg belepörgettem, hogy vannak-e példakódok.

  • Benmartin
    senior tag

    Kezdetnek ezt találtam: [link]
    Ez nagyjából a C alapjain végig is visz. Ha mélyebben akarsz vele foglalkozni, akkor keress rá Kernighan nevére, ő írt egy nagyon jó könyvet C-ről.

    Pont egy olyan tutorialt ajánlasz, amiben a main függvényt voidnak deklarálják? :)

  • Benmartin
    senior tag

    Így már sikerült, kösz a segítséget. Hozzáteszem, eddig a Win32 GUI project-el próbálkoztam.

    Dev C++ --> ez is fenn van, de ezzel se mentem sokra. Most, hogy gygabor88 leírta, hogy hogy kell a CodeBlock-ba csinálni (alapból berakott egy példát), az alappéldából kiderül, hogy amit a letöltött C oktatóban találtam kódot, hibás. De igaz, hogy mivel rossz menüre mentem, a korábban beírt "Hello world!" program (Wikipédiáról néztem) se működött volna.

    Alap példa:
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
    printf("Hello world!\n");
    return 0;
    }

    Oktató példa (hiányzik az "int" a "main" előtt):
    #include <stdio.h>

    main()
    {
    printf(” Első C programom \n”);
    }

    Dev-Cpp-vel miért nem mentél sokra? Az általad beírt kódok bármelyike fordítható a Dev-Cpp compilerével.

    Azért nincs a main előtt int, mert a C-ben van egy olyan szabály, hogy azok a függvények, amelyeknek nem definiálod a típusát alapból int-ek lesznek.

  • skoda12
    aktív tag

    Köszi a segítséget! Szerencsére valamilyen szinten azért vágom az angolt úgy hogy remélem nem kell olyan sokat szótárazni egyébként nekem is ez a megoldás jutott eszembe.
    És milyen programok kellenek hozzá?

    Dev-C++ és Code::Blocks a két legegyszerűbb fejlesztői környezet. Amelyik tetszik azt válaszd.

  • Black-core
    aktív tag

    Magyart neten nem tudok mutatni. Esetleg valami könyvet érdemes lenne megvenni. Computerbooks-nak vannak kifejetten kezdőknek szóló könyvei. Az nem probléma, hogy nem vágod az angolt. Én 13 évesen kezdtem szintén C-vel, angolul egyáltalán nem tudtam, egy netes angol-magyar szótárral hámoztam ki a mondatok értelmét. Nagyon lassan haladtam, de olyan 100-150 szót kellett ismerni és az informatikai szövegeket jól le tudtam fordítani. Ezt azért írom le, mert mindenképp angolul fogod megtalálni a legjobb forrásokat programozáshoz a neten. Illetve sok jó könyvet le sem fordítanak magyarra, mert mire kész lenne addigra elavul a könyv tartalma.

    De Kernighan könyvét pl lefordították: [link]

    Köszi a segítséget! Szerencsére valamilyen szinten azért vágom az angolt úgy hogy remélem nem kell olyan sokat szótárazni egyébként nekem is ez a megoldás jutott eszembe.
    És milyen programok kellenek hozzá?

  • skoda12
    aktív tag

    Nagyon szépen köszönöm :R Magyarul is tudnál nekem pls mutatni?Mert az angolnyelvet ennyire pro-n sajna nem értem.És köszi hogy segítesz :R

    Magyart neten nem tudok mutatni. Esetleg valami könyvet érdemes lenne megvenni. Computerbooks-nak vannak kifejetten kezdőknek szóló könyvei. Az nem probléma, hogy nem vágod az angolt. Én 13 évesen kezdtem szintén C-vel, angolul egyáltalán nem tudtam, egy netes angol-magyar szótárral hámoztam ki a mondatok értelmét. Nagyon lassan haladtam, de olyan 100-150 szót kellett ismerni és az informatikai szövegeket jól le tudtam fordítani. Ezt azért írom le, mert mindenképp angolul fogod megtalálni a legjobb forrásokat programozáshoz a neten. Illetve sok jó könyvet le sem fordítanak magyarra, mert mire kész lenne addigra elavul a könyv tartalma.

    De Kernighan könyvét pl lefordították: [link]

  • Black-core
    aktív tag

    Kezdetnek ezt találtam: [link]
    Ez nagyjából a C alapjain végig is visz. Ha mélyebben akarsz vele foglalkozni, akkor keress rá Kernighan nevére, ő írt egy nagyon jó könyvet C-ről.

    Nagyon szépen köszönöm :R Magyarul is tudnál nekem pls mutatni?Mert az angolnyelvet ennyire pro-n sajna nem értem.És köszi hogy segítesz :R

  • skoda12
    aktív tag

    Sziasztok!
    Bocsássatok meg biztos hogy nagyon sokan kérdezték tőletek,de nem volt erőm már végignézni a topikot,Csak egy kis segítség kéne.A programozásról tényleg semmi fogalmam nincs annyit tudok hogy több fajta nyelv van és egy pár játékot átírtam jegyzet tömbben ennyi sajna,de viszont nagyon érdekelne.Már egy pár hete olvasgatok a neten minden félét,és nem tudom hogy,hogy kezdjek neki?Amiket eddig olvastam ott 70 %ban ezt a nyelvet ajánlották.Letöltöttem egy pár könyvet is de sajna azok is kínainak tűntek így elsőre.A kérdésem az lenne hogy tudna e nekem valaki valami helyes irányt mutatni,hogy merre induljak?Mert én tényleg semmit nem tudok a programozásról.Köszi szépen és bocsi ha már sokan kérdezték! :R :R

    Kezdetnek ezt találtam: [link]
    Ez nagyjából a C alapjain végig is visz. Ha mélyebben akarsz vele foglalkozni, akkor keress rá Kernighan nevére, ő írt egy nagyon jó könyvet C-ről.

  • Black-core
    aktív tag

    Sziasztok!
    Bocsássatok meg biztos hogy nagyon sokan kérdezték tőletek,de nem volt erőm már végignézni a topikot,Csak egy kis segítség kéne.A programozásról tényleg semmi fogalmam nincs annyit tudok hogy több fajta nyelv van és egy pár játékot átírtam jegyzet tömbben ennyi sajna,de viszont nagyon érdekelne.Már egy pár hete olvasgatok a neten minden félét,és nem tudom hogy,hogy kezdjek neki?Amiket eddig olvastam ott 70 %ban ezt a nyelvet ajánlották.Letöltöttem egy pár könyvet is de sajna azok is kínainak tűntek így elsőre.A kérdésem az lenne hogy tudna e nekem valaki valami helyes irányt mutatni,hogy merre induljak?Mert én tényleg semmit nem tudok a programozásról.Köszi szépen és bocsi ha már sokan kérdezték! :R :R

  • kampi_
    csendes tag

    Bocs, megint én.

    Azt elfelejtettem megírni, hogy ha a handle==NULL mint ahogy mondtad, akkor újra megnyitnám a bezárt process-t, de soha nem lesz NULL. :(

    Köszi a segítséget.

    kampi

  • kampi_
    csendes tag

    Udv!
    CreateProcess-rol gondolom, hogy Win32 API-val dolgozol.. ha esetleg megsem, es mashol is van CreateProcess, akkor a hsz-em tobbi resze ignoralando :)
    a CreateProcess az utolso parametereben egy PROCESS_INFORMATION-re mutato pointert ker, es ebben a strukturaban tobbek kozott visszaadja a process id-t.. egy ciklusban megprobalhatsz HANDLE-t kerni a process-hez az id alapjan az OpenProcess fv-el.. ha a HANDLE == NULL, akkor mar nem fut a processz.. (nemi kis sleep-et rakjal a ciklusba, kulonban felzabalja a procit)

    Hi!

    Köszönöm a sok segítséget, de ehhez én még kevés vagyok :)
    Próbálkoztam a WaitForMultipleObjects , de az nem igazán jött össze. Úgyhogy maradtam a te megoldásodnál. Ami egyszerűbbnek tűnik, csak az a bajom, hogy nem tudom hogyan kell HANDLE-t kérni. Én így próbáltam:

    HANDLE handle;

    handle = OpenProcess(READ_CONTROL, false, proc_data[1].proc_id);

    De ha itt kiiratom a handle-t akkor csak valamilyen egyre növekvő számokat kapok vissza. Tudnál ebben segíteni?

    Előre is köszönöm!

    kampi

  • Jester01
    veterán

    Persze ha nem akar korrekt szálkezelést is írni hozzá, akkor marad a másik verzió.

    Nem kell szálkezelés, mert van WaitForMultipleObjects is.

  • sghc_toma
    senior tag

    Persze ha nem akar korrekt szálkezelést is írni hozzá, akkor marad a másik verzió.

    felteteleztem, hogy nem akar, kulonben megoldotta volna system()-mel..

  • Lortech
    addikt

    Erre való a WaitForSingleObject( pi.hProcess, INFINITE );

    Ahol pi a process information pointer.

    Persze ha nem akar korrekt szálkezelést is írni hozzá, akkor marad a másik verzió.

  • Lortech
    addikt

    Udv!
    CreateProcess-rol gondolom, hogy Win32 API-val dolgozol.. ha esetleg megsem, es mashol is van CreateProcess, akkor a hsz-em tobbi resze ignoralando :)
    a CreateProcess az utolso parametereben egy PROCESS_INFORMATION-re mutato pointert ker, es ebben a strukturaban tobbek kozott visszaadja a process id-t.. egy ciklusban megprobalhatsz HANDLE-t kerni a process-hez az id alapjan az OpenProcess fv-el.. ha a HANDLE == NULL, akkor mar nem fut a processz.. (nemi kis sleep-et rakjal a ciklusba, kulonban felzabalja a procit)

    Erre való a WaitForSingleObject( pi.hProcess, INFINITE );

    Ahol pi a process information pointer.

  • sghc_toma
    senior tag

    Sziasztok!

    Szeretnék csinálni, egy olyan programot, aminek az a lényege, hogy egy fájlból kiolvasom programok elérési útvonalait és megniytom azokat a programokat. Ha bezártam őket, akkor megnyitja megint. Odaáig eljutottam simán, hogy createprocess-el megnyitom a programokat, de hogyan tudom figyelni, hogy bezáródott-e? Tudnátok ebben segíteni?

    (system függvény használata azért nem jó, mert az megvárja amíg bezáródik a megnyitott alkalmazás, és addig megáll a program. Nekem viszont pont az kellene, hogy egyszerre nyitok meg mindent, és ha akármelyik alkalmazást bezárom, akkor azt újraindítja)

    Előre is köszi a segítséget!

    kampi

    Udv!
    CreateProcess-rol gondolom, hogy Win32 API-val dolgozol.. ha esetleg megsem, es mashol is van CreateProcess, akkor a hsz-em tobbi resze ignoralando :)
    a CreateProcess az utolso parametereben egy PROCESS_INFORMATION-re mutato pointert ker, es ebben a strukturaban tobbek kozott visszaadja a process id-t.. egy ciklusban megprobalhatsz HANDLE-t kerni a process-hez az id alapjan az OpenProcess fv-el.. ha a HANDLE == NULL, akkor mar nem fut a processz.. (nemi kis sleep-et rakjal a ciklusba, kulonban felzabalja a procit)

  • kampi_
    csendes tag

    Sziasztok!

    Szeretnék csinálni, egy olyan programot, aminek az a lényege, hogy egy fájlból kiolvasom programok elérési útvonalait és megniytom azokat a programokat. Ha bezártam őket, akkor megnyitja megint. Odaáig eljutottam simán, hogy createprocess-el megnyitom a programokat, de hogyan tudom figyelni, hogy bezáródott-e? Tudnátok ebben segíteni?

    (system függvény használata azért nem jó, mert az megvárja amíg bezáródik a megnyitott alkalmazás, és addig megáll a program. Nekem viszont pont az kellene, hogy egyszerre nyitok meg mindent, és ha akármelyik alkalmazást bezárom, akkor azt újraindítja)

    Előre is köszi a segítséget!

    kampi

  • sghc_toma
    senior tag

    Így már sikerült, kösz a segítséget. Hozzáteszem, eddig a Win32 GUI project-el próbálkoztam.

    Dev C++ --> ez is fenn van, de ezzel se mentem sokra. Most, hogy gygabor88 leírta, hogy hogy kell a CodeBlock-ba csinálni (alapból berakott egy példát), az alappéldából kiderül, hogy amit a letöltött C oktatóban találtam kódot, hibás. De igaz, hogy mivel rossz menüre mentem, a korábban beírt "Hello world!" program (Wikipédiáról néztem) se működött volna.

    Alap példa:
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
    printf("Hello world!\n");
    return 0;
    }

    Oktató példa (hiányzik az "int" a "main" előtt):
    #include <stdio.h>

    main()
    {
    printf(” Első C programom \n”);
    }

    Win32 alkalmazasnal alapbol az INT WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT) a belepesi pont.. ilyened nem volt, ezert a linker nem is talalta..

  • Elektromann
    csendes tag

    File->New->Project->Console Application
    Itt megkérdezi, hogy mit hova pakoljon, meg hasonlók. Létre fog hozni egy forrásfájlt. Kitörlöd a tartalmát és beírod a kódod.

    Így már sikerült, kösz a segítséget. Hozzáteszem, eddig a Win32 GUI project-el próbálkoztam.

    Dev C++ --> ez is fenn van, de ezzel se mentem sokra. Most, hogy gygabor88 leírta, hogy hogy kell a CodeBlock-ba csinálni (alapból berakott egy példát), az alappéldából kiderül, hogy amit a letöltött C oktatóban találtam kódot, hibás. De igaz, hogy mivel rossz menüre mentem, a korábban beírt "Hello world!" program (Wikipédiáról néztem) se működött volna.

    Alap példa:
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
    printf("Hello world!\n");
    return 0;
    }

    Oktató példa (hiányzik az "int" a "main" előtt):
    #include <stdio.h>

    main()
    {
    printf(” Első C programom \n”);
    }

  • doc
    nagyúr

    Szia!

    VS-ben includeolni kell az "stdafx.h" fájlt, de kezdésnek tényleg nem ajánlott az az IDE, mint ahogy a Borland Turbo C-je sem, használj olyan IDE-t, amiben szabványos ANSI C fordító van: Dev-Cpp, ezzel egyidejűleg C++ és C kódot is tudsz fordítani, a fájl kiterjesztésétől függően.

    mondjuk bennem mar az elejen megfogalmazodott hogy erdemes lenne egy toksima gcc-vel kezdeni, annal egyszerubb es biztosabban mukodo nincs :)

  • Benmartin
    senior tag

    Letöltöttem a Turbo C-t, de nem engedi telepíteni, Framework-ot kér, de a legújabb verzió van fenn. Csak a Visual Studio-val, vagy a CodeBlock-al kell megoldani, de az a gond, hogy nem tudom, hogy hozzak létre új projectet úgy, hogy ki is tudjam próbálni.

    Szia!

    VS-ben includeolni kell az "stdafx.h" fájlt, de kezdésnek tényleg nem ajánlott az az IDE, mint ahogy a Borland Turbo C-je sem, használj olyan IDE-t, amiben szabványos ANSI C fordító van: Dev-Cpp, ezzel egyidejűleg C++ és C kódot is tudsz fordítani, a fájl kiterjesztésétől függően.

  • skoda12
    aktív tag

    Letöltöttem a Turbo C-t, de nem engedi telepíteni, Framework-ot kér, de a legújabb verzió van fenn. Csak a Visual Studio-val, vagy a CodeBlock-al kell megoldani, de az a gond, hogy nem tudom, hogy hozzak létre új projectet úgy, hogy ki is tudjam próbálni.

    File->New->Project->Console Application
    Itt megkérdezi, hogy mit hova pakoljon, meg hasonlók. Létre fog hozni egy forrásfájlt. Kitörlöd a tartalmát és beírod a kódod.

  • Elektromann
    csendes tag

    Letöltöttem a Turbo C-t, de nem engedi telepíteni, Framework-ot kér, de a legújabb verzió van fenn. Csak a Visual Studio-val, vagy a CodeBlock-al kell megoldani, de az a gond, hogy nem tudom, hogy hozzak létre új projectet úgy, hogy ki is tudjam próbálni.

  • Elektromann
    csendes tag

    ugye sima konzolos alkalmazast valasztottal a projectnek?
    a turbox meg nem a readme.exe, az, mint a neve is mutatja, csak a readme :)

    Há azt nem tudom, hogy sima konzolos alkalmazás volt-e, mert még nem nagyon tudok angolul, németet tanultam, most már angolt tanulnék, de az angol tanár em tanít semmit, így itthon kell valahogy megtanulnom..

    A Turbo C-t meg akkor keresek másikat.

  • doc
    nagyúr

    Project-ben csináltam, a Win32 GUI Project-re mentem. A Build log részen (alol) ezt írta ki:

    main.cpp
    Linking executable: bin\Debug\Proba.exe
    LIBCMT.lib(wincrt0.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
    bin\Debug\Proba.exe : fatal error LNK1120: 1 unresolved externals
    Process terminated with status 1120 (0 minutes, 2 seconds)
    2 errors, 0 warnings

    ugye sima konzolos alkalmazast valasztottal a projectnek?
    a turbox meg nem a readme.exe, az, mint a neve is mutatja, csak a readme :)

  • Elektromann
    csendes tag

    Mi a hibaüzenet? Nálam hibátlanul fordul. Project-be tetted?

    Project-ben csináltam, a Win32 GUI Project-re mentem. A Build log részen (alol) ezt írta ki:

    main.cpp
    Linking executable: bin\Debug\Proba.exe
    LIBCMT.lib(wincrt0.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
    bin\Debug\Proba.exe : fatal error LNK1120: 1 unresolved externals
    Process terminated with status 1120 (0 minutes, 2 seconds)
    2 errors, 0 warnings

  • Elektromann
    csendes tag

    Letöltöttem a Turbo C-t, de nem értem, hogyhogy kell használni, amit el tudok indítani (telepítés után) README.exe fájlt, az csak egy hosszú angol nyelvű valami, és ott csak elolvasni tudom a szöveget, utána meg kilépni lehet. El lehet egyáltalán indítani?

  • skoda12
    aktív tag

    Letöltöttem a progit, de most én csinálom rosszul vagy a kód a hibás?

    Kód:
    #include <stdio.h>

    int main(void)
    {
    printf("Hello world!\n");
    return 0;
    }

    Mi a hibaüzenet? Nálam hibátlanul fordul. Project-be tetted?

  • doc
    nagyúr

    Letöltöttem a progit, de most én csinálom rosszul vagy a kód a hibás?

    Kód:
    #include <stdio.h>

    int main(void)
    {
    printf("Hello world!\n");
    return 0;
    }

    te csinalod rosszul...
    szerintem elsore folosleges agyonbonyolitott IDE-ket hasznalni, kezdd sima parancssoros forditoval vagy valami egyszeruvel mint a TurboC, na ami annal egyszerubb az csal :D mondjuk rettento gagyi, de elindulashoz tokeletes, aztan kereshetsz valami hozzad kozelebb allot

  • Elektromann
    csendes tag

    Letöltöttem a progit, de most én csinálom rosszul vagy a kód a hibás?

    Kód:
    #include <stdio.h>

    int main(void)
    {
    printf("Hello world!\n");
    return 0;
    }

  • skoda12
    aktív tag

    A Build-ot megtaláltam, de sötét színben van (nem tudom használni). Nem tudsz esetleg egy olyan "fordító programot"?

    Nincs most a gépemen VS, de valószínűleg az a baj, hogy csak a fájlt írtad meg, de nem szervezted project-be. File->New Project itt, amit létrehoz forrásfájlt, abba másold a saját kódod és Build.
    De szerintem neked egy egyszerűbb IDE kellene először. Code::Blocks nevű progit töltsd le, és azzal tudsz kódot is szerkeszteni, meg lejön vele a fordítóprogram is.

  • Elektromann
    csendes tag

    A Build-ot megtaláltam, de sötét színben van (nem tudom használni). Nem tudsz esetleg egy olyan "fordító programot"?

  • skoda12
    aktív tag

    Szevasztok

    Most kezdem a C-t tanulni, és már le is töltöttem a Visual Studio 2008-at (c++-t tud, de úgy tudom, abba is lehet C-vel), de emellett van Notepad++-om, ami szintén tud C-be programozni, de adódott egy problémám:
    Elkészítek egy programot, de nem tudom, hogy nyissam meg exe-ként. Tudtok segíteni, hogy hogy kell az ilyet megnyitni? :F

    Le kell fordítani a kódot egy fordítóval. VS 2008 menüjében valami olyat keress, hogy Build talán a project menüponton belül van, ha jól emlékszem.

  • Elektromann
    csendes tag

    Szevasztok

    Most kezdem a C-t tanulni, és már le is töltöttem a Visual Studio 2008-at (c++-t tud, de úgy tudom, abba is lehet C-vel), de emellett van Notepad++-om, ami szintén tud C-be programozni, de adódott egy problémám:
    Elkészítek egy programot, de nem tudom, hogy nyissam meg exe-ként. Tudtok segíteni, hogy hogy kell az ilyet megnyitni? :F

  • gaben
    aktív tag

    Ennek működnie kell:

    char* line = "25asifh 125 dfis df 25 25 25 dsojg 2525";
    const char* pattern = "25";
    char* tmp = line;
    int count = 0;
    do
    {
    tmp = strstr(tmp,pattern);
    if(tmp)
    {
    char *ch1 = tmp;
    char *ch2 = tmp;
    ch1--;
    ch2 = ch2 + strlen(pattern);
    if(((*ch2) == ' ' || (*ch2) == '\0') && (ch1 < line || (*ch1) == ' '))
    {
    count++;
    }
    tmp = tmp + strlen(pattern);
    }
    }while(tmp);

    Köszönöm a segítséget!

  • skoda12
    aktív tag

    azt nem értem,hogy miért van az,hogy ha strstr-ben a pattern a tab,nem a 25,akkor egyáltalán nem számol.Mert ha a mintába a "tab25" kerül ,akkor elvileg így is meglehetne nézni,hogy előtte mi van,de így sem működik.

    Ennek működnie kell:

    char* line = "25asifh 125 dfis df 25 25 25 dsojg 2525";
    const char* pattern = "25";
    char* tmp = line;
    int count = 0;
    do
    {
    tmp = strstr(tmp,pattern);
    if(tmp)
    {
    char *ch1 = tmp;
    char *ch2 = tmp;
    ch1--;
    ch2 = ch2 + strlen(pattern);
    if(((*ch2) == ' ' || (*ch2) == '\0') && (ch1 < line || (*ch1) == ' '))
    {
    count++;
    }
    tmp = tmp + strlen(pattern);
    }
    }while(tmp);

  • gaben
    aktív tag

    Ezen már én is gondolkodtam,csak akkor meg megint jön egy újabb gond:
    ha a sor a keresettel kezdődik akkor azt is le kell kezelni,és az úgy lehet hogy előtte sor vége van?

    azt nem értem,hogy miért van az,hogy ha strstr-ben a pattern a tab,nem a 25,akkor egyáltalán nem számol.Mert ha a mintába a "tab25" kerül ,akkor elvileg így is meglehetne nézni,hogy előtte mi van,de így sem működik.

  • gaben
    aktív tag

    C helyett nem lehet mást használni? RegEx-el elég egyszerűen meg lehetne oldani a problémát.
    "25"-el mondjuk a következő:
    (^25\W)|(\W25\W)|(\W25$)

    AE

    sajnos ezt nem ismerem,de majd utána nézek

  • ArchElf
    addikt

    Ezen már én is gondolkodtam,csak akkor meg megint jön egy újabb gond:
    ha a sor a keresettel kezdődik akkor azt is le kell kezelni,és az úgy lehet hogy előtte sor vége van?

    C helyett nem lehet mást használni? RegEx-el elég egyszerűen meg lehetne oldani a problémát.
    "25"-el mondjuk a következő:
    (^25\W)|(\W25\W)|(\W25$)

    AE

  • gaben
    aktív tag

    Beleteszel két if-et, hogy előtte-utána szóköz van-e.

    Ezen már én is gondolkodtam,csak akkor meg megint jön egy újabb gond:
    ha a sor a keresettel kezdődik akkor azt is le kell kezelni,és az úgy lehet hogy előtte sor vége van?

  • skoda12
    aktív tag

    Ez majdnem jól is működik,csak a baj az hogy (ahogy fentebb is írtam) minden olyat megtalál,amiben szerepel a keresési kulcs.Pl..: 25 esetén megtalálja a 25-öt,a 125,225,325,stb is...
    De köszi szépen az 5letet.

    Beleteszel két if-et, hogy előtte-utána szóköz van-e.

  • gaben
    aktív tag

    Kb így gondoltam:

    char* line = "asifh 25 dfis df 25 25 25 dsojg 25";
    const char* pattern = "25";
    char* tmp = line;
    int count = 0;
    do
    {
    tmp = strstr(tmp,pattern);
    if(tmp)
    {
    count++;
    tmp = tmp + strlen(pattern);
    }
    }while(tmp);

    Ez majdnem jól is működik,csak a baj az hogy (ahogy fentebb is írtam) minden olyat megtalál,amiben szerepel a keresési kulcs.Pl..: 25 esetén megtalálja a 25-öt,a 125,225,325,stb is...
    De köszi szépen az 5letet.

  • skoda12
    aktív tag

    nem igazán látom át perpill,kicsit jegelem,hátha az segít :D

    Kb így gondoltam:

    char* line = "asifh 25 dfis df 25 25 25 dsojg 25";
    const char* pattern = "25";
    char* tmp = line;
    int count = 0;
    do
    {
    tmp = strstr(tmp,pattern);
    if(tmp)
    {
    count++;
    tmp = tmp + strlen(pattern);
    }
    }while(tmp);

  • gaben
    aktív tag

    Értem én, ezért írtam, hogy ciklusban kell majd hívogatni, hogy megszámolja az egy sorban levőket pl. Meg persze a ciklusban léptetni kell azt a pointert, amiben keresel.

    nem igazán látom át perpill,kicsit jegelem,hátha az segít :D

  • skoda12
    aktív tag

    szerintme ez neke mnem lesz jó,mert több is lehet a stringben,és a végén meg kéne számolni,hogy össz mennyi van.

    Értem én, ezért írtam, hogy ciklusban kell majd hívogatni, hogy megszámolja az egy sorban levőket pl. Meg persze a ciklusban léptetni kell azt a pointert, amiben keresel.

  • gaben
    aktív tag

    Strstr függvényt lenne célszerű használni egy ciklusban: [link]

    szerintme ez neke mnem lesz jó,mert több is lehet a stringben,és a végén meg kéne számolni,hogy össz mennyi van.

  • skoda12
    aktív tag

    A szövegfájlban megkéne számolni pl: a 25-öt.Ezt hogy tehetném meg?
    1-9-ig az ASCII kód alapján megtudnám,de a több jegyűeknek nem tudom az ASCII kódját.
    Ha meg csak a karaktere nézem akkor kiírja az összes olyat amiben van Pl: 5-re mint számra keresek kidobja a 15-öt is,stb..
    5let?

    Strstr függvényt lenne célszerű használni egy ciklusban: [link]

  • gaben
    aktív tag

    A szövegfájlban megkéne számolni pl: a 25-öt.Ezt hogy tehetném meg?
    1-9-ig az ASCII kód alapján megtudnám,de a több jegyűeknek nem tudom az ASCII kódját.
    Ha meg csak a karaktere nézem akkor kiírja az összes olyat amiben van Pl: 5-re mint számra keresek kidobja a 15-öt is,stb..
    5let?

  • gaben
    aktív tag

    Szaisztok!
    Lenne egy .txt fájl,amiben soronként vannak adatok(több ezer sorban).Ezeket az adatokat kellene feldolgozni.
    Úgy gondoltam,hogy majd az fgets-el kiszedem soronként az adatokat,ezt beteszem egy tömbbe(ebbe mindig csak az aktuális sor adatai vannak),és utána,ezt besteszem egy másik tömbbe(ide gyűjtöm soronként az adatokat,egy nagy vektor lesz) ,tehát mindegyik soron végig megyek,és az összes adatot egy vektorba teszem.Majd ezen a vektoron végzem el a feldolgozást.De ne makar összejönni,az fgets,csak az utolsó sorral dolgozik.
    Próbáltam for ciklusba rakni,de így sem akar összejönni.

    Hogyan tudnám megoldani,hogy soronként megyek?Vagy lehet az egész elgondolás rossz?
    Köszönöm a helpet.
    a Próbálkozás egy részlete:

    while(!feof(filep)){
    if (feof(filep)) break;

    for(i=0;i!='\n';i++){

    fgets(sor,1000,filep);
    }
    }

    Hát ezt eléggé benéztem. :((
    Persze,hogy az utolsó sort írja ki....na azt a fort kivettem,aztán strcat -al hozzáfűzöm.Alakul már így.

  • gaben
    aktív tag

    Szaisztok!
    Lenne egy .txt fájl,amiben soronként vannak adatok(több ezer sorban).Ezeket az adatokat kellene feldolgozni.
    Úgy gondoltam,hogy majd az fgets-el kiszedem soronként az adatokat,ezt beteszem egy tömbbe(ebbe mindig csak az aktuális sor adatai vannak),és utána,ezt besteszem egy másik tömbbe(ide gyűjtöm soronként az adatokat,egy nagy vektor lesz) ,tehát mindegyik soron végig megyek,és az összes adatot egy vektorba teszem.Majd ezen a vektoron végzem el a feldolgozást.De ne makar összejönni,az fgets,csak az utolsó sorral dolgozik.
    Próbáltam for ciklusba rakni,de így sem akar összejönni.

    Hogyan tudnám megoldani,hogy soronként megyek?Vagy lehet az egész elgondolás rossz?
    Köszönöm a helpet.
    a Próbálkozás egy részlete:

    while(!feof(filep)){
    if (feof(filep)) break;

    for(i=0;i!='\n';i++){

    fgets(sor,1000,filep);
    }
    }

  • farki001
    csendes tag

    gyorben regebben Turbo C-t nyomtak, nem tudom most mi az aktualis perverzio, de probald megtudni (gondolom vannak itt is Szechenyisek, majd megmondjak), es azzal gyakorolj
    bar Bauer bacsi majd ugyis elmondja hogy mi van :D

    Köszi. Akkor újabb kérdés van itt Szechenyis? :DD aki meg tudná mondani, hogy milyen fejlesztői környezetet preferálnak?

  • doc
    nagyúr

    Sziasztok!

    Nem sokára (ha felvesznek) kezdem a győrben a mérnökinfó szakot. S kicsit előre szeretnék tanulni hogy könnyebb dolgom legyen. Az előző hozzá szólásokból megvan milyen könyveket szerezzek be. Köszi. Tudnátok mondani valami fejlesztői környezetet amiben tudnék gyakorolni.

    Előre is köszi.

    gyorben regebben Turbo C-t nyomtak, nem tudom most mi az aktualis perverzio, de probald megtudni (gondolom vannak itt is Szechenyisek, majd megmondjak), es azzal gyakorolj
    bar Bauer bacsi majd ugyis elmondja hogy mi van :D

  • Tv
    senior tag

    Sziasztok!

    Nem sokára (ha felvesznek) kezdem a győrben a mérnökinfó szakot. S kicsit előre szeretnék tanulni hogy könnyebb dolgom legyen. Az előző hozzá szólásokból megvan milyen könyveket szerezzek be. Köszi. Tudnátok mondani valami fejlesztői környezetet amiben tudnék gyakorolni.

    Előre is köszi.

    Szia! Kezdésnek a C-Free szerintem tökéletesen elég.

  • farki001
    csendes tag

    Sziasztok!

    Nem sokára (ha felvesznek) kezdem a győrben a mérnökinfó szakot. S kicsit előre szeretnék tanulni hogy könnyebb dolgom legyen. Az előző hozzá szólásokból megvan milyen könyveket szerezzek be. Köszi. Tudnátok mondani valami fejlesztői környezetet amiben tudnék gyakorolni.

    Előre is köszi.

  • Jester01
    veterán

    Sziasztok!

    Egy gyors kérdésem lenne. Van egy gépnév mint pl:: computer1234 ebből szeretnék én egy olyat, hogy az utolsó 4 karakter ténylegesen int tipusú legyen ne char. Tudnátok ebben segíteni. Nekem sehogysem jön össze. Nagyon fontos lenne!

    Előre is köszönöm a segítséget!

    Üdv:Kampi

    Ha tudod, hogy az utolsó 4 karakter kell, akkor

    char * str = "computer1234";
    int num = atoi(str + strlen(str) - 4);

    Ha nem tudod, akkor lásd sghc_toma megoldását fentebb :K

  • sghc_toma
    senior tag

    Sziasztok!

    Egy gyors kérdésem lenne. Van egy gépnév mint pl:: computer1234 ebből szeretnék én egy olyat, hogy az utolsó 4 karakter ténylegesen int tipusú legyen ne char. Tudnátok ebben segíteni. Nekem sehogysem jön össze. Nagyon fontos lenne!

    Előre is köszönöm a segítséget!

    Üdv:Kampi

    udv! lehet, hogy van szebb megoldas is, de marha faradt vagyok, csak ez jutott eszembe:

    char * str = "computer1234";
    int num;
    sscanf(str, "%*[^0123456789]%d", &num);

  • kampi_
    csendes tag

    Sziasztok!

    Egy gyors kérdésem lenne. Van egy gépnév mint pl:: computer1234 ebből szeretnék én egy olyat, hogy az utolsó 4 karakter ténylegesen int tipusú legyen ne char. Tudnátok ebben segíteni. Nekem sehogysem jön össze. Nagyon fontos lenne!

    Előre is köszönöm a segítséget!

    Üdv:Kampi

  • sghc_toma
    senior tag

    en forditva csinaltam, C utan jott a C++, aminek megvolt az a hatranya, hogy sokaig kevert C/C++ programokat irtam, nem hasznaltam ki igazan a nyelv adottsagait, mert a C-s megoldast mar ismertem, igy azt hasznaltam (pl. filekezelesnel, input/outputnal)
    igazabol ha komolyan akar C++-szal foglalkozni, es "ahhoz valo" feladatokat csinalni (pl. gui, stb) akkor a C-s alap inkabb hatrany mint elony, nagyon mas gondolkodasmod kell a kettohoz

    en is igy latom.. Basic-kel, Pascal-lal kezdtem, es nagyon sokaig tartott, mire felnyilt a szemem, es megtanultam igazan hasznalni a C++ adta lehetosegeket..

    gygabor88: Thinking In C++-t ezert szeretem nagyon; alaposan bemutatja a nyelvet, es mindezt jo peldaprogikon keresztul teszi..

  • doc
    nagyúr

    Anno C++ volt az első programnyelv, amit megtanultam, utána C. Akkor úgy éreztem gyorsabban eljutottam volna ugyanoda, ha C lett volna a kezdőnyelv, ezért ajánlottam így, de nyilván mindenkinek más az ideális. Stroustroup könyv is jó kezdőnek, ha mellette példakódokat is néz a netről minden témakörhöz. A többi könyvvel az a baj, hogy felszínesen átrohannak minden témán , aztán amikor az olvasó belenéz egy open source program forrásába, akkor nem érti, mert alapvető nyelvi elemeket nem ismertetett a könyv.

    en forditva csinaltam, C utan jott a C++, aminek megvolt az a hatranya, hogy sokaig kevert C/C++ programokat irtam, nem hasznaltam ki igazan a nyelv adottsagait, mert a C-s megoldast mar ismertem, igy azt hasznaltam (pl. filekezelesnel, input/outputnal)
    igazabol ha komolyan akar C++-szal foglalkozni, es "ahhoz valo" feladatokat csinalni (pl. gui, stb) akkor a C-s alap inkabb hatrany mint elony, nagyon mas gondolkodasmod kell a kettohoz

  • skoda12
    aktív tag

    maganvelemeny kovetkezik, nem megkovezni erte:)
    annyira nagyon nem ismerem a Stroustroup konyvet (referencianak hasznaltam parszor), de szerintem teljesen kezdonek nem a legmegfelelobb.. tul sok infot tartalmaz elsore.. szerintem sokkal jobban lehet tanulni egy olyan konyvbol, ami kisebb problemak megoldasan keresztul nyujt betekintest a nyelvbe.. amikor meg mar van egy ralatasod a dolgokra (es erdekel is a dolog), ugyis utananezel az apro finomsagoknak..

    azzal az altalanosan elfogadott nezettel sem ertek egyet, hogy eloszor C, aztan C++.. nem irom le, hogy miert, mert Bartosz Milewski nagyon jol leirja a C++ In Action cimu konyveben, es maximalisan egyetertek vele..

    Meg egy konyv van, amit tudok ajanlani C++-hoz: Thinking In C++..

    Anno C++ volt az első programnyelv, amit megtanultam, utána C. Akkor úgy éreztem gyorsabban eljutottam volna ugyanoda, ha C lett volna a kezdőnyelv, ezért ajánlottam így, de nyilván mindenkinek más az ideális. Stroustroup könyv is jó kezdőnek, ha mellette példakódokat is néz a netről minden témakörhöz. A többi könyvvel az a baj, hogy felszínesen átrohannak minden témán , aztán amikor az olvasó belenéz egy open source program forrásába, akkor nem érti, mert alapvető nyelvi elemeket nem ismertetett a könyv.

  • sghc_toma
    senior tag

    C-hez könyv: Brian Kernighan & Dennis Ritchie A C programozási nyelv
    C++ könyv: Bjarne Stroustroup A C++ programozási nyelv

    Ezenkívül rengeteg más a témával kapcsolatos könyvet fogsz találni a boltokban, de mind hulladék. Ezt komolyan mondom. Elég ha a terjdelmeket összehasonlítjuk, már akkor is látszik. A lényeg, hogy ha ezen a vonalon akarsz elindulni, akkor először a C-s könyvet utána a C++ könyvet olvasd ki. Utóbbit nem árt többször is elolvasni. Már csak azért is ezeket vedd meg, mert ha később programozónak tanulsz, akkor egyetemen is ezekből kell majd tanulnod.

    maganvelemeny kovetkezik, nem megkovezni erte:)
    annyira nagyon nem ismerem a Stroustroup konyvet (referencianak hasznaltam parszor), de szerintem teljesen kezdonek nem a legmegfelelobb.. tul sok infot tartalmaz elsore.. szerintem sokkal jobban lehet tanulni egy olyan konyvbol, ami kisebb problemak megoldasan keresztul nyujt betekintest a nyelvbe.. amikor meg mar van egy ralatasod a dolgokra (es erdekel is a dolog), ugyis utananezel az apro finomsagoknak..

    azzal az altalanosan elfogadott nezettel sem ertek egyet, hogy eloszor C, aztan C++.. nem irom le, hogy miert, mert Bartosz Milewski nagyon jol leirja a C++ In Action cimu konyveben, es maximalisan egyetertek vele..

    Meg egy konyv van, amit tudok ajanlani C++-hoz: Thinking In C++..

  • skoda12
    aktív tag

    Sziasztok!

    Programfejlesztést szeretnék tanulni , ehhez könyvet szeretnék venni és nem tudom , hogy melyikkel lehetne jobb programokat írni C-vel vagy C++-al? Játékokhoz melyik ésszerűbb? Melyiket könyebb tanulni?

    És légyszíves ha tudtok ajánljatok nekem egy könyvet C-rő vagy C++-ról amelyik szerintetek egy kezdőnek ésszerűbb :) és jobb progik :)

    Előre is köszi!

    Zwiebel

    C-hez könyv: Brian Kernighan & Dennis Ritchie A C programozási nyelv
    C++ könyv: Bjarne Stroustroup A C++ programozási nyelv

    Ezenkívül rengeteg más a témával kapcsolatos könyvet fogsz találni a boltokban, de mind hulladék. Ezt komolyan mondom. Elég ha a terjdelmeket összehasonlítjuk, már akkor is látszik. A lényeg, hogy ha ezen a vonalon akarsz elindulni, akkor először a C-s könyvet utána a C++ könyvet olvasd ki. Utóbbit nem árt többször is elolvasni. Már csak azért is ezeket vedd meg, mert ha később programozónak tanulsz, akkor egyetemen is ezekből kell majd tanulnod.

  • Sziasztok!

    Programfejlesztést szeretnék tanulni , ehhez könyvet szeretnék venni és nem tudom , hogy melyikkel lehetne jobb programokat írni C-vel vagy C++-al? Játékokhoz melyik ésszerűbb? Melyiket könyebb tanulni?

    És légyszíves ha tudtok ajánljatok nekem egy könyvet C-rő vagy C++-ról amelyik szerintetek egy kezdőnek ésszerűbb :) és jobb progik :)

    Előre is köszi!

    Zwiebel

  • Iolé
    csendes tag

    Nem akarom modani, de kicsit hibás is a program...
    - Negatív számokra nem ír ki semmit (egy hibaüzenet azért elkélne)
    - túl hosszú számokra hibát dob (puffer túlcsordulás miatt), ezt is illendő volna lekezelni
    - az alábbi sor elé kell egy i = 0;
    while(dec>=1000){
    mert jelen helyzetben egymás mögé konkatenálja a sztringeket (amiből sok jó nem származik):

    test.exe 1 2 3
    I III IIIIII

    test.exe 1 5 7
    I IV IVVII

    Amúgy nagyvonalakban:
    egesze fv: megnézi, hogy az n. argument egész számmá alakítható-e (az argumentum első része csak számokból áll-e)
    atoi fv: string integer-ré varázsolása...
    belső for ciklus: végigmegy az argumentumokon, kivonásos alapon "legyártja" római karakteres reprezentációt, kiírja a kimenetre

    AE

    Köszi szépen!!

  • ArchElf
    addikt

    Sziasztok!

    Szeretném a segítségeteket kérni! Lenne egy program, amit nem egészen értek, főleg utolsó rész nem tiszta. Esetleg valaki tudna egy kis kommentet írni hozzá, hogy hogyan működik, meg mikor mit csinál, nagyon fontos lenne!
    Ez volta feladat: A parancs a parancs sorban egy decimális számot (vagy decimális számok

    szóközökkel elválasztott sorozatát) vár(ja), amely(ek)nek kiírja római

    szám megfelelőjét az stdout-ra.

    Hibásan megadott parancs esetén a programnak rövid diagnosztikai

    üzenetben informálnia kell a felhasználót arról, hogy a parancsot

    hogyan kell használni. A diagnosztikai üzenetet az stderr-re kell

    küldeni.

    És a program:
    #include <stdio.h>

    int main(argc, argv)
    int argc;
    char *argv[];
    {
    int i = 0, x=0;
    int dec;
    char rom[50];
    if(argc == 1){
    fprintf(stderr, "Hianyzik a parameter!");
    exit( 1 );
    }

    for(x=1;x<argc;x++){
    if(egesze(argv[x])){
    dec = atoi(argv[x]);
    }else{
    fprintf(stderr, "A parameterlistaban nem megfelelo az egyik ertek!");
    exit( 1 );
    }

    while(dec>=1000){
    dec -= 1000;
    rom[i] = 'M';
    i++;
    }
    if (dec>=900){
    dec-=900;
    rom[i] = 'C';
    i++;
    rom[i] = 'M';
    i++;
    }
    if(dec>=500){
    dec -= 500;
    rom[i] = 'D';
    i++;
    }
    if (dec>=400){
    dec -= 400;
    rom[i] = 'C';
    i++;
    rom[i] = 'D';
    i++;
    }
    while(dec>=100){
    dec = dec-100;
    rom[i] = 'C';
    i++;
    }
    if(dec>=90){
    dec -= 90;
    rom[i] = 'X';
    i++;
    rom[i] = 'C';
    i++;
    }
    if(dec>=50){
    dec -= 50;
    rom[i] = 'L';
    i++;
    }
    if(dec>=40){
    dec -= 40;
    rom[i] = 'X';
    i++;
    rom[i] = 'L';
    i++;
    }
    while(dec>=10){
    dec -= 10;
    rom[i] ='X';
    i++;
    }
    if(dec == 9){
    rom[i] = 'I';
    i++;
    rom[i] = 'X';
    i++;
    }
    else{
    if(dec >= 5){
    dec -= 5;
    rom[i] = 'V';
    i++;
    }
    if(dec == 4){
    rom[i] = 'I';
    i++;
    rom[i] = 'V';
    i++;
    }
    else{
    while(dec > 0){
    dec -= 1;
    rom[i] = 'I';
    i++;
    }
    }
    }
    rom[i]='\0';
    printf(" %s", rom);
    }
    exit(0);
    }

    int egesze(s)
    char *s[];
    {
    int i=0, kezd;
    while (s[i]==' ' || s[i]=='\n' || s[i]=='\t')++i;
    if(s[i]=='+' || s[i]=='-')++i;
    kezd=i;
    while(s[i]>='0' && s[i]<='9')++i;
    if(i==kezd || s[i]!=' ' && s[i]!='\t' && s[i]!='\n' && s [i]!=0) return 0;
    else return 1;
    }

    int atoi(s)
    char s[];
    {
    int i, n;
    n = 0;
    for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
    n = 10 * n + (s[i] - '0');
    return n;
    }

    Nem akarom modani, de kicsit hibás is a program...
    - Negatív számokra nem ír ki semmit (egy hibaüzenet azért elkélne)
    - túl hosszú számokra hibát dob (puffer túlcsordulás miatt), ezt is illendő volna lekezelni
    - az alábbi sor elé kell egy i = 0;
    while(dec>=1000){
    mert jelen helyzetben egymás mögé konkatenálja a sztringeket (amiből sok jó nem származik):

    test.exe 1 2 3
    I III IIIIII

    test.exe 1 5 7
    I IV IVVII

    Amúgy nagyvonalakban:
    egesze fv: megnézi, hogy az n. argument egész számmá alakítható-e (az argumentum első része csak számokból áll-e)
    atoi fv: string integer-ré varázsolása...
    belső for ciklus: végigmegy az argumentumokon, kivonásos alapon "legyártja" római karakteres reprezentációt, kiírja a kimenetre

    AE

  • Iolé
    csendes tag

    Sziasztok!

    Szeretném a segítségeteket kérni! Lenne egy program, amit nem egészen értek, főleg utolsó rész nem tiszta. Esetleg valaki tudna egy kis kommentet írni hozzá, hogy hogyan működik, meg mikor mit csinál, nagyon fontos lenne!
    Ez volta feladat: A parancs a parancs sorban egy decimális számot (vagy decimális számok

    szóközökkel elválasztott sorozatát) vár(ja), amely(ek)nek kiírja római

    szám megfelelőjét az stdout-ra.

    Hibásan megadott parancs esetén a programnak rövid diagnosztikai

    üzenetben informálnia kell a felhasználót arról, hogy a parancsot

    hogyan kell használni. A diagnosztikai üzenetet az stderr-re kell

    küldeni.

    És a program:
    #include <stdio.h>

    int main(argc, argv)
    int argc;
    char *argv[];
    {
    int i = 0, x=0;
    int dec;
    char rom[50];
    if(argc == 1){
    fprintf(stderr, "Hianyzik a parameter!");
    exit( 1 );
    }

    for(x=1;x<argc;x++){
    if(egesze(argv[x])){
    dec = atoi(argv[x]);
    }else{
    fprintf(stderr, "A parameterlistaban nem megfelelo az egyik ertek!");
    exit( 1 );
    }

    while(dec>=1000){
    dec -= 1000;
    rom[i] = 'M';
    i++;
    }
    if (dec>=900){
    dec-=900;
    rom[i] = 'C';
    i++;
    rom[i] = 'M';
    i++;
    }
    if(dec>=500){
    dec -= 500;
    rom[i] = 'D';
    i++;
    }
    if (dec>=400){
    dec -= 400;
    rom[i] = 'C';
    i++;
    rom[i] = 'D';
    i++;
    }
    while(dec>=100){
    dec = dec-100;
    rom[i] = 'C';
    i++;
    }
    if(dec>=90){
    dec -= 90;
    rom[i] = 'X';
    i++;
    rom[i] = 'C';
    i++;
    }
    if(dec>=50){
    dec -= 50;
    rom[i] = 'L';
    i++;
    }
    if(dec>=40){
    dec -= 40;
    rom[i] = 'X';
    i++;
    rom[i] = 'L';
    i++;
    }
    while(dec>=10){
    dec -= 10;
    rom[i] ='X';
    i++;
    }
    if(dec == 9){
    rom[i] = 'I';
    i++;
    rom[i] = 'X';
    i++;
    }
    else{
    if(dec >= 5){
    dec -= 5;
    rom[i] = 'V';
    i++;
    }
    if(dec == 4){
    rom[i] = 'I';
    i++;
    rom[i] = 'V';
    i++;
    }
    else{
    while(dec > 0){
    dec -= 1;
    rom[i] = 'I';
    i++;
    }
    }
    }
    rom[i]='\0';
    printf(" %s", rom);
    }
    exit(0);
    }

    int egesze(s)
    char *s[];
    {
    int i=0, kezd;
    while (s[i]==' ' || s[i]=='\n' || s[i]=='\t')++i;
    if(s[i]=='+' || s[i]=='-')++i;
    kezd=i;
    while(s[i]>='0' && s[i]<='9')++i;
    if(i==kezd || s[i]!=' ' && s[i]!='\t' && s[i]!='\n' && s [i]!=0) return 0;
    else return 1;
    }

    int atoi(s)
    char s[];
    {
    int i, n;
    n = 0;
    for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
    n = 10 * n + (s[i] - '0');
    return n;
    }

  • vgergo
    aktív tag

    Mert amit írsz [for (int i = 1421; i <= 3; i=i-5)], azt azt jelenti:
    Fusson a ciklus 1421 -től -5 ösével addig, amíg a ciklusváltozó kisebb vagy egyenlő, mint 3.
    Mivel már kezdetben sem kisebb vagy egyenlő, mint három, bele sem ugrik a ciklusba... Amit te szeretnél (gondolom), az ez:

    for (int i = 1421; i >= 3; i=i-5)
    {
    cout << memblock[i];
    }

    AE

    Nagyon szépen köszönöm soha nem vettem volna észre, hogy fordítva van a kacsacsőr.

  • ArchElf
    addikt

    Mi ezzel a kóddal a gond?

    for (int i = 1421; i <= 3; i=i-5)
    {
    cout << memblock[i];
    }

    Az a bajom ezzel a kóddal, hogy nem ír ki semmit, miközben a memblock[i] minden i-re egy számot tárol.

    Sőt még ez sem működik:

    for (int i = 1421; i <= 3; i=i-5)
    {
    cout << i;
    }

    Ez működik:

    for (int i = 0; i < size; i++)
    {
    cout << memblock[i];
    }

    size sokkal nagyobb, mint 1421

    Segítségeteket előre is köszönöm.

    Mert amit írsz [for (int i = 1421; i <= 3; i=i-5)], azt azt jelenti:
    Fusson a ciklus 1421 -től -5 ösével addig, amíg a ciklusváltozó kisebb vagy egyenlő, mint 3.
    Mivel már kezdetben sem kisebb vagy egyenlő, mint három, bele sem ugrik a ciklusba... Amit te szeretnél (gondolom), az ez:

    for (int i = 1421; i >= 3; i=i-5)
    {
    cout << memblock[i];
    }

    AE

  • vgergo
    aktív tag

    Mi ezzel a kóddal a gond?

    for (int i = 1421; i <= 3; i=i-5)
    {
    cout << memblock[i];
    }

    Az a bajom ezzel a kóddal, hogy nem ír ki semmit, miközben a memblock[i] minden i-re egy számot tárol.

    Sőt még ez sem működik:

    for (int i = 1421; i <= 3; i=i-5)
    {
    cout << i;
    }

    Ez működik:

    for (int i = 0; i < size; i++)
    {
    cout << memblock[i];
    }

    size sokkal nagyobb, mint 1421

    Segítségeteket előre is köszönöm.

  • doc
    nagyúr

    ezt a fordítási hibaüzenetet kaptam az egyetemi fordíton c:113:2: error: no newline at end of file

    Most akkor valahova bekéne raknom egy pintf("\n"); parancsot? de hova? mert szerintem akkor már máshogy működne...

    és köszi a türelmet és a segítséget :)

    sehova, nyomj egy entert a forras vegen :)

  • blaces
    tag

    Na így már jobban hasonlít, bár a feladatkiírás szerint minden szót pontosan egy szóköz választ el egymástól, te meg mindenféle mást is elválasztójelnek tekintesz. Ez okozhat problémát.

    De ami biztos rossz, hogy a fájl végén ha éppen soremelés után vagyunk (ami pedig szokás) akkor beszúrsz egy üres szót is a fába. Ettől eltekintve az általam használt tesztadatra jól működött.

    ezt a fordítási hibaüzenetet kaptam az egyetemi fordíton c:113:2: error: no newline at end of file

    Most akkor valahova bekéne raknom egy pintf("\n"); parancsot? de hova? mert szerintem akkor már máshogy működne...

    és köszi a türelmet és a segítséget :)

  • Jester01
    veterán

    ufff bocs :W

    ez a feladat...

    [I]Írj programot, amely parancssori argumentumként megkapja legfeljebb 10 szöveges állomány nevét, és lexikografikus sorrendben a szabványos kimenetre írja azokat a szavakat, amelyek az összes állományban előfordulnak! Minden szót csak egyszer kell kiírni, és a kis- és nagybetűket azonosként kell kezelni (azaz az "alma" és az "alMA" szavakat azonosnak kell tekinteni).

    Az állományokban minden sor egy vagy több szót tartalmaz. A sorokat az újsor karakter (\n) zárja. A sorokban a szavak egyetlen szóköz karakterrel vannak elválasztva egymástól. Minden szó legfeljebb 50 karakter hosszú.

    A program a szabványos kimeneten minden sorba egyetlen szót írjon! A kimeneten minden szó csupa kisbetűvel szerepeljen! Az implementációhoz használj bináris fát.[/I]

    Na így már jobban hasonlít, bár a feladatkiírás szerint minden szót pontosan egy szóköz választ el egymástól, te meg mindenféle mást is elválasztójelnek tekintesz. Ez okozhat problémát.

    De ami biztos rossz, hogy a fájl végén ha éppen soremelés után vagyunk (ami pedig szokás) akkor beszúrsz egy üres szót is a fába. Ettől eltekintve az általam használt tesztadatra jól működött.

  • blaces
    tag

    Ez meg nem is hasonlít a feladatkiírásra. Eleve egész számokról van szó. A fa elemeknél nem is értem a mezőket. A két bejárást sehol nem látom, ahogy a kiírandó igen és nem szavakat sem. A beolvasás meg úgy látom tetszőleges számú fájlból akar olvasni és sehová nem ír, pedig a feladat szerint egy darab bemeneti és egy darab kimeneti fájl van.

    Biztos, hogy ez a program ehhez a feladathoz tartozik? :F

    ufff bocs :W

    ez a feladat...

    [I]Írj programot, amely parancssori argumentumként megkapja legfeljebb 10 szöveges állomány nevét, és lexikografikus sorrendben a szabványos kimenetre írja azokat a szavakat, amelyek az összes állományban előfordulnak! Minden szót csak egyszer kell kiírni, és a kis- és nagybetűket azonosként kell kezelni (azaz az "alma" és az "alMA" szavakat azonosnak kell tekinteni).

    Az állományokban minden sor egy vagy több szót tartalmaz. A sorokat az újsor karakter (\n) zárja. A sorokban a szavak egyetlen szóköz karakterrel vannak elválasztva egymástól. Minden szó legfeljebb 50 karakter hosszú.

    A program a szabványos kimeneten minden sorba egyetlen szót írjon! A kimeneten minden szó csupa kisbetűvel szerepeljen! Az implementációhoz használj bináris fát.[/I]

  • Jester01
    veterán

    Közben a harmadikkal is foglalkozom... szinte egésznap, lehet a fáradtságtól nem tudok már oda figyelni rendesen.
    Feladat:
    [I]Írj programot, amely egy egész számokat tartalmazó szöveges állományból felépít egy bináris fát, és eldönti, hogy a fa inorder és preorder bejárásával ugyanazt a számsorozatot kapja-e! A számokat tartalmazó állomány nevét az első parancssori argumentumként kapja meg a program.

    A szöveges állomány soronként pontosan egy tízes számrendszerbeli egész számot tartalmaz. A sorokat az újsor karakter (\n) zárja. Az állományt az állomány vége (EOF) jelig kell olvasni.

    A bináris fa felépítésében két szabályt kell figyelembe venni. Ha a beszúrandó szám nagyobb, mint az, amelyik a gyökérben van, akkor a gyökértől jobbra kerüljön, ha kisebb vagy egyenlő, akkor a gyökér bal oldalára. Azaz ez a fa nem bináris keresőfa.

    A program járja be a fát inorder és preorder módon. Ha a két bejárás ugyanazt a számsorozatot adja eredményül, akkor a program a második parancssori argumentumként megkapott nevű állományba írja az "igen", különben a "nem" szót. [/I]

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>

    #define HAMIS 0
    #define IGAZ (!HAMIS)

    typedef struct faelem {

    char *adat;
    int szamlalas, input;
    struct faelem *bal, *jobb;
    } FA;

    void beszuras(FA **gyok, char *adat, int fajlnev) {
    if(*gyok == NULL) {
    *gyok = (FA*)malloc(sizeof(FA));
    (*gyok)->adat = (char*)malloc((strlen(adat)+1)*sizeof(char));
    strcpy((*gyok)->adat, adat);
    (*gyok)->szamlalas = 1;
    (*gyok)->input = fajlnev;
    (*gyok)->bal = (*gyok)->jobb = NULL;
    } else if(strcmp((*gyok)->adat, adat) < 0) {
    beszuras(&(*gyok)->jobb, adat , fajlnev);
    } else if(strcmp((*gyok)->adat, adat) > 0) {
    beszuras(&(*gyok)->bal, adat, fajlnev);
    } else if((strcmp((*gyok)->adat, adat) == 0) && ((*gyok)->input != fajlnev)) {
    (*gyok)->szamlalas++;
    (*gyok)->input = fajlnev;
    }

    return;
    }

    void bejaras(FA *gyok, int n) {
    if(gyok != NULL) {
    bejaras(gyok->bal, n);
    if(gyok->szamlalas == n) {
    printf("%s\n",gyok->adat);
    }
    bejaras(gyok->jobb, n);
    }
    return;
    }

    void torles(FA *gyok) {
    if(gyok != NULL) {
    free(gyok->adat);
    torles(gyok->bal);
    torles(gyok->jobb);
    free(gyok);
    }
    return;
    }

    int atugras(int ch) {
    if(ch != (int)' ' && ch != (int)'\n' && ch != (int)'\r' &&
    ch != (int)'\t' && ch != (int)'.' && ch != (int)',' && ch != (int)';' &&
    ch != (int)EOF) {
    return HAMIS;
    }

    return IGAZ;
    }

    char *memoriafoglalas(char *szo, int j) {
    return (szo == NULL) ?
    (char*)malloc(sizeof(char)) : (char*)realloc(szo,(j+1)*sizeof(char));
    }

    int main(int argc, char **argv) {
    FILE **fp = NULL;
    char *szo = NULL;
    int ch;
    FA *gyok = NULL;
    int i, j;

    if((fp = (FILE**)malloc((argc-1)*sizeof(FILE*)))==NULL)
    exit(1);
    for(i=1;i<argc;++i)
    if((fp[i-1] = fopen(argv[i],"rt+"))==NULL)
    exit(1);

    for(i=1;i<argc;++i) {
    j = 0;

    while((ch = fgetc(fp[i-1]))) {
    if((szo = memoriafoglalas(szo, j))==NULL)
    exit(1);

    if(atugras(ch) == HAMIS) {
    szo[j++] = tolower(ch);
    } else if(j > 0 || ch == (int)EOF) {
    szo[j] = '\0';
    beszuras(&gyok, szo, i-1);
    free(szo);
    szo = NULL;
    j = 0;

    if(ch == (int)EOF) {
    break;
    }
    }
    }
    fclose(fp[i-1]);
    }
    free(fp);
    bejaras(gyok, argc-1);
    torles(gyok);

    return 0;
    }

    Ez lefordul, csak hibás kimenetet ad vissza :( az egyetemi tesztelőn

    Ez meg nem is hasonlít a feladatkiírásra. Eleve egész számokról van szó. A fa elemeknél nem is értem a mezőket. A két bejárást sehol nem látom, ahogy a kiírandó igen és nem szavakat sem. A beolvasás meg úgy látom tetszőleges számú fájlból akar olvasni és sehová nem ír, pedig a feladat szerint egy darab bemeneti és egy darab kimeneti fájl van.

    Biztos, hogy ez a program ehhez a feladathoz tartozik? :F

  • Jester01
    veterán

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #define IGAZ 1
    #define HAMIS !IGAZ


    typedef struct listaelem{
    char szo[50];
    struct listaelem *kov;
    }LISTAELEM;

    int abszolut(int a,int b)
    { int c;
    c=(a-b)>=0 ? (a-b):(a-b)*(-1);
    return c;
    }

    int keres(LISTAELEM *fej,char sz[])
    {
    LISTAELEM *seged;
    for(seged=fej;seged;seged=seged->kov)
    {
    if(strcmp(sz,seged->szo)!=0)
    return IGAZ;
    }
    return HAMIS;

    }

    LISTAELEM* beszur(LISTAELEM *fej,char szo[])
    {
    LISTAELEM *ujelem=(LISTAELEM*)malloc(sizeof(LISTAELEM));
    strcpy(ujelem->szo,szo);
    ujelem->kov=NULL;
    if(!fej)
    return ujelem;
    else
    {
    LISTAELEM *seg=fej;
    while(seg->kov)
    seg=seg->kov;
    seg->kov=ujelem;
    }
    return fej;
    }

    LISTAELEM* feldolgoz(FILE *f,LISTAELEM *fej)
    {
    char betu,sz[50];
    int j,i=0;
    int h=strlen(sz);
    while( (betu=fgetc(f)) !=EOF)
    {
    if(betu==' ' || betu==',' || betu=='!' || betu=='?' || betu=='.' || betu=='\n')
    {
    if(h>2)
    {
    fej=beszur(fej,sz);
    for(j=0;j<50;j++)
    sz[j]='\0';
    i=0;
    }
    }
    else
    {
    sz[i]=tolower(betu);
    i++;
    }
    }
    return fej;
    }

    int gyak(LISTAELEM *fej,char sz[])
    {
    LISTAELEM *seg;
    int gyakorisag=0;
    for(seg=fej;seg;seg=seg->kov)
    {
    if(strcmp(seg->szo,sz)==0)
    gyakorisag++;
    }
    return gyakorisag;
    }

    int main(int argc,char **argv)
    {
    FILE *f1,*f2;
    LISTAELEM *fej1=NULL,*fej2=NULL,*fej3=NULL,*seged=NULL;
    int gyak1,gyak2,szavak=0,n;
    float hasonlosag=0,eredm;

    f1=fopen(argv[1],"r");
    f2=fopen(argv[2],"r");
    fej1=feldolgoz(f1,fej1);
    fej2=feldolgoz(f2,fej2);

    for(seged=fej1;seged;seged=seged->kov)
    {
    if((n=keres(fej3,seged->szo))==0)
    {
    gyak1=gyak(fej1,seged->szo);
    gyak2=gyak(fej2,seged->szo);
    hasonlosag+=(abszolut(gyak1,gyak2))/(gyak1+gyak2);
    szavak++;
    }
    }

    for(seged=fej2;seged;seged=seged->kov)
    {
    if((n=keres(fej3,seged->szo))==0)
    {
    gyak1=gyak(fej1,seged->szo);
    gyak2=gyak(fej2,seged->szo);
    hasonlosag+=(abszolut(gyak1,gyak2))/(gyak1+gyak2);
    szavak++;
    }
    }

    eredm=hasonlosag/szavak;
    printf("%.5f\n",eredm);

    return 0;
    }

    valgrind -v eredmények:
    ==3173== Memcheck, a memory error detector.
    ==3173== Copyright (C) 2002-2006, and GNU GPL'd, by Julian Seward et al.
    ==3173== Using LibVEX rev 1658, a library for dynamic binary translation.
    ==3173== Copyright (C) 2004-2006, and GNU GPL'd, by OpenWorks LLP.
    ==3173== Using valgrind-3.2.1-Debian, a dynamic binary instrumentation framework.
    ==3173== Copyright (C) 2000-2006, and GNU GPL'd, by Julian Seward et al.
    ==3173==
    --3173-- Command line
    --3173-- ./elso
    --3173-- Startup, with flags:
    --3173-- -v
    --3173-- Contents of /proc/version:
    --3173-- Linux version 2.6.18-6-xen-amd64 (Debian 2.6.18.dfsg.1-23etch1) (dannf@debian.org) (gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)) #1 SMP Fri Dec 12 07:02:03 UTC 2008
    --3173-- Arch and hwcaps: AMD64, amd64-sse2
    --3173-- Valgrind library directory: /usr/lib/valgrind
    --3173-- Reading syms from /home/izgatopasi/Prog1/3/1/elso (0x400000)
    --3173-- Reading syms from /lib/ld-2.3.6.so (0x4000000)
    --3173-- Reading debug info from /lib/ld-2.3.6.so...
    --3173-- ... CRC mismatch (computed 1CBD6C2C wanted 509BB065)
    --3173-- object doesn't have a symbol table
    --3173-- Reading syms from /usr/lib/valgrind/amd64-linux/memcheck (0x38000000)
    --3173-- object doesn't have a dynamic symbol table
    --3173-- Reading suppressions file: /usr/lib/valgrind/default.supp
    --3173-- Reading syms from /usr/lib/valgrind/amd64-linux/vgpreload_core.so (0x4918000)
    --3173-- Reading syms from /usr/lib/valgrind/amd64-linux/vgpreload_memcheck.so (0x4A19000)
    --3173-- Reading syms from /lib/libc-2.3.6.so (0x4B1F000)
    --3173-- Reading debug info from /lib/libc-2.3.6.so...
    --3173-- ... CRC mismatch (computed AD7708C1 wanted 5D81B887)
    --3173-- object doesn't have a symbol table
    --3173-- REDIR: 0x4B91980 (rindex) redirected to 0x4A1C450 (rindex)
    --3173-- REDIR: 0x4B8D0F0 (malloc) redirected to 0x4A1B7D6 (malloc)
    ==3173== Syscall param open(filename) points to unaddressable byte(s)
    ==3173== at 0x4BDB152: open (in /lib/libc-2.3.6.so)
    ==3173== by 0x4B85F52: _IO_file_open (in /lib/libc-2.3.6.so)
    ==3173== by 0x4B8609B: _IO_file_fopen (in /lib/libc-2.3.6.so)
    ==3173== by 0x4B7C053: (within /lib/libc-2.3.6.so)
    ==3173== by 0x4008B9: main (1_feladat.c:94)
    ==3173== Address 0x0 is not stack'd, malloc'd or (recently) free'd
    --3173-- REDIR: 0x4B8B180 (free) redirected to 0x4A1B3E6 (free)
    ==3173==
    ==3173== Conditional jump or move depends on uninitialised value(s)
    ==3173== at 0x400771: feldolgoz (1_feladat.c:53)
    ==3173== by 0x4008E3: main (1_feladat.c:96)
    ==3173==
    ==3173== Invalid read of size 2
    ==3173== at 0x4B82DE1: getc (in /lib/libc-2.3.6.so)
    ==3173== by 0x400801: feldolgoz (1_feladat.c:54)
    ==3173== by 0x4008E3: main (1_feladat.c:96)
    ==3173== Address 0x0 is not stack'd, malloc'd or (recently) free'd
    ==3173==
    ==3173== Process terminating with default action of signal 11 (SIGSEGV)
    ==3173== Access not within mapped region at address 0x0
    ==3173== at 0x4B82DE1: getc (in /lib/libc-2.3.6.so)
    ==3173== by 0x400801: feldolgoz (1_feladat.c:54)
    ==3173== by 0x4008E3: main (1_feladat.c:96)
    --3173-- REDIR: 0x4B92830 (memset) redirected to 0x4A1C960 (memset)
    ==3173==
    ==3173== ERROR SUMMARY: 6 errors from 3 contexts (suppressed: 8 from 1)
    ==3173==
    ==3173== 1 errors in context 1 of 3:
    ==3173== Invalid read of size 2
    ==3173== at 0x4B82DE1: getc (in /lib/libc-2.3.6.so)
    ==3173== by 0x400801: feldolgoz (1_feladat.c:54)
    ==3173== by 0x4008E3: main (1_feladat.c:96)
    ==3173== Address 0x0 is not stack'd, malloc'd or (recently) free'd
    ==3173==
    ==3173== 1 errors in context 2 of 3:
    ==3173== Syscall param open(filename) points to unaddressable byte(s)
    ==3173== at 0x4BDB152: open (in /lib/libc-2.3.6.so)
    ==3173== by 0x4B85F52: _IO_file_open (in /lib/libc-2.3.6.so)
    ==3173== by 0x4B8609B: _IO_file_fopen (in /lib/libc-2.3.6.so)
    ==3173== by 0x4B7C053: (within /lib/libc-2.3.6.so)
    ==3173== by 0x4008B9: main (1_feladat.c:94)
    ==3173== Address 0x0 is not stack'd, malloc'd or (recently) free'd
    ==3173==
    ==3173== 4 errors in context 3 of 3:
    ==3173== Conditional jump or move depends on uninitialised value(s)
    ==3173== at 0x400771: feldolgoz (1_feladat.c:53)
    ==3173== by 0x4008E3: main (1_feladat.c:96)
    --3173--
    --3173-- supp: 8 Debian libc6 (2.3.x) stripped dynamic linker
    ==3173==
    ==3173== IN SUMMARY: 6 errors from 3 contexts (suppressed: 8 from 1)
    ==3173==
    ==3173== malloc/free: in use at exit: 0 bytes in 0 blocks.
    ==3173== malloc/free: 2 allocs, 2 frees, 1,136 bytes allocated.
    ==3173==
    ==3173== All heap blocks were freed -- no leaks are possible.
    --3173-- memcheck: sanity checks: 0 cheap, 1 expensive
    --3173-- memcheck: auxmaps: 0 auxmap entries (0k, 0M) in use
    --3173-- memcheck: auxmaps: 0 searches, 0 comparisons
    --3173-- memcheck: SMs: n_issued = 12 (192k, 0M)
    --3173-- memcheck: SMs: n_deissued = 0 (0k, 0M)
    --3173-- memcheck: SMs: max_noaccess = 524287 (8388592k, 8191M)
    --3173-- memcheck: SMs: max_undefined = 0 (0k, 0M)
    --3173-- memcheck: SMs: max_defined = 66 (1056k, 1M)
    --3173-- memcheck: SMs: max_non_DSM = 12 (192k, 0M)
    --3173-- memcheck: max sec V bit nodes: 0 (0k, 0M)
    --3173-- memcheck: set_sec_vbits8 calls: 0 (new: 0, updates: 0)
    --3173-- memcheck: max shadow mem size: 4336k, 4M
    --3173-- translate: fast SP updates identified: 921 ( 86.7%)
    --3173-- translate: generic_known SP updates identified: 90 ( 8.4%)
    --3173-- translate: generic_unknown SP updates identified: 51 ( 4.8%)
    --3173-- tt/tc: 2,648 tt lookups requiring 2,655 probes
    --3173-- tt/tc: 2,648 fast-cache updates, 2 flushes
    --3173-- transtab: new 1,324 (31,539 -> 556,589; ratio 176:10) [0 scs]
    --3173-- transtab: dumped 0 (0 -> ??)
    --3173-- transtab: discarded 0 (0 -> ??)
    --3173-- scheduler: 23,425 jumps (bb entries).
    --3173-- scheduler: 0/1,389 major/minor sched events.
    --3173-- sanity: 1 cheap, 1 expensive checks.
    --3173-- exectx: 30,011 lists, 15 contexts (avg 0 per list)
    --3173-- exectx: 18 searches, 4 full compares (222 per 1000)
    --3173-- exectx: 0 cmp2, 39 cmp4, 0 cmpAll

    valgrind eredmény (simán csak valgrind [nev]):
    ==3298== Memcheck, a memory error detector.
    ==3298== Copyright (C) 2002-2006, and GNU GPL'd, by Julian Seward et al.
    ==3298== Using LibVEX rev 1658, a library for dynamic binary translation.
    ==3298== Copyright (C) 2004-2006, and GNU GPL'd, by OpenWorks LLP.
    ==3298== Using valgrind-3.2.1-Debian, a dynamic binary instrumentation framework.
    ==3298== Copyright (C) 2000-2006, and GNU GPL'd, by Julian Seward et al.
    ==3298== For more details, rerun with: -v
    ==3298==
    ==3298== Syscall param open(filename) points to unaddressable byte(s)
    ==3298== at 0x4BDB152: open (in /lib/libc-2.3.6.so)
    ==3298== by 0x4B85F52: _IO_file_open (in /lib/libc-2.3.6.so)
    ==3298== by 0x4B8609B: _IO_file_fopen (in /lib/libc-2.3.6.so)
    ==3298== by 0x4B7C053: (within /lib/libc-2.3.6.so)
    ==3298== by 0x4008B9: main (1_feladat.c:94)
    ==3298== Address 0x0 is not stack'd, malloc'd or (recently) free'd
    ==3298==
    ==3298== Conditional jump or move depends on uninitialised value(s)
    ==3298== at 0x400771: feldolgoz (1_feladat.c:53)
    ==3298== by 0x4008E3: main (1_feladat.c:96)
    ==3298==
    ==3298== Invalid read of size 2
    ==3298== at 0x4B82DE1: getc (in /lib/libc-2.3.6.so)
    ==3298== by 0x400801: feldolgoz (1_feladat.c:54)
    ==3298== by 0x4008E3: main (1_feladat.c:96)
    ==3298== Address 0x0 is not stack'd, malloc'd or (recently) free'd
    ==3298==
    ==3298== Process terminating with default action of signal 11 (SIGSEGV)
    ==3298== Access not within mapped region at address 0x0
    ==3298== at 0x4B82DE1: getc (in /lib/libc-2.3.6.so)
    ==3298== by 0x400801: feldolgoz (1_feladat.c:54)
    ==3298== by 0x4008E3: main (1_feladat.c:96)
    ==3298==
    ==3298== ERROR SUMMARY: 6 errors from 3 contexts (suppressed: 8 from 1)
    ==3298== malloc/free: in use at exit: 0 bytes in 0 blocks.
    ==3298== malloc/free: 2 allocs, 2 frees, 1,136 bytes allocated.
    ==3298== For counts of detected errors, rerun with: -v
    ==3298== All heap blocks were freed -- no leaks are possible.
    Szegmens hiba

    Izé, azt írtad az inicializálaltan sz változót javítod. Pedig nem. Cserébe viszont bevezettél egy h változót, ráadásul a cikluson kívül. (A valgrind kimeneted egyébként használhatatlan, mert nem adtál meg neki be/ki fájlnevet)

  • blaces
    tag

    Közben a harmadikkal is foglalkozom... szinte egésznap, lehet a fáradtságtól nem tudok már oda figyelni rendesen.
    Feladat:
    [I]Írj programot, amely egy egész számokat tartalmazó szöveges állományból felépít egy bináris fát, és eldönti, hogy a fa inorder és preorder bejárásával ugyanazt a számsorozatot kapja-e! A számokat tartalmazó állomány nevét az első parancssori argumentumként kapja meg a program.

    A szöveges állomány soronként pontosan egy tízes számrendszerbeli egész számot tartalmaz. A sorokat az újsor karakter (\n) zárja. Az állományt az állomány vége (EOF) jelig kell olvasni.

    A bináris fa felépítésében két szabályt kell figyelembe venni. Ha a beszúrandó szám nagyobb, mint az, amelyik a gyökérben van, akkor a gyökértől jobbra kerüljön, ha kisebb vagy egyenlő, akkor a gyökér bal oldalára. Azaz ez a fa nem bináris keresőfa.

    A program járja be a fát inorder és preorder módon. Ha a két bejárás ugyanazt a számsorozatot adja eredményül, akkor a program a második parancssori argumentumként megkapott nevű állományba írja az "igen", különben a "nem" szót. [/I]

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>

    #define HAMIS 0
    #define IGAZ (!HAMIS)

    typedef struct faelem {

    char *adat;
    int szamlalas, input;
    struct faelem *bal, *jobb;
    } FA;

    void beszuras(FA **gyok, char *adat, int fajlnev) {
    if(*gyok == NULL) {
    *gyok = (FA*)malloc(sizeof(FA));
    (*gyok)->adat = (char*)malloc((strlen(adat)+1)*sizeof(char));
    strcpy((*gyok)->adat, adat);
    (*gyok)->szamlalas = 1;
    (*gyok)->input = fajlnev;
    (*gyok)->bal = (*gyok)->jobb = NULL;
    } else if(strcmp((*gyok)->adat, adat) < 0) {
    beszuras(&(*gyok)->jobb, adat , fajlnev);
    } else if(strcmp((*gyok)->adat, adat) > 0) {
    beszuras(&(*gyok)->bal, adat, fajlnev);
    } else if((strcmp((*gyok)->adat, adat) == 0) && ((*gyok)->input != fajlnev)) {
    (*gyok)->szamlalas++;
    (*gyok)->input = fajlnev;
    }

    return;
    }

    void bejaras(FA *gyok, int n) {
    if(gyok != NULL) {
    bejaras(gyok->bal, n);
    if(gyok->szamlalas == n) {
    printf("%s\n",gyok->adat);
    }
    bejaras(gyok->jobb, n);
    }
    return;
    }

    void torles(FA *gyok) {
    if(gyok != NULL) {
    free(gyok->adat);
    torles(gyok->bal);
    torles(gyok->jobb);
    free(gyok);
    }
    return;
    }

    int atugras(int ch) {
    if(ch != (int)' ' && ch != (int)'\n' && ch != (int)'\r' &&
    ch != (int)'\t' && ch != (int)'.' && ch != (int)',' && ch != (int)';' &&
    ch != (int)EOF) {
    return HAMIS;
    }

    return IGAZ;
    }

    char *memoriafoglalas(char *szo, int j) {
    return (szo == NULL) ?
    (char*)malloc(sizeof(char)) : (char*)realloc(szo,(j+1)*sizeof(char));
    }

    int main(int argc, char **argv) {
    FILE **fp = NULL;
    char *szo = NULL;
    int ch;
    FA *gyok = NULL;
    int i, j;

    if((fp = (FILE**)malloc((argc-1)*sizeof(FILE*)))==NULL)
    exit(1);
    for(i=1;i<argc;++i)
    if((fp[i-1] = fopen(argv[i],"rt+"))==NULL)
    exit(1);

    for(i=1;i<argc;++i) {
    j = 0;

    while((ch = fgetc(fp[i-1]))) {
    if((szo = memoriafoglalas(szo, j))==NULL)
    exit(1);

    if(atugras(ch) == HAMIS) {
    szo[j++] = tolower(ch);
    } else if(j > 0 || ch == (int)EOF) {
    szo[j] = '\0';
    beszuras(&gyok, szo, i-1);
    free(szo);
    szo = NULL;
    j = 0;

    if(ch == (int)EOF) {
    break;
    }
    }
    }
    fclose(fp[i-1]);
    }
    free(fp);
    bejaras(gyok, argc-1);
    torles(gyok);

    return 0;
    }

    Ez lefordul, csak hibás kimenetet ad vissza :( az egyetemi tesztelőn

  • blaces
    tag

    És most akkor hogy néz ki a progi és valgrind milyen hibát ír?

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #define IGAZ 1
    #define HAMIS !IGAZ


    typedef struct listaelem{
    char szo[50];
    struct listaelem *kov;
    }LISTAELEM;

    int abszolut(int a,int b)
    { int c;
    c=(a-b)>=0 ? (a-b):(a-b)*(-1);
    return c;
    }

    int keres(LISTAELEM *fej,char sz[])
    {
    LISTAELEM *seged;
    for(seged=fej;seged;seged=seged->kov)
    {
    if(strcmp(sz,seged->szo)!=0)
    return IGAZ;
    }
    return HAMIS;

    }

    LISTAELEM* beszur(LISTAELEM *fej,char szo[])
    {
    LISTAELEM *ujelem=(LISTAELEM*)malloc(sizeof(LISTAELEM));
    strcpy(ujelem->szo,szo);
    ujelem->kov=NULL;
    if(!fej)
    return ujelem;
    else
    {
    LISTAELEM *seg=fej;
    while(seg->kov)
    seg=seg->kov;
    seg->kov=ujelem;
    }
    return fej;
    }

    LISTAELEM* feldolgoz(FILE *f,LISTAELEM *fej)
    {
    char betu,sz[50];
    int j,i=0;
    int h=strlen(sz);
    while( (betu=fgetc(f)) !=EOF)
    {
    if(betu==' ' || betu==',' || betu=='!' || betu=='?' || betu=='.' || betu=='\n')
    {
    if(h>2)
    {
    fej=beszur(fej,sz);
    for(j=0;j<50;j++)
    sz[j]='\0';
    i=0;
    }
    }
    else
    {
    sz[i]=tolower(betu);
    i++;
    }
    }
    return fej;
    }

    int gyak(LISTAELEM *fej,char sz[])
    {
    LISTAELEM *seg;
    int gyakorisag=0;
    for(seg=fej;seg;seg=seg->kov)
    {
    if(strcmp(seg->szo,sz)==0)
    gyakorisag++;
    }
    return gyakorisag;
    }

    int main(int argc,char **argv)
    {
    FILE *f1,*f2;
    LISTAELEM *fej1=NULL,*fej2=NULL,*fej3=NULL,*seged=NULL;
    int gyak1,gyak2,szavak=0,n;
    float hasonlosag=0,eredm;

    f1=fopen(argv[1],"r");
    f2=fopen(argv[2],"r");
    fej1=feldolgoz(f1,fej1);
    fej2=feldolgoz(f2,fej2);

    for(seged=fej1;seged;seged=seged->kov)
    {
    if((n=keres(fej3,seged->szo))==0)
    {
    gyak1=gyak(fej1,seged->szo);
    gyak2=gyak(fej2,seged->szo);
    hasonlosag+=(abszolut(gyak1,gyak2))/(gyak1+gyak2);
    szavak++;
    }
    }

    for(seged=fej2;seged;seged=seged->kov)
    {
    if((n=keres(fej3,seged->szo))==0)
    {
    gyak1=gyak(fej1,seged->szo);
    gyak2=gyak(fej2,seged->szo);
    hasonlosag+=(abszolut(gyak1,gyak2))/(gyak1+gyak2);
    szavak++;
    }
    }

    eredm=hasonlosag/szavak;
    printf("%.5f\n",eredm);

    return 0;
    }

    valgrind -v eredmények:
    ==3173== Memcheck, a memory error detector.
    ==3173== Copyright (C) 2002-2006, and GNU GPL'd, by Julian Seward et al.
    ==3173== Using LibVEX rev 1658, a library for dynamic binary translation.
    ==3173== Copyright (C) 2004-2006, and GNU GPL'd, by OpenWorks LLP.
    ==3173== Using valgrind-3.2.1-Debian, a dynamic binary instrumentation framework.
    ==3173== Copyright (C) 2000-2006, and GNU GPL'd, by Julian Seward et al.
    ==3173==
    --3173-- Command line
    --3173-- ./elso
    --3173-- Startup, with flags:
    --3173-- -v
    --3173-- Contents of /proc/version:
    --3173-- Linux version 2.6.18-6-xen-amd64 (Debian 2.6.18.dfsg.1-23etch1) (dannf@debian.org) (gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)) #1 SMP Fri Dec 12 07:02:03 UTC 2008
    --3173-- Arch and hwcaps: AMD64, amd64-sse2
    --3173-- Valgrind library directory: /usr/lib/valgrind
    --3173-- Reading syms from /home/izgatopasi/Prog1/3/1/elso (0x400000)
    --3173-- Reading syms from /lib/ld-2.3.6.so (0x4000000)
    --3173-- Reading debug info from /lib/ld-2.3.6.so...
    --3173-- ... CRC mismatch (computed 1CBD6C2C wanted 509BB065)
    --3173-- object doesn't have a symbol table
    --3173-- Reading syms from /usr/lib/valgrind/amd64-linux/memcheck (0x38000000)
    --3173-- object doesn't have a dynamic symbol table
    --3173-- Reading suppressions file: /usr/lib/valgrind/default.supp
    --3173-- Reading syms from /usr/lib/valgrind/amd64-linux/vgpreload_core.so (0x4918000)
    --3173-- Reading syms from /usr/lib/valgrind/amd64-linux/vgpreload_memcheck.so (0x4A19000)
    --3173-- Reading syms from /lib/libc-2.3.6.so (0x4B1F000)
    --3173-- Reading debug info from /lib/libc-2.3.6.so...
    --3173-- ... CRC mismatch (computed AD7708C1 wanted 5D81B887)
    --3173-- object doesn't have a symbol table
    --3173-- REDIR: 0x4B91980 (rindex) redirected to 0x4A1C450 (rindex)
    --3173-- REDIR: 0x4B8D0F0 (malloc) redirected to 0x4A1B7D6 (malloc)
    ==3173== Syscall param open(filename) points to unaddressable byte(s)
    ==3173== at 0x4BDB152: open (in /lib/libc-2.3.6.so)
    ==3173== by 0x4B85F52: _IO_file_open (in /lib/libc-2.3.6.so)
    ==3173== by 0x4B8609B: _IO_file_fopen (in /lib/libc-2.3.6.so)
    ==3173== by 0x4B7C053: (within /lib/libc-2.3.6.so)
    ==3173== by 0x4008B9: main (1_feladat.c:94)
    ==3173== Address 0x0 is not stack'd, malloc'd or (recently) free'd
    --3173-- REDIR: 0x4B8B180 (free) redirected to 0x4A1B3E6 (free)
    ==3173==
    ==3173== Conditional jump or move depends on uninitialised value(s)
    ==3173== at 0x400771: feldolgoz (1_feladat.c:53)
    ==3173== by 0x4008E3: main (1_feladat.c:96)
    ==3173==
    ==3173== Invalid read of size 2
    ==3173== at 0x4B82DE1: getc (in /lib/libc-2.3.6.so)
    ==3173== by 0x400801: feldolgoz (1_feladat.c:54)
    ==3173== by 0x4008E3: main (1_feladat.c:96)
    ==3173== Address 0x0 is not stack'd, malloc'd or (recently) free'd
    ==3173==
    ==3173== Process terminating with default action of signal 11 (SIGSEGV)
    ==3173== Access not within mapped region at address 0x0
    ==3173== at 0x4B82DE1: getc (in /lib/libc-2.3.6.so)
    ==3173== by 0x400801: feldolgoz (1_feladat.c:54)
    ==3173== by 0x4008E3: main (1_feladat.c:96)
    --3173-- REDIR: 0x4B92830 (memset) redirected to 0x4A1C960 (memset)
    ==3173==
    ==3173== ERROR SUMMARY: 6 errors from 3 contexts (suppressed: 8 from 1)
    ==3173==
    ==3173== 1 errors in context 1 of 3:
    ==3173== Invalid read of size 2
    ==3173== at 0x4B82DE1: getc (in /lib/libc-2.3.6.so)
    ==3173== by 0x400801: feldolgoz (1_feladat.c:54)
    ==3173== by 0x4008E3: main (1_feladat.c:96)
    ==3173== Address 0x0 is not stack'd, malloc'd or (recently) free'd
    ==3173==
    ==3173== 1 errors in context 2 of 3:
    ==3173== Syscall param open(filename) points to unaddressable byte(s)
    ==3173== at 0x4BDB152: open (in /lib/libc-2.3.6.so)
    ==3173== by 0x4B85F52: _IO_file_open (in /lib/libc-2.3.6.so)
    ==3173== by 0x4B8609B: _IO_file_fopen (in /lib/libc-2.3.6.so)
    ==3173== by 0x4B7C053: (within /lib/libc-2.3.6.so)
    ==3173== by 0x4008B9: main (1_feladat.c:94)
    ==3173== Address 0x0 is not stack'd, malloc'd or (recently) free'd
    ==3173==
    ==3173== 4 errors in context 3 of 3:
    ==3173== Conditional jump or move depends on uninitialised value(s)
    ==3173== at 0x400771: feldolgoz (1_feladat.c:53)
    ==3173== by 0x4008E3: main (1_feladat.c:96)
    --3173--
    --3173-- supp: 8 Debian libc6 (2.3.x) stripped dynamic linker
    ==3173==
    ==3173== IN SUMMARY: 6 errors from 3 contexts (suppressed: 8 from 1)
    ==3173==
    ==3173== malloc/free: in use at exit: 0 bytes in 0 blocks.
    ==3173== malloc/free: 2 allocs, 2 frees, 1,136 bytes allocated.
    ==3173==
    ==3173== All heap blocks were freed -- no leaks are possible.
    --3173-- memcheck: sanity checks: 0 cheap, 1 expensive
    --3173-- memcheck: auxmaps: 0 auxmap entries (0k, 0M) in use
    --3173-- memcheck: auxmaps: 0 searches, 0 comparisons
    --3173-- memcheck: SMs: n_issued = 12 (192k, 0M)
    --3173-- memcheck: SMs: n_deissued = 0 (0k, 0M)
    --3173-- memcheck: SMs: max_noaccess = 524287 (8388592k, 8191M)
    --3173-- memcheck: SMs: max_undefined = 0 (0k, 0M)
    --3173-- memcheck: SMs: max_defined = 66 (1056k, 1M)
    --3173-- memcheck: SMs: max_non_DSM = 12 (192k, 0M)
    --3173-- memcheck: max sec V bit nodes: 0 (0k, 0M)
    --3173-- memcheck: set_sec_vbits8 calls: 0 (new: 0, updates: 0)
    --3173-- memcheck: max shadow mem size: 4336k, 4M
    --3173-- translate: fast SP updates identified: 921 ( 86.7%)
    --3173-- translate: generic_known SP updates identified: 90 ( 8.4%)
    --3173-- translate: generic_unknown SP updates identified: 51 ( 4.8%)
    --3173-- tt/tc: 2,648 tt lookups requiring 2,655 probes
    --3173-- tt/tc: 2,648 fast-cache updates, 2 flushes
    --3173-- transtab: new 1,324 (31,539 -> 556,589; ratio 176:10) [0 scs]
    --3173-- transtab: dumped 0 (0 -> ??)
    --3173-- transtab: discarded 0 (0 -> ??)
    --3173-- scheduler: 23,425 jumps (bb entries).
    --3173-- scheduler: 0/1,389 major/minor sched events.
    --3173-- sanity: 1 cheap, 1 expensive checks.
    --3173-- exectx: 30,011 lists, 15 contexts (avg 0 per list)
    --3173-- exectx: 18 searches, 4 full compares (222 per 1000)
    --3173-- exectx: 0 cmp2, 39 cmp4, 0 cmpAll

    valgrind eredmény (simán csak valgrind [nev]):
    ==3298== Memcheck, a memory error detector.
    ==3298== Copyright (C) 2002-2006, and GNU GPL'd, by Julian Seward et al.
    ==3298== Using LibVEX rev 1658, a library for dynamic binary translation.
    ==3298== Copyright (C) 2004-2006, and GNU GPL'd, by OpenWorks LLP.
    ==3298== Using valgrind-3.2.1-Debian, a dynamic binary instrumentation framework.
    ==3298== Copyright (C) 2000-2006, and GNU GPL'd, by Julian Seward et al.
    ==3298== For more details, rerun with: -v
    ==3298==
    ==3298== Syscall param open(filename) points to unaddressable byte(s)
    ==3298== at 0x4BDB152: open (in /lib/libc-2.3.6.so)
    ==3298== by 0x4B85F52: _IO_file_open (in /lib/libc-2.3.6.so)
    ==3298== by 0x4B8609B: _IO_file_fopen (in /lib/libc-2.3.6.so)
    ==3298== by 0x4B7C053: (within /lib/libc-2.3.6.so)
    ==3298== by 0x4008B9: main (1_feladat.c:94)
    ==3298== Address 0x0 is not stack'd, malloc'd or (recently) free'd
    ==3298==
    ==3298== Conditional jump or move depends on uninitialised value(s)
    ==3298== at 0x400771: feldolgoz (1_feladat.c:53)
    ==3298== by 0x4008E3: main (1_feladat.c:96)
    ==3298==
    ==3298== Invalid read of size 2
    ==3298== at 0x4B82DE1: getc (in /lib/libc-2.3.6.so)
    ==3298== by 0x400801: feldolgoz (1_feladat.c:54)
    ==3298== by 0x4008E3: main (1_feladat.c:96)
    ==3298== Address 0x0 is not stack'd, malloc'd or (recently) free'd
    ==3298==
    ==3298== Process terminating with default action of signal 11 (SIGSEGV)
    ==3298== Access not within mapped region at address 0x0
    ==3298== at 0x4B82DE1: getc (in /lib/libc-2.3.6.so)
    ==3298== by 0x400801: feldolgoz (1_feladat.c:54)
    ==3298== by 0x4008E3: main (1_feladat.c:96)
    ==3298==
    ==3298== ERROR SUMMARY: 6 errors from 3 contexts (suppressed: 8 from 1)
    ==3298== malloc/free: in use at exit: 0 bytes in 0 blocks.
    ==3298== malloc/free: 2 allocs, 2 frees, 1,136 bytes allocated.
    ==3298== For counts of detected errors, rerun with: -v
    ==3298== All heap blocks were freed -- no leaks are possible.
    Szegmens hiba

  • Jester01
    veterán

    Kijavítva, de ugyanúgy van valami baja :(, ugyanúgy érvénytelen memória hivatkozás

    És most akkor hogy néz ki a progi és valgrind milyen hibát ír?

  • Jester01
    veterán

    Ezeket modósítottam:

    char betu,sz[50]={};
    int j,i=0;
    int h=strlen(sz);
    while( (betu=fgetc(f)) !=EOF)
    {
    if(betu==' ' || betu==',' || betu=='!' || betu=='?' || betu=='.' || betu=='\n')
    {
    if(h>2)
    {
    fej=beszur(fej,sz);
    for(j=0;j<50;j++)
    sz[j]='\0';
    i=0;
    }

    HOgy kell a fejváltozót inicializálni? mert a jegyzetben nem találok róla leírást... Ezt hogy kell inicializálni?

    a fordított while feltétel azt takarta, hogy ehelyett: while(!seg->kov) ezt használjam: while(seg->kov)

    fej1 = NULL; stb.

  • blaces
    tag

    Már majdnem megdícsértelek, hogy milyen ügyesen használod a valgrind-ot. :U

    Az első hiba amit a vg talált, hogy az 57-es sorban nem inicializált változót használsz. Ez konkrétan az strlen(sz) és nyilván azért mert az sz nincs inicializálva. Ráadásul a cikluson belül is csupa szóközzel akarod feltölteni, 0 byteok helyett.

    A második az az első folyománya, ha azt javítod, ez is eltűnik.

    A harmadik a 37. sorban a main-ben inicializálatlan fej változók miatt van.

    A következő a 42. sorban gondolom a fordított while feltétel miatt van.

    #1000 :C

    Ezeket modósítottam:

    char betu,sz[50]={};
    int j,i=0;
    int h=strlen(sz);
    while( (betu=fgetc(f)) !=EOF)
    {
    if(betu==' ' || betu==',' || betu=='!' || betu=='?' || betu=='.' || betu=='\n')
    {
    if(h>2)
    {
    fej=beszur(fej,sz);
    for(j=0;j<50;j++)
    sz[j]='\0';
    i=0;
    }

    HOgy kell a fejváltozót inicializálni? mert a jegyzetben nem találok róla leírást... Ezt hogy kell inicializálni?

    a fordított while feltétel azt takarta, hogy ehelyett: while(!seg->kov) ezt használjam: while(seg->kov)

  • Fire/SOUL/CD
    félisten

    Hali!

    Így csináltam meg a házim:
    A feladat:[I]Írj programot, amely kiszámítja, hogy két szöveges állomány szóhasználata mennyire hasonló! A hasonlóságot egy 0 és 1 közé eső törtszámmal mérjük. Kiszámítása a következőképpen történik: minden szóra, ami legalább az egyik állományban előfordul, vesszük a szó gyakoriságát az első fájlban és a másodikban. A két gyakoriságot kivonjuk egymásból, majd a különbség abszolútértékét elosztjuk a szó összes előfordulásának számával (gyakoriság_az_első_fájlban + gyakoriság_a_második_fájlban). Ezt a számítást elvégezzük minden szóra. Az szavakra kiszámított értékeket végül összeadjuk, és elosztjuk a két állományban előforduló különböző szavak számával.

    A szöveges állományok nevét a program parancssori argumentumként kapja meg. Az állományok minden sora legfeljebb 1000 karakter hosszú. A sorokban a szavak szóközzel, vesszővel, felkiáltójellel, kérdőjellel és ponttal lehetnek elválasztva. A kis- és nagybetűket azonosként kell kezelni. Az állományok szavai közül csak azokat kell figyelembe venni, amelyek három vagy több karakterből állnak. Minden szó csak az angol ábécé kis- és nagybetűit tartalmazhatja.

    A program a kiszámított értéket írja a kimenetre 5 tizedesjegy pontossággal![/I]

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #define IGAZ 1
    #define HAMIS !IGAZ


    typedef struct listaelem{
    char szo[50];
    struct listaelem *kov;
    }LISTAELEM;

    int abszolut(int a,int b)
    { int c;
    c=(a-b)>=0 ? (a-b):(a-b)*(-1);
    return c;
    }

    int keres(LISTAELEM *fej,char sz[])
    {
    LISTAELEM *seged;
    for(seged=fej;seged;seged=seged->kov)
    {
    if(strcmp(sz,seged->szo)!=0)
    return IGAZ;
    }
    return HAMIS;

    }

    LISTAELEM* beszur(LISTAELEM *fej,char szo[])
    {
    LISTAELEM *ujelem=(LISTAELEM*)malloc(sizeof(LISTAELEM));
    strcpy(ujelem->szo,szo);
    ujelem->kov=NULL;
    if(!fej)
    return ujelem;
    else
    {
    LISTAELEM *seg=fej;
    while(!seg->kov)
    seg=seg->kov;
    seg->kov=ujelem;
    }
    return fej;
    }

    LISTAELEM* feldolgoz(FILE *f,LISTAELEM *fej)
    {
    char betu,sz[50];
    int j,i=0;
    while( (betu=fgetc(f)) !=EOF)
    {
    if(betu==' ' || betu==',' || betu=='!' || betu=='?' || betu=='.' || betu=='\n')
    {
    if(strlen(sz)>2)
    {
    fej=beszur(fej,sz);
    for(j=0;j<50;j++)
    sz[j]=' ';
    i=0;
    }
    }
    else
    {
    sz[i]=tolower(betu);
    i++;
    }
    }
    return fej;
    }

    int gyak(LISTAELEM *fej,char sz[])
    {
    LISTAELEM *seg;
    int gyakorisag=0;
    for(seg=fej;seg;seg=seg->kov)
    {
    if(strcmp(seg->szo,sz)==0)
    gyakorisag++;
    }
    return gyakorisag;
    }

    int main(int argc,char **argv)
    {
    FILE *f1,*f2;
    LISTAELEM *fej1,*fej2,*fej3,*seged;
    int gyak1,gyak2,szavak=0,n;
    float hasonlosag=0,eredm;

    f1=fopen(argv[1],"r");
    f2=fopen(argv[2],"r");
    fej1=feldolgoz(f1,fej1);
    fej2=feldolgoz(f2,fej2);

    for(seged=fej1;seged;seged=seged->kov)
    {
    if((n=keres(fej3,seged->szo))==0)
    {
    gyak1=gyak(fej1,seged->szo);
    gyak2=gyak(fej2,seged->szo);
    hasonlosag+=(abszolut(gyak1,gyak2))/(gyak1+gyak2);
    szavak++;
    }
    }

    for(seged=fej2;seged;seged=seged->kov)
    {
    if((n=keres(fej3,seged->szo))==0)
    {
    gyak1=gyak(fej1,seged->szo);
    gyak2=gyak(fej2,seged->szo);
    hasonlosag+=(abszolut(gyak1,gyak2))/(gyak1+gyak2);
    szavak++;
    }
    }

    eredm=hasonlosag/szavak;
    printf("%.5f\n",eredm);

    return 0;
    }

    De lefordításkor ilyen szegmens hibát ír ki:

    Szegmens hiba
    A debug.out fájlban nyomkövetési információk érhetőek el.
    A teszt_debug.out fájlban a nyomkövetés során előállt kimenet található!
    Érvenytelen memória hivatkozás.

    debug tartalma:
    ==21624== Conditional jump or move depends on uninitialised value(s)
    ==21624== at 0x40079A: feldolgoz (1_feladat.c:57)
    ==21624== by 0x4008C3: main (1_feladat.c:95)
    ==21624==
    ==21624== Conditional jump or move depends on uninitialised value(s)
    ==21624== at 0x4A1CD9E: strcpy (mc_replace_strmem.c:272)
    ==21624== by 0x4006E5: beszur (1_feladat.c:35)
    ==21624== by 0x4007B7: feldolgoz (1_feladat.c:59)
    ==21624== by 0x4008C3: main (1_feladat.c:95)
    ==21624==
    ==21624== Conditional jump or move depends on uninitialised value(s)
    ==21624== at 0x4006F7: beszur (1_feladat.c:37)
    ==21624== by 0x4007B7: feldolgoz (1_feladat.c:59)
    ==21624== by 0x4008C3: main (1_feladat.c:95)
    ==21624==
    ==21624== Invalid read of size 8
    ==21624== at 0x40071D: beszur (1_feladat.c:42)
    ==21624== by 0x4007B7: feldolgoz (1_feladat.c:59)
    ==21624== by 0x4008C3: main (1_feladat.c:95)
    ==21624== Address 0x38 is not stack'd, malloc'd or (recently) free'd
    ==21624==
    ==21624== Process terminating with default action of signal 11 (SIGSEGV)
    ==21624== Access not within mapped region at address 0x38
    ==21624== at 0x40071D: beszur (1_feladat.c:42)
    ==21624== by 0x4007B7: feldolgoz (1_feladat.c:59)
    ==21624== by 0x4008C3: main (1_feladat.c:95)

    Ez meg egy másik házinak a kódja, de itt is ugyanaz a hiba, érvénytelen memória hivatkozás:

    #include <stdio.h>
    #include <stdlib.h>

    typedef struct faelem{
    int adat;
    struct faelem *bal,*jobb;
    }FA;
    typedef struct listaelem{
    int adat;
    struct listaelem *kov;
    }LISTA;


    LISTA* beszur_lista(LISTA *fej,int adat)
    {
    LISTA *ujelem=(LISTA*)malloc(sizeof(LISTA));
    ujelem->adat=adat;
    ujelem->kov=NULL;
    if(!fej)
    return ujelem;
    else
    {
    LISTA *segb=fej;
    while(!segb->kov)
    segb=segb->kov;
    segb->kov=ujelem;
    }
    return fej;
    }



    FA *ujelem(){
    FA *uj = (FA *)malloc(sizeof(FA));

    uj -> bal = NULL;
    uj -> jobb = NULL;
    return uj;
    }


    FA *beszur_fa(FA *gyoker, int adat){
    FA *uj;

    if(gyoker == NULL)
    {
    uj = ujelem();
    uj -> adat = adat;
    gyoker = uj;
    }
    else if(adat <= gyoker -> adat)
    gyoker -> bal =beszur_fa(gyoker -> bal, adat);
    else if(adat > gyoker -> adat)
    gyoker -> jobb =beszur_fa(gyoker -> jobb, adat);
    return gyoker;
    }

    int elemszam(FA *fa)
    {
    return fa ? 1+elemszam(fa->bal)+elemszam(fa->jobb) : 0;
    }

    LISTA* preorder(FA *fa,LISTA *fej1)
    { if(fa)
    {
    fej1=beszur_lista(fej1,fa->adat);
    preorder(fa->bal,fej1);
    preorder(fa->jobb,fej1);
    }
    return fej1;
    }

    LISTA* inorder(FA *fa,LISTA *fej2)
    {
    if(fa)
    {
    inorder(fa->bal,fej2);
    fej2=beszur_lista(fej2,fa->adat);
    inorder(fa->jobb,fej2);
    }
    return fej2;
    }

    int hasonlit(LISTA *fej1,LISTA *fej2)
    {
    LISTA *seged1,*seged2;
    seged1=fej1;
    seged2=fej2;
    while(seged1)
    {
    if(seged1->adat!=seged2->adat)
    goto c;
    seged1=seged1->kov;
    seged2=seged2->kov;
    }
    c:return 1;
    return 0;
    }


    int main(int argc,char **argv)
    {
    int szam,i;
    FILE *f,*ki;
    FA *forras;
    LISTA *in,*pre;
    f=fopen(argv[1],"r");
    ki=fopen(argv[2],"w");
    fscanf(f,"%d\n",&szam);
    forras=beszur_fa(forras,szam);
    while(szam!=EOF)
    {
    fscanf(f,"%d\n",&szam);
    forras=beszur_fa(forras,szam);
    }
    in=inorder(forras,in);
    pre=preorder(forras,pre);

    i=hasonlit(pre,in);
    if(i==1)
    fprintf(ki,"nem\n");
    else fprintf(ki,"igen\n");

    fclose(f);
    fclose(ki);

    return 0;
    }

    A CodeBlocks nem talál hibákat, és az egyik C ismerősöm sem érti, hogy mi a gond... :R

    Hali!

    Na megnéztem a "gyakorlatban". Valóban a CodeBlocks befordítja minden hiba nélkül, még csak warning sincs. Persze ez csak azt jelenti, hogy formailag helyes a kód, de tartalmilag nem.
    Szerencsére kék halált nem dobott, de a hibajelentés küldése MS-nek, az befigyelt. Amellett, hogy javítod Jester01 kolléga válaszában található feltárt hibákat, azonkívűl gondoskodsz arról is, hogy ha egy program paraméterezve fut, akkor MINDEN ESETBEN ELLENŐRIZNI KELL A PARAMÉTEREK MEGLÉTÉT!

    Különben jön a kékhalaál, meg hibajelentés, meg szegmenshatár túllépés, meg még sok sok minden...

    Fire.

  • emvy
    félisten

    En eppen azon gondolkodom, h fogom a kovetkezo felevben a kalkulust applikalni, de ennek ellenére a gondolkodásmód elsajátítása miatt kell a matek.

    Milyen programokat írtál amihez nem kell matek de mégis lefedi a programfajták nagy részét? Gondolom nem vállalatírányítási rendszert dobtál össze.

    Tevedes ne essek, sok hulyeseget tanul az ember egyetemen is, de megegyszer mondom a matek: elsajatitando gondolkodasmod.

    Netrol meg nem lehet megtanulni programozni, esetleg kódolni ami két igen különböző dolog. Programozni elobb tanulsz meg matekon. Ja es persze a netrol megtanult dologbol is inkabb ganyolas lesz, mint kódolás.

    Modellezes alatt mit ertesz?

    Ha esetleg megosztanad azokat a programokat, ha penzbe kerulnek akkor meg, hogy egyaltalan mit csinal akkor lehet h valtozik a velemenyem.

    Regen en is igy gondoltam, de nem feltetlen szukseges a matektudas a programozashoz, ez a helyzet. Rengeteg programozasi feladat van, ahol az uzleti tudas joval fontosabb. (uzleti = domen specifikus)

    Szerk.: bazz, beneztem a datumot :)

Új hozzászólás Aktív témák

Hirdetés