Hirdetés

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

  • cellpeti
    nagyúr

    karaktersorozatot ugy alapbol char* valtozoba olvasol be. Korabban volt egy hosszabb eszmefuttatas a topikban arrol hogy milyen korulmenyek kozott igaz az hogy pointer = tomb. De a lenyeg, ha letaroltad char*-ba akkor azzal dolgozhatsz ugy mint tombbel.

    De hogy tárolom el char-ba? :U

  • shev7
    veterán

    Sziasztok!

    Tudnátok segíteni?Hogyan kell letárolni egy karaktersorozatot tömbbe? :U

    karaktersorozatot ugy alapbol char* valtozoba olvasol be. Korabban volt egy hosszabb eszmefuttatas a topikban arrol hogy milyen korulmenyek kozott igaz az hogy pointer = tomb. De a lenyeg, ha letaroltad char*-ba akkor azzal dolgozhatsz ugy mint tombbel.

  • cellpeti
    nagyúr

    Sziasztok!

    Tudnátok segíteni?Hogyan kell letárolni egy karaktersorozatot tömbbe? :U

  • Gyuri16
    senior tag

    Na szóval kezdjük ott gimibe járok szóval nem lesz semmilyen vizsga de nem akarok veszekedni . szóval valahogy úgy van hogy megkel adni egy számot pl.: 6 és utána ki adja azt hogy a szám osztható 2vel és 3mal is , és van ugye amikor nem osztható akkor irja hogy a szám nem osztható2vel és 3mal .

    Remélem most érthető voltam , elnézést a kellemetlenségekért

    #include <iostream>

    eddig juttotam :DDD

    #include <stdio.h>

    int main() {
    int x;
    printf("Add meg a szamot!\n");
    scanf("%d", &x);
    if (x % 6 == 0)
    printf("A szam oszthato kettovel es harommal is\n");
    else if (x % 2 == 0)
    printf("A szam kettovel oszthato, harommal nem\n");
    else if (x % 3 == 0)
    printf("A szam oszthato harommal, kettovel nem\n");
    else
    printf("A szam nem oszthato se kettovel se harommal\n");
    return 0;
    }

    meg mindig nem teljesen vilagosan irtad le, de gondolom valami ilyesmi kell. nezd meg, es probald meg megerteni mit csinal (direkt nem irtam legegyertelmubben), ne csak leadd a tanarnak

  • shev7
    veterán

    nem érted hogy nekem fogalmam sincs a c++ ról ez a házi feladatom és szeretném ha valaki leírná . ennyit kérek remélem nem nagy kérés.

    pedig hidd el, sokkal segitokeszebbek az emberek, ha nem azt kered, hogy hello ird meg az egeszet, hanem ha azt mondod, hogy idaig jutottam, ez hianyzik meg...

  • nepszter1
    addikt

    te meg nem erted, hogy fogalmam sincs mit akarsz?
    "...hogyan islehetne megirni azt hogy 2-vel és 3mal is osztható legyen "
    ezt hogyan ertelmezzem?? ennyit irtal, probaltam ra valaszolni. abbol amit irtam ha legalabb kicsit is akarod meg tudod irni a programot
    {itt egy osztonzo beszed lett volna, hogy nezz utana, tanuld meg. hiszen a vizsgan ugyis tudnod kell majd, de rajottem nem eri meg. ha ennyire nem erdekel a dolog ird le rendesen mit akarsz (hogyan van a beolvasas,...) es megirom}

    Na szóval kezdjük ott gimibe járok szóval nem lesz semmilyen vizsga de nem akarok veszekedni . szóval valahogy úgy van hogy megkel adni egy számot pl.: 6 és utána ki adja azt hogy a szám osztható 2vel és 3mal is , és van ugye amikor nem osztható akkor irja hogy a szám nem osztható2vel és 3mal .

    Remélem most érthető voltam , elnézést a kellemetlenségekért

    #include <iostream>

    eddig juttotam :DDD

  • Gyuri16
    senior tag

    nem érted hogy nekem fogalmam sincs a c++ ról ez a házi feladatom és szeretném ha valaki leírná . ennyit kérek remélem nem nagy kérés.

    te meg nem erted, hogy fogalmam sincs mit akarsz?
    "...hogyan islehetne megirni azt hogy 2-vel és 3mal is osztható legyen "
    ezt hogyan ertelmezzem?? ennyit irtal, probaltam ra valaszolni. abbol amit irtam ha legalabb kicsit is akarod meg tudod irni a programot
    {itt egy osztonzo beszed lett volna, hogy nezz utana, tanuld meg. hiszen a vizsgan ugyis tudnod kell majd, de rajottem nem eri meg. ha ennyire nem erdekel a dolog ird le rendesen mit akarsz (hogyan van a beolvasas,...) es megirom}

  • nepszter1
    addikt

    miutan beolvastad az adatokat vegzel egy ellenorzest.
    egy for ciklussal vegigmesz a string elemein, mindegyiken megnezed, hogy 1 es 6 kozott van-e.
    ezt legegyszerubben ugy, hogy a betu '1' es '6' kozott van-e (siman osszehasonlitassal), igy:

    char k;
    /* k-t beolvasod stb.. */
    if (k>='1' && k<='6') {
    /* a szam 1 es 6 kozott van */
    }

    ez a megoldas nem a legszebb, mivel bizik abban, hogy a kodolasban a szamok novekvo sorrendben vannak egymas utan (altalaban ez igy van). ha ez nem tetszik, akkor az isdigit() fv segithet.
    (bar megjegyzem en inkabb eleve szamokkent kezelnem ezeket az adatokat, es ugy is olvasnam be oket)

    az egesz tesztelest es beolvasast pedig egy ciklusba teszed, amit addig csinalsz, amig nem jo amit bead a felhasznalo

    tovabba nem lenne rossz megnezni azt is, hogy a beolvasott dobas valtozod megegyezik-e a beolvasott dobasok szamaval

    nepszter1: nem ertem mit kerdezel, olvasd el magad utan a hozzaszolasodat, es gondold ujra. ha egy szam osztoit akarod kiiratni, akkor vegigmesz egy ciklusban 2 tol a szamig, es a mar emlitett % operatorral megnezed osztja e.

    nem érted hogy nekem fogalmam sincs a c++ ról ez a házi feladatom és szeretném ha valaki leírná . ennyit kérek remélem nem nagy kérés.

  • Gyuri16
    senior tag

    No megírtam így, eredetileg is így kérték, egy kérdésem van még

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

    void main(){
    char str[100];
    int dobas;
    int i;
    int egy=0, ket=0, ha=0, negy=0, ot=0, hat=0;

    clrscr();

    printf("\nHany kocadobast vegez? ");
    scanf("%d", &dobas);
    printf("Irja be a kockadobasok eredmenyeit! ");
    scanf("%s", str);

    for(i=0;i<dobas;i++)
    {
    if (str[i] =='1')egy++;
    else if (str[i] == '2')ket++;
    else if (str[i] == '3')ha++;
    else if (str[i] == '4')negy++;
    else if (str[i] == '5')ot++;
    else if (str[i] == '6')hat++;
    }


    printf("1: %d db\n", egy);
    printf("2: %d db\n", ket);
    printf("3: %d db\n", ha);
    printf("4: %d db\n", negy);
    printf("5: %d db\n", ot);
    printf("6: %d db\n", hat);

    getch();
    }

    Hogy tudom a bekért számsor formai helyességét ellenőrizni egyszerűen? Ebben az esetben azt hogy szám-e, illetve hogy 1 és 6 között van.
    Előre is nagyon köszönöm a segítséget!

    miutan beolvastad az adatokat vegzel egy ellenorzest.
    egy for ciklussal vegigmesz a string elemein, mindegyiken megnezed, hogy 1 es 6 kozott van-e.
    ezt legegyszerubben ugy, hogy a betu '1' es '6' kozott van-e (siman osszehasonlitassal), igy:

    char k;
    /* k-t beolvasod stb.. */
    if (k>='1' && k<='6') {
    /* a szam 1 es 6 kozott van */
    }

    ez a megoldas nem a legszebb, mivel bizik abban, hogy a kodolasban a szamok novekvo sorrendben vannak egymas utan (altalaban ez igy van). ha ez nem tetszik, akkor az isdigit() fv segithet.
    (bar megjegyzem en inkabb eleve szamokkent kezelnem ezeket az adatokat, es ugy is olvasnam be oket)

    az egesz tesztelest es beolvasast pedig egy ciklusba teszed, amit addig csinalsz, amig nem jo amit bead a felhasznalo

    tovabba nem lenne rossz megnezni azt is, hogy a beolvasott dobas valtozod megegyezik-e a beolvasott dobasok szamaval

    nepszter1: nem ertem mit kerdezel, olvasd el magad utan a hozzaszolasodat, es gondold ujra. ha egy szam osztoit akarod kiiratni, akkor vegigmesz egy ciklusban 2 tol a szamig, es a mar emlitett % operatorral megnezed osztja e.

  • nepszter1
    addikt

    Ha egy A szám osztható egy B számmal, akkor a A-t osztva B-vel a maradék 0.
    A C nyelvben a modulus művelet (A % B) adja meg az osztás maradékát.

    Ha az a kérdés, hogy 2-vel is és 3-mal is, akkor egy modulus elég :)
    shev7 meg lelőtte :P

    De pontosan hogy van mert fingom sincs:D mert ez a házim .. :DDD

    azt hogy : kérem a számot: 6
    a szám osztható 2vel és 3mal is .

  • Bero
    aktív tag

    Bőven megfelelne ha a sorozatot egybe kezelné, és ha egy hiba is van közte, az egészet újból bekérné. Szerintem se túl logikus, de így kérték.

    Nagyon nem szeretek ilyet kérni, de most mégis megtenném :)
    Ha valaki tudna segíteni nekem a fentebbi kérdésben, hogy gyakorlatban hogy kell kivitelezni nagyon megköszönném.

  • Bero
    aktív tag

    mivel egyszerre kered be az osszes kockadobas eredmenyet, igy az ujra bekeres azt jelenti, hogy az egesz sorozatot ujra be kell kerned. Ha mar bekeresnel is ellenorizni akarsz, akkor celszeru karakterenkent beolvasni, es csak az adott karaktert kerni ujra

    Bőven megfelelne ha a sorozatot egybe kezelné, és ha egy hiba is van közte, az egészet újból bekérné. Szerintem se túl logikus, de így kérték.

  • shev7
    veterán

    Üdv , egy könnyű kérdésel fordulok hozzátok hogyan islehetne megirni azt hogy 2-vel és 3mal is osztható legyen ? köszönöm

    oszthato 6-tal? vagy en nem ertem mit szeretnel tudni... :F

    MOD: Karma: bocsi... azt hittem hogy akik C-ben programoznak, vagy akarmiben is programoznak, azoknak a matekhoz legalabb valami kozuk van... anelkul...

  • Karma
    félisten

    Üdv , egy könnyű kérdésel fordulok hozzátok hogyan islehetne megirni azt hogy 2-vel és 3mal is osztható legyen ? köszönöm

    Ha egy A szám osztható egy B számmal, akkor a A-t osztva B-vel a maradék 0.
    A C nyelvben a modulus művelet (A % B) adja meg az osztás maradékát.

    Ha az a kérdés, hogy 2-vel is és 3-mal is, akkor egy modulus elég :)
    shev7 meg lelőtte :P

  • nepszter1
    addikt

    Üdv , egy könnyű kérdésel fordulok hozzátok hogyan islehetne megirni azt hogy 2-vel és 3mal is osztható legyen ? köszönöm

  • shev7
    veterán

    illetve ha nem jó formailag, akkor újból kérjen adatot

    mivel egyszerre kered be az osszes kockadobas eredmenyet, igy az ujra bekeres azt jelenti, hogy az egesz sorozatot ujra be kell kerned. Ha mar bekeresnel is ellenorizni akarsz, akkor celszeru karakterenkent beolvasni, es csak az adott karaktert kerni ujra

  • Bero
    aktív tag

    No megírtam így, eredetileg is így kérték, egy kérdésem van még

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

    void main(){
    char str[100];
    int dobas;
    int i;
    int egy=0, ket=0, ha=0, negy=0, ot=0, hat=0;

    clrscr();

    printf("\nHany kocadobast vegez? ");
    scanf("%d", &dobas);
    printf("Irja be a kockadobasok eredmenyeit! ");
    scanf("%s", str);

    for(i=0;i<dobas;i++)
    {
    if (str[i] =='1')egy++;
    else if (str[i] == '2')ket++;
    else if (str[i] == '3')ha++;
    else if (str[i] == '4')negy++;
    else if (str[i] == '5')ot++;
    else if (str[i] == '6')hat++;
    }


    printf("1: %d db\n", egy);
    printf("2: %d db\n", ket);
    printf("3: %d db\n", ha);
    printf("4: %d db\n", negy);
    printf("5: %d db\n", ot);
    printf("6: %d db\n", hat);

    getch();
    }

    Hogy tudom a bekért számsor formai helyességét ellenőrizni egyszerűen? Ebben az esetben azt hogy szám-e, illetve hogy 1 és 6 között van.
    Előre is nagyon köszönöm a segítséget!

    illetve ha nem jó formailag, akkor újból kérjen adatot

  • Bero
    aktív tag

    No megírtam így, eredetileg is így kérték, egy kérdésem van még

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

    void main(){
    char str[100];
    int dobas;
    int i;
    int egy=0, ket=0, ha=0, negy=0, ot=0, hat=0;

    clrscr();

    printf("\nHany kocadobast vegez? ");
    scanf("%d", &dobas);
    printf("Irja be a kockadobasok eredmenyeit! ");
    scanf("%s", str);

    for(i=0;i<dobas;i++)
    {
    if (str[i] =='1')egy++;
    else if (str[i] == '2')ket++;
    else if (str[i] == '3')ha++;
    else if (str[i] == '4')negy++;
    else if (str[i] == '5')ot++;
    else if (str[i] == '6')hat++;
    }


    printf("1: %d db\n", egy);
    printf("2: %d db\n", ket);
    printf("3: %d db\n", ha);
    printf("4: %d db\n", negy);
    printf("5: %d db\n", ot);
    printf("6: %d db\n", hat);

    getch();
    }

    Hogy tudom a bekért számsor formai helyességét ellenőrizni egyszerűen? Ebben az esetben azt hogy szám-e, illetve hogy 1 és 6 között van.
    Előre is nagyon köszönöm a segítséget!

  • Gyuri16
    senior tag

    man waitpid

    POSIX.1-2001 specifies that if the disposition of SIGCHLD is set to SIG_IGN or the SA_NOCLDWAIT flag is set for
    SIGCHLD (see sigaction(2)), then children that terminate do not become zombies and a call to wait() or waitpid() will
    block until all children have terminated, and then fail with errno set to ECHILD. (The original POSIX standard left
    the behavior of setting SIGCHLD to SIG_IGN unspecified. Note that even though the default disposition of SIGCHLD is
    "ignore", explicitly setting the disposition to SIG_IGN results in different treatment of zombie process children.)

    Tehát a 2001-es POSIX szabvány szerint a signal miatt nem lesznek zombik, a waitpid pedig az összes gyereket bevárja és aztán hibát dob (vagyis nem adja vissza a status-t). Más szabványú implementáció esetén még a signal ellenére is szükséges lehet a waitpid a zombik elkerülésére.

    koszonom, ertem.
    igy viszont nem igazan vilagos mire is volt jo az, hogy beallitotta SIG_IGN-ra az elejen, hiszen ez a default ertek, es ha jol ertem akkor ezzel csak azt erte el, hogy a waitpid() az osszes gyerekre var (viszont itt mindig csak egy lesz egyszerre). tehat ha az elejen nem teszi oda a SIG_IGN-t, es a fork() utan tesz egy wait()-et, akkor nem ugyanez az eredmeny?
    a program ezen kivul nem hoz letre processzeket (kiveve, hogy a foprogram demonkent fut)

    mindenesetre majd holnap kiprobalom, hogy is mukodik ez

  • Jester01
    veterán

    koszonom, igy mar ertheto.

    kozben tovabb olvasva talaltam meg egy erdekeset:
    program elejen van egy ilyen:
    signal(SIGCHLD, SIG_IGN);
    (ha jol tudom ez a default beallitas..)

    aztan kesobb ez:

    int pid = fork();
    if (!pid) {
    /* ... */
    exit(1);
    }
    /*
    * Yeah, we set CSIGCHLD to SIG_IGN, so this should
    * never even succeed reliably anyway, but at least
    * we'll wait for the child to exit, and not have
    * potentially lots of children outstanding.
    */
    if (pid > 0) {
    int status;
    waitpid(pid, &status, 0);
    }

    itt ismet a kommentar amit nem ertek.
    azt tudom, hogy ha fork()-kal egy uj processzt letrehozunk, akkor az addig el (zombikent) amig a szulo (vagy ha mar az nincs akkor az init) meg nem hivja a wait()-et. ez itt megtortenik, nem ertem mi a gond a szerzo szerint

    mod: miert lettem en is OFF? en nem akartam

    man waitpid

    POSIX.1-2001 specifies that if the disposition of SIGCHLD is set to SIG_IGN or the SA_NOCLDWAIT flag is set for
    SIGCHLD (see sigaction(2)), then children that terminate do not become zombies and a call to wait() or waitpid() will
    block until all children have terminated, and then fail with errno set to ECHILD. (The original POSIX standard left
    the behavior of setting SIGCHLD to SIG_IGN unspecified. Note that even though the default disposition of SIGCHLD is
    "ignore", explicitly setting the disposition to SIG_IGN results in different treatment of zombie process children.)

    Tehát a 2001-es POSIX szabvány szerint a signal miatt nem lesznek zombik, a waitpid pedig az összes gyereket bevárja és aztán hibát dob (vagyis nem adja vissza a status-t). Más szabványú implementáció esetén még a signal ellenére is szükséges lehet a waitpid a zombik elkerülésére.

  • Gyuri16
    senior tag

    Valószínűleg ez fájl felülírás, tehát már lehet valami ott. Ha feltételezzük, hogy az olvasás a fájl végéig megy, akkor 0 byte hatására még ha van is utána szemét az C stringként már nem fog látszani.

    Pl. ha a fájlban most az van, hogy "makvirag" és azzal akarod felülírni, hogy "rozsa" akkor a 0 byte nélkül az lenne ott átmenetileg, hogy "rozsarag". Ha egy másik program épp ilyenkor olvasná ki akkor hibás adatot kapna. Ha viszont a lezáró nulla byte is bekerül, akkor azt fogja kapni, hogy "rozsa<0>ag". De mivel a C logika szerint a string csak a 0 byteig tart, ezért ez a helyes "rozsa" értékkel egyenértékű. Ezután persze az ftruncate le fogja vágni a fölösleges byteokat, szóval csak egy nagyon rövid ideig fordulhat elő.

    koszonom, igy mar ertheto.

    kozben tovabb olvasva talaltam meg egy erdekeset:
    program elejen van egy ilyen:
    signal(SIGCHLD, SIG_IGN);
    (ha jol tudom ez a default beallitas..)

    aztan kesobb ez:

    int pid = fork();
    if (!pid) {
    /* ... */
    exit(1);
    }
    /*
    * Yeah, we set CSIGCHLD to SIG_IGN, so this should
    * never even succeed reliably anyway, but at least
    * we'll wait for the child to exit, and not have
    * potentially lots of children outstanding.
    */
    if (pid > 0) {
    int status;
    waitpid(pid, &status, 0);
    }

    itt ismet a kommentar amit nem ertek.
    azt tudom, hogy ha fork()-kal egy uj processzt letrehozunk, akkor az addig el (zombikent) amig a szulo (vagy ha mar az nincs akkor az init) meg nem hivja a wait()-et. ez itt megtortenik, nem ertem mi a gond a szerzo szerint

    mod: miert lettem en is OFF? en nem akartam

  • Sk8erPeter
    nagyúr

    régen c++ ban sokat programoztam igaz ijen alap szinten aztán most ojan fura c ben h ijen fügvénymegadások villamosmérnöknek tanulok és ijent kérnek főleg h magas feszen mert vannak akik kisfeszen vannak azoknak ok nekik kell plc ket meg mikro procikat stb stb na mind1 még 1 szer kösz szépen:)

    Az "ilyen" és "olyan" szavakat szándékosan írtad következetesen pontos j-vel? :U Mondták már neked, hogy a fórum nem chat, és ezért itt illik tagolni és helyesen írni a mondataidat?

  • Jester01
    veterán

    egy kis program forraskodjat neztem, ennel megakadtam:

    n = snprintf(buffer, sizeof(buffer),"...",... );
    /*
    * We write it with the final '\0' and then truncate it.
    * This way, even if somebody were to read it concurrently,
    * the data should always be valid as a string.
    */
    write(fd, buffer, n+1);
    ftruncate(fd, n);

    mit akar jelenteni ez a komment? es miert is jo ez igy?

    Valószínűleg ez fájl felülírás, tehát már lehet valami ott. Ha feltételezzük, hogy az olvasás a fájl végéig megy, akkor 0 byte hatására még ha van is utána szemét az C stringként már nem fog látszani.

    Pl. ha a fájlban most az van, hogy "makvirag" és azzal akarod felülírni, hogy "rozsa" akkor a 0 byte nélkül az lenne ott átmenetileg, hogy "rozsarag". Ha egy másik program épp ilyenkor olvasná ki akkor hibás adatot kapna. Ha viszont a lezáró nulla byte is bekerül, akkor azt fogja kapni, hogy "rozsa<0>ag". De mivel a C logika szerint a string csak a 0 byteig tart, ezért ez a helyes "rozsa" értékkel egyenértékű. Ezután persze az ftruncate le fogja vágni a fölösleges byteokat, szóval csak egy nagyon rövid ideig fordulhat elő.

  • Gyuri16
    senior tag

    egy kis program forraskodjat neztem, ennel megakadtam:

    n = snprintf(buffer, sizeof(buffer),"...",... );
    /*
    * We write it with the final '\0' and then truncate it.
    * This way, even if somebody were to read it concurrently,
    * the data should always be valid as a string.
    */
    write(fd, buffer, n+1);
    ftruncate(fd, n);

    mit akar jelenteni ez a komment? es miert is jo ez igy?

  • sorath
    csendes tag

    beírtam neki a pauset most nem fut le egyből viszont totalból indítottam még és elfogadja h akarmi.exe 10 50 mondjuk de kiírásnál a számokat nem adja ki csak végig léptet annyiszor amennyi prim szam van megnézem dos alatt mit csin most

    régen c++ ban sokat programoztam igaz ijen alap szinten aztán most ojan fura c ben h ijen fügvénymegadások villamosmérnöknek tanulok és ijent kérnek főleg h magas feszen mert vannak akik kisfeszen vannak azoknak ok nekik kell plc ket meg mikro procikat stb stb na mind1 még 1 szer kösz szépen:)

  • sorath
    csendes tag

    OK, túlléptem. :D Azért amikor energiám van, még majd lelkesen írogatok programokat, és akkor széjjel lehet szedni. :D :R

    (#1673) sorath: szívesen. :) Sikerült működésre bírni a progit? Vágod már a parancssoros dolgot?

    beírtam neki a pauset most nem fut le egyből viszont totalból indítottam még és elfogadja h akarmi.exe 10 50 mondjuk de kiírásnál a számokat nem adja ki csak végig léptet annyiszor amennyi prim szam van megnézem dos alatt mit csin most

  • Sk8erPeter
    nagyúr

    "Vagy csak én vagyok a maradi, hogy meg szoktam köszönni, ha segítenek nekem?"

    Mit koszonjon meg? Nem latod, hogy nem mukodik neki :DD :DD

    lepj tul ezen :) te vagy azon keves lelkesek egyike akik jofejsegbol ingyen megcsinaljak mas hazijat. Majd megunod, en is meguntam. De addig meg ne hagyd hogy ilyenek eltantoritsanak, ha jol tudom te is meg csak tanulod a dolgokat, jo gyakorlas ez. Mi meg majd szetszedjuk, es abbol is tanul mindenki aki a topicot latogatja. Savazas nem lesz, abban biztos lehetsz!

    OK, túlléptem. :D Azért amikor energiám van, még majd lelkesen írogatok programokat, és akkor széjjel lehet szedni. :D :R

    (#1673) sorath: szívesen. :) Sikerült működésre bírni a progit? Vágod már a parancssoros dolgot?

  • sorath
    csendes tag

    Honnan indítod el így? Ha mondjuk Total Commanderben adod be neki így a két paramétert, akkor gyorsan lefut, aztán kilép a fenébe. Az MS-DOS parancssorról kell beadni neki. Vagy akkor tegyél a return elé egy várakoztatást, mondjuk Windows alatt beteheted akár a system("PAUSE"); sort is, de ez alapból kerülendő: Things to Avoid in C/C++ -- system("pause"), de egy ilyen full egyszerű programnál nem lesz bajod belőle.
    Kipróbáltam a programot, mielőtt bemásoltam volna, működik, "a hiba az Ön gépében van". Amúgy szívesen...

    Meg köszöntem volna am nagyon rendes volt és tényleg nagyon sokat segített!!
    Köszönöm!

  • shev7
    veterán

    Ebben teljesen igazad van, függvénynek nem I/O művelet a dolga, csakis annak elvégzése, amiért meghívták. A főprogram írogasson ki. Tehát ilyen egyetértek veled, de ha kicsit több energiát fektettem volna a dologba, akkor biztos feltűnt volna. :) :R

    (#1668) shev7: OK, igaz, végül is nekem is jó, ha szóltok, hogy valahol lehetett volna jobban. Csak azt hittem, most jön a saváradat, ami miatt aztán szégyellhetem a pofám, hogy hogy írhattam ilyen sz@rt. :DDD Amúgy igazatok van abban, amiket írtatok. :K
    Mondjuk azt bírom, hogy a srác, aki annyit kérdezősködött, és akinek megírtam, még csak annyit se mondott, hogy "kösz vaze"... :D Így próbáljon segíteni az ember másnak. Vagy csak én vagyok a maradi, hogy meg szoktam köszönni, ha segítenek nekem? :D

    "Vagy csak én vagyok a maradi, hogy meg szoktam köszönni, ha segítenek nekem?"

    Mit koszonjon meg? Nem latod, hogy nem mukodik neki :DD :DD

    lepj tul ezen :) te vagy azon keves lelkesek egyike akik jofejsegbol ingyen megcsinaljak mas hazijat. Majd megunod, en is meguntam. De addig meg ne hagyd hogy ilyenek eltantoritsanak, ha jol tudom te is meg csak tanulod a dolgokat, jo gyakorlas ez. Mi meg majd szetszedjuk, es abbol is tanul mindenki aki a topicot latogatja. Savazas nem lesz, abban biztos lehetsz!

  • Sk8erPeter
    nagyúr

    igazad van, megzavartak a kommentek :B

    Azért nem tértem vissza egyből már a for ciklusból, mert utána lehet, hogy akar további műveleteket végezni, vagy mittudomén, kiírni valami üzenetet, akkor legyen szabadon bővíthető, könnyebben átalakítható.
    egy szo: KISS :) annak a fuggvenynek az a dolga hogy megmondja prim-e vagy nem. lehet nekem mas a velemenyem a fuggvenyek tervezeserol (es nem feltetlenul jo), ezert irtam csak

    Már kezdem bánni, hogy megcsináltam a programot a srác helyett.
    sorry, nem ezt akartam elerni.
    szerintem egy ilyen forumon van helye errol beszelni, hiszen van itt jopar szakember, akiknek a velemenyere adok

    Ebben teljesen igazad van, függvénynek nem I/O művelet a dolga, csakis annak elvégzése, amiért meghívták. A főprogram írogasson ki. Tehát ilyen egyetértek veled, de ha kicsit több energiát fektettem volna a dologba, akkor biztos feltűnt volna. :) :R

    (#1668) shev7: OK, igaz, végül is nekem is jó, ha szóltok, hogy valahol lehetett volna jobban. Csak azt hittem, most jön a saváradat, ami miatt aztán szégyellhetem a pofám, hogy hogy írhattam ilyen sz@rt. :DDD Amúgy igazatok van abban, amiket írtatok. :K
    Mondjuk azt bírom, hogy a srác, aki annyit kérdezősködött, és akinek megírtam, még csak annyit se mondott, hogy "kösz vaze"... :D Így próbáljon segíteni az ember másnak. Vagy csak én vagyok a maradi, hogy meg szoktam köszönni, ha segítenek nekem? :D

  • Sk8erPeter
    nagyúr

    annyi kérdésem lenne hogy ugye a min és max értékét úgy adom meg
    hogy pl: akarmi.exe 10 50 de így indítom lefut de semmi más nem történik

    Honnan indítod el így? Ha mondjuk Total Commanderben adod be neki így a két paramétert, akkor gyorsan lefut, aztán kilép a fenébe. Az MS-DOS parancssorról kell beadni neki. Vagy akkor tegyél a return elé egy várakoztatást, mondjuk Windows alatt beteheted akár a system("PAUSE"); sort is, de ez alapból kerülendő: Things to Avoid in C/C++ -- system("pause"), de egy ilyen full egyszerű programnál nem lesz bajod belőle.
    Kipróbáltam a programot, mielőtt bemásoltam volna, működik, "a hiba az Ön gépében van". Amúgy szívesen...

  • Gyuri16
    senior tag

    A névvel kapcsolatban igazad van, dehát a feladat megvalósítása szempontjából kb. az volt az, amit a legjobban lesz@rtam. ;] Amúgy sem gondolkodtam olyan túl sokat a feladat megoldásán, nem épp ezen kell leakadni. :D

    "viszont foloslegesen mesz vegig az osszes oszton"
    Már miért mennék végig az összes osztón? :Y
    A for ciklusból szerintem nem vettél észre egy részletet:
    (i<max && divider<2)
    (A zárójelezés szándékos, bár nem lenne kötelező, hogy jobban látható legyen, hogy összetartozik.)
    Tehát eleve ha már divider mondjuk elérte a 2-t, akkor nem is fut tovább a ciklus. :U
    Azért nem tértem vissza egyből már a for ciklusból, mert utána lehet, hogy akar további műveleteket végezni, vagy mittudomén, kiírni valami üzenetet, akkor legyen szabadon bővíthető, könnyebben átalakítható. Legfeljebb abban az esetben csak kiírja, hogy prím vagy sem, aztán végzi tovább a dolgát, ahogy akarja.
    Ezek fényében nem nagyon értem a kritikát.

    igazad van, megzavartak a kommentek :B

    Azért nem tértem vissza egyből már a for ciklusból, mert utána lehet, hogy akar további műveleteket végezni, vagy mittudomén, kiírni valami üzenetet, akkor legyen szabadon bővíthető, könnyebben átalakítható.
    egy szo: KISS :) annak a fuggvenynek az a dolga hogy megmondja prim-e vagy nem. lehet nekem mas a velemenyem a fuggvenyek tervezeserol (es nem feltetlenul jo), ezert irtam csak

    Már kezdem bánni, hogy megcsináltam a programot a srác helyett.
    sorry, nem ezt akartam elerni.
    szerintem egy ilyen forumon van helye errol beszelni, hiszen van itt jopar szakember, akiknek a velemenyere adok

  • shev7
    veterán

    Pedig direkt sokat kommenteztem, azt hittem, attól lesz egyértelmű. :D De akkor nem. De mondjuk nem tudom, minek mentegetőzzek, mondtam, hogy nem a legtökéletesebb program, de elég gyorsan írtam, így nem foglalkoztam olyanokkal, mint a "függvény neve", "van-e felesleges változó, és ki lehet-e váltani valamivel, minimalizálni a kódot"... Már kezdem bánni, hogy megcsináltam a programot a srác helyett... :U

    "Már kezdem bánni, hogy megcsináltam a programot a srác helyett... "

    azt sose band. Es a kritikat se vedd szemelyes sertesnek. A cel nem az, hogy megmutassuk rossz amit irtal, egyaltalan nem. A cel az, hogy mas is tanuljon belole.

  • Bero
    aktív tag

    Egyszerű: nem törődsz a beolvasott szöveg hosszával, mindig 100 elemig fut a ciklusod. Feltéve, hogy a getline függvény jól működik (elég sok helyen írták ugyanezt a topikban, gondolom valami órai sablon), akkor a visszatérési értéke a beolvasott karakterek száma, használd ezt a ciklus végértékének.

    Köszönöm, így már működik.
    Még egy kérdés, hogy tudom elintézni azt, hogy az elején a program rákérdezzen hány dobást fogunk végezni, és addig kérje be?
    Ha egy int-be scanf-el bekérek egy számot, akkor a getline nem is fut le.

    Nagyon szégyelem magam, túlságosan is kezdő vagyok hozzá, de remélem azért érthetően fogalmaztam a kérdést.

    Iskolai sablon a getline, tanárok szerint minden programhoz használnunk kell, de az igazság az hogy jobbat én nem is tudok varázsolni.

  • Sk8erPeter
    nagyúr

    teny, hogy feleslegesen nem fut a ciklusod de a divider valtozo behozasa a kepbe csak feleslegesen bonyolitja az algoritmust, es rontja az olvashatosagot, (nekem legalabbis beletelt par percbe mig felfogtam, hogy mi van, es miert is mukodik jol) Ha valami uzenetet akar kiirni, ahhoz nem kell ez a varazslas, megy az a return elott is.

    Pedig direkt sokat kommenteztem, azt hittem, attól lesz egyértelmű. :D De akkor nem. De mondjuk nem tudom, minek mentegetőzzek, mondtam, hogy nem a legtökéletesebb program, de elég gyorsan írtam, így nem foglalkoztam olyanokkal, mint a "függvény neve", "van-e felesleges változó, és ki lehet-e váltani valamivel, minimalizálni a kódot"... Már kezdem bánni, hogy megcsináltam a programot a srác helyett... :U

  • sorath
    csendes tag

    Na, közben rohangásztam, meg kajáltam, de végül sikerült megírni, jól telepakoltam neked kommentekkel, hogy értsd, mit miért csináltam. :D

    #include <stdio.h>
    #include <math.h> /* gyökvonás miatt */
    #include <ctype.h> /* isdigit() miatt */
    #include <stdlib.h> /* atoi miatt */

    int prime_or_not(int number); /* deklaráljuk, hogy van ilyen fv.-ünk. Most nem a feladatban meghatározott legrosszabb algoritmust fogom használni. */

    int main(int argc, char *argv[])
    {
    int min, max, temp;

    if(argc<3){
    /* hibaüzenetek, kilépés hibával */
    fputs("Tul keves a parameter!\n", stderr);
    return -1;
    }

    if( isdigit(*argv[1]) )
    min = atoi(argv[1]);
    else{
    fputs("Az elso parameter nem szam!\n", stderr);
    return -1;
    }

    if( isdigit(*argv[2]) )
    max = atoi(argv[2]);
    else{
    fputs("A masodik parameter nem szam!\n", stderr);
    return -1;
    }

    if(min>max){ /* ezt egy fv.-be is lehetne írni [swap(min,max);], most nem tököltem vele */
    temp=min; /* átmenetileg eltároljuk min értékét, aztán átadjuk max-nak */
    min=max;
    max=temp;
    }

    printf("A %d es %d kozotti primszamok:\n",min,max);
    /* jöhet a prímtesztelés, prímek kiírása */
    for(;min<=max;++min)
    if(prime_or_not(min))
    printf("%d\n",min);

    return 0; /* VÉGE */
    }

    /***** Prímtesztelő függvény *****/

    int prime_or_not(int number){
    int i, divider, max;
    if(number==0 || number==1) return 0; /* ezek nem prímek! */

    max=(int)(sqrt(number)+1); /* "Csak a p≤(négyzetgyök n) -ig szükséges próbálkozni." lásd pl. Wikipédia. Itt: cast-olás. */

    for(divider=1,i=2;(i<max && divider<2);++i)
    /* divider<2-nek az az oka, hogy meghatároztuk a max-ot, és az semmiképp nem érheti el magát a számot, így jelen esetben önmaga nem lesz osztója (mint a szabály szerint), így a divider 2-re se mehet fel a prímeknél sem */
    {
    if(number%i==0) /* ha maradék nélkül megvan a számban az i aktuális értéke */
    divider=i;
    }
    if(divider>1) return 0; /* nem prím */
    return 1; /*egyébként prím */
    }

    annyi kérdésem lenne hogy ugye a min és max értékét úgy adom meg
    hogy pl: akarmi.exe 10 50 de így indítom lefut de semmi más nem történik

  • shev7
    veterán

    A névvel kapcsolatban igazad van, dehát a feladat megvalósítása szempontjából kb. az volt az, amit a legjobban lesz@rtam. ;] Amúgy sem gondolkodtam olyan túl sokat a feladat megoldásán, nem épp ezen kell leakadni. :D

    "viszont foloslegesen mesz vegig az osszes oszton"
    Már miért mennék végig az összes osztón? :Y
    A for ciklusból szerintem nem vettél észre egy részletet:
    (i<max && divider<2)
    (A zárójelezés szándékos, bár nem lenne kötelező, hogy jobban látható legyen, hogy összetartozik.)
    Tehát eleve ha már divider mondjuk elérte a 2-t, akkor nem is fut tovább a ciklus. :U
    Azért nem tértem vissza egyből már a for ciklusból, mert utána lehet, hogy akar további műveleteket végezni, vagy mittudomén, kiírni valami üzenetet, akkor legyen szabadon bővíthető, könnyebben átalakítható. Legfeljebb abban az esetben csak kiírja, hogy prím vagy sem, aztán végzi tovább a dolgát, ahogy akarja.
    Ezek fényében nem nagyon értem a kritikát.

    teny, hogy feleslegesen nem fut a ciklusod de a divider valtozo behozasa a kepbe csak feleslegesen bonyolitja az algoritmust, es rontja az olvashatosagot, (nekem legalabbis beletelt par percbe mig felfogtam, hogy mi van, es miert is mukodik jol) Ha valami uzenetet akar kiirni, ahhoz nem kell ez a varazslas, megy az a return elott is.

  • Sk8erPeter
    nagyúr

    szerintem a prime_or_not nagyon szerencsetlen fuggvenynev, hiszen a "prim vagy nem" mindig igaz, nem egyertelmu mit csinal a fuggveny. inkabb is_prime vagy hasonlo javasolt.
    igen, szeretem mas kodjat kritizalni ;]

    te mar a jobb verziot csinaltad, ami csak a gyokeig keresi az osztokat. viszont foloslegesen mesz vegig az osszes oszton, ha mar megtalaltad, hogy valami osztja (divider valtozod), ott mar ki tudod jelenteni, hogy nem prim

    itt az en verziom (tiedet felhasznalva), ami jobban koveti az eredeti kiirast (ezert aztan butabb is, viszont lehet kicsit egyszerubb):

    #include <stdio.h>
    #include <ctype.h> /* isdigit() miatt */
    #include <stdlib.h> /* atoi miatt */

    int prim(int i);

    int main(int argc, char *argv[]) {
    /* beolvasas, ugyanaz.. */

    int i;
    for (i=min; i<=max; i++) {
    if (prim(i))
    printf("%d\n",i);
    }
    }

    int prim (int i) {
    if (i<2)
    return 0;
    int j;
    for (j=2; j<i; j++) // itt eleg lenne sqrt(i)-ig
    if (i%j==0)
    return 0;
    return 1;
    }

    A névvel kapcsolatban igazad van, dehát a feladat megvalósítása szempontjából kb. az volt az, amit a legjobban lesz@rtam. ;] Amúgy sem gondolkodtam olyan túl sokat a feladat megoldásán, nem épp ezen kell leakadni. :D

    "viszont foloslegesen mesz vegig az osszes oszton"
    Már miért mennék végig az összes osztón? :Y
    A for ciklusból szerintem nem vettél észre egy részletet:
    (i<max && divider<2)
    (A zárójelezés szándékos, bár nem lenne kötelező, hogy jobban látható legyen, hogy összetartozik.)
    Tehát eleve ha már divider mondjuk elérte a 2-t, akkor nem is fut tovább a ciklus. :U
    Azért nem tértem vissza egyből már a for ciklusból, mert utána lehet, hogy akar további műveleteket végezni, vagy mittudomén, kiírni valami üzenetet, akkor legyen szabadon bővíthető, könnyebben átalakítható. Legfeljebb abban az esetben csak kiírja, hogy prím vagy sem, aztán végzi tovább a dolgát, ahogy akarja.
    Ezek fényében nem nagyon értem a kritikát.

  • shev7
    veterán

    Üdvözletem!
    Segítséget szeretnék kérni, hogy miért nem működik ez ebben a formában:

    #include <stdio.h>
    #include <conio.h>
    #define MAX 100

    int getline(char s[],int lim)
    {
    int i;
    char c;
    for(i=0;i<lim && (c=getchar())!=EOF && c!='\n';i++)
    { s[i]=c; }
    s[i]='\0';
    while(c!=EOF && c!='\n')
    c=getchar();
    return i;
    }

    void main(void)
    {
    char str[MAX];
    int i;
    int egyeb=0, egy=0, ket=0, ha=0, negy=0, ot=0, hat=0;

    clrscr();

    printf("K‚rek egy sort:");
    getline(str,MAX);

    for(i=0; i<MAX; i++)
    {

    if (str[i] == '1')egy++;
    else if(str[i] == '2')ket++;
    else if(str[i] == '3')ha++;
    else if(str[i] == '4')negy++;
    else if(str[i] == '5')ot++;
    else if(str[i] == '6')hat++;
    else egyeb++;

    }

    printf("%s", str);
    printf("\n1 = %d", egy);
    printf("\n2 = %d", ket);
    printf("\n3 = %d", ha);
    printf("\n4 = %d", negy);
    printf("\n5 = %d", ot);
    printf("\n6 = %d", hat);

    getch();

    }

    kockadobásokat kér be, max 100-at, és utána egyszerűen megszámolja.
    Előre is köszönöm!

    egyreszt ez nem ertem miert kell:
    while(c!=EOF && c!='\n')
    c=getchar();

    Masreszt hiaba csa 10-et olvasol be ha a vizsgalat a main-ben 100-ig megy. Ott mar nem vizsgalod, hogy eljutottal-e a \0-ig

    Masreszt ez talan problemat fog okozni, ha i erteke 100

    s[i]='\0';

  • Karma
    félisten

    Üdvözletem!
    Segítséget szeretnék kérni, hogy miért nem működik ez ebben a formában:

    #include <stdio.h>
    #include <conio.h>
    #define MAX 100

    int getline(char s[],int lim)
    {
    int i;
    char c;
    for(i=0;i<lim && (c=getchar())!=EOF && c!='\n';i++)
    { s[i]=c; }
    s[i]='\0';
    while(c!=EOF && c!='\n')
    c=getchar();
    return i;
    }

    void main(void)
    {
    char str[MAX];
    int i;
    int egyeb=0, egy=0, ket=0, ha=0, negy=0, ot=0, hat=0;

    clrscr();

    printf("K‚rek egy sort:");
    getline(str,MAX);

    for(i=0; i<MAX; i++)
    {

    if (str[i] == '1')egy++;
    else if(str[i] == '2')ket++;
    else if(str[i] == '3')ha++;
    else if(str[i] == '4')negy++;
    else if(str[i] == '5')ot++;
    else if(str[i] == '6')hat++;
    else egyeb++;

    }

    printf("%s", str);
    printf("\n1 = %d", egy);
    printf("\n2 = %d", ket);
    printf("\n3 = %d", ha);
    printf("\n4 = %d", negy);
    printf("\n5 = %d", ot);
    printf("\n6 = %d", hat);

    getch();

    }

    kockadobásokat kér be, max 100-at, és utána egyszerűen megszámolja.
    Előre is köszönöm!

    Egyszerű: nem törődsz a beolvasott szöveg hosszával, mindig 100 elemig fut a ciklusod. Feltéve, hogy a getline függvény jól működik (elég sok helyen írták ugyanezt a topikban, gondolom valami órai sablon), akkor a visszatérési értéke a beolvasott karakterek száma, használd ezt a ciklus végértékének.

  • Bero
    aktív tag

    Üdvözletem!
    Segítséget szeretnék kérni, hogy miért nem működik ez ebben a formában:

    #include <stdio.h>
    #include <conio.h>
    #define MAX 100

    int getline(char s[],int lim)
    {
    int i;
    char c;
    for(i=0;i<lim && (c=getchar())!=EOF && c!='\n';i++)
    { s[i]=c; }
    s[i]='\0';
    while(c!=EOF && c!='\n')
    c=getchar();
    return i;
    }

    void main(void)
    {
    char str[MAX];
    int i;
    int egyeb=0, egy=0, ket=0, ha=0, negy=0, ot=0, hat=0;

    clrscr();

    printf("K‚rek egy sort:");
    getline(str,MAX);

    for(i=0; i<MAX; i++)
    {

    if (str[i] == '1')egy++;
    else if(str[i] == '2')ket++;
    else if(str[i] == '3')ha++;
    else if(str[i] == '4')negy++;
    else if(str[i] == '5')ot++;
    else if(str[i] == '6')hat++;
    else egyeb++;

    }

    printf("%s", str);
    printf("\n1 = %d", egy);
    printf("\n2 = %d", ket);
    printf("\n3 = %d", ha);
    printf("\n4 = %d", negy);
    printf("\n5 = %d", ot);
    printf("\n6 = %d", hat);

    getch();

    }

    kockadobásokat kér be, max 100-at, és utána egyszerűen megszámolja.
    Előre is köszönöm!

  • Gyuri16
    senior tag

    Na, közben rohangásztam, meg kajáltam, de végül sikerült megírni, jól telepakoltam neked kommentekkel, hogy értsd, mit miért csináltam. :D

    #include <stdio.h>
    #include <math.h> /* gyökvonás miatt */
    #include <ctype.h> /* isdigit() miatt */
    #include <stdlib.h> /* atoi miatt */

    int prime_or_not(int number); /* deklaráljuk, hogy van ilyen fv.-ünk. Most nem a feladatban meghatározott legrosszabb algoritmust fogom használni. */

    int main(int argc, char *argv[])
    {
    int min, max, temp;

    if(argc<3){
    /* hibaüzenetek, kilépés hibával */
    fputs("Tul keves a parameter!\n", stderr);
    return -1;
    }

    if( isdigit(*argv[1]) )
    min = atoi(argv[1]);
    else{
    fputs("Az elso parameter nem szam!\n", stderr);
    return -1;
    }

    if( isdigit(*argv[2]) )
    max = atoi(argv[2]);
    else{
    fputs("A masodik parameter nem szam!\n", stderr);
    return -1;
    }

    if(min>max){ /* ezt egy fv.-be is lehetne írni [swap(min,max);], most nem tököltem vele */
    temp=min; /* átmenetileg eltároljuk min értékét, aztán átadjuk max-nak */
    min=max;
    max=temp;
    }

    printf("A %d es %d kozotti primszamok:\n",min,max);
    /* jöhet a prímtesztelés, prímek kiírása */
    for(;min<=max;++min)
    if(prime_or_not(min))
    printf("%d\n",min);

    return 0; /* VÉGE */
    }

    /***** Prímtesztelő függvény *****/

    int prime_or_not(int number){
    int i, divider, max;
    if(number==0 || number==1) return 0; /* ezek nem prímek! */

    max=(int)(sqrt(number)+1); /* "Csak a p≤(négyzetgyök n) -ig szükséges próbálkozni." lásd pl. Wikipédia. Itt: cast-olás. */

    for(divider=1,i=2;(i<max && divider<2);++i)
    /* divider<2-nek az az oka, hogy meghatároztuk a max-ot, és az semmiképp nem érheti el magát a számot, így jelen esetben önmaga nem lesz osztója (mint a szabály szerint), így a divider 2-re se mehet fel a prímeknél sem */
    {
    if(number%i==0) /* ha maradék nélkül megvan a számban az i aktuális értéke */
    divider=i;
    }
    if(divider>1) return 0; /* nem prím */
    return 1; /*egyébként prím */
    }

    szerintem a prime_or_not nagyon szerencsetlen fuggvenynev, hiszen a "prim vagy nem" mindig igaz, nem egyertelmu mit csinal a fuggveny. inkabb is_prime vagy hasonlo javasolt.
    igen, szeretem mas kodjat kritizalni ;]

    te mar a jobb verziot csinaltad, ami csak a gyokeig keresi az osztokat. viszont foloslegesen mesz vegig az osszes oszton, ha mar megtalaltad, hogy valami osztja (divider valtozod), ott mar ki tudod jelenteni, hogy nem prim

    itt az en verziom (tiedet felhasznalva), ami jobban koveti az eredeti kiirast (ezert aztan butabb is, viszont lehet kicsit egyszerubb):

    #include <stdio.h>
    #include <ctype.h> /* isdigit() miatt */
    #include <stdlib.h> /* atoi miatt */

    int prim(int i);

    int main(int argc, char *argv[]) {
    /* beolvasas, ugyanaz.. */

    int i;
    for (i=min; i<=max; i++) {
    if (prim(i))
    printf("%d\n",i);
    }
    }

    int prim (int i) {
    if (i<2)
    return 0;
    int j;
    for (j=2; j<i; j++) // itt eleg lenne sqrt(i)-ig
    if (i%j==0)
    return 0;
    return 1;
    }

  • Sk8erPeter
    nagyúr

    ezt hoztam össze de nem megy vmi megoldás?:)

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

    int main(int argc, char *argv[])
    {
    int min, a, max;
    FILE* pFile;
    if(argc<3)
    min = atoi(argv[1]);
    max = atoi(argv[2]);
    for(min=0;min<=max;min++)
    argv[min]=2*min+3;

    a=-1;
    pFile=fopen("prim.txt","w");

    while(a<max){

    while(!argv[++a]);

    min=a;

    while((min+=argv[a])<max)argv[min]=0;

    fprintf(pFile,"%d\n",argv[a]);
    }

    fclose(pFile);
    free(argv);
    system("PAUSE");
    return 0;

    }

    Na, közben rohangásztam, meg kajáltam, de végül sikerült megírni, jól telepakoltam neked kommentekkel, hogy értsd, mit miért csináltam. :D

    #include <stdio.h>
    #include <math.h> /* gyökvonás miatt */
    #include <ctype.h> /* isdigit() miatt */
    #include <stdlib.h> /* atoi miatt */

    int prime_or_not(int number); /* deklaráljuk, hogy van ilyen fv.-ünk. Most nem a feladatban meghatározott legrosszabb algoritmust fogom használni. */

    int main(int argc, char *argv[])
    {
    int min, max, temp;

    if(argc<3){
    /* hibaüzenetek, kilépés hibával */
    fputs("Tul keves a parameter!\n", stderr);
    return -1;
    }

    if( isdigit(*argv[1]) )
    min = atoi(argv[1]);
    else{
    fputs("Az elso parameter nem szam!\n", stderr);
    return -1;
    }

    if( isdigit(*argv[2]) )
    max = atoi(argv[2]);
    else{
    fputs("A masodik parameter nem szam!\n", stderr);
    return -1;
    }

    if(min>max){ /* ezt egy fv.-be is lehetne írni [swap(min,max);], most nem tököltem vele */
    temp=min; /* átmenetileg eltároljuk min értékét, aztán átadjuk max-nak */
    min=max;
    max=temp;
    }

    printf("A %d es %d kozotti primszamok:\n",min,max);
    /* jöhet a prímtesztelés, prímek kiírása */
    for(;min<=max;++min)
    if(prime_or_not(min))
    printf("%d\n",min);

    return 0; /* VÉGE */
    }

    /***** Prímtesztelő függvény *****/

    int prime_or_not(int number){
    int i, divider, max;
    if(number==0 || number==1) return 0; /* ezek nem prímek! */

    max=(int)(sqrt(number)+1); /* "Csak a p≤(négyzetgyök n) -ig szükséges próbálkozni." lásd pl. Wikipédia. Itt: cast-olás. */

    for(divider=1,i=2;(i<max && divider<2);++i)
    /* divider<2-nek az az oka, hogy meghatároztuk a max-ot, és az semmiképp nem érheti el magát a számot, így jelen esetben önmaga nem lesz osztója (mint a szabály szerint), így a divider 2-re se mehet fel a prímeknél sem */
    {
    if(number%i==0) /* ha maradék nélkül megvan a számban az i aktuális értéke */
    divider=i;
    }
    if(divider>1) return 0; /* nem prím */
    return 1; /*egyébként prím */
    }

  • Sk8erPeter
    nagyúr

    ezt hoztam össze de nem megy vmi megoldás?:)

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

    int main(int argc, char *argv[])
    {
    int min, a, max;
    FILE* pFile;
    if(argc<3)
    min = atoi(argv[1]);
    max = atoi(argv[2]);
    for(min=0;min<=max;min++)
    argv[min]=2*min+3;

    a=-1;
    pFile=fopen("prim.txt","w");

    while(a<max){

    while(!argv[++a]);

    min=a;

    while((min+=argv[a])<max)argv[min]=0;

    fprintf(pFile,"%d\n",argv[a]);
    }

    fclose(pFile);
    free(argv);
    system("PAUSE");
    return 0;

    }

    Láttad a korábbi hsz.-emet?
    Mert amit ide leírtál, az alapján tényleg nem vágod, mire való az argc, argv, pedig azt hittem, egyértelműen leírtam (leírtuk). :D
    De nem is látom az eredeti feladatspecifikációdban, hogy egyáltalán szükség lenne file-kezelésre, file-ba írásra. :D

    Na, de most gyakorlásképp mindjárt megcsinálom neked kompletten a feladatot.

  • Gyuri16
    senior tag

    ezt hoztam össze de nem megy vmi megoldás?:)

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

    int main(int argc, char *argv[])
    {
    int min, a, max;
    FILE* pFile;
    if(argc<3)
    min = atoi(argv[1]);
    max = atoi(argv[2]);
    for(min=0;min<=max;min++)
    argv[min]=2*min+3;

    a=-1;
    pFile=fopen("prim.txt","w");

    while(a<max){

    while(!argv[++a]);

    min=a;

    while((min+=argv[a])<max)argv[min]=0;

    fprintf(pFile,"%d\n",argv[a]);
    }

    fclose(pFile);
    free(argv);
    system("PAUSE");
    return 0;

    }

    egyaltalan nem ertem mit csinaltal. az eleje (majdnem) jo, igy kellene kineznie:

    if (argc < 3) {
    /* keves parametert adtal meg, irass ki valami hibauzenetet,
    es hogy hogyan kell hasznalni a programodat,
    aztan lepj ki hibakoddal */
    }
    min = atoi(argv[1]);
    max = atoi(argv[2]);

    ekkor a ket parameter amit a programod utan irtal futtataskor a min es max valtozokban lesz. tovabb nincs miert foglalkoznod az argv-vel. a feladatod szerint igy kellene folytatni:
    if (min>max) {
    /* csere: min <--> max */
    }
    int i;
    for (i=min; i<=max; i++) {
    // vegignezzuk az osszes szamot min es max kozott
    /* ha i primszam akkor kiirod ahova kell */
    }

    ott ahol /* kommentar */ van, kell irni meg par sornyi kodot

  • sorath
    csendes tag

    ezt hoztam össze de nem megy vmi megoldás?:)

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

    int main(int argc, char *argv[])
    {
    int min, a, max;
    FILE* pFile;
    if(argc<3)
    min = atoi(argv[1]);
    max = atoi(argv[2]);
    for(min=0;min<=max;min++)
    argv[min]=2*min+3;

    a=-1;
    pFile=fopen("prim.txt","w");

    while(a<max){

    while(!argv[++a]);

    min=a;

    while((min+=argv[a])<max)argv[min]=0;

    fprintf(pFile,"%d\n",argv[a]);
    }

    fclose(pFile);
    free(argv);
    system("PAUSE");
    return 0;

    }

  • Sk8erPeter
    nagyúr

    ez sehogy se megy ezzel az argc,v vel hogyan adom meg neki h mennyi legyen max? és hogyan tudom kiíratni scanf nélkül?

    Szerintem eleve félreérted az argc, argv szerepét: itt nem kell scanf, mivel a program neve mögött szereplő paraméterekre vagy kíváncsi, abból tudod meg azt, amit Te a scanf-fel akarnál megtudni.
    Ha Windows-t használsz, akkor nyiss egy Start- Futtatás- cmd -t, navigálj el arra a könyvtárra, ahol a lefordított programod van az exe-fájllal. Ha a korábban említett "akarmi.exe" a programod neve, akkor írd be ezt a cmd-nél parancsnak:
    akarmi.exe 10 50
    Aztán Enter, és a programodnak mennie kell a megadott paraméterekkel.
    De ezt már írtam korábban is. Ekkor a 10 lesz a min, 50 a max, ha jól csináltad.

  • Gyuri16
    senior tag

    vagy lenne még 1 feladat amit félig megtudtam csinálni ezzel csak annyi a baj hogy lekellene korlátozni hogy csak betüket fogadjon el lényege h kisbetüt nagybetüvé konvertáljak
    valaki ki tudná úgy egészíteni h csak a betüket fogadja el?
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>

    int main() {

    int meret=5;
    int i;
    int beolvas=0;
    char akt;

    printf("Hany karaktert konvertaljunk at?");
    scanf("%d", &meret);

    char eredet[meret];

    printf("Kerem a betuket!");

    for (i=0;i<meret;i++)
    {
    scanf("%s", &eredet);
    }

    for (i=0;i<meret;i++)
    {
    eredet(i)=toupper(eredet(i));
    }
    /* vagy a toupper nelkul

    for (i=0;i<meret;i++)
    {
    char atmenet = eredet(i)-32;
    eredet(i)=atmenet;
    }
    for (i=0;i<meret;i++)
    {
    printf("%c", eredet(i));
    }

    getchar();
    return 0;

    }

    ez a progam igy nem korrekt. egyreszt szintaktikailag se jo (eredet(i) helyett eredet[i]). masreszt a beolvasasod se jo, mivel a valtozodat mindig felulirod, igy csak az utolso betut jegyzed meg

    hogy az eredeti kerdesre valaszoljak: isalpha() fuggveny segithet, ez megnezi, hogy a char amit adsz neki betu e, ha csak kisbetuk erdekelnek akkor islower()

    #1650:
    Sk8erPeter szepen osszefoglalta pedig. probald meg a programot a hsz-e vegerol lemasolni. irj hozza annyit, hogy kiirasd a ket valtozot. ezutan forditsd le, es futtasd a ket parameterrel

  • sorath
    csendes tag

    vagy lenne még 1 feladat amit félig megtudtam csinálni ezzel csak annyi a baj hogy lekellene korlátozni hogy csak betüket fogadjon el lényege h kisbetüt nagybetüvé konvertáljak
    valaki ki tudná úgy egészíteni h csak a betüket fogadja el?
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>

    int main() {

    int meret=5;
    int i;
    int beolvas=0;
    char akt;

    printf("Hany karaktert konvertaljunk at?");
    scanf("%d", &meret);

    char eredet[meret];

    printf("Kerem a betuket!");

    for (i=0;i<meret;i++)
    {
    scanf("%s", &eredet);
    }

    for (i=0;i<meret;i++)
    {
    eredet(i)=toupper(eredet(i));
    }
    /* vagy a toupper nelkul

    for (i=0;i<meret;i++)
    {
    char atmenet = eredet(i)-32;
    eredet(i)=atmenet;
    }
    for (i=0;i<meret;i++)
    {
    printf("%c", eredet(i));
    }

    getchar();
    return 0;

    }

  • sorath
    csendes tag

    ez sehogy se megy ezzel az argc,v vel hogyan adom meg neki h mennyi legyen max? és hogyan tudom kiíratni scanf nélkül?

    valaki segítsen ebből vizsgázok hétfőn :W

  • sorath
    csendes tag

    Nagyon szépen köszönöm holnap neki is esek:)

    ez sehogy se megy ezzel az argc,v vel hogyan adom meg neki h mennyi legyen max? és hogyan tudom kiíratni scanf nélkül?

  • sorath
    csendes tag

    argc, argv:
    Vegyük azt, hogy a main függvényednek így néz ki a fejléce:
    int main(int argc, char *argv[])
    {
    /* blabla */
    }

    Itt az argc azt határozza meg, hány paramétered van+1. Azért +1, mert ebben a számban benne van magának a futtatandó programodnak a neve is (pl. akarmi.exe a futtatandó fájlod; de NEM maga a programnév, mint string van benne, hanem csak plusz egy "paraméter").
    Az argv pedig sztringre mutató mutatók tömbje, azért char * argv[] (ez ekvivalens ezzel: char **argv); ez megmondja, hány string szerepel a parancssorban. A 0. index maga a program neve (a korábban említett akarmi.exe), mint string, az 1. index (és az azt követő indexek) pedig az(ok), ami(ke)t a fájl neve mögé írtál: akarmi.exe parameter1 (parameter2 parameter3...)

    Eszerint ellenőrizgethetsz: pl. azt is csekkolhatod ilyen módon, hogy a program neve után pontosan annyi paramétert adtak-e meg, mint amennyit elvártál, és/vagy a paraméter(ek) neve megegyezik-e valamilyen értékkel, amitől függően hajtasz végre mondjuk egy műveletet, stb...

    A Te esetedben ("min és max érték között kikeresi és listázza a primszámokat") pl. így hívod meg a programot a parancssorból:
    akarmi.exe 10 50

    Még az elején include-old az stdlib-et, és akkor átalakíthatod a paraméterként kapott sztringet egész számmá az atoi függvénnyel:
    #include <stdlib.h>

    Végezz egy ellenőrzést, hogy a paraméterek száma nem kisebb-e a szükségesnél (kell a min és a max is):
    if(argc<3)
    /* hibaüzenetek, kilépés hibával */;

    A korábban int-ként deklarált min és max változóknak pedig add át a megfelelő értékeket:
    min = atoi(argv[1]);
    max = atoi(argv[2]);

    Ezt követően pedig végezd el a prímtesztelést.

    Összefoglalva (a konkrét kiegészítés már a Te dolgod):
    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[])
    {
    int min, max;
    if(argc<3)
    /* hibaüzenetek, kilépés hibával */;
    min = atoi(argv[1]);
    max = atoi(argv[2]);
    /* ide jöhet a prímtesztelés */
    }

    Nagyon szépen köszönöm holnap neki is esek:)

  • Sk8erPeter
    nagyúr

    használni nem tudom scanf el simán megy de nem is ismerem argc,v használtatát

    argc, argv:
    Vegyük azt, hogy a main függvényednek így néz ki a fejléce:
    int main(int argc, char *argv[])
    {
    /* blabla */
    }

    Itt az argc azt határozza meg, hány paramétered van+1. Azért +1, mert ebben a számban benne van magának a futtatandó programodnak a neve is (pl. akarmi.exe a futtatandó fájlod; de NEM maga a programnév, mint string van benne, hanem csak plusz egy "paraméter").
    Az argv pedig sztringre mutató mutatók tömbje, azért char * argv[] (ez ekvivalens ezzel: char **argv); ez megmondja, hány string szerepel a parancssorban. A 0. index maga a program neve (a korábban említett akarmi.exe), mint string, az 1. index (és az azt követő indexek) pedig az(ok), ami(ke)t a fájl neve mögé írtál: akarmi.exe parameter1 (parameter2 parameter3...)

    Eszerint ellenőrizgethetsz: pl. azt is csekkolhatod ilyen módon, hogy a program neve után pontosan annyi paramétert adtak-e meg, mint amennyit elvártál, és/vagy a paraméter(ek) neve megegyezik-e valamilyen értékkel, amitől függően hajtasz végre mondjuk egy műveletet, stb...

    A Te esetedben ("min és max érték között kikeresi és listázza a primszámokat") pl. így hívod meg a programot a parancssorból:
    akarmi.exe 10 50

    Még az elején include-old az stdlib-et, és akkor átalakíthatod a paraméterként kapott sztringet egész számmá az atoi függvénnyel:
    #include <stdlib.h>

    Végezz egy ellenőrzést, hogy a paraméterek száma nem kisebb-e a szükségesnél (kell a min és a max is):
    if(argc<3)
    /* hibaüzenetek, kilépés hibával */;

    A korábban int-ként deklarált min és max változóknak pedig add át a megfelelő értékeket:
    min = atoi(argv[1]);
    max = atoi(argv[2]);

    Ezt követően pedig végezd el a prímtesztelést.

    Összefoglalva (a konkrét kiegészítés már a Te dolgod):
    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[])
    {
    int min, max;
    if(argc<3)
    /* hibaüzenetek, kilépés hibával */;
    min = atoi(argv[1]);
    max = atoi(argv[2]);
    /* ide jöhet a prímtesztelés */
    }

  • sorath
    csendes tag

    melyik resze nem megy?
    nem tudod hogy mi az az argc/argv, vagy hasznalni nem tudod? ez utobbi esetben teljesen mindegy hogy milyen modon kaptad meg a stringeket

    használni nem tudom scanf el simán megy de nem is ismerem argc,v használtatát

  • doc
    nagyúr

    Üdvözletem mindenkinek
    A következő problémám van

    adott ez a feladat amit megtudok írni csak alap feltétele h:
    A programok a kapott paramétereket kizárólg a main függvény argc, argv[] változóin keresztül vehetik át. Semmiféle getchar, scanf és egyéb felhasználói input nem elfogadható!
    És argc,argv változókkal nem tudom megcsinálni esetleg vki tud segíteni hogyan essek neki? Előre is nagyon köszönöm!!

    Írjon egy programot, amely a paraméterül kapott min és max érték között kikeresi és listázza a primszámokat.

    Tipp: Paraméterek ellenőrzése: legalább 2 (min,max), számok legyenek. Ha min > max akkor swap(min,max).
    A primszámok csak önmagukkal és egyel oszthatók. Algoritmus keresése erre a szabályra.
    For ciklus min-max értékikg, majd a fenti algoritmus alkalmazása a ciklusváltozóra.

    Primszám tesztelő algoritmus:
    pl.: ciklus futtatésa 1-től a szam-1-ig, ha szám % ciklusváltozó == 0 akkor nem prim, kilépés!
    Ha kiér a ciklusból, akkor a kapott szám prim.
    Ez szándékosan a LEGROSSZABB(!) hatásfokú algoritmus, lehet sokkal jobbat találni!

    Szükséges libc függvények: printf()

    melyik resze nem megy?
    nem tudod hogy mi az az argc/argv, vagy hasznalni nem tudod? ez utobbi esetben teljesen mindegy hogy milyen modon kaptad meg a stringeket

  • sorath
    csendes tag

    Üdvözletem mindenkinek
    A következő problémám van

    adott ez a feladat amit megtudok írni csak alap feltétele h:
    A programok a kapott paramétereket kizárólg a main függvény argc, argv[] változóin keresztül vehetik át. Semmiféle getchar, scanf és egyéb felhasználói input nem elfogadható!
    És argc,argv változókkal nem tudom megcsinálni esetleg vki tud segíteni hogyan essek neki? Előre is nagyon köszönöm!!

    Írjon egy programot, amely a paraméterül kapott min és max érték között kikeresi és listázza a primszámokat.

    Tipp: Paraméterek ellenőrzése: legalább 2 (min,max), számok legyenek. Ha min > max akkor swap(min,max).
    A primszámok csak önmagukkal és egyel oszthatók. Algoritmus keresése erre a szabályra.
    For ciklus min-max értékikg, majd a fenti algoritmus alkalmazása a ciklusváltozóra.

    Primszám tesztelő algoritmus:
    pl.: ciklus futtatésa 1-től a szam-1-ig, ha szám % ciklusváltozó == 0 akkor nem prim, kilépés!
    Ha kiér a ciklusból, akkor a kapott szám prim.
    Ez szándékosan a LEGROSSZABB(!) hatásfokú algoritmus, lehet sokkal jobbat találni!

    Szükséges libc függvények: printf()

  • Karma
    félisten

    elvileg egy C forditoval, de nem tudom hogy ezek az include-ok mennyire elerhetoek windows alatt... (gyanitom hogy mint minden mas, ez is eleg vert izzados melo, de legalabbis rakas vackot fel kell tenni hozza)

    esetleg felrakhatsz egy Cygwin-t, ami egy Linux-szeru kornyezetet biztosit a gepen, ami alatt mar le tudod forditani a 'hagyomanyos' modon

    Belekukkantva a CVS-be ez egy darab forrásfájl, ami szinte csak POSIX headereket importál, úgyhogy én a Cygwinre szavazok.

  • doc
    nagyúr

    Hello!

    Nem vagyok biztos abban hogy jó helyen kopogtatok de valaki esetleg meg tudnád itt mondani hogy ebből hogyan lehetne win alatt futtatható exe fájlt csinálni?

    elvileg egy C forditoval, de nem tudom hogy ezek az include-ok mennyire elerhetoek windows alatt... (gyanitom hogy mint minden mas, ez is eleg vert izzados melo, de legalabbis rakas vackot fel kell tenni hozza)

    esetleg felrakhatsz egy Cygwin-t, ami egy Linux-szeru kornyezetet biztosit a gepen, ami alatt mar le tudod forditani a 'hagyomanyos' modon

  • Oliverda
    félisten

    Hello!

    Nem vagyok biztos abban hogy jó helyen kopogtatok de valaki esetleg meg tudnád itt mondani hogy ebből hogyan lehetne win alatt futtatható exe fájlt csinálni?

  • Jester01
    veterán

    Sziasztok!

    A felhasználó által definiált méretű tömböt szeretnék létrehozni C nyelvben, de a fordító hibát jelez:
    int main (void)
    {
    double f[2][2]={{3,5},{5,3}};
    int n;
    scanf("%d",&n);
    double x[n][2]};

    Másik kérdésem, hogy az "int (*p2)[10];" kifejezés pontosan azt jelenti, hogy van egy pointerem, amely egy olyan tömbre mutat, amely 10 db elemmel rendelkezik? Azt én szabom meg, hogy az a tömb amire mutat hány dimenziós? Tehát a lényeg az, hogy végső soron 10 db elem legyen benne?
    Előre is köszönöm a segítséget.

    1) C-ben így nem tudsz dinamikus tömböt csinálni. Pointerekkel és malloc-kal kell játszani.
    2) Nem, annak a tömbnek pontosan 1 dimenziósnak kell lennie

  • Sziasztok!

    A felhasználó által definiált méretű tömböt szeretnék létrehozni C nyelvben, de a fordító hibát jelez:
    int main (void)
    {
    double f[2][2]={{3,5},{5,3}};
    int n;
    scanf("%d",&n);
    double x[n][2]};

    Másik kérdésem, hogy az "int (*p2)[10];" kifejezés pontosan azt jelenti, hogy van egy pointerem, amely egy olyan tömbre mutat, amely 10 db elemmel rendelkezik? Azt én szabom meg, hogy az a tömb amire mutat hány dimenziós? Tehát a lényeg az, hogy végső soron 10 db elem legyen benne?
    Előre is köszönöm a segítséget.

  • Sziasztok!

    Van egy sürgős feladatom C-ben. Ehhez kétszeresen láncolt listában kellene elemeket létrehozni a többi elemhez képest bárhol, keresni a listában, kiírni és törölni őket.

    Ha van valakinek ilyen kódja, ami alapvetően ezeket csinálja meg, legyen szíves küldje el nekem. Nagyjából tudom hogyan kellene, de sokat segítene egy működő kód, helyes szintaktikával, és mindenképpen C-ben, ne C++ban.

    Köszönöm előre is

  • Retekegér
    MODERÁTOR

    Nem az volt a probléma, hogy "rossz helyre raktad be a return-t", hanem hogy nem írattad ki a tömb elemeit ciklussal... :U

    Azon már túlléptem, viszont a ciklus beiktatása után így nézett ki a program:
    for (i=0; i<SZAM; i++)
    {
    printf("A sorba rendezett tomb: %d\n", tomb[i]);
    system("pause");
    return 0;
    }
    }

    Ezért még nem működött megfelelően.

  • Sk8erPeter
    nagyúr

    Okés, kicsit figyelmetlen voltam és rossz helyre raktam be a return-t, így már műxik: :D
    #include <stdio.h>
    #include <stdlib.h>
    #define SZAM 12

    main ()
    {
    int i, x;
    int tomb[SZAM]={4,3,6,7,1,0,9,2,4,8,5,7};
    int ismetles=1;
    printf("12 elemu tomb rendezese\n");

    while (ismetles)
    {
    ismetles=0;
    for (i=0; i<SZAM-1; i++)
    {
    if (tomb[i]>tomb[i+1])
    {
    x=tomb[i];
    tomb[i]=tomb[i+1];
    tomb[i+1]=x;

    ismetles=1;
    }
    }
    }
    for (i=0; i<SZAM; i++)
    {
    printf("A sorba rendezett tomb: %d\n", tomb[i]);
    }
    printf("\n");
    system("pause");
    return 0;
    }

    Thx a segítségért!

    Nem az volt a probléma, hogy "rossz helyre raktad be a return-t", hanem hogy nem írattad ki a tömb elemeit ciklussal... :U

  • Retekegér
    MODERÁTOR

    Kéne egy ciklus, ami végigmegy a tömb elemein :U
    Most csak az utolsó elemet iratod ki (vagy épp ami i-ben van).

    Okés, kicsit figyelmetlen voltam és rossz helyre raktam be a return-t, így már műxik: :D
    #include <stdio.h>
    #include <stdlib.h>
    #define SZAM 12

    main ()
    {
    int i, x;
    int tomb[SZAM]={4,3,6,7,1,0,9,2,4,8,5,7};
    int ismetles=1;
    printf("12 elemu tomb rendezese\n");

    while (ismetles)
    {
    ismetles=0;
    for (i=0; i<SZAM-1; i++)
    {
    if (tomb[i]>tomb[i+1])
    {
    x=tomb[i];
    tomb[i]=tomb[i+1];
    tomb[i+1]=x;

    ismetles=1;
    }
    }
    }
    for (i=0; i<SZAM; i++)
    {
    printf("A sorba rendezett tomb: %d\n", tomb[i]);
    }
    printf("\n");
    system("pause");
    return 0;
    }

    Thx a segítségért!

  • Sk8erPeter
    nagyúr

    Akkor talán máshol lesz a bibi, ennek a tömbnek az elemeit szeretném kiíratni:

    #include <stdio.h>
    #include <stdlib.h>
    #define SZAM 12

    main ()
    {
    int i, x;
    int tomb[SZAM]={4,3,6,7,1,0,9,2,4,8,5,7};
    int ismetles=1;
    printf("12 elemu tomb rendezese\n");

    while (ismetles)
    {
    ismetles=0;
    for (i=0; i<SZAM-1; i++)
    {
    if (tomb[i]>tomb[i+1])
    {
    x=tomb[i];
    tomb[i]=tomb[i+1];
    tomb[i+1]=x;

    ismetles=1;
    }
    }
    }
    printf("A sorba rendezett tomb: %d\n", tomb[i]);
    system("pause");
    return 0;
    }

    Dehát pont az előbb írta le Karma, hogyan írasd ki a tömb elemeit :D
    printf("A sorba rendezett tomb: \n");
    for (i = 0; tomb[i]; i++)
    {
    printf("%d\n", tomb[i]);
    }

    (Sortörésekkel elválasztva.)

  • Karma
    félisten

    Akkor talán máshol lesz a bibi, ennek a tömbnek az elemeit szeretném kiíratni:

    #include <stdio.h>
    #include <stdlib.h>
    #define SZAM 12

    main ()
    {
    int i, x;
    int tomb[SZAM]={4,3,6,7,1,0,9,2,4,8,5,7};
    int ismetles=1;
    printf("12 elemu tomb rendezese\n");

    while (ismetles)
    {
    ismetles=0;
    for (i=0; i<SZAM-1; i++)
    {
    if (tomb[i]>tomb[i+1])
    {
    x=tomb[i];
    tomb[i]=tomb[i+1];
    tomb[i+1]=x;

    ismetles=1;
    }
    }
    }
    printf("A sorba rendezett tomb: %d\n", tomb[i]);
    system("pause");
    return 0;
    }

    Kéne egy ciklus, ami végigmegy a tömb elemein :U
    Most csak az utolsó elemet iratod ki (vagy épp ami i-ben van).

  • Retekegér
    MODERÁTOR

    Arra meg ott a printf függvény, első paraméterében megadhatod a kiírás formátumát (én pl. semmit se tudok jelenleg a tömböt elemeinek típusáról ;) ), utána pedig a többi paraméterben a változókat adhatod meg.

    Pl. egy egészeket tartalmazó array nevű tömbre (l elemű), soronként egy érték:
    int i;
    ...
    for (i = 0; i < l; i++)
    {
    printf("%d\n", array[i]);
    }

    Akkor talán máshol lesz a bibi, ennek a tömbnek az elemeit szeretném kiíratni:

    #include <stdio.h>
    #include <stdlib.h>
    #define SZAM 12

    main ()
    {
    int i, x;
    int tomb[SZAM]={4,3,6,7,1,0,9,2,4,8,5,7};
    int ismetles=1;
    printf("12 elemu tomb rendezese\n");

    while (ismetles)
    {
    ismetles=0;
    for (i=0; i<SZAM-1; i++)
    {
    if (tomb[i]>tomb[i+1])
    {
    x=tomb[i];
    tomb[i]=tomb[i+1];
    tomb[i+1]=x;

    ismetles=1;
    }
    }
    }
    printf("A sorba rendezett tomb: %d\n", tomb[i]);
    system("pause");
    return 0;
    }

  • Karma
    félisten

    Ja, nem a ciklus megvalósítása érdekel, hanem a képernyőre való kiírás :)

    Arra meg ott a printf függvény, első paraméterében megadhatod a kiírás formátumát (én pl. semmit se tudok jelenleg a tömböt elemeinek típusáról ;) ), utána pedig a többi paraméterben a változókat adhatod meg.

    Pl. egy egészeket tartalmazó array nevű tömbre (l elemű), soronként egy érték:
    int i;
    ...
    for (i = 0; i < l; i++)
    {
    printf("%d\n", array[i]);
    }

  • Retekegér
    MODERÁTOR

    Pl. írsz egy for ciklust 0-tól a tömb mérete-1-ig?

    Ja, nem a ciklus megvalósítása érdekel, hanem a képernyőre való kiírás :)

  • Karma
    félisten

    Hogyan tudom kiíratni egy tömb elemeit sorbarendezés után?

    Pl. írsz egy for ciklust 0-tól a tömb mérete-1-ig?

  • Mivel a legnagyobb különbséget már megtaláltad így semmi más dolgod nincs mint mégegyszer végigmenni a telkeken és kiírni azon telkek jellemzőit amiknél a különbség megegyezik a maximummal. (A feladatkiírás szerint több is lehet, különben elég lenne az első ciklusban egyszerűen megjegyezni az elem indexet is.)

    Köszönöm, ezzel a kiegészítéssel a listaz függvény végére már tökéletesen működik:

    int k;

    for(k=0;k<(*lt).db;k++){
    if(max==(*lt).telkek[k].kulonb){
    printf("legtorzabb tel(k)ek:\nHelyrajziszam:%s\nTulajdononsa:%s\n Szelessege:%d\n Hosszusaga:%d\n ",(*lt).telkek[k].hely,(*lt).telkek[k].nev,(*lt).telkek[k].hossz,(*lt).telkek[k].szeles);
    }

  • Jester01
    veterán

    Üdv!
    Ismét kérdéssel fordulnék a topik olvasóihoz, a feladat a következő lenne:
    Egy egyszerű teleknyilvántartó programot készítünk téglalap alakú telkek kezelésére. A program bekéri a telkek számát, majd bekéri és eltárolja a telkek helyrajzi számát, a tulaj nevét, telek hosszát és szélességét. Ezután a program kiírja azon telek vagy telkek adatait, amelyeknél a legnagyobb a hossz és a szélesség különbsége.
    Eddig jutottam, meghatározza a legnagyobb szélesség-hosszúságú és hosszúság-szélességű tel(ke)ket, csak nem tudom, hogy tudnám rávenni, hogy ahhoz/azokhoz az érték(ek)hez tartozozó mezőket írja ki.
    #include<stdio.h>
    #include<stdlib.h>

    struct telek{
    char nev[41];
    char hely[41];
    int hossz, szeles, kulonb;
    };
    struct telektar{
    int db;
    struct telek *telkek;
    };
    void lefoglal(struct telektar *ft){
    printf("Kerem a telkek szamat:");
    scanf("%d",&(*ft).db);
    (*ft).telkek=(struct telek*)malloc(sizeof(struct telek)*(*ft).db);
    }
    void beker_telek(struct telek *t){
    printf("Tulaj neve: \n");
    scanf("%s",(*t).nev);
    printf("Helyrajziszam: \n");
    scanf("%s",(*t).hely);
    printf("Hosszusag: \n");
    scanf("%d",&(*t).hossz);
    printf("Szelesseg: \n");
    scanf("%d",&(*t).szeles);
    }
    void beker_telektar(struct telektar *tt){
    int i;
    for(i=0;i<(*tt).db;i++){
    beker_telek(&(*tt).telkek[i]);
    }
    }
    void listaz(struct telektar *lt){
    int i,j,max;
    for(i=0;i<(*lt).db;i++){
    if((*lt).telkek[i].kulonb=(*lt).telkek[i].hossz-(*lt).telkek[i].szeles>0){
    (*lt).telkek[i].kulonb=(*lt).telkek[i].hossz-(*lt).telkek[i].szeles;
    printf("kulonbseg: %d\n",(*lt).telkek[i].kulonb);
    }

    else{
    (*lt).telkek[i].kulonb=(*lt).telkek[i].szeles-(*lt).telkek[i].hossz;
    printf("kulonbseg: %d\n",(*lt).telkek[i].kulonb);
    }
    }
    max=0;

    for(j=0;j<(*lt).db;j++){
    if(max<(*lt).telkek[j].kulonb){
    max=(*lt).telkek[j].kulonb;
    }
    }
    printf("legtorzabb telek: %d",max);
    }
    void felszabadit(struct telektar *ft){
    free((*ft).telkek);
    (*ft).telkek=NULL;
    }
    int main(){
    struct telektar b;
    lefoglal (&b);
    beker_telektar (&b);
    listaz (&b);
    felszabadit (&b);
    return 0;
    }

    Mivel a legnagyobb különbséget már megtaláltad így semmi más dolgod nincs mint mégegyszer végigmenni a telkeken és kiírni azon telkek jellemzőit amiknél a különbség megegyezik a maximummal. (A feladatkiírás szerint több is lehet, különben elég lenne az első ciklusban egyszerűen megjegyezni az elem indexet is.)

  • Üdv!
    Ismét kérdéssel fordulnék a topik olvasóihoz, a feladat a következő lenne:
    Egy egyszerű teleknyilvántartó programot készítünk téglalap alakú telkek kezelésére. A program bekéri a telkek számát, majd bekéri és eltárolja a telkek helyrajzi számát, a tulaj nevét, telek hosszát és szélességét. Ezután a program kiírja azon telek vagy telkek adatait, amelyeknél a legnagyobb a hossz és a szélesség különbsége.
    Eddig jutottam, meghatározza a legnagyobb szélesség-hosszúságú és hosszúság-szélességű tel(ke)ket, csak nem tudom, hogy tudnám rávenni, hogy ahhoz/azokhoz az érték(ek)hez tartozozó mezőket írja ki.
    #include<stdio.h>
    #include<stdlib.h>

    struct telek{
    char nev[41];
    char hely[41];
    int hossz, szeles, kulonb;
    };
    struct telektar{
    int db;
    struct telek *telkek;
    };
    void lefoglal(struct telektar *ft){
    printf("Kerem a telkek szamat:");
    scanf("%d",&(*ft).db);
    (*ft).telkek=(struct telek*)malloc(sizeof(struct telek)*(*ft).db);
    }
    void beker_telek(struct telek *t){
    printf("Tulaj neve: \n");
    scanf("%s",(*t).nev);
    printf("Helyrajziszam: \n");
    scanf("%s",(*t).hely);
    printf("Hosszusag: \n");
    scanf("%d",&(*t).hossz);
    printf("Szelesseg: \n");
    scanf("%d",&(*t).szeles);
    }
    void beker_telektar(struct telektar *tt){
    int i;
    for(i=0;i<(*tt).db;i++){
    beker_telek(&(*tt).telkek[i]);
    }
    }
    void listaz(struct telektar *lt){
    int i,j,max;
    for(i=0;i<(*lt).db;i++){
    if((*lt).telkek[i].kulonb=(*lt).telkek[i].hossz-(*lt).telkek[i].szeles>0){
    (*lt).telkek[i].kulonb=(*lt).telkek[i].hossz-(*lt).telkek[i].szeles;
    printf("kulonbseg: %d\n",(*lt).telkek[i].kulonb);
    }

    else{
    (*lt).telkek[i].kulonb=(*lt).telkek[i].szeles-(*lt).telkek[i].hossz;
    printf("kulonbseg: %d\n",(*lt).telkek[i].kulonb);
    }
    }
    max=0;

    for(j=0;j<(*lt).db;j++){
    if(max<(*lt).telkek[j].kulonb){
    max=(*lt).telkek[j].kulonb;
    }
    }
    printf("legtorzabb telek: %d",max);
    }
    void felszabadit(struct telektar *ft){
    free((*ft).telkek);
    (*ft).telkek=NULL;
    }
    int main(){
    struct telektar b;
    lefoglal (&b);
    beker_telektar (&b);
    listaz (&b);
    felszabadit (&b);
    return 0;
    }

  • Jester01
    veterán

    Üdv mindenkinek! Segítség kellene, sajnos még csak kezdő vagyok. Ez lenne a feladat: Billentyűzetről bekért tankörlétszám és zárthelyi eredmények ismeretében meg kell határozni, hogy a különféle osztályzatokból hány darab született, valamint a tankörátlagot. Az eredményeket írassa ki! Ez egy zh feladat, addig eljutottam, hogy bekérem a jegyeket, de sehogy se akar összejönni a különböző jegyek megszámolása, ez lenne a kérdésem, hogy ezt, hogy kell csinálni? Előre is kösz a segítséget

    Például ha 5 fajta osztályzat van, akkor csinálsz egy öt elemű tömböt. Majd ahogy jönnek be a jegyek a megfelelő számlálót növeled.

  • Agger
    csendes tag

    Üdv mindenkinek! Segítség kellene, sajnos még csak kezdő vagyok. Ez lenne a feladat: Billentyűzetről bekért tankörlétszám és zárthelyi eredmények ismeretében meg kell határozni, hogy a különféle osztályzatokból hány darab született, valamint a tankörátlagot. Az eredményeket írassa ki! Ez egy zh feladat, addig eljutottam, hogy bekérem a jegyeket, de sehogy se akar összejönni a különböző jegyek megszámolása, ez lenne a kérdésem, hogy ezt, hogy kell csinálni? Előre is kösz a segítséget

  • Jester01
    veterán

    Sziasztok, van egy kis problemam a listakkal c -ben. Nem a hagyomanyos pointeres modon szeretnem megoldani a feladatot, azaz letrehozni egy listat es kivenni, beletenni elemeket es kiiratni, hanem a kurzoros megoldassal, amikor egy listat vektor segitsegevel szimulalsz. Itt jon a kod:

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

    #define maxlen 100


    typedef char tipcursor;

    typedef int tipnod;

    typedef struct tipelem{
    tipnod element;
    tipcursor next;
    }tipelement;

    typedef tipcursor tiplista;


    void init(tipelement z[maxlen])
    {
    int i;
    for (i=0;i<maxlen-1;i++)
    z[i].next=i+1;
    z[maxlen].next=-1;
    }

    tiplista add(tiplista *d,tiplista p,tipelement z[maxlen],tipnod e)
    {
    if (p==-1) {
    p=*d;
    z[*d].element=e;
    *d=z[*d].next;
    z[p].next=-1;
    }
    else{
    tipcursor k=p;
    while ((z[k].element<e)&&(k!=-1)&&(z[k].next!=-1))
    {
    k=z[k].next;
    }
    tipnod temp;
    while (k!=-1)
    {
    temp=z[k].element;
    z[k].element=e;
    e=temp;
    if(-1==(k=z[k].next)) z[k].next=*d;
    }

    z[*d].element=e;

    temp=*d;
    *d=z[*d].next;

    z[temp].next=-1;
    }
    return p;
    }

    void list(tiplista s,tipelement z[maxlen])
    {
    while (s!=-1)
    {
    printf("%i ",z[s].element);
    printf("%i ",z[s].next);
    s=z[s].next;
    }
    }

    int main(void)
    {
    tipelement zona[maxlen];

    tiplista l=-1,m=-1,*disp;
    disp=(tiplista*)malloc(sizeof(tiplista));
    *disp=0;

    init(zona);

    l=add(disp,l,zona,16);
    l=add(disp,l,zona,5);
    list(l,zona);
    l=add(disp,l,zona,41);
    list(l,zona);
    return 0;
    }

    Nos a problemam az, hogy a program nem helyezi jol be az elemeket a helyukre, azaz miutan betettem a 16-ost utana az o helyere teszi az 5-t, de nem tolja arrebb a 16-t, pedig az add fuggvenybe minden jol megy, csak kiirataskor mar nem oks a lista.

    Elore is koszonom.

    Már az init függvényedben is van egy túlcímzés z[maxlen].next=-1; .
    Az add függvényben sem "megy minden jól": if(-1==(k=z[k].next)) z[k].next=*d; Továbbá a temp változót két típusként is használod, egyszer tipnod egyszer meg tiplista. Ezeket javítva látszólag működik a kód, bár a typedef char tipcursor; igen szerencsétlen választás mivel nem tudhatod előjeles vagy nem. Márpedig ha nem az, akkor -1 sose lesz és végtelen ciklusba kerül a program.

    Láncolt listába beszúráskor amúgy nem kellene az elemeket másolgatni.

  • Dirty_Pio
    csendes tag

    Sziasztok, van egy kis problemam a listakkal c -ben. Nem a hagyomanyos pointeres modon szeretnem megoldani a feladatot, azaz letrehozni egy listat es kivenni, beletenni elemeket es kiiratni, hanem a kurzoros megoldassal, amikor egy listat vektor segitsegevel szimulalsz. Itt jon a kod:

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

    #define maxlen 100


    typedef char tipcursor;

    typedef int tipnod;

    typedef struct tipelem{
    tipnod element;
    tipcursor next;
    }tipelement;

    typedef tipcursor tiplista;


    void init(tipelement z[maxlen])
    {
    int i;
    for (i=0;i<maxlen-1;i++)
    z[i].next=i+1;
    z[maxlen].next=-1;
    }

    tiplista add(tiplista *d,tiplista p,tipelement z[maxlen],tipnod e)
    {
    if (p==-1) {
    p=*d;
    z[*d].element=e;
    *d=z[*d].next;
    z[p].next=-1;
    }
    else{
    tipcursor k=p;
    while ((z[k].element<e)&&(k!=-1)&&(z[k].next!=-1))
    {
    k=z[k].next;
    }
    tipnod temp;
    while (k!=-1)
    {
    temp=z[k].element;
    z[k].element=e;
    e=temp;
    if(-1==(k=z[k].next)) z[k].next=*d;
    }

    z[*d].element=e;

    temp=*d;
    *d=z[*d].next;

    z[temp].next=-1;
    }
    return p;
    }

    void list(tiplista s,tipelement z[maxlen])
    {
    while (s!=-1)
    {
    printf("%i ",z[s].element);
    printf("%i ",z[s].next);
    s=z[s].next;
    }
    }

    int main(void)
    {
    tipelement zona[maxlen];

    tiplista l=-1,m=-1,*disp;
    disp=(tiplista*)malloc(sizeof(tiplista));
    *disp=0;

    init(zona);

    l=add(disp,l,zona,16);
    l=add(disp,l,zona,5);
    list(l,zona);
    l=add(disp,l,zona,41);
    list(l,zona);
    return 0;
    }

    Nos a problemam az, hogy a program nem helyezi jol be az elemeket a helyukre, azaz miutan betettem a 16-ost utana az o helyere teszi az 5-t, de nem tolja arrebb a 16-t, pedig az add fuggvenybe minden jol megy, csak kiirataskor mar nem oks a lista.

    Elore is koszonom.

  • Gabessss
    csendes tag

    Sziasztok!
    Én segítséget kérnék C programozáshoz,nem nagyon értek hozzá és be kell adnom egy megírt c programot a suliba nagyon örülnék ha valaki tudna nekem ebben segíteni.
    az msn címem:gabeeee1@hotmail.com
    előre is köszönöm

  • Gyuri16
    senior tag

    Üdv!
    Újabb problémával jelentkezem, feladat következő:
    Írjon cenzúrázó programot. A program beolvas egy mondatot, majd egy tiltott karaktersorozatot. A mondatban kicseréli a karaktersorozat minden előfordulását 3 csillag karakterre(cenzúrázott szó helyett 3 csillagot rajzol). Végül kiírja a cenzúrázott mondatot.

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

    Szokás szerint elkezdtem megírni :D, de ezt a részt hogy a beolvasott tiltott szó helyére 3 csillagot tegyen nem tudom megcsinálni, megírtam úgy hogy minden karakterét a szónak csillagra cseréli, de ez ugye így nem jó.

    #include <stdio.h>

    int main(){
    int i,j,szohossz,mondathossz;
    char szo[20],mondat[100];

    printf("mondat:");
    gets(mondat);
    printf("szo:");
    scanf("%s", szo);

    i=0;
    while(szo[i]!=0){
    i++;
    }
    szohossz=i;

    i=0;
    while(mondat[i]!=0){
    i++;
    }
    mondathossz=i;

    for(i=0;i<=mondathossz-szohossz;i++){
    for(j=0;j<szohossz;j++){
    if(szo[j]!=mondat[i+j])
    break;
    }
    if(j==szohossz){
    for(j=0;j<szohossz;j++){
    mondat[i+j]='*';
    }
    i=i+szohossz-1;
    }
    }

    printf("%s\n", mondat);


    system("PAUSE");
    return 0;
    }

    Köszönöm :R

    azon a ponton amikor mar tudod, hogy cenzurazni kell, kovetkezot csinalod:
    -ha szohossz < 3 akkor odebbtolod* a string tobbi reszet annyi hellyel jobbra, hogy beferjen a 3 csillag
    -ha szohossz >= 3 akkor odairsz 3 csillagot es szohossz-3al balra tolod a maradek szoveget

    * odebbtolas azt jelenti, hogy minden egyes betut x hellyel odebb masolsz. vigyazni kell, hogy a string eleg nagy legyen. mivel tobb hellyel kell mozgatni hatulrol kezdenem, tehat ha pl jobbra kell eltolni, akkor eloszor az utolso elemet tennem x hellyel jobbra, aztan az utolso elottit, stb. ha pedig ballra akkor eloszor az elsot.. meg nem art odafigyelni, hogy a string veget jelzo 0at is masold. (ajanlom fuggvenykent megirni, hogy tudd egyszeruen kulon tesztelni)

  • Üdv!
    Újabb problémával jelentkezem, feladat következő:
    Írjon cenzúrázó programot. A program beolvas egy mondatot, majd egy tiltott karaktersorozatot. A mondatban kicseréli a karaktersorozat minden előfordulását 3 csillag karakterre(cenzúrázott szó helyett 3 csillagot rajzol). Végül kiírja a cenzúrázott mondatot.

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

    Szokás szerint elkezdtem megírni :D, de ezt a részt hogy a beolvasott tiltott szó helyére 3 csillagot tegyen nem tudom megcsinálni, megírtam úgy hogy minden karakterét a szónak csillagra cseréli, de ez ugye így nem jó.

    #include <stdio.h>

    int main(){
    int i,j,szohossz,mondathossz;
    char szo[20],mondat[100];

    printf("mondat:");
    gets(mondat);
    printf("szo:");
    scanf("%s", szo);

    i=0;
    while(szo[i]!=0){
    i++;
    }
    szohossz=i;

    i=0;
    while(mondat[i]!=0){
    i++;
    }
    mondathossz=i;

    for(i=0;i<=mondathossz-szohossz;i++){
    for(j=0;j<szohossz;j++){
    if(szo[j]!=mondat[i+j])
    break;
    }
    if(j==szohossz){
    for(j=0;j<szohossz;j++){
    mondat[i+j]='*';
    }
    i=i+szohossz-1;
    }
    }

    printf("%s\n", mondat);


    system("PAUSE");
    return 0;
    }

    Köszönöm :R

  • 1, initet akkor hivd meg, amikor mar beolvastad a meretet (beker()-ben a scanf(...meret) utan, es aztan a mainbol kikell venni az initet)
    2, beker()-ben a do ciklus eleg ha a printf("Kerem a babu poziciojat:"); elott kezdodik (meretet eleg egyszer beolvasni)

    ezeket kijavitva nalam mukodik

    Köszönöm!
    Így, már működik.

  • Gyuri16
    senior tag

    Üdv!
    Újabb problémám lenne, ezúttal a feladat a következő:
    Egy NxN-es méretű négyzetrácsos táblára bábokat helyezünk el, egy mezőre maximum egyet. A program bekéri a tábla méretét, majd egyenként a bábok pozicioját (pl.:B3). Az utolsó báb után egy x karaktert ütünk.
    A program ezután kijelzi a táblát, valamint minden sorhoz és oszlophoz kijelzi az ott található bábok számát (a nullát nem kell kiírni).

    #include<stdio.h>

    int i,j,sorszum,oszlopszum,meret;
    char tabla[40][40];
    char imp[2];

    void init(){
    for(i=0;i<meret;i++){
    for(j=0;j<meret;j++){
    tabla[i][j]=' ';
    }
    }
    }

    void beker(){
    do{
    printf("Kerem a tabla meretet: ");

    scanf("%d",&meret);

    printf("Kerem a babu poziciojat:");
    scanf("%s",imp);
    if(imp[0]!='x')tabla[imp[1]-'1'][imp[0]-'A']='x';
    }while(imp[0]!='x');

    }

    void rajzol(){

    printf("\n ");

    for(i=0;i<meret;i++)

    printf("%c ", 'A'+i);
    printf("\n");

    for(i=0;i<meret;i++){
    printf("%2d", i+1);

    for(j=0;j<meret;j++){
    if(tabla[i][j]==' ')
    printf("| ");
    else{
    sorszum++;
    printf("|%c",tabla[i][j]);
    }
    }
    printf("|");

    if(sorszum>0) printf(" %d",sorszum);

    sorszum=0;
    printf("\n");
    }
    printf("\n ");
    for(j=0;j<meret;j++){

    oszlopszum=0;
    for(i=0;i<meret;i++){

    if(tabla[i][j]=='x'){
    oszlopszum++;
    }
    }


    if(oszlopszum>0) printf("%d ", oszlopszum);
    else printf(" ");
    }

    printf("\n");
    }
    int main(){
    init();
    beker();
    rajzol();
    system("PAUSE");
    return 0;
    }

    Akármit csinálok az sorok végén mindig a bekért tábla méret jelenik meg az x-ek száma helyett. Mi lehet a gond?

    1, initet akkor hivd meg, amikor mar beolvastad a meretet (beker()-ben a scanf(...meret) utan, es aztan a mainbol kikell venni az initet)
    2, beker()-ben a do ciklus eleg ha a printf("Kerem a babu poziciojat:"); elott kezdodik (meretet eleg egyszer beolvasni)

    ezeket kijavitva nalam mukodik

  • Üdv!
    Újabb problémám lenne, ezúttal a feladat a következő:
    Egy NxN-es méretű négyzetrácsos táblára bábokat helyezünk el, egy mezőre maximum egyet. A program bekéri a tábla méretét, majd egyenként a bábok pozicioját (pl.:B3). Az utolsó báb után egy x karaktert ütünk.
    A program ezután kijelzi a táblát, valamint minden sorhoz és oszlophoz kijelzi az ott található bábok számát (a nullát nem kell kiírni).

    #include<stdio.h>

    int i,j,sorszum,oszlopszum,meret;
    char tabla[40][40];
    char imp[2];

    void init(){
    for(i=0;i<meret;i++){
    for(j=0;j<meret;j++){
    tabla[i][j]=' ';
    }
    }
    }

    void beker(){
    do{
    printf("Kerem a tabla meretet: ");

    scanf("%d",&meret);

    printf("Kerem a babu poziciojat:");
    scanf("%s",imp);
    if(imp[0]!='x')tabla[imp[1]-'1'][imp[0]-'A']='x';
    }while(imp[0]!='x');

    }

    void rajzol(){

    printf("\n ");

    for(i=0;i<meret;i++)

    printf("%c ", 'A'+i);
    printf("\n");

    for(i=0;i<meret;i++){
    printf("%2d", i+1);

    for(j=0;j<meret;j++){
    if(tabla[i][j]==' ')
    printf("| ");
    else{
    sorszum++;
    printf("|%c",tabla[i][j]);
    }
    }
    printf("|");

    if(sorszum>0) printf(" %d",sorszum);

    sorszum=0;
    printf("\n");
    }
    printf("\n ");
    for(j=0;j<meret;j++){

    oszlopszum=0;
    for(i=0;i<meret;i++){

    if(tabla[i][j]=='x'){
    oszlopszum++;
    }
    }


    if(oszlopszum>0) printf("%d ", oszlopszum);
    else printf(" ");
    }

    printf("\n");
    }
    int main(){
    init();
    beker();
    rajzol();
    system("PAUSE");
    return 0;
    }

    Akármit csinálok az sorok végén mindig a bekért tábla méret jelenik meg az x-ek száma helyett. Mi lehet a gond?

  • de a te megoldasod nalam "|"-t ir ki "| " helyett az elso sorokban, azon kivul nem korrekt (ha beadando akkor pontlevonas).
    kicsit jatszottam vele es sikerult rossz helyzetet eloidezni. a kododba raktam egy masik tombot ami pont akkora hogy a tabla[32][32](ami a tabla[' '][' ']) cim benne legyen, es arra a cimre raktam egy 'x' jelet. itt a forraskod reszlete (abban nem vagyok biztos, hogy ez most nalad is mukodni fog e igy, nem tudom pontosan hogyan foglalja le a memoriat, eloszor az en tombomet a tabla ele rakta, vegul sikerult ravennem, hogy utana tegye):

    char tabla[10][10];
    char kuk2[225];
    int sor,oszlop,lep;
    char imp[3];

    void init(){
    for(sor=0;sor<9;sor++){
    for(oszlop=0;oszlop<9;oszlop++)
    tabla[sor][oszlop]=' ';
    }
    kuk2[224]='x';
    }

    ezen kivul minden olyan mint amit te irtal. itt a kimenet:

    gyuri@TGyuri:~/phprogs$ gcc -o sakk sakk.c && ./sakk
    Kerem a babut es a poziciojat pl.:(Ha1): Ha1
    Kerem a babut es a poziciojat pl.:(Ha1): *

    A B C D E F G H
    1 |H| | | | | | | |
    2 | | | | | | | | |
    3 | | | | | | | | |
    4 | | | | | | | | |
    5 | | | | | | | | |
    6 | | | | | | | | |
    7 | | | | | | | | |
    8 | | | | | | | | |
    lepeszsam:4

    A B C D E F G H
    1 |x|x|x|x|x|x|x|x|
    2 |x|x|x|x|x|x|x|x|
    3 |x|x|x|x|x|x|x|x|
    4 |x|x|x|x|x|x|x|x|
    5 |H| | | | | | | |
    6 | | | | | | | | |
    7 | | | | | | | | |
    8 | | | | | | | | |

    amint latod kiirta az x-et a masik tombbol. ez egy nagyobb projektnel ahol tobb valtozod van elofordulhat ilyen ugyeskedes nelkul is

    Köszönöm, a kiegészítést/magyarázatot! :R
    Már az előző hozzászólás után módosítottam a kódot, nem rég kezdtem el foglalkozni a dologgal, mármint nem a C nyelvvel, hanem az egész programozás témával remélem azért később jobban fog menni és nem okoz majd ekkora nehézséget egy ilyen egyszerűbb program megírása.

  • Gyuri16
    senior tag

    Mondtam, hogy nagyon nem vágom :DDD ,de ettől függetlenül ezer dologgal teszteltem és egyszer sem fagyott meg.

    de a te megoldasod nalam "|"-t ir ki "| " helyett az elso sorokban, azon kivul nem korrekt (ha beadando akkor pontlevonas).
    kicsit jatszottam vele es sikerult rossz helyzetet eloidezni. a kododba raktam egy masik tombot ami pont akkora hogy a tabla[32][32](ami a tabla[' '][' ']) cim benne legyen, es arra a cimre raktam egy 'x' jelet. itt a forraskod reszlete (abban nem vagyok biztos, hogy ez most nalad is mukodni fog e igy, nem tudom pontosan hogyan foglalja le a memoriat, eloszor az en tombomet a tabla ele rakta, vegul sikerult ravennem, hogy utana tegye):

    char tabla[10][10];
    char kuk2[225];
    int sor,oszlop,lep;
    char imp[3];

    void init(){
    for(sor=0;sor<9;sor++){
    for(oszlop=0;oszlop<9;oszlop++)
    tabla[sor][oszlop]=' ';
    }
    kuk2[224]='x';
    }

    ezen kivul minden olyan mint amit te irtal. itt a kimenet:

    gyuri@TGyuri:~/phprogs$ gcc -o sakk sakk.c && ./sakk
    Kerem a babut es a poziciojat pl.:(Ha1): Ha1
    Kerem a babut es a poziciojat pl.:(Ha1): *

    A B C D E F G H
    1 |H| | | | | | | |
    2 | | | | | | | | |
    3 | | | | | | | | |
    4 | | | | | | | | |
    5 | | | | | | | | |
    6 | | | | | | | | |
    7 | | | | | | | | |
    8 | | | | | | | | |
    lepeszsam:4

    A B C D E F G H
    1 |x|x|x|x|x|x|x|x|
    2 |x|x|x|x|x|x|x|x|
    3 |x|x|x|x|x|x|x|x|
    4 |x|x|x|x|x|x|x|x|
    5 |H| | | | | | | |
    6 | | | | | | | | |
    7 | | | | | | | | |
    8 | | | | | | | | |

    amint latod kiirta az x-et a masik tombbol. ez egy nagyobb projektnel ahol tobb valtozod van elofordulhat ilyen ugyeskedes nelkul is

  • eleg erdekes dolgot irtal, nem egeszen ertem mit akartal ezzel a sorral:
    printf("|%c",tabla[' '][' ']);
    ha jol gondolom (ha nem akkor valaki javitson ki) az tortenik hogy a ' ' atvaltozik szamra (32) es azzal indexeled a tombot, es kiirsz valamit, rosszabb esetben megfagy a program mert olyan helyre nyulkalsz ahova nem szabadna.
    en siman kiiratnak egy "| "-t igy:
    printf("| ");

    Mondtam, hogy nagyon nem vágom :DDD ,de ettől függetlenül ezer dologgal teszteltem és egyszer sem fagyott meg.

  • Gyuri16
    senior tag

    Köszönöm, a fáradtság úgy néz ki legyőzött. Így már minden szép és jó.
    void leptet(){
    int i,j,k;
    k=0;
    printf("lepeszsam:");
    scanf("%d",&k);


    printf("\n ");
    for(i=0;i<8;i++)
    printf("%c ", 'A'+i);
    printf("\n");
    for(i=0;i<8;i++){
    printf("%d ", i+1);
    for(j=0;j<8;j++){
    if(k>i)
    printf("|%c",tabla[' '][' ']);
    else
    printf("|%c",tabla[j][i-k]);

    }

    printf("|\n");
    }


    }

    eleg erdekes dolgot irtal, nem egeszen ertem mit akartal ezzel a sorral:
    printf("|%c",tabla[' '][' ']);
    ha jol gondolom (ha nem akkor valaki javitson ki) az tortenik hogy a ' ' atvaltozik szamra (32) es azzal indexeled a tombot, es kiirsz valamit, rosszabb esetben megfagy a program mert olyan helyre nyulkalsz ahova nem szabadna.
    en siman kiiratnak egy "| "-t igy:
    printf("| ");

  • ebben a sorban van a hiba:
    printf("|%c", tabla[j][i-k]);
    ha k>i akkor nem lesz jo. ha pl j=2, i=2, k=3 akkor tabla[2][-1] lesz az eredmeny ami a tabla[1][9] re fog mutatni, ezert lehet hogy mas oszlopba lep at. tehat eleg ele tenni egy ifet, es ha k>i akkor ures helyet rajzolni oda

    Köszönöm, a fáradtság úgy néz ki legyőzött. Így már minden szép és jó.
    void leptet(){
    int i,j,k;
    k=0;
    printf("lepeszsam:");
    scanf("%d",&k);


    printf("\n ");
    for(i=0;i<8;i++)
    printf("%c ", 'A'+i);
    printf("\n");
    for(i=0;i<8;i++){
    printf("%d ", i+1);
    for(j=0;j<8;j++){
    if(k>i)
    printf("|%c",tabla[' '][' ']);
    else
    printf("|%c",tabla[j][i-k]);

    }

    printf("|\n");
    }


    }

  • Gyuri16
    senior tag

    Üdv!

    Elég kezdő vagyok programozás témában, az alábbi feladat megoldásában kellene segítség, csak egy feltétel kell bele, de már fáradt vagyok és nagyon tompa, valszeg rettenet triviális a megoldás, ezért ne röhögjetek ki :D

    Szóval a feladat: Egy sakktbálára bábokat helyezünk el. Programunk kirajzolja a táblát, majd bekér egy lépésszámot. Ezután minden bábot a lépésszámnak megfelelő számú mezővel előre léptet(nagyobb sorszámú sorok felé), majd újra kirajzolja a táblát. A tábláról lelépő figurák természetesen nem kell kirajzoli.

    Nekem ezzel van gondom, ha túl nagy lépésszámot adok meg akkor átlép egy következő oszlopba.

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

    char tabla[10][10];
    int sor,oszlop,lep;
    char imp[3];

    void init(){
    for(sor=0;sor<9;sor++){
    for(oszlop=0;oszlop<9;oszlop++)
    tabla[sor][oszlop]=' ';
    }
    }

    void lerak(){
    char babu;

    do{

    printf("Kerem a babut es a poziciojat pl.:(Ha1): ");
    scanf("%s",imp);

    babu=imp[0];
    oszlop=imp[1]-'a';
    sor=imp[2]-1-'0';

    if(imp[0]!='*')
    tabla[oszlop][sor]=babu;

    }while(imp[0]!='*');

    }

    void rajzol(){
    int i,j;
    printf("\n ");
    for(i=0;i<8;i++)
    printf("%c ", 'A'+i);
    printf("\n");
    for(i=0;i<8;i++){
    printf("%d ", i+1);
    for(j=0;j<8;j++)
    printf("|%c", tabla[j][i]);
    printf("|\n");
    }
    }

    void leptet(){
    int i,j,k;
    k=0;
    printf("lepeszsam:");
    scanf("%d",&k);



    printf("\n ");
    for(i=0;i<8;i++)
    printf("%c ", 'A'+i);
    printf("\n");
    for(i=0;i<8;i++){
    printf("%d ", i+1);
    for(j=0;j<8;j++)

    printf("|%c", tabla[j][i-k]);

    printf("|\n");
    }
    }

    int main(){
    init();
    lerak();
    rajzol();
    leptet();
    system("PAUSE");
    return 0;
    }

    ebben a sorban van a hiba:
    printf("|%c", tabla[j][i-k]);
    ha k>i akkor nem lesz jo. ha pl j=2, i=2, k=3 akkor tabla[2][-1] lesz az eredmeny ami a tabla[1][9] re fog mutatni, ezert lehet hogy mas oszlopba lep at. tehat eleg ele tenni egy ifet, es ha k>i akkor ures helyet rajzolni oda

  • Üdv!

    Elég kezdő vagyok programozás témában, az alábbi feladat megoldásában kellene segítség, csak egy feltétel kell bele, de már fáradt vagyok és nagyon tompa, valszeg rettenet triviális a megoldás, ezért ne röhögjetek ki :D

    Szóval a feladat: Egy sakktbálára bábokat helyezünk el. Programunk kirajzolja a táblát, majd bekér egy lépésszámot. Ezután minden bábot a lépésszámnak megfelelő számú mezővel előre léptet(nagyobb sorszámú sorok felé), majd újra kirajzolja a táblát. A tábláról lelépő figurák természetesen nem kell kirajzoli.

    Nekem ezzel van gondom, ha túl nagy lépésszámot adok meg akkor átlép egy következő oszlopba.

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

    char tabla[10][10];
    int sor,oszlop,lep;
    char imp[3];

    void init(){
    for(sor=0;sor<9;sor++){
    for(oszlop=0;oszlop<9;oszlop++)
    tabla[sor][oszlop]=' ';
    }
    }

    void lerak(){
    char babu;

    do{

    printf("Kerem a babut es a poziciojat pl.:(Ha1): ");
    scanf("%s",imp);

    babu=imp[0];
    oszlop=imp[1]-'a';
    sor=imp[2]-1-'0';

    if(imp[0]!='*')
    tabla[oszlop][sor]=babu;

    }while(imp[0]!='*');

    }

    void rajzol(){
    int i,j;
    printf("\n ");
    for(i=0;i<8;i++)
    printf("%c ", 'A'+i);
    printf("\n");
    for(i=0;i<8;i++){
    printf("%d ", i+1);
    for(j=0;j<8;j++)
    printf("|%c", tabla[j][i]);
    printf("|\n");
    }
    }

    void leptet(){
    int i,j,k;
    k=0;
    printf("lepeszsam:");
    scanf("%d",&k);



    printf("\n ");
    for(i=0;i<8;i++)
    printf("%c ", 'A'+i);
    printf("\n");
    for(i=0;i<8;i++){
    printf("%d ", i+1);
    for(j=0;j<8;j++)

    printf("|%c", tabla[j][i-k]);

    printf("|\n");
    }
    }

    int main(){
    init();
    lerak();
    rajzol();
    leptet();
    system("PAUSE");
    return 0;
    }

  • Darth_Revan
    veterán

    Sziasztok!
    Volna 1 feladat amit meg kellene oldanom, de sajnos nem vágom a C-t és a bash-t se nagyon :( 3 napja kínlódom vele, de nem jutottam sokra google-val sem:( Hosszúnak tűnik, de aki ért hozzá nem hiszem, hogy nehéz lenne, ezért könyörgöm valaki csinálja meg nekem, fontos lenne.

    "Írjon C programot, amely elvégez egy muveletet több szálon, üzenetsoron keresztüli IPC segítségével.
    A program dolgozza fel a bemeno paramétereket és a "-t" opcióval megadott számot tárolja el, mint a
    létrehozandó szálak számát.
    A szülo processzbol inditsunk annyi szálat amennyit a -t kapcsolóval megadtunk. Tartsuk nyilván a szálak indexét, amit 1-tol számoljunk. Készítsünk egy üzenetsort IPC_PRIVATE kulccsal.

    A szülo processz a következo feladatokat lássa el:
    Olvasson be két egész számot a standard inputról és küldje el azokat az üzenetsorra az összes szál számára. (Minden számot külön sorban kérjen be.) A szülo ezek után várja meg a szálak muveleteinek eredményét (amik bool értékek lesznek) majd keresse meg a legmagasabb szál-indexu igaz értéket, és ezt az indexet írja ki a standard outputra.

    A szálak a következo muveletet hajtsák végre:
    Minden szál olvassa ki a szülotol kapott két számot az üzenetsorrol, és ossza el mindekettot a saját szál indexével (1-tol számozódik).
    Ha az eredmény maradék nélkül osztható mindkét szám esetében, az eredmény legyen igaz, különben hamis.
    Az eredményt küldjük el a szölo processz számára az üzenetsoron keresztül.
    Ne felejtsük el a szálakat összevárni a gyerek processzben (pthread_join használatával).

    A kommunikációhoz az üzenetsort használjunk és küldjünk annyi üzenetet amennyi szükséges. Az üzenet soron kívül más IPC módszert ne használjunk. Az üzenetsor kulcsa IPC_PRIVATE legyen.
    A program paraméterei:
    A program ellenorizze a paramétereket és ha a paraméterek között
    szerepel "-h", akkor írja ki a program m.ködését. Ha a paraméterek
    között szerepel a "-t" kapcsoló, akkor a következ. paramétert
    alakítsa számmá, ez lesz létrehozandó a szálak száma. (használat
    pl: run.sh -t 3)
    (A program számolja ki a standard inputon megadott 2 szám legnagyobb közös osztóját a megadott határig.) "

    Előre is köszönöm szépen! (szerencsére csak most az 1x kaptam ilyen feladatot)
    Vasárnap reggelre kellene. Még1x köszönöm előre is. (És bocs, hogy az egész "karotokat" akarom :( )

    Ha valaki el tudná küldeni priviben ennek a megoldását azt én is megköszönném. Gyakorlaton nem maradt idő venni ezt a témát, de persze ha nem lesz kész akkor bukta...gg

  • Sziasztok!
    Volna 1 feladat amit meg kellene oldanom, de sajnos nem vágom a C-t és a bash-t se nagyon :( 3 napja kínlódom vele, de nem jutottam sokra google-val sem:( Hosszúnak tűnik, de aki ért hozzá nem hiszem, hogy nehéz lenne, ezért könyörgöm valaki csinálja meg nekem, fontos lenne.

    "Írjon C programot, amely elvégez egy muveletet több szálon, üzenetsoron keresztüli IPC segítségével.
    A program dolgozza fel a bemeno paramétereket és a "-t" opcióval megadott számot tárolja el, mint a
    létrehozandó szálak számát.
    A szülo processzbol inditsunk annyi szálat amennyit a -t kapcsolóval megadtunk. Tartsuk nyilván a szálak indexét, amit 1-tol számoljunk. Készítsünk egy üzenetsort IPC_PRIVATE kulccsal.

    A szülo processz a következo feladatokat lássa el:
    Olvasson be két egész számot a standard inputról és küldje el azokat az üzenetsorra az összes szál számára. (Minden számot külön sorban kérjen be.) A szülo ezek után várja meg a szálak muveleteinek eredményét (amik bool értékek lesznek) majd keresse meg a legmagasabb szál-indexu igaz értéket, és ezt az indexet írja ki a standard outputra.

    A szálak a következo muveletet hajtsák végre:
    Minden szál olvassa ki a szülotol kapott két számot az üzenetsorrol, és ossza el mindekettot a saját szál indexével (1-tol számozódik).
    Ha az eredmény maradék nélkül osztható mindkét szám esetében, az eredmény legyen igaz, különben hamis.
    Az eredményt küldjük el a szölo processz számára az üzenetsoron keresztül.
    Ne felejtsük el a szálakat összevárni a gyerek processzben (pthread_join használatával).

    A kommunikációhoz az üzenetsort használjunk és küldjünk annyi üzenetet amennyi szükséges. Az üzenet soron kívül más IPC módszert ne használjunk. Az üzenetsor kulcsa IPC_PRIVATE legyen.
    A program paraméterei:
    A program ellenorizze a paramétereket és ha a paraméterek között
    szerepel "-h", akkor írja ki a program m.ködését. Ha a paraméterek
    között szerepel a "-t" kapcsoló, akkor a következ. paramétert
    alakítsa számmá, ez lesz létrehozandó a szálak száma. (használat
    pl: run.sh -t 3)
    (A program számolja ki a standard inputon megadott 2 szám legnagyobb közös osztóját a megadott határig.) "

    Előre is köszönöm szépen! (szerencsére csak most az 1x kaptam ilyen feladatot)
    Vasárnap reggelre kellene. Még1x köszönöm előre is. (És bocs, hogy az egész "karotokat" akarom :( )

  • shev7
    veterán

    Sziasztok!

    ANSI C-ben kellene megírnom egy kezdő szintű programot, de ehhez túl szerények az ismereteim. :U Itt kicsit hosszadalmas lenne leírni a feladatot, így inkább privátban küldeném el egy hozzáértőnek.

    Ha valaki tudna nekem segíteni, nagyon hálás lennék! (Életmentés esete forog fenn! :D )

    Köszi előre is!

    ar? :DDD

  • Echo2211
    csendes tag

    Sziasztok!

    ANSI C-ben kellene megírnom egy kezdő szintű programot, de ehhez túl szerények az ismereteim. :U Itt kicsit hosszadalmas lenne leírni a feladatot, így inkább privátban küldeném el egy hozzáértőnek.

    Ha valaki tudna nekem segíteni, nagyon hálás lennék! (Életmentés esete forog fenn! :D )

    Köszi előre is!

  • 3man
    csendes tag

    Annak sem lenne sok értelme, ha globális szinten tárolnám egy változóba, mert listák közül is lehet akármennyi.

    Ilyenkor jön be az, hogy egy structban együtt tárolod a pointert és a tömb hosszát :)

    Ezt fejtettem ki lentebb, csak valami miatt nem erti, miert akarunk mi raeroltetni struct-ot, mikor o csak egy char * -ot akar hasznalni.

    Ezert jobb lenne c++ ban kezdeni, mert kisse mas es celravezetobb gondolkodasmod alakul ki.
    Ott letrehozhatsz egy olyan osztalyt, amit te a "char *" helyett fogsz MINDENUTT hasznalni. Ez letarolhatja az aktualis meretet a stringnek, lehet operatorokat letrehozni, amelyek segitsegevel ugyan ugy kezelheted a valtozot, mintha char * lenne. Amikor a program a data [index] utasitashoz er, akkor meghivodik az osztaly [] operatora, amit te barhogy megirhatsz. Ellenorizheted, hogy az index nem negativ, es az eppen aktualis string mereten belul van vagy nem. Messze hatekonyabb lesz a program, es biztonsagosabb.

    De mar megint OFF voltam.

  • Karma
    félisten

    Értem, ill. jól gondoltam... :)
    Azért nem tudom előre a hosszát, mert egy fileból olvasom ki az értékeket.

    Annak sem lenne sok értelme, ha globális szinten tárolnám egy változóba, mert listák közül is lehet akármennyi.

    Ez lett belőle:

    int ptLen(char **data) {
    if (!data)
    return 0;

    int i=0;

    while (data[++i])
    ;

    return i-1;
    }

    Annak sem lenne sok értelme, ha globális szinten tárolnám egy változóba, mert listák közül is lehet akármennyi.

    Ilyenkor jön be az, hogy egy structban együtt tárolod a pointert és a tömb hosszát :)

  • VaZso
    senior tag

    Hát a tömbödet kézzel kell végignézni (ez persze nem túl hatékony, mint ahogy az strlen sem).
    De ha amúgy is te foglaltad le akkor nyilván tudod mekkora, csak nem kell "elfelejteni".

    Értem, ill. jól gondoltam... :)
    Azért nem tudom előre a hosszát, mert egy fileból olvasom ki az értékeket.

    Annak sem lenne sok értelme, ha globális szinten tárolnám egy változóba, mert listák közül is lehet akármennyi.

    Ez lett belőle:

    int ptLen(char **data) {
    if (!data)
    return 0;

    int i=0;

    while (data[++i])
    ;

    return i-1;
    }

  • Jester01
    veterán

    Köszönöm a válaszokat.

    Az strlen függvénnyel meg tudom nézni egy string hosszát, de egy tömb elemeinek számát miképpen? (Ha simán meghívom, eredményként 0-át kapok.)

    Rosszul értettem, hogy meghatározható így?

    Hát a tömbödet kézzel kell végignézni (ez persze nem túl hatékony, mint ahogy az strlen sem).
    De ha amúgy is te foglaltad le akkor nyilván tudod mekkora, csak nem kell "elfelejteni".

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

Hirdetés