Hirdetés

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

  • Zollee
    tag

    bocsi a feladat ez lenne:) Írj programot, amely bekér egy pénzösszeget (egy számot), majd

    meghatározza, hogyan fizethető ki ez az összeg a lehető legkevesebb 10, 5,

    2 és 1 koronás érmérvel!

    Bekérsz egy értéket. Mivel a legnagyobb érméd a 10-es, ezzel elosztod, majd az egész részét eltárolod egy változóban. A maradékot tovább osztogatod (az 5-össel, majd a 2-essel) úgy ahogy a 10-zel is tetted, és ezeknek az egész részeit is hozzá adod az előbbi "számoló" változódhoz. Majd a számoló változód értékét kiiratod, hisz az érmék darabszáma ebben lesz.

  • Jester01
    veterán

    Szia!

    Igazából az első lépéseket nem vágom!
    Konkrétan ezt:
    Egy max. 10 lépésből (ellenőrzendő) álló vezérlőprogramot kell beolvasni. A vezérlő program
    minden utasítása az x, y, és z irányokba történő lépés hosszát (x, y, z ∈ [-127,+127]) tartalmazza.
    Ha a megadott lépéshossz nem megfelelő, az utasítást újra kéri a program.
    • Az utasításokat egy int típusú, 10 elemű tömbben kell tárolni, az alábbi felépítésben: x előjele,
    x6…x0, y előjele, y6…y0, y előjele, z6…z0 (minden byte egy koordináta előjele és hossza). A
    negatív előjel kódja 1, egyébként az előjel kódja zéró.
    • A program végét jelzi, ha a lépéshossz zérus minden irányban vagy a 10. utasítást beolvasása
    Ebben tudnál esetleg segíteni nekem?
    Megköszönném mindenképp!

    Gondolom a tíz elemű tömb definiálása és a tízszer három szám beolvasása nem okoz problémát az ellenőrzéssel együtt sem.
    Egy adott koordinátahármas int-be pakolásához először mindegyiket az adott formára kell hozni, pl: if (x < 0) x = 0x80 | -x;. Ezután pedig bit eltolás művelettel egybe lehet őket tenni, pl: int step = (x << 16) | (y << 8) | z;

  • pszaby
    csendes tag

    Hát ez elég szájbarágósan le van írva. Meg tudod mondani melyik rész okoz problémát?

    Votyesz13: te meg lehagytad a feladatot. De a for az ciklus tehát ha valamit ismételni kell akkor használd. A switch meg csak egy felturbózott if amit akkor használunk ha azonos kifejezés különböző értékeit akarjuk vizsgálni.

    Szia!

    Igazából az első lépéseket nem vágom!
    Konkrétan ezt:
    Egy max. 10 lépésből (ellenőrzendő) álló vezérlőprogramot kell beolvasni. A vezérlő program
    minden utasítása az x, y, és z irányokba történő lépés hosszát (x, y, z ∈ [-127,+127]) tartalmazza.
    Ha a megadott lépéshossz nem megfelelő, az utasítást újra kéri a program.
    • Az utasításokat egy int típusú, 10 elemű tömbben kell tárolni, az alábbi felépítésben: x előjele,
    x6…x0, y előjele, y6…y0, y előjele, z6…z0 (minden byte egy koordináta előjele és hossza). A
    negatív előjel kódja 1, egyébként az előjel kódja zéró.
    • A program végét jelzi, ha a lépéshossz zérus minden irányban vagy a 10. utasítást beolvasása
    Ebben tudnál esetleg segíteni nekem?
    Megköszönném mindenképp!

  • Karma
    félisten

    Pl. úgy, hogy nem intet használsz, hanem longot, ami mindig 32-bites.
    Mindig? Na ne viccelj!

    kikiáltja C++ programozásnak, pedig ez csak egy C program, C++ fordítóval lefordítva,
    Azért mert egy adott program ránézésre esetleg nem annyira objektum-orientált vagy ilyesmi, azért még meg lehet írni c++-ban. És persze semmi akadálya, hogy az implementáció során osztályokat használj pl. a "Program", "Terminal", "Executor" (ez egy absztrakt osztály lenne), "Simulator" (ez meg implementálja az Executor-t). Így ha teszem azt később ki akarod bővíteni azzal, hogy vezéreljen egy usb portra kötött 3D robotot akkor csak egy új osztály kell ami az Executor-t implementálja.

    cucka: Mivel a feladat specifikálta, hogy ezt a 3 byteot kell belegyömöszölni az int-be ezért feltételezhető, hogy az adott architektúrán legalább 24 bites az int. Ha meg több az tök mindegy. Egyszerű bit műveletekkel meg lehet oldani. Amúgy ha ettől a feladattól elvonatkoztatva valamikor adott bitszámú int-re van szükséged, akkor az stdint.h-ban laknak olyanok, hogy int32_t meg int_least32_t és társaik.

    "Mindig? Na ne viccelj!"

    Bakker, és tényleg igazad van. "At least"... Mindegy, azt a problémát megoldja, hogy kevesebb nem lehet ;)

    "Azért mert egy adott program ránézésre esetleg nem annyira objektum-orientált vagy ilyesmi, azért még meg lehet írni c++-ban. "

    Meg lehet írni, de szerintem ilyen kitételek mellett (és hallgatói felkészültség mellett) nem ez a cél.

  • Jester01
    veterán

    Pl. úgy, hogy nem intet használsz, hanem longot, ami mindig 32-bites.

    Aki kitalálta azt, hogy: 1) intet kell használni, valamint 2) ezt kikiáltja C++ programozásnak, pedig ez csak egy C program, C++ fordítóval lefordítva, azt (hmm)... Nem illik azt mondani, hogy tarkón kéne lőni, úgyhogy csak tarkón kéne vágni.

    Pl. úgy, hogy nem intet használsz, hanem longot, ami mindig 32-bites.
    Mindig? Na ne viccelj!

    kikiáltja C++ programozásnak, pedig ez csak egy C program, C++ fordítóval lefordítva,
    Azért mert egy adott program ránézésre esetleg nem annyira objektum-orientált vagy ilyesmi, azért még meg lehet írni c++-ban. És persze semmi akadálya, hogy az implementáció során osztályokat használj pl. a "Program", "Terminal", "Executor" (ez egy absztrakt osztály lenne), "Simulator" (ez meg implementálja az Executor-t). Így ha teszem azt később ki akarod bővíteni azzal, hogy vezéreljen egy usb portra kötött 3D robotot akkor csak egy új osztály kell ami az Executor-t implementálja.

    cucka: Mivel a feladat specifikálta, hogy ezt a 3 byteot kell belegyömöszölni az int-be ezért feltételezhető, hogy az adott architektúrán legalább 24 bites az int. Ha meg több az tök mindegy. Egyszerű bit műveletekkel meg lehet oldani. Amúgy ha ettől a feladattól elvonatkoztatva valamikor adott bitszámú int-re van szükséged, akkor az stdint.h-ban laknak olyanok, hogy int32_t meg int_least32_t és társaik.

  • Karma
    félisten

    • Az utasításokat egy int típusú, 10 elemű tömbben kell tárolni, az alábbi felépítésben: x előjele,
    x6…x0, y előjele, y6…y0, y előjele, z6…z0 (minden byte egy koordináta előjele és hossza). A

    Nekem csak ezzel a résszel kapcsolatban lenne egy kérdésem egy nálam szakértőbb emberhez: itt ugye egy 4 byte-on ábrázolt int változóban tárolunk 3 darab 1 byte-os számot, a trükk, hogy ezeket kell kinyerni valahogy. A kérdés igazából annyi, hogy hogyan lehet megírni ezt a programot úgy, hogy akkor is működjön, ha az adott gépen az int nem 4 byte-os, hanem több vagy kevesebb? (Mondjuk ha több, akkor az nem gáz, de ha kevesebb, akkor baj van).
    Vagyis általánosan véve az a kérdés, hogy meg lehet-e mondani valahogy a fordítónak, hogy mi 4 byte-os inteket szeretnénk használni?

    Mod: Mondjuk a többiekkel ellentétben én nem kaptam meg ezt házi feladatnak, tehát a kérdés pusztán elméleti jellegű :D

    Mod2: Amúgy ritka balf*szul sikerült megfogalmazzák a feladatot, főleg az idézett részt nézegettem sokat, amíg rájöttem, mi a túrót szeretnének.

    Pl. úgy, hogy nem intet használsz, hanem longot, ami mindig 32-bites.

    Aki kitalálta azt, hogy: 1) intet kell használni, valamint 2) ezt kikiáltja C++ programozásnak, pedig ez csak egy C program, C++ fordítóval lefordítva, azt (hmm)... Nem illik azt mondani, hogy tarkón kéne lőni, úgyhogy csak tarkón kéne vágni.

  • bocsi a feladat ez lenne:) Írj programot, amely bekér egy pénzösszeget (egy számot), majd

    meghatározza, hogyan fizethető ki ez az összeg a lehető legkevesebb 10, 5,

    2 és 1 koronás érmérvel!

  • cucka
    addikt

    Sziasztok!
    Lenne feléltek mint C és C++ nyelvhez értőkhöz egy óriási kérésem!
    Most kezdtem csak a C++ nyelvet tanulni és lenne egy feladatom amit megkell hogy csináljak, de fogalmam sincs hogyan álljak neki!
    Szóval a feladat a következő:
    Vezérlőprogram beírása:
    • Egy max. 10 lépésből (ellenőrzendő) álló vezérlőprogramot kell beolvasni. A vezérlő program
    minden utasítása az x, y, és z irányokba történő lépés hosszát (x, y, z ∈ [-127,+127]) tartalmazza.
    Ha a megadott lépéshossz nem megfelelő, az utasítást újra kéri a program.
    • Az utasításokat egy int típusú, 10 elemű tömbben kell tárolni, az alábbi felépítésben: x előjele,
    x6…x0, y előjele, y6…y0, y előjele, z6…z0 (minden byte egy koordináta előjele és hossza). A
    negatív előjel kódja 1, egyébként az előjel kódja zéró.
    • A program végét jelzi, ha a lépéshossz zérus
    Vezérlőprogram végrehajtása:
    • A program a vezérlést a (0,0,0) pozícióból indítja, és addig fut amíg a lépéshossz nem zérus
    minden irányban ill. max. 10. lépést hajt végre.
    • Minden egyes lépésben értelmezi a tárolt utasítást és kiszámítja következő pozíciót (aktuális
    pozíció+lépéshossz).
    • Minden lépésnél tabulálva kiírja az új pozíció x, y és z koordinátáját valamint a kezdőponttól
    való távolságot (double, sqrt(x2+y2+z2)).

    Ez a teljes feladat de nekem igazából az elejében kellene egy kis segítség hogy hogyan álljak neki??(dev c++ba programozunk)
    Előre is köszi mindenkinek!

    Üdv.:
    pszaby

    • Az utasításokat egy int típusú, 10 elemű tömbben kell tárolni, az alábbi felépítésben: x előjele,
    x6…x0, y előjele, y6…y0, y előjele, z6…z0 (minden byte egy koordináta előjele és hossza). A

    Nekem csak ezzel a résszel kapcsolatban lenne egy kérdésem egy nálam szakértőbb emberhez: itt ugye egy 4 byte-on ábrázolt int változóban tárolunk 3 darab 1 byte-os számot, a trükk, hogy ezeket kell kinyerni valahogy. A kérdés igazából annyi, hogy hogyan lehet megírni ezt a programot úgy, hogy akkor is működjön, ha az adott gépen az int nem 4 byte-os, hanem több vagy kevesebb? (Mondjuk ha több, akkor az nem gáz, de ha kevesebb, akkor baj van).
    Vagyis általánosan véve az a kérdés, hogy meg lehet-e mondani valahogy a fordítónak, hogy mi 4 byte-os inteket szeretnénk használni?

    Mod: Mondjuk a többiekkel ellentétben én nem kaptam meg ezt házi feladatnak, tehát a kérdés pusztán elméleti jellegű :D

    Mod2: Amúgy ritka balf*szul sikerült megfogalmazzák a feladatot, főleg az idézett részt nézegettem sokat, amíg rájöttem, mi a túrót szeretnének.

  • Jester01
    veterán

    Sziasztok!
    Lenne feléltek mint C és C++ nyelvhez értőkhöz egy óriási kérésem!
    Most kezdtem csak a C++ nyelvet tanulni és lenne egy feladatom amit megkell hogy csináljak, de fogalmam sincs hogyan álljak neki!
    Szóval a feladat a következő:
    Vezérlőprogram beírása:
    • Egy max. 10 lépésből (ellenőrzendő) álló vezérlőprogramot kell beolvasni. A vezérlő program
    minden utasítása az x, y, és z irányokba történő lépés hosszát (x, y, z ∈ [-127,+127]) tartalmazza.
    Ha a megadott lépéshossz nem megfelelő, az utasítást újra kéri a program.
    • Az utasításokat egy int típusú, 10 elemű tömbben kell tárolni, az alábbi felépítésben: x előjele,
    x6…x0, y előjele, y6…y0, y előjele, z6…z0 (minden byte egy koordináta előjele és hossza). A
    negatív előjel kódja 1, egyébként az előjel kódja zéró.
    • A program végét jelzi, ha a lépéshossz zérus
    Vezérlőprogram végrehajtása:
    • A program a vezérlést a (0,0,0) pozícióból indítja, és addig fut amíg a lépéshossz nem zérus
    minden irányban ill. max. 10. lépést hajt végre.
    • Minden egyes lépésben értelmezi a tárolt utasítást és kiszámítja következő pozíciót (aktuális
    pozíció+lépéshossz).
    • Minden lépésnél tabulálva kiírja az új pozíció x, y és z koordinátáját valamint a kezdőponttól
    való távolságot (double, sqrt(x2+y2+z2)).

    Ez a teljes feladat de nekem igazából az elejében kellene egy kis segítség hogy hogyan álljak neki??(dev c++ba programozunk)
    Előre is köszi mindenkinek!

    Üdv.:
    pszaby

    Hát ez elég szájbarágósan le van írva. Meg tudod mondani melyik rész okoz problémát?

    Votyesz13: te meg lehagytad a feladatot. De a for az ciklus tehát ha valamit ismételni kell akkor használd. A switch meg csak egy felturbózott if amit akkor használunk ha azonos kifejezés különböző értékeit akarjuk vizsgálni.

  • Sziasztok

    Én ehez a feladathoz kérdnék segítséget.Nemtudom hogyan kezdjem el vagy milyen vezérlési szerkezetet használjak(if for switch..).

    előre is köszi
    üdv bolvar

  • pszaby
    csendes tag

    Sziasztok!
    Lenne feléltek mint C és C++ nyelvhez értőkhöz egy óriási kérésem!
    Most kezdtem csak a C++ nyelvet tanulni és lenne egy feladatom amit megkell hogy csináljak, de fogalmam sincs hogyan álljak neki!
    Szóval a feladat a következő:
    Vezérlőprogram beírása:
    • Egy max. 10 lépésből (ellenőrzendő) álló vezérlőprogramot kell beolvasni. A vezérlő program
    minden utasítása az x, y, és z irányokba történő lépés hosszát (x, y, z ∈ [-127,+127]) tartalmazza.
    Ha a megadott lépéshossz nem megfelelő, az utasítást újra kéri a program.
    • Az utasításokat egy int típusú, 10 elemű tömbben kell tárolni, az alábbi felépítésben: x előjele,
    x6…x0, y előjele, y6…y0, y előjele, z6…z0 (minden byte egy koordináta előjele és hossza). A
    negatív előjel kódja 1, egyébként az előjel kódja zéró.
    • A program végét jelzi, ha a lépéshossz zérus
    Vezérlőprogram végrehajtása:
    • A program a vezérlést a (0,0,0) pozícióból indítja, és addig fut amíg a lépéshossz nem zérus
    minden irányban ill. max. 10. lépést hajt végre.
    • Minden egyes lépésben értelmezi a tárolt utasítást és kiszámítja következő pozíciót (aktuális
    pozíció+lépéshossz).
    • Minden lépésnél tabulálva kiírja az új pozíció x, y és z koordinátáját valamint a kezdőponttól
    való távolságot (double, sqrt(x2+y2+z2)).

    Ez a teljes feladat de nekem igazából az elejében kellene egy kis segítség hogy hogyan álljak neki??(dev c++ba programozunk)
    Előre is köszi mindenkinek!

    Üdv.:
    pszaby

  • m0h0senator
    őstag

    Sziasztok!

    Kész lett a prím számos programom. Beteszem ide hátha valakinek segítséget nyújt.

    #include <stdio.h>
    #include <conio.h>
    int prim, oszto, x;
    void main (void)
    {
    clrscr();

    do
    {
    x=x+1;
    prim=1;
    oszto=2;
    while ((oszto<x)&&(prim==1))
    {
    if(x%oszto==0)
    {
    prim=0;
    }
    else
    {

    }
    oszto=oszto+1;
    }
    if(prim==1)
    {
    printf("%i ,",x);
    }
    /* else
    {
    printf("A sz m nem prˇm sz m");
    }*/
    }

    while(x<100);
    getch();

  • m0h0senator
    őstag

    Húha. Légyszi használd a Kód gombot, és úgy illeszd be a kódot, lehetőleg indentálva, mert ez így elég nehezen olvasható.

    Elöljáróban: Egyszerűbb lenne egy for ciklus 2-től 100-ig (gyakorlatilag most is ez van, csak while-lal), és minden esetben végezni egy prímtesztet. Most is ezt akarnád csinálni, csak olyan kusza, hogy nem látszik.

    A hiba nagyon valószínű, hogy azért van, mert elfelejtetted alaphelyzetbe állítani az oszto és a prim változókat a ciklusmagban.

    OMG! Megvan, hogy miért 854! Mert pointert íratsz ki, nem a számot!

    printf("%i ", x);

    Köszi szépen a választ, neki esek és legközelebb így linkelem be. :B :R

  • Devdi
    aktív tag

    ennel azert egyszerubb fogni egy debuggert, es hasznalni ;)

    Úgy értem, hogy az algoritmus meg minden az helyes... Csak az eredmény nem jó valamiért :))

  • Daneeka
    senior tag

    Nálam működik (XCode, OSX 10.6). Nem lehet, hogy egyszerűen kicsúszik a 2-es a képből? (a szabvány Windowsos terminál pont 25 soros), amit hajnalok hajnalán nem vettél észre?

    Mi ez a nagy while mánia egyébként? Miért nem lehet for ciklust használni? Meg indentálni?

    for (i = 1; i <= 50; i++)
    {
    ...
    }

    Köszi tényleg az volt a hiba, hogy kilógott a kettes. Pedig erre gondoltam, próbáltam is scrollozni felfele, ami miatt nem ment az az, hogy úgy néz ki nálam nem működik valamiért az egérgörgő parancssori progiknál. Aztán azt valószínűbbnek láttam, hogy nem bírok programozni mint azt, hogy nem bírok scrollozni, szóval beírtam ide. :D

    (pár hete programozok még csak, a while nekem átláthatóbb, hogy látom függőlegesen a lépéseit, jobban hasonlít arra a folyamatra amit az agyamban elképzelek, később majd kiverik belőlünk esetleg :D )

  • mmdms
    addikt

    Hali!
    Nézegettem az első hsz linkeit, de már nem él a legtöbb oldal. Szóval kellene nekem valami olyan doksi, amiben nagyon egyszerű feladatok vannak, és lehetőleg mellékelve is legyenek hozzá a progik. pl: pitagoraszi számhármas ellenőrzése meg ilyenek (mondjuk ez pont meg van, de ilyen kaliber) Tudtok ilyet?

  • Karma
    félisten

    Hi,

    #include <stdio.h>
    int main()
    {
    int i = 1;
    int szam=50;
    while (i<=szam)
    {
    if (i%2==0)
    printf("%d\n", i);
    i = i+1;
    }
    getchar();
    return 0;
    }

    Ezt a rövid kis kódot azzal a céllal hoztam létre, hogy 1-től 50-ig kiírja nekem a páros számokat, de csak 4-től 50 ig írja ki, a kettes szám valamiért lemarad az elejéről.

    Mit vétettem?

    (dev-c++ -ban készült, ahol csak getchar()-al hajlandóak működni a progik nálam, de a scanf utáni enternél így is kilépnek, ezért nincs túlspilázva scanf-fel meg stb)

    Nálam működik (XCode, OSX 10.6). Nem lehet, hogy egyszerűen kicsúszik a 2-es a képből? (a szabvány Windowsos terminál pont 25 soros), amit hajnalok hajnalán nem vettél észre?

    Mi ez a nagy while mánia egyébként? Miért nem lehet for ciklust használni? Meg indentálni?

    for (i = 1; i <= 50; i++)
    {
    ...
    }

  • Daneeka
    senior tag

    Hi,

    #include <stdio.h>
    int main()
    {
    int i = 1;
    int szam=50;
    while (i<=szam)
    {
    if (i%2==0)
    printf("%d\n", i);
    i = i+1;
    }
    getchar();
    return 0;
    }

    Ezt a rövid kis kódot azzal a céllal hoztam létre, hogy 1-től 50-ig kiírja nekem a páros számokat, de csak 4-től 50 ig írja ki, a kettes szám valamiért lemarad az elejéről.

    Mit vétettem?

    (dev-c++ -ban készült, ahol csak getchar()-al hajlandóak működni a progik nálam, de a scanf utáni enternél így is kilépnek, ezért nincs túlspilázva scanf-fel meg stb)

  • Karma
    félisten

    Húha. Légyszi használd a Kód gombot, és úgy illeszd be a kódot, lehetőleg indentálva, mert ez így elég nehezen olvasható.

    Elöljáróban: Egyszerűbb lenne egy for ciklus 2-től 100-ig (gyakorlatilag most is ez van, csak while-lal), és minden esetben végezni egy prímtesztet. Most is ezt akarnád csinálni, csak olyan kusza, hogy nem látszik.

    A hiba nagyon valószínű, hogy azért van, mert elfelejtetted alaphelyzetbe állítani az oszto és a prim változókat a ciklusmagban.

    OMG! Megvan, hogy miért 854! Mert pointert íratsz ki, nem a számot!

    printf("%i ", x);

    Nos, a ciklusmagot és a kiírást kijavítva nálam már jól működik.

    iMac:Debug zsolt$ ./test
    2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

    Azért nem lenne hátrány, ha azokat a while ciklusokat újragondolnád ;)

  • Karma
    félisten

    Sziasztok,

    az a feladat, hogy irassuk ki az összes prím számot 100ig. Én ezt írtam:

    #include <stdio.h>
    #include <conio.h>
    int prim, oszto, x;
    void main (void)
    {
    clrscr();
    prim=1;
    oszto=2;
    x=1;
    while (x<=100)
    {
    while ((oszto<x)&&(prim==1))
    {
    if(x%oszto==0)
    {
    prim=0;
    }
    else
    {

    }
    oszto=oszto+1;
    }
    if(prim==1)
    {
    printf("%i ", &x);
    }
    else
    {
    // printf("A szam nem prim szam");
    }
    x=x+1;
    }
    getch();
    }

    és állandóan cask azt írja ki h 854 :F LÉgyszíves nézzétek át mert én nem találtam hol van benne a hiba.

    Köszönöm :R

    Húha. Légyszi használd a Kód gombot, és úgy illeszd be a kódot, lehetőleg indentálva, mert ez így elég nehezen olvasható.

    Elöljáróban: Egyszerűbb lenne egy for ciklus 2-től 100-ig (gyakorlatilag most is ez van, csak while-lal), és minden esetben végezni egy prímtesztet. Most is ezt akarnád csinálni, csak olyan kusza, hogy nem látszik.

    A hiba nagyon valószínű, hogy azért van, mert elfelejtetted alaphelyzetbe állítani az oszto és a prim változókat a ciklusmagban.

    OMG! Megvan, hogy miért 854! Mert pointert íratsz ki, nem a számot!

    printf("%i ", x);

  • m0h0senator
    őstag

    Sziasztok,

    az a feladat, hogy irassuk ki az összes prím számot 100ig. Én ezt írtam:

    #include <stdio.h>
    #include <conio.h>
    int prim, oszto, x;
    void main (void)
    {
    clrscr();
    prim=1;
    oszto=2;
    x=1;
    while (x<=100)
    {
    while ((oszto<x)&&(prim==1))
    {
    if(x%oszto==0)
    {
    prim=0;
    }
    else
    {

    }
    oszto=oszto+1;
    }
    if(prim==1)
    {
    printf("%i ", &x);
    }
    else
    {
    // printf("A szam nem prim szam");
    }
    x=x+1;
    }
    getch();
    }

    és állandóan cask azt írja ki h 854 :F LÉgyszíves nézzétek át mert én nem találtam hol van benne a hiba.

    Köszönöm :R

  • sghc_toma
    senior tag

    Ez majd viszonylag sokszor elő fog fordulni... :D Van amikor szinte majdnem minden sor után oda kell biggyeszteni egy kiírást, mikor már télleg nem tudod, hogy mit rontottál el :DDD

    ennel azert egyszerubb fogni egy debuggert, es hasznalni ;)

  • Devdi
    aktív tag

    Vééégre megy. :D
    Hálás köszönet. Ebből annyit is tanultam most, hogy később mindig megnézem majd a bekért adatok helyességét ha nem tudom mi a baja a proginak. :)
    Hiába na.. mindig tanul az ember. :))

    Ez majd viszonylag sokszor elő fog fordulni... :D Van amikor szinte majdnem minden sor után oda kell biggyeszteni egy kiírást, mikor már télleg nem tudod, hogy mit rontottál el :DDD

  • Zollee
    tag

    Mégpedig azért, mert a scanf egy borzasztó rossz függvény terminálról olvasáshoz.
    Ha debuggerrel vagy egy kiíratást betéve megnézed mi lesz a gyalog változód valószínűleg egyből kiszúrod, hogy bizony a bástya bekérés után a pufferben maradt egy (vagy kettő) soremelés karakter és az kerül oda.

    Gyors megoldásként ha a második scanf formátumstring elejére teszel egy szóközt akkor már jó lesz. (Persze ahogy cucka kollega mondta, csak simán az értékeket hasonlítsd össze.)

    Beolvasáshoz amúgy fgets és sscanf párosa ajánlott, megfelelő hibakezeléssel.

    Vééégre megy. :D
    Hálás köszönet. Ebből annyit is tanultam most, hogy később mindig megnézem majd a bekért adatok helyességét ha nem tudom mi a baja a proginak. :)
    Hiába na.. mindig tanul az ember. :))

  • Zollee
    tag

    Mégpedig azért, mert a scanf egy borzasztó rossz függvény terminálról olvasáshoz.
    Ha debuggerrel vagy egy kiíratást betéve megnézed mi lesz a gyalog változód valószínűleg egyből kiszúrod, hogy bizony a bástya bekérés után a pufferben maradt egy (vagy kettő) soremelés karakter és az kerül oda.

    Gyors megoldásként ha a második scanf formátumstring elejére teszel egy szóközt akkor már jó lesz. (Persze ahogy cucka kollega mondta, csak simán az értékeket hasonlítsd össze.)

    Beolvasáshoz amúgy fgets és sscanf párosa ajánlott, megfelelő hibakezeléssel.

    Mondasz vmit.. Mikor próbálgattam, előfordult, hogy a 2 bekérésből csak az 1. esetben várta meg míg beadok neki egy értéket, a másikat már önszántából kitöltötte, mintha ő jobban tudná. :)
    Most nem otthon vagyok, de amint előttem lesz a feladat, kipróbálom. Remélem menni fog.

  • cellpeti
    nagyúr

    Komolyan mondom nem értem miért kell mindig külön könyörögni hogy megtudjuk mi okozza a problémát.

    Sorry,azt lefelejtettem,hogy fv-vel kell levizsgálni a dolgokat!

  • Jester01
    veterán

    Próbáltam simán összehasonlítani (if (bastya == gyalog)...) de nem jó eredményt kapok. Valamiért soha nem kapom vissza azt, hogy a bástya üti a gyalogot. Próbáltam először csak számokkal, azzal ment. Próbáltam számot és betűt egyszerre vagy kapcsolattal, akkor már nem ment. Próbáltam aztán csak karaktert, akkor sem ment. Ezért próbálkoztam a karakter összehasonlító függvénnyel. Még mindig ott tartok hogy nem akarja az igazságot függvény nélkül sem, függvénnyel sem.

    Mégpedig azért, mert a scanf egy borzasztó rossz függvény terminálról olvasáshoz.
    Ha debuggerrel vagy egy kiíratást betéve megnézed mi lesz a gyalog változód valószínűleg egyből kiszúrod, hogy bizony a bástya bekérés után a pufferben maradt egy (vagy kettő) soremelés karakter és az kerül oda.

    Gyors megoldásként ha a második scanf formátumstring elejére teszel egy szóközt akkor már jó lesz. (Persze ahogy cucka kollega mondta, csak simán az értékeket hasonlítsd össze.)

    Beolvasáshoz amúgy fgets és sscanf párosa ajánlott, megfelelő hibakezeléssel.

  • Zollee
    tag

    El kéne olvasni, hogy az strcmp hogy működik:

    int strcmp(const char *s1, const char *s2);

    Tehát két darab char* típusú változót kér paraméternek, a te programodban pedig két char típusú változóval próbálod meghívni.
    Char típusú változókat pont úgy tudod összehasonlítani, mint ahogy sima int-eket hasonlítasz, tehát alapvetően ebben a programban semmi szükség az strcmp függvényre. A char típus egy darab karaktert jelent ugyan, de felfoghatod úgy is, mint egy előjel nélküli egész számot, mert tulajdonképpen az.

    Próbáltam simán összehasonlítani (if (bastya == gyalog)...) de nem jó eredményt kapok. Valamiért soha nem kapom vissza azt, hogy a bástya üti a gyalogot. Próbáltam először csak számokkal, azzal ment. Próbáltam számot és betűt egyszerre vagy kapcsolattal, akkor már nem ment. Próbáltam aztán csak karaktert, akkor sem ment. Ezért próbálkoztam a karakter összehasonlító függvénnyel. Még mindig ott tartok hogy nem akarja az igazságot függvény nélkül sem, függvénnyel sem.

  • Zollee
    tag

    Gondolom az, hogy nincs kedve megírni a házi feladatot, ezért reménykedik, hogy hátha itt valaki megírja helyette :D

    Nem tudom, én személy szerint nem erre játszom. Próbálkozok és ha végképp nem tudom már hova is verjem a fejem, akkor jövök segítségért. :))

  • cucka
    addikt

    Komolyan mondom nem értem miért kell mindig külön könyörögni hogy megtudjuk mi okozza a problémát.

    Gondolom az, hogy nincs kedve megírni a házi feladatot, ezért reménykedik, hogy hátha itt valaki megírja helyette :D

  • Jester01
    veterán

    üdv,szevasztok!

    Lenne egy ilyen feladatom:

    kérjünk be egy a+b= alakú stringet,ahol a és b számok 0 és 50 közé eső egészek.
    Bekértést követően irassuk ki az eredményt.

    Tudnátok segíteni? :U

    Komolyan mondom nem értem miért kell mindig külön könyörögni hogy megtudjuk mi okozza a problémát.

  • cellpeti
    nagyúr

    üdv,szevasztok!

    Lenne egy ilyen feladatom:

    kérjünk be egy a+b= alakú stringet,ahol a és b számok 0 és 50 közé eső egészek.
    Bekértést követően irassuk ki az eredményt.

    Tudnátok segíteni? :U

  • Jester01
    veterán

    Valami példa a veszélyeiről? Nem igazán vagyok c szakértő, rámfér a tanulás :)

    Az a veszélye, hogy a szabvány nem rögzíti előjeles vagy nem. Ha valakinek ez fontos, akkor feltétlen írja ki, hogy unsigned char vagy signed char ellenkező esetben érheti meglepetés.

    Például az á betű kódja iso8859-2 szerint 225, de ha a char véletlen előjeles akkor a naív if (c == 225) bizony nem lesz jó:

    #include <stdio.h>

    int main()
    {
    char c = getc(stdin);
    printf("c == 225: %d\n", c == 225);
    return 0;
    }

    $ gcc -Wall t.c
    t.c: In function 'main':
    t.c:6: warning: comparison is always false due to limited range of data type
    $ echo á | ./a.out
    c == 225: 0
    $ gcc -Wall -funsigned-char t.c
    $ echo á | ./a.out
    c == 225: 1

  • cucka
    addikt

    A char típus egy darab karaktert jelent ugyan, de felfoghatod úgy is, mint egy előjel nélküli egész számot, mert tulajdonképpen az.

    Azért ezzel tessék vigyázni mert nagyon könnyen bajba kerülhet a gyanútlan programozó :K

    Valami példa a veszélyeiről? Nem igazán vagyok c szakértő, rámfér a tanulás :)

  • Jester01
    veterán

    El kéne olvasni, hogy az strcmp hogy működik:

    int strcmp(const char *s1, const char *s2);

    Tehát két darab char* típusú változót kér paraméternek, a te programodban pedig két char típusú változóval próbálod meghívni.
    Char típusú változókat pont úgy tudod összehasonlítani, mint ahogy sima int-eket hasonlítasz, tehát alapvetően ebben a programban semmi szükség az strcmp függvényre. A char típus egy darab karaktert jelent ugyan, de felfoghatod úgy is, mint egy előjel nélküli egész számot, mert tulajdonképpen az.

    A char típus egy darab karaktert jelent ugyan, de felfoghatod úgy is, mint egy előjel nélküli egész számot, mert tulajdonképpen az.

    Azért ezzel tessék vigyázni mert nagyon könnyen bajba kerülhet a gyanútlan programozó :K

  • cucka
    addikt

    Nézegetem őket én is, van egy prog könyvem, de nem igazán taglalja a használatukat. :F
    Az strcmp függvény sem akar menni valamiért. Sokféleképp próbáltam már alakítgatni, de nem ment, most épp szegmens hibát ír. Ez azért ciki, mert az általad írt függvényeket is elvileg ugyanúgy kell majd használni a másik feladatomnál.

    Itt az strcmp-s progi, ami nem akar menni:
    (lényegében az a feladat, hogy meg kell adni a bástya és a gyalog pozícióját és el kell dönteni hogy üti-e a bástya a gyalogot? Én úgy gondoltam megvalósítani ezt, hogy mivel a bástya csak vagy vízszintesen vagy függőlegesen mozoghat, azt kell eldönteni, hogy a két bekért pozíció betűje egyezik-e a 2 bábunál, vagy a 2 számos tagja egyezik-e. Ezzel eldönthető, hogy ugyanabban az oszlopban van-e vagy ugyanabban a sorban. Ha a 2 közül legalább az egyik igen, akkor üti, ha nem akkor nem. Ehhez kellene a karakter összehasonlító függvény.)

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

    int strcmp (const char *s, const char *t)
    {
    if (*s == *t)
    return 0;
    else
    {
    printf("WTF? \n");
    }
    }

    void sakk ()
    {
    char bastya [3];
    char gyalog [3];

    printf("Kerem a bastya poziciojat: ");
    scanf("%c %c", &bastya[1], &bastya[2]);
    printf("Kerem a gyalog poziciojat: ");
    scanf("%c %c", &gyalog[1], &gyalog[2]);

    if ((strcmp(bastya[1], gyalog[1]) ==0) || (strcmp(bastya[2], gyalog[2]) ==0))
    printf("A bastya uti a gyalogot.\n");
    else
    {
    printf("A bastya nem uti a gyalogot.\n");
    }
    }

    int main ()
    {
    sakk();
    }

    El kéne olvasni, hogy az strcmp hogy működik:

    int strcmp(const char *s1, const char *s2);

    Tehát két darab char* típusú változót kér paraméternek, a te programodban pedig két char típusú változóval próbálod meghívni.
    Char típusú változókat pont úgy tudod összehasonlítani, mint ahogy sima int-eket hasonlítasz, tehát alapvetően ebben a programban semmi szükség az strcmp függvényre. A char típus egy darab karaktert jelent ugyan, de felfoghatod úgy is, mint egy előjel nélküli egész számot, mert tulajdonképpen az.

  • Zollee
    tag

    nana, azert ilyet ne...
    megvannak a megfelelo fuggvenyek erre, pl. isdigit, islower

    Nézegetem őket én is, van egy prog könyvem, de nem igazán taglalja a használatukat. :F
    Az strcmp függvény sem akar menni valamiért. Sokféleképp próbáltam már alakítgatni, de nem ment, most épp szegmens hibát ír. Ez azért ciki, mert az általad írt függvényeket is elvileg ugyanúgy kell majd használni a másik feladatomnál.

    Itt az strcmp-s progi, ami nem akar menni:
    (lényegében az a feladat, hogy meg kell adni a bástya és a gyalog pozícióját és el kell dönteni hogy üti-e a bástya a gyalogot? Én úgy gondoltam megvalósítani ezt, hogy mivel a bástya csak vagy vízszintesen vagy függőlegesen mozoghat, azt kell eldönteni, hogy a két bekért pozíció betűje egyezik-e a 2 bábunál, vagy a 2 számos tagja egyezik-e. Ezzel eldönthető, hogy ugyanabban az oszlopban van-e vagy ugyanabban a sorban. Ha a 2 közül legalább az egyik igen, akkor üti, ha nem akkor nem. Ehhez kellene a karakter összehasonlító függvény.)

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

    int strcmp (const char *s, const char *t)
    {
    if (*s == *t)
    return 0;
    else
    {
    printf("WTF? \n");
    }
    }

    void sakk ()
    {
    char bastya [3];
    char gyalog [3];

    printf("Kerem a bastya poziciojat: ");
    scanf("%c %c", &bastya[1], &bastya[2]);
    printf("Kerem a gyalog poziciojat: ");
    scanf("%c %c", &gyalog[1], &gyalog[2]);

    if ((strcmp(bastya[1], gyalog[1]) ==0) || (strcmp(bastya[2], gyalog[2]) ==0))
    printf("A bastya uti a gyalogot.\n");
    else
    {
    printf("A bastya nem uti a gyalogot.\n");
    }
    }

    int main ()
    {
    sakk();
    }

  • doc
    nagyúr

    ASCII kód alapján meg lehet állapítani egy karakterről, hogy micsoda
    48-57 szám
    65-90 nagybetű
    97-122 kisbetű
    minden más az egyéb kategória

    nana, azert ilyet ne...
    megvannak a megfelelo fuggvenyek erre, pl. isdigit, islower

  • Zollee
    tag

    ASCII kód alapján meg lehet állapítani egy karakterről, hogy micsoda
    48-57 szám
    65-90 nagybetű
    97-122 kisbetű
    minden más az egyéb kategória

    Huha.. Akkor utána kell nézzek hogy ASCII kódot hogy használok c-ben. Köszi a segítséget, remélem így meg tudom majd írni. :)

  • bpx
    őstag

    Hy!

    Ha fapados módszereket írok, elnézést, de mivel most kezdted a programozást, nem gondolnám hogy ez probléma lenne, nekem is írták, hogy rá kell érezzek. Igazuk volt, az önálló munka és az ilyen kezdő kódokból tanul az ember, utána lehet ügyeskedni.

    1, A páros számok ugye mind oszthatók 2-vel. Egy if-else szerkezettel sima ügy.

    3, Szintén if-ekkel megoldható. A számokat kell összehasonlítani.

    4, Százalék számításra visszavezethető. Képlet a wikipedia-n. De egy szerűbb, ha csinálsz egy i segédváltozót, majd az adatok bekérése után értékének megadod a max * 0.5-öt. Ez után a max-ot elosztod 100-zal, a kapott értéket beszorzod az aktuális pontszámmal, majd if-fel megírod, hogy ha a kapott érték nagyobb vagy egyenlő mint a korábban definiált i változód, akkor átment, egyébként nem.

    5, Én switch-csel oldanám meg. Mivel 5 osztályzatod van, 5 case-re lesz benne szükséged. A rossz érték kezelésére pedig a switch-nek van default ága. Ott csak ki kell iratnod hogy rossz értéket adott meg a paraszt.

    A 2-es feladathoz hasonló nekem is van, azt sajnos én sem tudom. :F Ezek a sztring műveletek nekem sem mennek még.
    Nekem az a feladat, hogy bekérsz egy szöveget, utána kiíratod hogy mennyi kis betű, mennyi nagy betű és mennyi szám van benne.
    Jah meg egy másik feladatomban most karakter összehasonlítással szenvedek, nem tudom működésre bírni az strcmp függvényt. :F
    Ha végképp nem boldogulok lehet visszatérek és én is segítséget kérek.

    ASCII kód alapján meg lehet állapítani egy karakterről, hogy micsoda
    48-57 szám
    65-90 nagybetű
    97-122 kisbetű
    minden más az egyéb kategória

  • Zollee
    tag

    Sziasztok

    Nekem az alábbi 5 feladattal lenne gondom.:Smost keztük a programozást de a gyaktanár finoman szólva nem magyaráz és nem értem a programírás lényegét:Saki tud segítsen pls.nem muszály a feladatot megoldani azt én szeretném inkább vmi infó vagy tutorial lenne a jó.
    1. Kérj be egy számot, és írd ki, hogy páros, vagy páratlan!

    2. Olvass be egy karaktert! Döntsd el és írd ki, hogy kis-, nagybetűt, számot

    vagy egyéb karaktert olvastál-e be!

    3. Kérj be három számot! Írd ki közülük a legnagyobbat!

    4. Írj egy programot ami bekéri egy dolgozat lehetséges maximális és aktuális

    pontszámát, majd kiírja, hogy a dolgozat sikeres vagy sikertelen volt! A

    dolgozat akkor sikeres, ha az aktuális pontszám legalább a maximális

    pontszám fele.

    5. Írj egy programot ami egy jegyhez (osztályzathoz) megadja a szöveges

    értékelést, vagy kiírja, ha rossz értéket kapott!

    üdv bolvar

    Hy!

    Ha fapados módszereket írok, elnézést, de mivel most kezdted a programozást, nem gondolnám hogy ez probléma lenne, nekem is írták, hogy rá kell érezzek. Igazuk volt, az önálló munka és az ilyen kezdő kódokból tanul az ember, utána lehet ügyeskedni.

    1, A páros számok ugye mind oszthatók 2-vel. Egy if-else szerkezettel sima ügy.

    3, Szintén if-ekkel megoldható. A számokat kell összehasonlítani.

    4, Százalék számításra visszavezethető. Képlet a wikipedia-n. De egy szerűbb, ha csinálsz egy i segédváltozót, majd az adatok bekérése után értékének megadod a max * 0.5-öt. Ez után a max-ot elosztod 100-zal, a kapott értéket beszorzod az aktuális pontszámmal, majd if-fel megírod, hogy ha a kapott érték nagyobb vagy egyenlő mint a korábban definiált i változód, akkor átment, egyébként nem.

    5, Én switch-csel oldanám meg. Mivel 5 osztályzatod van, 5 case-re lesz benne szükséged. A rossz érték kezelésére pedig a switch-nek van default ága. Ott csak ki kell iratnod hogy rossz értéket adott meg a paraszt.

    A 2-es feladathoz hasonló nekem is van, azt sajnos én sem tudom. :F Ezek a sztring műveletek nekem sem mennek még.
    Nekem az a feladat, hogy bekérsz egy szöveget, utána kiíratod hogy mennyi kis betű, mennyi nagy betű és mennyi szám van benne.
    Jah meg egy másik feladatomban most karakter összehasonlítással szenvedek, nem tudom működésre bírni az strcmp függvényt. :F
    Ha végképp nem boldogulok lehet visszatérek és én is segítséget kérek.

  • Zollee
    tag

    megy az, csak a beolvasas rossz, helyesen:

    scanf("%d %d", &szam1, &szam2);

    (sok a % jel)

    Wááá, téényleg. :DDD Mit össze kerestem hol a hiba.. és eeez... na most 2 évet öregedtem. :DD
    Köszönöm Gyuri16 :K

  • Gyuri16
    senior tag

    Hy!

    Újra itt és újabb kérdéssel. :)
    Szorgalmi feladataim egyike a legnagyobb közös osztó kiszámolása. Utána néztem, a Wikipedia szerint az Euklideszi algoritmus egy jó megoldás erre a problémára. Na igen, én ezt megoldottam úgy, ahogy én értelmeztem az átalakitást, le is fordul, de rossz értékeket ad vissza. Többször átnéztem a képletet, de nem tudok rájönni hol a hiba. Remélem valaki nálam okosabb itt rá tud jönni. :)

    A progi:

    #include<stdio.h>

    void lnko()
    {
    int maradek, szam1, szam2;

    printf("Kerem a szamokat: ");
    scanf("%d% %d", &szam1, &szam2);

    while (szam2 !=0)
    {
    maradek = szam1%szam2;
    szam1=szam2;
    szam2=maradek;
    }
    printf(" A szamok legnagyobb kozos osztoja: %d\n", szam1);
    }

    int main()
    {
    lnko();
    }

    megy az, csak a beolvasas rossz, helyesen:

    scanf("%d %d", &szam1, &szam2);

    (sok a % jel)

  • Zollee
    tag

    Hy!

    Újra itt és újabb kérdéssel. :)
    Szorgalmi feladataim egyike a legnagyobb közös osztó kiszámolása. Utána néztem, a Wikipedia szerint az Euklideszi algoritmus egy jó megoldás erre a problémára. Na igen, én ezt megoldottam úgy, ahogy én értelmeztem az átalakitást, le is fordul, de rossz értékeket ad vissza. Többször átnéztem a képletet, de nem tudok rájönni hol a hiba. Remélem valaki nálam okosabb itt rá tud jönni. :)

    A progi:

    #include<stdio.h>

    void lnko()
    {
    int maradek, szam1, szam2;

    printf("Kerem a szamokat: ");
    scanf("%d% %d", &szam1, &szam2);

    while (szam2 !=0)
    {
    maradek = szam1%szam2;
    szam1=szam2;
    szam2=maradek;
    }
    printf(" A szamok legnagyobb kozos osztoja: %d\n", szam1);
    }

    int main()
    {
    lnko();
    }

  • Sziasztok

    Nekem az alábbi 5 feladattal lenne gondom.:Smost keztük a programozást de a gyaktanár finoman szólva nem magyaráz és nem értem a programírás lényegét:Saki tud segítsen pls.nem muszály a feladatot megoldani azt én szeretném inkább vmi infó vagy tutorial lenne a jó.
    1. Kérj be egy számot, és írd ki, hogy páros, vagy páratlan!

    2. Olvass be egy karaktert! Döntsd el és írd ki, hogy kis-, nagybetűt, számot

    vagy egyéb karaktert olvastál-e be!

    3. Kérj be három számot! Írd ki közülük a legnagyobbat!

    4. Írj egy programot ami bekéri egy dolgozat lehetséges maximális és aktuális

    pontszámát, majd kiírja, hogy a dolgozat sikeres vagy sikertelen volt! A

    dolgozat akkor sikeres, ha az aktuális pontszám legalább a maximális

    pontszám fele.

    5. Írj egy programot ami egy jegyhez (osztályzathoz) megadja a szöveges

    értékelést, vagy kiírja, ha rossz értéket kapott!

    üdv bolvar

  • VaZso
    senior tag

    Na ez nem jó!

    char xd[] = "xdtv";

    és akkor jó lesz :K

    Így valóban működik, köszönöm szépen a türelmed. :R

  • Jester01
    veterán

    Így hívom meg:

    char *xd="xdtv";
    printf("strcapitalize, %s\n", strCapitalize(xd));

    Na ez nem jó!

    char xd[] = "xdtv";

    és akkor jó lesz :K

  • VaZso
    senior tag

    Hát a függvényed maga jónak látszik, csak lehet, hogy nem módosítható stringet adsz be neki. A hívást nem mutattad meg, de ezért egyébként a fordítónak szólnia kellene.

    Így hívom meg:

    char *xd="xdtv";
    printf("strcapitalize, %s\n", strCapitalize(xd));

  • Jester01
    veterán

    Eszerint ott lehet a kutya elásva, hogy nem módosítható?
    *ptr = 'n'; (ill. str) hatására Segmentation fault-ot kapok...

    Egy ilyenem van:
    char *strCapitalize(char *str) {

    Tehát a paraméterként kapott *str-t hiába is próbálom megváltoztatni...

    Hogyan tudnám mégis valamely characterét megváltoztatni úgy, hogy nem tudom előre a string hosszát és csak ezért nem nyálazhatom végig?
    :F

    Hát a függvényed maga jónak látszik, csak lehet, hogy nem módosítható stringet adsz be neki. A hívást nem mutattad meg, de ezért egyébként a fordítónak szólnia kellene.

  • VaZso
    senior tag

    Ugye a pointer mindig egy betűre mutat, tehát ha a stringed módosítható, akkor simán piszkálhatod betűnként (*ptr = 'n' vagy a tömb-pointer konverziót használva). Vigyázat, a string konstansok (literálok) nem módosíthatók!

    Eszerint ott lehet a kutya elásva, hogy nem módosítható?
    *ptr = 'n'; (ill. str) hatására Segmentation fault-ot kapok...

    Egy ilyenem van:
    char *strCapitalize(char *str) {

    Tehát a paraméterként kapott *str-t hiába is próbálom megváltoztatni...

    Hogyan tudnám mégis valamely characterét megváltoztatni úgy, hogy nem tudom előre a string hosszát és csak ezért nem nyálazhatom végig?
    :F

  • Jester01
    veterán

    Sziasztok!

    Eddig nem programoztam C-ben. Van néhány rutin, amit meg kellene írnom, de kicsit elakadtam, ahogy sorjában haladtam velük... A kérdésem amatőrsége ebből fakadóan adott...

    Maga a rutin nem tűnik bonyolultnak - egy kapott string első character-ét kell kapitalizálni.
    A string, ill. visszatérési érték pointeren kersztül kerül átadásra.

    Amin elakadtam: a pointer aktuális helyzetén lévő adatot hogy tudom megváltoztatni?
    pl. adott egy char *ptr nevű pointer, ami az "alma" szóra mutat.
    Szeretném kicserélni mondjuk az m betűt n-re. A pointer az m fölé mutat. Hogy adom meg neki az n értéket úgy, hogy a többi characterhez nem nyúlok?

    Rosszul állok a feladathoz?

    Ugye a pointer mindig egy betűre mutat, tehát ha a stringed módosítható, akkor simán piszkálhatod betűnként (*ptr = 'n' vagy a tömb-pointer konverziót használva). Vigyázat, a string konstansok (literálok) nem módosíthatók!

  • VaZso
    senior tag

    Sziasztok!

    Eddig nem programoztam C-ben. Van néhány rutin, amit meg kellene írnom, de kicsit elakadtam, ahogy sorjában haladtam velük... A kérdésem amatőrsége ebből fakadóan adott...

    Maga a rutin nem tűnik bonyolultnak - egy kapott string első character-ét kell kapitalizálni.
    A string, ill. visszatérési érték pointeren kersztül kerül átadásra.

    Amin elakadtam: a pointer aktuális helyzetén lévő adatot hogy tudom megváltoztatni?
    pl. adott egy char *ptr nevű pointer, ami az "alma" szóra mutat.
    Szeretném kicserélni mondjuk az m betűt n-re. A pointer az m fölé mutat. Hogy adom meg neki az n értéket úgy, hogy a többi characterhez nem nyúlok?

    Rosszul állok a feladathoz?

  • PuMbA
    titán

    Ugye az msys parancssorból futtatod? Annak meg kell ennie a /c/ stílusú útvonalakat.

    Nem,NetBeansből. Akkor NetBeansből nem lehet? Nekem ott kellene...
    MSYS parancssort hogy kell használni?

  • Jester01
    veterán

    Hol írjam át? Ha a MinGW elérési útaknál írom akkor reklamál,hogy nem jó az elérési út.

    Ugye az msys parancssorból futtatod? Annak meg kell ennie a /c/ stílusú útvonalakat.

  • PuMbA
    titán

    Szerintem az, hogy nem ismeri fel a C:/ kezdetű útvonalat abszolútnak ezért összefűzi az aktuális directoryval. Próbáld meg /c/ alakban.

    Hol írjam át? Ha a MinGW elérési útaknál írom akkor reklamál,hogy nem jó az elérési út.

  • Jester01
    veterán

    Hali!
    Feltettem a NetBeans 6.7.1-et,MinGW-t és MSYS-t. Beadtam neki az elérési utakat erre ilyen hülyeségeket ír ki:

    "/d/Dokumentumok/Egyetem/Programok/Numat/Cholesky/"C:/Program Files/MinGW/MSYS/bin/make.exe" -f nbproject/Makefile-Debug.mk SUBPROJECTS= .build-conf
    /bin/sh: /d/Dokumentumok/Egyetem/Programok/Numat/Cholesky/C:/Program Files/MinGW/MSYS/bin/make.exe: No such file or directory
    make.exe": *** [.build-impl] Error 127
    BUILD FAILED (exit value 2, total time: 500ms)"

    Mi lehet a baja?

    Szerintem az, hogy nem ismeri fel a C:/ kezdetű útvonalat abszolútnak ezért összefűzi az aktuális directoryval. Próbáld meg /c/ alakban.

  • PuMbA
    titán

    Hali!
    Feltettem a NetBeans 6.7.1-et,MinGW-t és MSYS-t. Beadtam neki az elérési utakat erre ilyen hülyeségeket ír ki:

    "/d/Dokumentumok/Egyetem/Programok/Numat/Cholesky/"C:/Program Files/MinGW/MSYS/bin/make.exe" -f nbproject/Makefile-Debug.mk SUBPROJECTS= .build-conf
    /bin/sh: /d/Dokumentumok/Egyetem/Programok/Numat/Cholesky/C:/Program Files/MinGW/MSYS/bin/make.exe: No such file or directory
    make.exe": *** [.build-impl] Error 127
    BUILD FAILED (exit value 2, total time: 500ms)"

    Mi lehet a baja?

  • vagy a return value egy struct lesz, szelesseggel es magassaggal (ez inkabb c++ os logika :) )

    Egy példát estleg? Milyen struktúrát adnál vissza, hol lenne az deklarálva?

  • doc
    nagyúr

    A fügvénynek csak egy visszatérő értéke lehet, és az sem akármilyen típusú. Ha felszín és térfogat is kell, akkor írhatsz egy void fv.-t (eljárást), aminek 4 paramétere lesz, valahogy így:

    #include <stdio.h>
    #define PI 3.141592654

    void felszin_terfogat(float sugar, float magassag,float *felszin, float *terfogat)
    {
    if(felszin==NULL || terfogat==NULL)return;
    *felszin=2*sugar*PI*(sugar+magassag);
    *terfogat=sugar*sugar*PI*magassag;
    }

    void main(int argc, char*argv[])
    {
    float sugar,magassag,felszin,terfogat;

    if(argc<3){
    printf( "henger felszinet es terfogatat szamolja ki a program\r\n\
    parancssori argumentumokkal is hivhato: <programnev> <sugar> <magassag>\r\n");
    printf("sugar: ");
    scanf("%f",&sugar);
    printf("magassag: ");
    scanf("%f",&magassag);
    }
    else{
    sugar=atof(argv[1]);
    magassag=atof(argv[2]);
    }

    felszin_terfogat(sugar,magassag,&felszin,&magassag);
    printf("felszin: %10.5f\r\n",felszin);
    printf("terfogat: %10.5f\r\n",terfogat);
    }

    vagy a return value egy struct lesz, szelesseggel es magassaggal (ez inkabb c++ os logika :) )

  • Igen, én magam akarok vele küzdeni, mert később is magamtól kell irnom programokat. Értem amit irtál, a mutatókat még nem vettük, kerekedne az oktató szeme ha olyat adnék be.. :D
    Köszi :)

    A fügvénynek csak egy visszatérő értéke lehet, és az sem akármilyen típusú. Ha felszín és térfogat is kell, akkor írhatsz egy void fv.-t (eljárást), aminek 4 paramétere lesz, valahogy így:

    #include <stdio.h>
    #define PI 3.141592654

    void felszin_terfogat(float sugar, float magassag,float *felszin, float *terfogat)
    {
    if(felszin==NULL || terfogat==NULL)return;
    *felszin=2*sugar*PI*(sugar+magassag);
    *terfogat=sugar*sugar*PI*magassag;
    }

    void main(int argc, char*argv[])
    {
    float sugar,magassag,felszin,terfogat;

    if(argc<3){
    printf( "henger felszinet es terfogatat szamolja ki a program\r\n\
    parancssori argumentumokkal is hivhato: <programnev> <sugar> <magassag>\r\n");
    printf("sugar: ");
    scanf("%f",&sugar);
    printf("magassag: ");
    scanf("%f",&magassag);
    }
    else{
    sugar=atof(argv[1]);
    magassag=atof(argv[2]);
    }

    felszin_terfogat(sugar,magassag,&felszin,&magassag);
    printf("felszin: %10.5f\r\n",felszin);
    printf("terfogat: %10.5f\r\n",terfogat);
    }

  • A legnagyobb közös osztóhoz a közös prímtényezőket kell venni a legmagasabb közös hatványon. A többszöröshöz meg prímtényezők úniója kell. Legalábbis én így emlékszem.

    A legnagyobb közös osztó: közös prímtényezők az alacsonyabb hatványon összeszorzova
    legkisebb közös többszörös: közös prímtényezők magasabb hatványon, és a nem közösek összeszorozva.

  • m0h0senator
    őstag

    A legnagyobb közös osztóhoz a közös prímtényezőket kell venni a legmagasabb közös hatványon. A többszöröshöz meg prímtényezők úniója kell. Legalábbis én így emlékszem.

    A definíciók megvannak, csak ez a c beli megvalósítását nem tudom. :B :R

  • Jester01
    veterán

    A prímtényzős rész megvan. Nekem az kellene ahol meghatározza a legkisebb közös többszöröst és a legnagyobb közös osztót a prímtényezőkből.

    Pl: 8 l 2 12 l 2
    4 l 2 6 l 2
    2 l 2 3 l 3
    1 1

    majd ezeknek az lnko: 2 a négyzeten és ezt h számolja ki. :R

    A legnagyobb közös osztóhoz a közös prímtényezőket kell venni a legmagasabb közös hatványon. A többszöröshöz meg prímtényezők úniója kell. Legalábbis én így emlékszem.

  • m0h0senator
    őstag

    Melyik részére kell ötlet? Prímtényezőkre bontáshoz a legfavágóbb módszer ha szépen ciklusban megpróbálod leosztogatni. A végeredmény pedig a tényezőkből már adódik.

    A prímtényzős rész megvan. Nekem az kellene ahol meghatározza a legkisebb közös többszöröst és a legnagyobb közös osztót a prímtényezőkből.

    Pl: 8 l 2 12 l 2
    4 l 2 6 l 2
    2 l 2 3 l 3
    1 1

    majd ezeknek az lnko: 2 a négyzeten és ezt h számolja ki. :R

  • Jester01
    veterán

    Sziasztok, akarok irni egy nagyjabol katalogizalo programot ami eloszor megnyit egy data.txt fielot amiben el vannak mentve a katalogus elemei es a kodjai. A felhasznalo ezutan beirja a kodjat a kivant reszlegnek ami utan a program megnyitja a filet amibe az elemek vannak, es ki is iratja a kepernyore. Ezutan rakerdez hogy akarok-e hozzaadni uj elemet vagy meglevot kitorolni.Minden reszleg, azaz file elso soraba el van mentve hogy hany elem van benne. A problemam az lenne hogy amikor ki akarok torolni egy elemet akkor azt ugy oldalam meg hogy szepen az alatta levo sortol kezdodoen mindent ramasolnak es az utolso sort pedig elhagynam. Itt a kod

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

    struct tm * timeinfo;

    int rm(FILE *f)
    {
    fseek(f,0,0);
    char buff[255];
    int max,linelen,n;
    fgets(buff,100,f);
    max=atoi(buff);
    printf("type the nr of the product");
    scanf("%i",&n);
    printf("the number %i, and max %i",n,max);
    while (n>0)
    {
    fgets(buff,250,f);
    n--;
    }
    fgets(buff,250,f);
    while (fgets(buff,250,f))
    {
    linelen=strlen(buff);
    fseek(f,-linelen,1);
    fprintf(f,"%s",buff);
    };
    return 0;
    }

    int add(FILE *f)
    {
    char name[20],price[15],buff[101]="",*s;
    int linelen,max;
    fseek(f,0,0);
    fgets(buff,19,f);
    max=atoi(buff);
    max++;
    // printf("max=%i",max);
    fseek(f,0,0);
    fprintf(f,"%i\n",max);
    fseek(f,0,2);
    time_t rawtime;
    time(&rawtime);
    timeinfo=localtime(&rawtime);
    s=asctime(timeinfo);
    s[strlen(s)-1]='\0';
    fprintf ( f,"\n %i %s ",max,s);
    fseek(f,1,1);
    gets(buff);
    printf("product name:");
    scanf("%s",name);
    fprintf(f," %s ",name);
    printf("product prince:");
    gets(buff);
    scanf("%s",price);
    fprintf(f," %s",price);
    return 0;
    }

    int list(FILE *f)
    {
    fseek(f,0,0);
    char c;
    fgetc(f);
    while( (c=fgetc(f))!=EOF)
    {
    putchar(c);
    }
    printf("\n");
    return 0;
    }

    int main(void)
    {
    FILE *f,*g;
    if (!(g=fopen("data.txt","r"))) {
    printf("missing data file");
    exit (1);
    }
    char s[3],c;
    int a=1;
    list(g);
    fclose (g);
    while (a)
    {
    printf("\nchoose the code of the product type\n");
    scanf("%s",s);
    if (strlen(s)==2)
    switch (s[strlen(s)-1])
    {
    case '1' :
    if (!(f=fopen("a1.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '2' :
    if (!(f=fopen("a2.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '3' :
    if (!(f=fopen("a3.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '4' :
    if (!(f=fopen("a4.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '5' :
    if (!(f=fopen("a5.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '6' :
    if (!(f=fopen("a6.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '7' :
    if (!(f=fopen("a7.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    default :
    printf("wrong code\n");
    }
    }
    list(f);
    a=1;
    while (a)
    {
    printf("press 1 to add an element, 2 to remove one and 0 to exit");
    scanf("%i",&a);
    switch(a)
    {
    case 1:
    add(f);
    break;
    case 2:
    rm(f);
    break;
    default :break;
    }
    }
    fclose (f);
    return 0;
    }

    Az rm fuggveny oldana meg a torlest, de ehelyett vegtelen ciklusba kot ki es egyre csak noveli a file meretet. Egy peldat is mellekelek:

    file data.txt:
    code name
    a1 = PC/notebook/server
    a2 = cash register/balance
    a3 = software
    a4 = Husqvarna
    a5 = audio systems
    a6 = home/car security
    a7 = PC/camera accesorries

    file a3.txt
    4
    nr. __date__ __product_name__ ___price___
    1 Mon Oct 05 17:13:14 2009 elem1 1234
    2 Mon Oct 05 17:13:22 2009 elem2 3214
    3 Mon Oct 05 17:13:28 2009 elem3 2114
    4 Mon Oct 05 17:13:33 2009 elem4 2145

    Es ha tudtok jol fogna egy modszer amivel szepen kozepre tudom amjd igazitani a fielba, mert eddig nekem csak az jutott az eszembe hogy mindig fix szamu karakter keruljon minden nev ala. ELore is kosz.

    Nekem speciel nem kerül végtelen ciklusba csak nem csinál semmit:

    while (fgets(buff,250,f))
    {
    linelen=strlen(buff);
    fseek(f,-linelen,1);
    fprintf(f,"%s",buff);
    };

    Ugyanis a fenti ciklus szépen beolvas egy sort, majd visszmegy ugyanannak a sornak az elejére és újra kiírja. Vagyis nem csinál semmit csak minden sort rámásol saját magára.

  • Jester01
    veterán

    Sziasztok!

    Olyan programot kéne írnom amibe bekérünk 2 számot. Ezt a 2 számot felbontja prímtényezős alakra majd kiszámolja a legkisebb közös többszöröst és a legnagyobb közös osztót. Nektek milyen ötletetek van?

    Előre is köszi

    Melyik részére kell ötlet? Prímtényezőkre bontáshoz a legfavágóbb módszer ha szépen ciklusban megpróbálod leosztogatni. A végeredmény pedig a tényezőkből már adódik.

  • m0h0senator
    őstag

    Sziasztok!

    Olyan programot kéne írnom amibe bekérünk 2 számot. Ezt a 2 számot felbontja prímtényezős alakra majd kiszámolja a legkisebb közös többszöröst és a legnagyobb közös osztót. Nektek milyen ötletetek van?

    Előre is köszi

  • Dirty_Pio
    csendes tag

    Sziasztok, akarok irni egy nagyjabol katalogizalo programot ami eloszor megnyit egy data.txt fielot amiben el vannak mentve a katalogus elemei es a kodjai. A felhasznalo ezutan beirja a kodjat a kivant reszlegnek ami utan a program megnyitja a filet amibe az elemek vannak, es ki is iratja a kepernyore. Ezutan rakerdez hogy akarok-e hozzaadni uj elemet vagy meglevot kitorolni.Minden reszleg, azaz file elso soraba el van mentve hogy hany elem van benne. A problemam az lenne hogy amikor ki akarok torolni egy elemet akkor azt ugy oldalam meg hogy szepen az alatta levo sortol kezdodoen mindent ramasolnak es az utolso sort pedig elhagynam. Itt a kod

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

    struct tm * timeinfo;

    int rm(FILE *f)
    {
    fseek(f,0,0);
    char buff[255];
    int max,linelen,n;
    fgets(buff,100,f);
    max=atoi(buff);
    printf("type the nr of the product");
    scanf("%i",&n);
    printf("the number %i, and max %i",n,max);
    while (n>0)
    {
    fgets(buff,250,f);
    n--;
    }
    fgets(buff,250,f);
    while (fgets(buff,250,f))
    {
    linelen=strlen(buff);
    fseek(f,-linelen,1);
    fprintf(f,"%s",buff);
    };
    return 0;
    }

    int add(FILE *f)
    {
    char name[20],price[15],buff[101]="",*s;
    int linelen,max;
    fseek(f,0,0);
    fgets(buff,19,f);
    max=atoi(buff);
    max++;
    // printf("max=%i",max);
    fseek(f,0,0);
    fprintf(f,"%i\n",max);
    fseek(f,0,2);
    time_t rawtime;
    time(&rawtime);
    timeinfo=localtime(&rawtime);
    s=asctime(timeinfo);
    s[strlen(s)-1]='\0';
    fprintf ( f,"\n %i %s ",max,s);
    fseek(f,1,1);
    gets(buff);
    printf("product name:");
    scanf("%s",name);
    fprintf(f," %s ",name);
    printf("product prince:");
    gets(buff);
    scanf("%s",price);
    fprintf(f," %s",price);
    return 0;
    }

    int list(FILE *f)
    {
    fseek(f,0,0);
    char c;
    fgetc(f);
    while( (c=fgetc(f))!=EOF)
    {
    putchar(c);
    }
    printf("\n");
    return 0;
    }

    int main(void)
    {
    FILE *f,*g;
    if (!(g=fopen("data.txt","r"))) {
    printf("missing data file");
    exit (1);
    }
    char s[3],c;
    int a=1;
    list(g);
    fclose (g);
    while (a)
    {
    printf("\nchoose the code of the product type\n");
    scanf("%s",s);
    if (strlen(s)==2)
    switch (s[strlen(s)-1])
    {
    case '1' :
    if (!(f=fopen("a1.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '2' :
    if (!(f=fopen("a2.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '3' :
    if (!(f=fopen("a3.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '4' :
    if (!(f=fopen("a4.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '5' :
    if (!(f=fopen("a5.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '6' :
    if (!(f=fopen("a6.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    case '7' :
    if (!(f=fopen("a7.txt","r+")))
    {
    printf("missing data file");
    exit (1);
    }
    a=!a;
    break;
    default :
    printf("wrong code\n");
    }
    }
    list(f);
    a=1;
    while (a)
    {
    printf("press 1 to add an element, 2 to remove one and 0 to exit");
    scanf("%i",&a);
    switch(a)
    {
    case 1:
    add(f);
    break;
    case 2:
    rm(f);
    break;
    default :break;
    }
    }
    fclose (f);
    return 0;
    }

    Az rm fuggveny oldana meg a torlest, de ehelyett vegtelen ciklusba kot ki es egyre csak noveli a file meretet. Egy peldat is mellekelek:

    file data.txt:
    code name
    a1 = PC/notebook/server
    a2 = cash register/balance
    a3 = software
    a4 = Husqvarna
    a5 = audio systems
    a6 = home/car security
    a7 = PC/camera accesorries

    file a3.txt
    4
    nr. __date__ __product_name__ ___price___
    1 Mon Oct 05 17:13:14 2009 elem1 1234
    2 Mon Oct 05 17:13:22 2009 elem2 3214
    3 Mon Oct 05 17:13:28 2009 elem3 2114
    4 Mon Oct 05 17:13:33 2009 elem4 2145

    Es ha tudtok jol fogna egy modszer amivel szepen kozepre tudom amjd igazitani a fielba, mert eddig nekem csak az jutott az eszembe hogy mindig fix szamu karakter keruljon minden nev ala. ELore is kosz.

  • cellpeti
    nagyúr

    kerdest nem latok, de azert leirom: ugy jo ahogy mondod. egyik modszer, hogy nezed a szamerteket (tudod hogy az ascii tablaban a betuk egymas utan vannak, igy aztan eleg kivonnod a kisbetuk kodjabol valamennyit, es megkapod a nagybetut)
    az egyszerubb megoldas a toupper, isupper fv, peldaprogram: [link]

    Köszönöm a linket! :R :R

  • Gyuri16
    senior tag

    üdv!

    van nekem egy olyan feladatom,hogy be kell kérnem egy karakterláncot.

    A karakterláncban lévő kisbetűket,ha van benne,akkor naggyá kell konvertálni,ami nagy azt meg békén hagyni.

    Nekem lenne erre egy elképzelésem.

    for-val végig mennék a tömb elemein. Ha kisbetű akkor nagyá, különben meg békén hagyom. :U

    kerdest nem latok, de azert leirom: ugy jo ahogy mondod. egyik modszer, hogy nezed a szamerteket (tudod hogy az ascii tablaban a betuk egymas utan vannak, igy aztan eleg kivonnod a kisbetuk kodjabol valamennyit, es megkapod a nagybetut)
    az egyszerubb megoldas a toupper, isupper fv, peldaprogram: [link]

  • cellpeti
    nagyúr

    üdv!

    van nekem egy olyan feladatom,hogy be kell kérnem egy karakterláncot.

    A karakterláncban lévő kisbetűket,ha van benne,akkor naggyá kell konvertálni,ami nagy azt meg békén hagyni.

    Nekem lenne erre egy elképzelésem.

    for-val végig mennék a tömb elemein. Ha kisbetű akkor nagyá, különben meg békén hagyom. :U

  • Lakers
    tag

    Sziasztok!

    Tudtok ajánlani olyan helyet, ahol grafikai feladatok megvalósítása van C nyelven? Egyszerűre gondolok, mint sokszögek rajzolása, egérrel való mozgatása, háttérszínezése. (Google barátom által talált oldalak példakódjai sokszor vírust is rejt...)

  • hét nagyvonalakban egyiket sem mivel a tanár aki feadta ez nekünk az kb.10 percet magyarázott mi a string és csináljátok szóval ezért is írtam ide mert elég tanácstalan vagyok

  • Jester01
    veterán

    Hali egy nagy segítséget kérnék c++-beni feladatomhoz.

    A feladat a köv.:Egy olyan programot kellene írnom ami string vagy osztályból áll.
    És a nevemből pl:Szabó Gergely névből készítsen szavakat és egyessével adja ki és kérdezze meg hogy értelmes-e ha értelmes akkor tárolja el egy txt fájlba .

    előre is köszönöm a segítségeteket :))

    És melyik részéhez kellene a segítség? Mi tudtál megcsinálni és mit nem?

    Nagy vonalakban pl. a string osztály find, find_first_of, find_first_not_of metódusaival megcsinálod a darabolást, simán cin/cout a kérdéshez, és egy ofstream a fájl íráshoz.

  • Hali egy nagy segítséget kérnék c++-beni feladatomhoz.

    A feladat a köv.:Egy olyan programot kellene írnom ami string vagy osztályból áll.
    És a nevemből pl:Szabó Gergely névből készítsen szavakat és egyessével adja ki és kérdezze meg hogy értelmes-e ha értelmes akkor tárolja el egy txt fájlba .

    előre is köszönöm a segítségeteket :))

  • Zollee
    tag

    Szerintem érdemes két külön függvényt írni a két számításra, ezzel elkerülve a problémát.
    A return valóban egy értéket ad vissza, de ez az érték lehet akár egy memória cím is, ami egy tömbre, listára, struktúrára stb. mutat, ami bármennyi értéket takarhat.
    Voiddal is megoldható - ha konkrétan ez volt a feladat -, de akkor átmenő paramétert vagy globális változót kell alkalmaznod (ezt csak a lehetőség miatt említettem, ne így csináld). Ez pl. úgy néz ki, hogy egy mutatót adsz át paraméterként, és az általa mutatott értéket megváltoztatod a kivánt értékre az eljárás végrehajtása során, majd az értéket felhasználod.

    pl.
    "r változó mint mutató deklarálása, inicializálása";
    függvényhívás(r (címe),...,...);
    eredmeny = r (értéke);

    Kódot szándékosan nem írok, mert ebben a stádiumban szerintem jobb, ha te magad fedezed fel ezeket a fogalmakat.

    Igen, én magam akarok vele küzdeni, mert később is magamtól kell irnom programokat. Értem amit irtál, a mutatókat még nem vettük, kerekedne az oktató szeme ha olyat adnék be.. :D
    Köszi :)

  • Lortech
    addikt

    Igen, a return-t alkalmaztam egy másik feladatomnál is, csak itt a felszin mellett a térfogatot is ki kell majd számolni és azt mondták, hogy a void-ot használjam a feladat megoldására. A return csak 1 értéket ad vissza, igy egyszerre a 2 külön képletre nem jó. Azért irtam le csak az egyiket a c kódba, mert egyszerre csak 1 problémára akartam koncentrálni, ha megy jöhet a másik is.
    Vagy akkor mégsem void a megoldás kulcsa?

    Szerintem érdemes két külön függvényt írni a két számításra, ezzel elkerülve a problémát.
    A return valóban egy értéket ad vissza, de ez az érték lehet akár egy memória cím is, ami egy tömbre, listára, struktúrára stb. mutat, ami bármennyi értéket takarhat.
    Voiddal is megoldható - ha konkrétan ez volt a feladat -, de akkor átmenő paramétert vagy globális változót kell alkalmaznod (ezt csak a lehetőség miatt említettem, ne így csináld). Ez pl. úgy néz ki, hogy egy mutatót adsz át paraméterként, és az általa mutatott értéket megváltoztatod a kivánt értékre az eljárás végrehajtása során, majd az értéket felhasználod.

    pl.
    "r változó mint mutató deklarálása, inicializálása";
    függvényhívás(r (címe),...,...);
    eredmeny = r (értéke);

    Kódot szándékosan nem írok, mert ebben a stádiumban szerintem jobb, ha te magad fedezed fel ezeket a fogalmakat.

  • Zollee
    tag

    Kiemeled hogy void függvény, pedig a void mint típus, ill. típus "hiánya" éppen procedúrát jelent, nem függvényt, nincs visszatérési értéke, ezért a "felszin=A..."
    értékadó kifejezés nyilvánvalóan hibás. A függvénynek egy megfelelő (2*PI*r*(r+h) -vel kompatibilis) adattípust kell megadnod visszatérési érték típusának void helyett.
    (szerk: és persze vissza is kell térned a függvényből a visszatérési értékkel a return kulcsszóval)

    Igen, a return-t alkalmaztam egy másik feladatomnál is, csak itt a felszin mellett a térfogatot is ki kell majd számolni és azt mondták, hogy a void-ot használjam a feladat megoldására. A return csak 1 értéket ad vissza, igy egyszerre a 2 külön képletre nem jó. Azért irtam le csak az egyiket a c kódba, mert egyszerre csak 1 problémára akartam koncentrálni, ha megy jöhet a másik is.
    Vagy akkor mégsem void a megoldás kulcsa?

  • Lortech
    addikt

    Hy!

    Most kezdtem a programozást és már elakadtam az elején. :B
    A void függvénnyel próbálkozom. Függvénnyel (void) kell megvalósitani a henger felszinének kiszámitását. Valamiért nem jó.. :(

    #include<stdio.h>
    #define PI 3.14159265

    void A(float r, float h)
    {
    float felsz;
    felsz=2*PI*r*(r+h);
    }

    int main()
    {
    float sugar, magassag, felszin;

    printf("Add meg a henger alapkörének sugarát: \n");
    scanf("%f", &sugar);
    printf("Add meg a henger magasságát: \n");
    scanf("%f", &magassag);
    felszin=A(sugar, magassag);
    printf("A henger felszine: %f \n", felszin);
    }

    21. sor: void value not ignored as it ought to be
    Mi lehet a baj :F

    Kiemeled hogy void függvény, pedig a void mint típus, ill. típus "hiánya" éppen procedúrát jelent, nem függvényt, nincs visszatérési értéke, ezért a "felszin=A..."
    értékadó kifejezés nyilvánvalóan hibás. A függvénynek egy megfelelő (2*PI*r*(r+h) -vel kompatibilis) adattípust kell megadnod visszatérési érték típusának void helyett.
    (szerk: és persze vissza is kell térned a függvényből a visszatérési értékkel a return kulcsszóval)

  • Zollee
    tag

    Hy!

    Most kezdtem a programozást és már elakadtam az elején. :B
    A void függvénnyel próbálkozom. Függvénnyel (void) kell megvalósitani a henger felszinének kiszámitását. Valamiért nem jó.. :(

    #include<stdio.h>
    #define PI 3.14159265

    void A(float r, float h)
    {
    float felsz;
    felsz=2*PI*r*(r+h);
    }

    int main()
    {
    float sugar, magassag, felszin;

    printf("Add meg a henger alapkörének sugarát: \n");
    scanf("%f", &sugar);
    printf("Add meg a henger magasságát: \n");
    scanf("%f", &magassag);
    felszin=A(sugar, magassag);
    printf("A henger felszine: %f \n", felszin);
    }

    21. sor: void value not ignored as it ought to be
    Mi lehet a baj :F

  • mrbig25
    őstag

    tobb egyszeru megoldas is van erre, kellene ismerni a konkret korulmenyeket.

    ha tudod hogy nem tul sok fajta szam lesz (mondjuk max 100) viszont ezekbol sok (ertsd: a legtobb szam tobbszor is lesz), akkor csinalsz egy akkora tombot, kinullazod. aztan veszed a szamaid sorban, es a tombben azon az indexen levo erteket egyel noveled. igy a vegen megkapod a 100as tombben, hogy melyik szambol mennyi volt.

    ha nagy intervallumbol lehetnek a szamok, ill tul nagy pazarlas lenne a tomb (nagy ugrasok vannak a szamok kozott), akkor lancolt listaval lehet probalkozni (a lista minden eleme tartalmazza a szamot, es a gyakorisagat + pointert a kovetkezo elemre). nagyvonalakban:
    x=kovetkezo szam a tombbol
    atfutod a lancolt listat, van e mar ott x ertek
    -ha igen, akkor noveled ott a gyakorisagot
    -ha nem, akkor a megfelelo helyre beszurod (akar rakhatod a vegere is, de ha sorbarendezve lesz, akkor valamivel gyorsabb lesz), es a gyakorisagot beallitod 1-re
    kezded elolrol, amig van szam

    az elso algoritmus linearis idoben fut, viszont a felhasznalt memoria fugg a legnagyobb vart szamtol.
    a masik algoritmus kvadratikus idoben fut, es a memoria linearisan fugg a kulonbozo ertekek szamatol

    köszi szépen :R

    az első ötlet alapján sikerült összehozni. tudtam, hogy valami egyszerű dolog lesz, de az ilyenek sose ugranak be :W

  • Gyuri16
    senior tag

    Üdv Mindenkinek!

    Lenne egy apró, ám annál idegesítőbb problémám...
    Van egy egydimenziós tömböm, amiben számok vannak, és egy szám többször is előfordulhat.
    Ebből kéne kiválogatni, hogy milyen számok vannak és hogy hányszor fordulnak elő. (eloszlás-függvény lényegében)
    Pld. a tömb elemei: [4 , 6 , 4 , 5, 4 , 5 , 9 , 12 , 9] és ebből kéne ezt csinálni -->> 3db 4-es, 2db 5-ös, 1db 6-os, 2db 9-es, 1db 12-es...

    választ előre is köszönöm :R

    tobb egyszeru megoldas is van erre, kellene ismerni a konkret korulmenyeket.

    ha tudod hogy nem tul sok fajta szam lesz (mondjuk max 100) viszont ezekbol sok (ertsd: a legtobb szam tobbszor is lesz), akkor csinalsz egy akkora tombot, kinullazod. aztan veszed a szamaid sorban, es a tombben azon az indexen levo erteket egyel noveled. igy a vegen megkapod a 100as tombben, hogy melyik szambol mennyi volt.

    ha nagy intervallumbol lehetnek a szamok, ill tul nagy pazarlas lenne a tomb (nagy ugrasok vannak a szamok kozott), akkor lancolt listaval lehet probalkozni (a lista minden eleme tartalmazza a szamot, es a gyakorisagat + pointert a kovetkezo elemre). nagyvonalakban:
    x=kovetkezo szam a tombbol
    atfutod a lancolt listat, van e mar ott x ertek
    -ha igen, akkor noveled ott a gyakorisagot
    -ha nem, akkor a megfelelo helyre beszurod (akar rakhatod a vegere is, de ha sorbarendezve lesz, akkor valamivel gyorsabb lesz), es a gyakorisagot beallitod 1-re
    kezded elolrol, amig van szam

    az elso algoritmus linearis idoben fut, viszont a felhasznalt memoria fugg a legnagyobb vart szamtol.
    a masik algoritmus kvadratikus idoben fut, es a memoria linearisan fugg a kulonbozo ertekek szamatol

  • mrbig25
    őstag

    Üdv Mindenkinek!

    Lenne egy apró, ám annál idegesítőbb problémám...
    Van egy egydimenziós tömböm, amiben számok vannak, és egy szám többször is előfordulhat.
    Ebből kéne kiválogatni, hogy milyen számok vannak és hogy hányszor fordulnak elő. (eloszlás-függvény lényegében)
    Pld. a tömb elemei: [4 , 6 , 4 , 5, 4 , 5 , 9 , 12 , 9] és ebből kéne ezt csinálni -->> 3db 4-es, 2db 5-ös, 1db 6-os, 2db 9-es, 1db 12-es...

    választ előre is köszönöm :R

  • Sziasztok Mesterek!

    Van egy kódom alant, amiben neveket tároltam el láncolt listával. Van hozzá egy delete nevű fgv is, ami azt szeretné megcsinálni, hogy vár egy int számot és azt az elemet amit megadunk a szám által, törli a listából. A main-ben, hogy kellene hivatkozni a delete fgv-nek erre a számra?

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

    struct cn
    {

    char *name;
    struct cn *next;
    };

    struct cn *head = NULL;

    void insert(char *c)
    {
    struct cn *new;

    new = (struct cn*)malloc(sizeof(struct cn));
    new->name=c;
    new->next=head;
    head=new;
    }
    void printout()
    {
    struct cn *current;

    current = head;
    while(current)
    {
    printf("%s", current->name);
    current= current->next;
    }
    }
    void delete(int del)
    {
    struct cn *current, *previous;
    previous = 0;

    current = head;
    while(current)
    {
    if(current->name == del)
    {
    struct cn *temp = current;
    if(previous)
    {
    previous->next=current->next;
    }
    else
    {
    head = current->next;
    }
    current=current->next;
    free(temp);
    }
    else
    {
    previous=current;
    current=current->next;
    }

    }

    }

    int main()
    {

    insert("Eszter\n");
    insert("Bea\n");
    insert("Nóra\n");
    insert("Béla\n");
    insert("Peti\n");
    printout();
    return 0;
    }

    Érthető a kérdésem?

    Nem szerencsés a cn struktúrában csak a névre mutató pointert használni, el kellen tárolni benne magát a nevet. A példádban jól fog működni, mivel az insert argumentumában megadott nevek sztring konstansok, amiknek a fordító fix címet adott. De mi van akkor, ha pl. egy függvényből hívod az insert függvényt, aminek a hívó egy lokális változóját adod át név paraméterként (pl. billenttűzetről bekért input). Ha a hívó fv.-ből kilépsz, érvénytelen címre fognak mutogatni a cn struktúrád name mezői. Szerintem a name pl. char name[50] kell hogy legyen, és a name mezőbe strcpy-nal másold az insert fv. c paramétere által mutatott sztringet. Persze figyelj, nehogy túlírd a name tömböt. Most a cn struktúrád mérete 8 byte, mivel 2 pointert tartalmaz. A javasolt módosítás után 54 byte lesz.

  • Jester01
    veterán

    Sziasztok Mesterek!

    Van egy kódom alant, amiben neveket tároltam el láncolt listával. Van hozzá egy delete nevű fgv is, ami azt szeretné megcsinálni, hogy vár egy int számot és azt az elemet amit megadunk a szám által, törli a listából. A main-ben, hogy kellene hivatkozni a delete fgv-nek erre a számra?

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

    struct cn
    {

    char *name;
    struct cn *next;
    };

    struct cn *head = NULL;

    void insert(char *c)
    {
    struct cn *new;

    new = (struct cn*)malloc(sizeof(struct cn));
    new->name=c;
    new->next=head;
    head=new;
    }
    void printout()
    {
    struct cn *current;

    current = head;
    while(current)
    {
    printf("%s", current->name);
    current= current->next;
    }
    }
    void delete(int del)
    {
    struct cn *current, *previous;
    previous = 0;

    current = head;
    while(current)
    {
    if(current->name == del)
    {
    struct cn *temp = current;
    if(previous)
    {
    previous->next=current->next;
    }
    else
    {
    head = current->next;
    }
    current=current->next;
    free(temp);
    }
    else
    {
    previous=current;
    current=current->next;
    }

    }

    }

    int main()
    {

    insert("Eszter\n");
    insert("Bea\n");
    insert("Nóra\n");
    insert("Béla\n");
    insert("Peti\n");
    printout();
    return 0;
    }

    Érthető a kérdésem?

    Érthető a kérdésem?

    Nem :N
    A listádban nevek vannak, tehát az if(current->name == del) értelmetlen.
    Vagy név szerint akarsz törölni, vagy index szerint. Ha név szerint akkor nyilván nem egy int paramétert kell átadni, ha meg index szerint akkor nem a name mezővel kell összehasonlítani.

  • Sziasztok Mesterek!

    Van egy kódom alant, amiben neveket tároltam el láncolt listával. Van hozzá egy delete nevű fgv is, ami azt szeretné megcsinálni, hogy vár egy int számot és azt az elemet amit megadunk a szám által, törli a listából. A main-ben, hogy kellene hivatkozni a delete fgv-nek erre a számra?

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

    struct cn
    {

    char *name;
    struct cn *next;
    };

    struct cn *head = NULL;

    void insert(char *c)
    {
    struct cn *new;

    new = (struct cn*)malloc(sizeof(struct cn));
    new->name=c;
    new->next=head;
    head=new;
    }
    void printout()
    {
    struct cn *current;

    current = head;
    while(current)
    {
    printf("%s", current->name);
    current= current->next;
    }
    }
    void delete(int del)
    {
    struct cn *current, *previous;
    previous = 0;

    current = head;
    while(current)
    {
    if(current->name == del)
    {
    struct cn *temp = current;
    if(previous)
    {
    previous->next=current->next;
    }
    else
    {
    head = current->next;
    }
    current=current->next;
    free(temp);
    }
    else
    {
    previous=current;
    current=current->next;
    }

    }

    }

    int main()
    {

    insert("Eszter\n");
    insert("Bea\n");
    insert("Nóra\n");
    insert("Béla\n");
    insert("Peti\n");
    printout();
    return 0;
    }

    Érthető a kérdésem?

  • A 0 az jogos, de az abs elintézi ugye a negatív számokat.
    MOD: a te megoldásod meg sajnos még annyira sem működik mint az eredeti.

    Mondtam, hogy C parancsokra és szintaktikára nemigazán emlékszem, az egészet mint problémamegoldási ötlet vetettem fel :)

  • Jester01
    veterán

    Ezzel a megoldással 2 probléma van, nem vizsgálsz olyan eseteket amikor Bond fiatalabb vagy egyidős vele, 0 és negatív értékeket is kaphatsz.
    Nem emlékszek a C szintaktikára, de

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

    void main(void)
    {
    int szulev,bondszulev;
    clrscr();
    printf("\nMikor születtél? ");
    scanf("%d",&szulev);
    printf("\nMikor születtél Bond? ");
    scanf("%d",&bondszulev);

    if (szulev>bondszulev)
    {
    printf("\nÉn bondszulev-ben. ");
    printf("%d",abs(szulev-1985));
    printf("év van köztünk.\nA nevem Bond.");
    }
    if (szulev=bondszulev)
    {
    printf("\nÉn bondszulev-ben. ");
    printf("Egyidősek vagyunk! \nA nevem Bond.");
    }
    if (szulev<bondszulev)
    {
    printf("\nÉn bondszulev-ben. ");
    printf("%d",abs(bondszulev-szulev));
    printf("év van köztünk.\nA nevem Bond.");
    }
    getch();

    A 0 az jogos, de az abs elintézi ugye a negatív számokat.
    MOD: a te megoldásod meg sajnos még annyira sem működik mint az eredeti.

  • még én is csak 2órán voltam, de valahogy így csinálnám:

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

    void main(void)
    {
    int szulev;

    clrscr();

    printf("\nMikor születtél? ");
    scanf("%d",&szulev);

    printf("\nÉn 1985-ben. ");
    printf("%d",abs(szulev-1985));
    printf("év van köztünk.\nA nevem Bond.");

    getch();
    }

    Ezzel a megoldással 2 probléma van, nem vizsgálsz olyan eseteket amikor Bond fiatalabb vagy egyidős vele, 0 és negatív értékeket is kaphatsz.
    Nem emlékszek a C szintaktikára, de

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

    void main(void)
    {
    int szulev,bondszulev;
    clrscr();
    printf("\nMikor születtél? ");
    scanf("%d",&szulev);
    printf("\nMikor születtél Bond? ");
    scanf("%d",&bondszulev);

    if (szulev>bondszulev)
    {
    printf("\nÉn bondszulev-ben. ");
    printf("%d",abs(szulev-1985));
    printf("év van köztünk.\nA nevem Bond.");
    }
    if (szulev=bondszulev)
    {
    printf("\nÉn bondszulev-ben. ");
    printf("Egyidősek vagyunk! \nA nevem Bond.");
    }
    if (szulev<bondszulev)
    {
    printf("\nÉn bondszulev-ben. ");
    printf("%d",abs(bondszulev-szulev));
    printf("év van köztünk.\nA nevem Bond.");
    }
    getch();

  • csövi
    tag

    Sziasztok!

    Egy gondolom számotokra nagyon egyszerű programba kérném a segítségeteket, mert én még csak most tanulom.És ezt adták fel házinak 1 óra programozás után.
    Előre is köszi a segítséget.

    Írj olyan programot, mely bekéri a felhasználó születési évét, majd a képernyőre írja, hogy hány év van közted és a felhasználó közt, valamint a neved.
    Példa:
    Mikor születtél?
    1986
    Én 1985-ben. 1 év van köztünk.
    A nevem Bond.

    A fenti példában feltételeztem, hogy 1986-ban születtem és a nevem Bond, de Te a saját adataiddal helyettesítsd ezt. Figyelj oda, hogy nem tudod, hogy a felhasználó idősebb, vagy fiatalabb, mint Te.

    még én is csak 2órán voltam, de valahogy így csinálnám:

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

    void main(void)
    {
    int szulev;

    clrscr();

    printf("\nMikor születtél? ");
    scanf("%d",&szulev);

    printf("\nÉn 1985-ben. ");
    printf("%d",abs(szulev-1985));
    printf("év van köztünk.\nA nevem Bond.");

    getch();
    }

  • ludcsa01
    csendes tag

    Bond nevű felhasználó adatai fixek?

    Beviszed az adatokat, majd if feltételekkel vizsgálod hogy idősebb, fiatalabb vagy egykorú-e, és ezek alapján ki tudod számolni, hogy hány év a különbség.

    Nem adottak.
    Azokat én adom meg vagyis csak az én születési évem a fix.
    Nem tudnál nekem írni egy példát rá, hogy mégis hogy nézne ez ki.
    Mert még ezt az if-es részt nem használtuk.
    Meköszönném.

  • Sziasztok!

    Egy gondolom számotokra nagyon egyszerű programba kérném a segítségeteket, mert én még csak most tanulom.És ezt adták fel házinak 1 óra programozás után.
    Előre is köszi a segítséget.

    Írj olyan programot, mely bekéri a felhasználó születési évét, majd a képernyőre írja, hogy hány év van közted és a felhasználó közt, valamint a neved.
    Példa:
    Mikor születtél?
    1986
    Én 1985-ben. 1 év van köztünk.
    A nevem Bond.

    A fenti példában feltételeztem, hogy 1986-ban születtem és a nevem Bond, de Te a saját adataiddal helyettesítsd ezt. Figyelj oda, hogy nem tudod, hogy a felhasználó idősebb, vagy fiatalabb, mint Te.

    Bond nevű felhasználó adatai fixek?

    Beviszed az adatokat, majd if feltételekkel vizsgálod hogy idősebb, fiatalabb vagy egykorú-e, és ezek alapján ki tudod számolni, hogy hány év a különbség.

  • ludcsa01
    csendes tag

    Sziasztok!

    Egy gondolom számotokra nagyon egyszerű programba kérném a segítségeteket, mert én még csak most tanulom.És ezt adták fel házinak 1 óra programozás után.
    Előre is köszi a segítséget.

    Írj olyan programot, mely bekéri a felhasználó születési évét, majd a képernyőre írja, hogy hány év van közted és a felhasználó közt, valamint a neved.
    Példa:
    Mikor születtél?
    1986
    Én 1985-ben. 1 év van köztünk.
    A nevem Bond.

    A fenti példában feltételeztem, hogy 1986-ban születtem és a nevem Bond, de Te a saját adataiddal helyettesítsd ezt. Figyelj oda, hogy nem tudod, hogy a felhasználó idősebb, vagy fiatalabb, mint Te.

  • helló,
    TurboC- vel zúzok és van ez a jelszós feladat:

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

    void main(void)
    {
    char jelszo1,jelszo2,jelszo3;
    clrscr();
    printf("\nadja meg a jelsz˘t:");
    scanf("%c%c%c", &jelszo1,&jelszo2,&jelszo3);
    printf("\nfordˇtott jelsz˘: %c%c%c", jelszo3,jelszo2,jelszo1);
    getch();
    }

    hogy tudnám azt megcsinálni, hogy mikor gépelem be a jelszót ne jelenjen meg a képernyőn?

    Ne scanf-et használj adatbeolvasásra,hanem getch()-t

    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    void main (void)
    {
    char betu1,betu2,betu3;
    clrscr();
    printf("K‚rem a jelsz˘t:");
    betu1=getch(); //beolvasás
    betu2=getch();
    betu3=getch();
    printf("\n a jelsz˘ fordˇtva:%c%c%c",betu3,betu2,betu1);
    getch();
    }

  • csövi
    tag

    helló,
    TurboC- vel zúzok és van ez a jelszós feladat:

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

    void main(void)
    {
    char jelszo1,jelszo2,jelszo3;
    clrscr();
    printf("\nadja meg a jelsz˘t:");
    scanf("%c%c%c", &jelszo1,&jelszo2,&jelszo3);
    printf("\nfordˇtott jelsz˘: %c%c%c", jelszo3,jelszo2,jelszo1);
    getch();
    }

    hogy tudnám azt megcsinálni, hogy mikor gépelem be a jelszót ne jelenjen meg a képernyőn?

  • kampi_
    csendes tag

    Sziasztok!

    Adott ez a kód:

    STARTUPINFO StartInfo;
    PROCESS_INFORMATION ProcInfo;
    TOKEN_PRIVILEGES tp;
    memset(&ProcInfo, 0, sizeof(ProcInfo));
    memset(&StartInfo, 0 , sizeof(StartInfo));
    StartInfo.cb = sizeof(StartInfo);
    HANDLE handle = NULL;

    if (!OpenProcessToken(GetCurrentProcess(),
    TOKEN_ALL_ACCESS, &handle)) printf("\nOpenProcessError");

    if (!LookupPrivilegeValue(NULL,SE_TCB_NAME,
    //SE_TCB_NAME,
    &tp.Privileges[0].Luid)) {
    printf("\nLookupPriv error");
    }

    tp.PrivilegeCount = 1;
    tp.Privileges[0].Attributes =
    SE_PRIVILEGE_ENABLED;//SE_PRIVILEGE_ENABLED;
    if (!AdjustTokenPrivileges(handle, FALSE, &tp, 0, NULL, 0)) {
    printf("\nAdjustToken error");
    }

    i = LogonUser(user, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &handle);
    printf("\nLogonUser return : %d",i);
    i = GetLastError();
    printf("\nLogonUser getlast : %d",i);
    if (! ImpersonateLoggedOnUser(handle) ) printf("\nImpLoggedOnUser!");

    i = CreateProcessAsUser(handle, "c:\\windows\\system32\\notepad.exe",NULL, NULL, NULL, true,
    CREATE_UNICODE_ENVIRONMENT |NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE, NULL, NULL,
    &StartInfo, &ProcInfo);
    printf("\nCreateProcessAsUser return : %d",i);
    i = GetLastError();
    printf("\nCreateProcessAsUser getlast : %d",i);

    CloseHandle(handle);
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);

    A domaint, user, és passwordot egy fájlból olvasom be. A probléma az, hogy a CreateProcessAsuser mindig 1314-es hibával száll el, ami "A required privilige is not held by the client". A kérdés mit csinálok rosszul, vagy hogyan tudnék jogot adni a handle-nek? Gondolom annak kellene.

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

    kampi

  • Csuty12
    csendes tag

    gondolom TurboC-re gondolsz, olyan nincs hogy C++ 3.1 :)
    a felsorolt problemaknak meg semmi koze sem a C programozashoz, sem a TurboC-hez, szivat a vindoze :D kerdezz ra a megfelelo topicban sztem...

    Köszönöm, sajnálom hogy offoltam :)

  • doc
    nagyúr

    Sziasztok,

    két hete kezdtem tanulni programozni c++ 3.1ben, az érdekelni hogy megoldható az hogy Vista-n normálisan fusson? A problémám az lenne hogy nem tudom teljes képernyőre kirakni, a másik pedig az hogy angol billentyűkiosztást használ a program bent, lehet valahogy ezt magyarrá varázsolni? Így kicsit macerás a () és egyebek..

    u.i.: azért ezt a programot használom mert ahol oktatják ott is ez van és így egyszerűbb..

    Köszönöm

    gondolom TurboC-re gondolsz, olyan nincs hogy C++ 3.1 :)
    a felsorolt problemaknak meg semmi koze sem a C programozashoz, sem a TurboC-hez, szivat a vindoze :D kerdezz ra a megfelelo topicban sztem...

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

Hirdetés