- Okosóra és okoskiegészítő topik
- Szaporodik és sokasodik a One UI 8.5
- Huawei Watch Fit 5 Pro - jó forma
- Rég várt frissítést kap az Android tárcsázója
- Friss információk és képek a OnePlus új órájáról
- Fotók, videók mobillal
- One mobilszolgáltatások
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Honor 600 – kezes, kitartó, költséges
- Samsung Galaxy A52s 5G - jó S-tehetség
-
3100 - 3001
6397 - 6001 6000 - 5901 5900 - 5801 5800 - 5701 5700 - 5601 5600 - 5501 5500 - 5401 5400 - 5301 5300 - 5201 5200 - 5101 5100 - 5001 5000 - 4901 4900 - 4801 4800 - 4701 4700 - 4601 4600 - 4501 4500 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
-
Frissítve: 2014-04-25 14:12 Téma összefoglaló
Új hozzászólás Aktív témák
-
Jester01
veterán
Igazad van, de szerintem nyugodtan nullázhatja, attól függetlenül, hogy fogom-e használni az adott tömbelemet vagy sem.
Neki kutya kötelessége, ha én azt mondom.Linux alatt miért működik az érték adás rendesen? Windows alatt pedig miért nem?

Ilyen különbségek lehetnek a kettő között?Tévedsz, nem kötelessége.
A különbség pedig nem operációs rendszertől függ hanem fordítóprogramtól (és annak verziójától)
-
hruodnand
senior tag
Igazad van, de szerintem nyugodtan nullázhatja, attól függetlenül, hogy fogom-e használni az adott tömbelemet vagy sem.
Neki kutya kötelessége, ha én azt mondom.Linux alatt miért működik az érték adás rendesen? Windows alatt pedig miért nem?

Ilyen különbségek lehetnek a kettő között? -
Jester01
veterán
Nos, debuggoltam egy kicsit a Code :: Block alatt és ugyanaz a hiba mint neked. Egy pár említésre méltó érdekesség:
1) ha a tömbdeklaráció után egy printffel kiíratom az u3 tömb egyik elemét, akkor a deklarálásnál mindkét tömböt normálisan kinullázza.
2) ugyanúgy kinullázza az u3 tömböt, ha az u1 tömb egyik elemét íratom ki

3) a szokásos memset(u1, 0, N); memset(u3, 0, N) kezdőértékadásnál is a deklarációnál kinullázza a tömböket.Itt jegyezném meg, hogy ha egyáltalán nem olvassa a program az adott tömbelemet akkor a fordító nem köteles azt nullázni. Tehát amíg olyan kódot nem mutat valaki ami rosszul működik, addig ez csak "optimalizációs érdekesség" kategória.
-
hruodnand
senior tag
Nos, debuggoltam egy kicsit a Code :: Block alatt és ugyanaz a hiba mint neked. Egy pár említésre méltó érdekesség:
1) ha a tömbdeklaráció után egy printffel kiíratom az u3 tömb egyik elemét, akkor a deklarálásnál mindkét tömböt normálisan kinullázza.
2) ugyanúgy kinullázza az u3 tömböt, ha az u1 tömb egyik elemét íratom ki

3) a szokásos memset(u1, 0, N); memset(u3, 0, N) kezdőértékadásnál is a deklarációnál kinullázza a tömböket.Poén benne, hogy felraktam VMware-ben egy Ubuntu 10.04-est, ráraktam a CodeBlocks-ot és gyönyörűen ad értéket. Tehát... Fejleszteni csak Linux alatt...

Nem tudok jobbat... Vicc. Mármint érdekes.

-
kispx
addikt
Nos, debuggoltam egy kicsit a Code :: Block alatt és ugyanaz a hiba mint neked. Egy pár említésre méltó érdekesség:
1) ha a tömbdeklaráció után egy printffel kiíratom az u3 tömb egyik elemét, akkor a deklarálásnál mindkét tömböt normálisan kinullázza.
2) ugyanúgy kinullázza az u3 tömböt, ha az u1 tömb egyik elemét íratom ki

3) a szokásos memset(u1, 0, N); memset(u3, 0, N) kezdőértékadásnál is a deklarációnál kinullázza a tömböket. -
hruodnand
senior tag
Úgy tűnik a vs alapból kinullázza a tömböt, ráadásul a gyorsabb megoldással. Vajon miért nem veszi észre, hogy a többit is lehetne optimalizálni.
hruodnand: Ha megnézed a lenti kódot (az 1db 0-ásat), akkor akár lehet az is a gond, hogy nincs elég 0.
For ciklussal kinullázni esetleg? Így akkor sem lesz gond, ha 8 helyett 22 elemű lesz a tömb.Épp ez az, hogy nem az első tömbbel van gond, hanem a másodikkal. Az első tömböt szépen teleírja, de a másodikat már nem. Ha ugyanúgy adom meg a dolgokat, akkor se tölti fel nullával a második tömbömet.

-
kingabo
őstag
ez szerintem a CodeBlocks vagy a fordító sara
elvileg a CodeBlocks-ban is van disassembler, az mit mutat?én VS2010-el néztem debug közben:
int u1[N] = { 0 };
002813F9 mov dword ptr [ebp-48h],0
00281400 xor eax,eax
00281402 mov dword ptr [ebp-44h],eax
00281405 mov dword ptr [ebp-40h],eax
00281408 mov dword ptr [ebp-3Ch],eax
0028140B mov dword ptr [ebp-38h],eax
0028140E mov dword ptr [ebp-34h],eax
00281411 mov dword ptr [ebp-30h],eax
int u3[N] = { 0, 0, 0, 0, 0, 0, 0};
00281414 mov dword ptr [ebp-6Ch],0
0028141B mov dword ptr [ebp-68h],0
00281422 mov dword ptr [ebp-64h],0
00281429 mov dword ptr [ebp-60h],0
00281430 mov dword ptr [ebp-5Ch],0
00281437 mov dword ptr [ebp-58h],0
0028143E mov dword ptr [ebp-54h],0Úgy tűnik a vs alapból kinullázza a tömböt, ráadásul a gyorsabb megoldással. Vajon miért nem veszi észre, hogy a többit is lehetne optimalizálni.
hruodnand: Ha megnézed a lenti kódot (az 1db 0-ásat), akkor akár lehet az is a gond, hogy nincs elég 0.
For ciklussal kinullázni esetleg? Így akkor sem lesz gond, ha 8 helyett 22 elemű lesz a tömb. -
hruodnand
senior tag
ez szerintem a CodeBlocks vagy a fordító sara
elvileg a CodeBlocks-ban is van disassembler, az mit mutat?én VS2010-el néztem debug közben:
int u1[N] = { 0 };
002813F9 mov dword ptr [ebp-48h],0
00281400 xor eax,eax
00281402 mov dword ptr [ebp-44h],eax
00281405 mov dword ptr [ebp-40h],eax
00281408 mov dword ptr [ebp-3Ch],eax
0028140B mov dword ptr [ebp-38h],eax
0028140E mov dword ptr [ebp-34h],eax
00281411 mov dword ptr [ebp-30h],eax
int u3[N] = { 0, 0, 0, 0, 0, 0, 0};
00281414 mov dword ptr [ebp-6Ch],0
0028141B mov dword ptr [ebp-68h],0
00281422 mov dword ptr [ebp-64h],0
00281429 mov dword ptr [ebp-60h],0
00281430 mov dword ptr [ebp-5Ch],0
00281437 mov dword ptr [ebp-58h],0
0028143E mov dword ptr [ebp-54h],0Szia!
Köszönöm, hogy meglested.
Disassembler se akar működni rendesen.
Windows 7 x64 alatt van a CodeBlocks... Nem tudom, hogy számít-e.Szerintem felrakok egy Ubuntu-t, mert így nem tudok programozni...
Windows mellé nem fogom felrakni, inkább virtuális gép, mert az egész winchesterem TrueCrypt-es. Nem szeretném hazavágni az adataimat.Ismerős gépén (Ubuntu-val, CodeBlocks-al) tökéletesen megy a program, mármint értéket ad a tömb elemeinek.
Érdekes. -
bpx
őstag
Sziasztok!
Egy kis problémába ütköztem CodeBlocks terén.
Debug-olás: LINK
A linkelt képen jól látható, hogy az u1-es tömböt szépen feltölti "0"-val, míg az u3-asat nem! Holott evidens, hogy azt is fel kellene töltenie.
Próbáltam sokféleképpen megadni neki a nullát, és sehogy se ment. u2-es volt alapból a neve a tömbnek, de átírtam u3-asra kínomba.
CodeBlocks hiba vagy esetleg én néztem be valamit?
Megj.:
Minden más kódrészlet a programban ki van kommentelve, illetve csak ezt az egy fájlt használom.MOD:
A program le lett fordítva újra természetesen.
Azt is tudom, hogy 8 elemű a tömb és én 7 elemet rakok bele u3-nál, de ez ugye nem lényeg,
ez szerintem a CodeBlocks vagy a fordító sara
elvileg a CodeBlocks-ban is van disassembler, az mit mutat?én VS2010-el néztem debug közben:
int u1[N] = { 0 };
002813F9 mov dword ptr [ebp-48h],0
00281400 xor eax,eax
00281402 mov dword ptr [ebp-44h],eax
00281405 mov dword ptr [ebp-40h],eax
00281408 mov dword ptr [ebp-3Ch],eax
0028140B mov dword ptr [ebp-38h],eax
0028140E mov dword ptr [ebp-34h],eax
00281411 mov dword ptr [ebp-30h],eax
int u3[N] = { 0, 0, 0, 0, 0, 0, 0};
00281414 mov dword ptr [ebp-6Ch],0
0028141B mov dword ptr [ebp-68h],0
00281422 mov dword ptr [ebp-64h],0
00281429 mov dword ptr [ebp-60h],0
00281430 mov dword ptr [ebp-5Ch],0
00281437 mov dword ptr [ebp-58h],0
0028143E mov dword ptr [ebp-54h],0 -
hruodnand
senior tag
Sziasztok!
Egy kis problémába ütköztem CodeBlocks terén.
Debug-olás: LINK
A linkelt képen jól látható, hogy az u1-es tömböt szépen feltölti "0"-val, míg az u3-asat nem! Holott evidens, hogy azt is fel kellene töltenie.
Próbáltam sokféleképpen megadni neki a nullát, és sehogy se ment. u2-es volt alapból a neve a tömbnek, de átírtam u3-asra kínomba.
CodeBlocks hiba vagy esetleg én néztem be valamit?
Megj.:
Minden más kódrészlet a programban ki van kommentelve, illetve csak ezt az egy fájlt használom.MOD:
A program le lett fordítva újra természetesen.
Azt is tudom, hogy 8 elemű a tömb és én 7 elemet rakok bele u3-nál, de ez ugye nem lényeg,
7 elemű a tömb és 7-et rakok bele.
Csak már megzavarodtam.
Probléma mindig fenn áll még.
-
hruodnand
senior tag
Sziasztok!
Egy kis problémába ütköztem CodeBlocks terén.
Debug-olás: LINK
A linkelt képen jól látható, hogy az u1-es tömböt szépen feltölti "0"-val, míg az u3-asat nem! Holott evidens, hogy azt is fel kellene töltenie.
Próbáltam sokféleképpen megadni neki a nullát, és sehogy se ment. u2-es volt alapból a neve a tömbnek, de átírtam u3-asra kínomba.
CodeBlocks hiba vagy esetleg én néztem be valamit?
Megj.:
Minden más kódrészlet a programban ki van kommentelve, illetve csak ezt az egy fájlt használom.MOD:
A program le lett fordítva újra természetesen.
Azt is tudom, hogy 8 elemű a tömb és én 7 elemet rakok bele u3-nál, de ez ugye nem lényeg,
-
bpx
őstag
Sziasztok!
C++-ban hogyan lehet megoldani a következő problémát:
-bekérek egy számot, ami 1-3 számjegyű lehet (nem kritérium, de eltérő számjegyű lehet)
-a számjegy számjegyeit helyiértékenként leválogatom és eltárolom 3db változóban
Tehát pl.: megadom 234-et bemenetnek, akkor a=2, b=3, c=4,
de ha 15 a bemeneti érték, akkor a=0, b=1, c=5.a = szam / 100;
szam = szam - a * 100;
b = szam / 10;
szam = szam - b * 10;
c = szam; -
Fenyo12
tag
Sziasztok!
C++-ban hogyan lehet megoldani a következő problémát:
-bekérek egy számot, ami 1-3 számjegyű lehet (nem kritérium, de eltérő számjegyű lehet)
-a számjegy számjegyeit helyiértékenként leválogatom és eltárolom 3db változóban
Tehát pl.: megadom 234-et bemenetnek, akkor a=2, b=3, c=4,
de ha 15 a bemeneti érték, akkor a=0, b=1, c=5. -
Rickazoid
addikt
Az i nem feltélten lesz 0. Egyszerűen csak nem változik az értéke. Mivel te semmivel sem inicializáltad, véletlen érték lesz, ami éppen a memóriában volt. Feladattól függően egyébként sem biztos, hogy a 0 hibás bevitel lenne.
Azért végtelen a ciklus mert ha a scanf elakad, akkor nem olvassa ki a pufferből a maradékot. A következő scanf hívás tehát pont ugyanúgy elakad. Neked kell takarítani, a következő sorvég jelig, például getchar használatával. EOF-ot is illik lekezelni.
A scanf amúgy visszaadja mennyi mezőt sikerült beolvasnia, de ettől még lehet szemét a pufferben. Nem véletlenül mondják, hogy nem ajánlott scanf-et használni. Bármennyire is nem szeretnéd, a korrekt megoldás általában teljes sor olvasása (fgets) után kézi feldolgozás (strtol, strtod).
Egyelőre megoldottam puffertörléssel.. bár néha csinál érdekességeket, bugos a drága. Egy következő programomnál már lehet eleve másképp állok majd neki.
-
Jester01
veterán
Üdv!
A következő kóddal (mintakód, de a problémám ugyanez) lenne a problémám:
int i;
scanf("%d",&i);
printf("%d",i); //nem integer esetén 0
while(i==0)
{
printf("Nem jó. Új szám: ");
scanf("%d",&i);
}
printf("%d",i);
Amíg az i-nek számot adok meg, nincs gond, de amint betűt, a mögötte lévő ciklus végtelen ciklusba kerül. Ezt próbáltam meg kiküszöbölni a példában szereplő while ciklussal ami megnézi, hogy 0-e, mivel nem szám esetében 0 lesz az i értéke, de az is végtelen ciklusba kerül. Hogy tudom elérni, hogy nem szám beírásakor újrakérje a számot végtelen ciklusok helyett?
Az int-et nem módosíthatom karakterre, főleg nem karaktertömbre, az most túl bonyolult lenne a program többi része miatt.
Van valami megoldás erre? Egyáltalán miért nem működik? Ha az i értéke 0 lesz, akkor a while miért hülyül meg, mi a különbség 0 és 0 közt, ha mindkettő integer?Az i nem feltélten lesz 0. Egyszerűen csak nem változik az értéke. Mivel te semmivel sem inicializáltad, véletlen érték lesz, ami éppen a memóriában volt. Feladattól függően egyébként sem biztos, hogy a 0 hibás bevitel lenne.
Azért végtelen a ciklus mert ha a scanf elakad, akkor nem olvassa ki a pufferből a maradékot. A következő scanf hívás tehát pont ugyanúgy elakad. Neked kell takarítani, a következő sorvég jelig, például getchar használatával. EOF-ot is illik lekezelni.
A scanf amúgy visszaadja mennyi mezőt sikerült beolvasnia, de ettől még lehet szemét a pufferben. Nem véletlenül mondják, hogy nem ajánlott scanf-et használni. Bármennyire is nem szeretnéd, a korrekt megoldás általában teljes sor olvasása (fgets) után kézi feldolgozás (strtol, strtod).
-
Rickazoid
addikt
Üdv!
A következő kóddal (mintakód, de a problémám ugyanez) lenne a problémám:
int i;
scanf("%d",&i);
printf("%d",i); //nem integer esetén 0
while(i==0)
{
printf("Nem jó. Új szám: ");
scanf("%d",&i);
}
printf("%d",i);
Amíg az i-nek számot adok meg, nincs gond, de amint betűt, a mögötte lévő ciklus végtelen ciklusba kerül. Ezt próbáltam meg kiküszöbölni a példában szereplő while ciklussal ami megnézi, hogy 0-e, mivel nem szám esetében 0 lesz az i értéke, de az is végtelen ciklusba kerül. Hogy tudom elérni, hogy nem szám beírásakor újrakérje a számot végtelen ciklusok helyett?
Az int-et nem módosíthatom karakterre, főleg nem karaktertömbre, az most túl bonyolult lenne a program többi része miatt.
Van valami megoldás erre? Egyáltalán miért nem működik? Ha az i értéke 0 lesz, akkor a while miért hülyül meg, mi a különbség 0 és 0 közt, ha mindkettő integer? -
Karma
félisten
Köszönöm válaszod! Az első ajánlott könyvre esetleg lenne valami ötleted honnan lehetne beszerezni? Itt találtam meg egyedül, de itt sincs belőle elérhető példány: http://www.antikvarium.hu/ant/book.php?konyv-cim=programozasi-feladatok-ii&ID=124277
Sajnos nem tudom, én amikor használtam könyvtárból vettem ki, úgy hét éve Kecskeméten

-
kovacsakos91
csendes tag
Köszönöm válaszod! Az első ajánlott könyvre esetleg lenne valami ötleted honnan lehetne beszerezni? Itt találtam meg egyedül, de itt sincs belőle elérhető példány: http://www.antikvarium.hu/ant/book.php?konyv-cim=programozasi-feladatok-ii&ID=124277
-
kovacsakos91
csendes tag
Igazából bármilyen témájút, ami hasonló a példához.
-
kispx
addikt
Csak az "bosszant", hogy szinte minden feladatgyűjtemény hasonló feladatokat tartalmaz, de olyat nem találok sehol amilyet linkeltem is.

Kisebb játékot akarsz írni? Vagy milyen témájút? Több fórumon is láttam, hogy ezt a kérdést felraktad, és gyakorlatilag az összes használható feladatgyűjteményt felsoroltuk.
Esetleg egy-két házi van még, amit az egyetemen kaptunk.
-
Karma
félisten
Köszönöm a linkeket! Olyan feladatgyűjteményt is tudnál linkelni, amiben a példámhoz hasonló feladatok vannak? Akár könyv is megfelelne.
Előre is köszönöm!
Ennek a második kötetében előfordulnak ilyen jellegű feladatok, még ha nem is ilyen bő lére eresztve. Instant nosztalgia!

Illetve, kategóriánál maradva, nézz utána Nemes Tihamér OKSzTV feladatsoroknak, ott is voltak ilyenek jópár éve. Bonyolultságra és stílusra is hasonló.
-
kovacsakos91
csendes tag
Csak az "bosszant", hogy szinte minden feladatgyűjtemény hasonló feladatokat tartalmaz, de olyat nem találok sehol amilyet linkeltem is.

-
kovacsakos91
csendes tag
Szívesen.
Ennyi idő alatt az összes példát végignézted, és felfedezted, hogy nahát, ezek között egy sincs, ami ahhoz hasonló lenne? Kétlem...
Ezeket tudtam linkelni.Nem ma néztem át őket, az igazság az, hogy párhuzamosan több fórumon is kérdezősködök és ezeket már ajánlották mások is korábban, akkor néztem át őket.
-
kispx
addikt
Szeretném megkérdezni, hogy tudna e valaki C programozási feladatgyűjteményt ajánlani? Esetleg amit maga is használt? A Juhász István, Kósa Márk, Pánovics János féle "C példatár" című könyvet ismerem.
Ehhez hasonló feladatokat keresnék: http://pastebin.com/9NtteJguA válaszokat előre is köszönöm!
-
Sk8erPeter
nagyúr
Köszönöm a linkeket! Olyan feladatgyűjteményt is tudnál linkelni, amiben a példámhoz hasonló feladatok vannak? Akár könyv is megfelelne.
Előre is köszönöm!
Szívesen.
Ennyi idő alatt az összes példát végignézted, és felfedezted, hogy nahát, ezek között egy sincs, ami ahhoz hasonló lenne? Kétlem...
Ezeket tudtam linkelni. -
kovacsakos91
csendes tag
Köszönöm a linkeket! Olyan feladatgyűjteményt is tudnál linkelni, amiben a példámhoz hasonló feladatok vannak? Akár könyv is megfelelne.
Előre is köszönöm!
-
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
Szeretném megkérdezni, hogy tudna e valaki C programozási feladatgyűjteményt ajánlani? Esetleg amit maga is használt? A Juhász István, Kósa Márk, Pánovics János féle "C példatár" című könyvet ismerem.
Ehhez hasonló feladatokat keresnék: http://pastebin.com/9NtteJguA válaszokat előre is köszönöm!
-
kovacsakos91
csendes tag
Szeretném megkérdezni, hogy tudna e valaki C programozási feladatgyűjteményt ajánlani? Esetleg amit maga is használt? A Juhász István, Kósa Márk, Pánovics János féle "C példatár" című könyvet ismerem.
Ehhez hasonló feladatokat keresnék: http://pastebin.com/9NtteJguA válaszokat előre is köszönöm!
-
kispx
addikt
Konkrétan nem tudom, hogy mit csinál a kódrészlet (de a változódeklarációkkal kiegészítve lefordul) . Azért kérdeztem, mert még ilyen szintaktikát még nem láttam.
Jester01
Köszönöm szépen. -
Jester01
veterán
-
Korcsii
őstag
Üdv,
Az alábbi kódrészletet miért lehet lefordítani? Mármint definiálunk egy switch szerkezetet, majd az egyik case ágában egy do-while ciklust írunk és ebben a ciklusban folytatjuk tovább a case ágakat.switch (count % 8) {
case 0: do { *to = *from++;
case 7: *to = *from++;
case 6: *to = *from++;
case 5: *to = *from++;
case 4: *to = *from++;
case 3: *to = *from++;
case 2: *to = *from++;
case 1: *to = *from++;
} while ((count -= 8) > 0);
}jesszus...
mit kéne ennek a kódnak csinálnia? mert arra is nehéz rájönni...
én csinálnék egy if-et 0-ra, és akkor belép a do-while-ba, ahol lenne egy switch...
break; nem hiányzik?
-
kispx
addikt
Üdv,
Az alábbi kódrészletet miért lehet lefordítani? Mármint definiálunk egy switch szerkezetet, majd az egyik case ágában egy do-while ciklust írunk és ebben a ciklusban folytatjuk tovább a case ágakat.switch (count % 8) {
case 0: do { *to = *from++;
case 7: *to = *from++;
case 6: *to = *from++;
case 5: *to = *from++;
case 4: *to = *from++;
case 3: *to = *from++;
case 2: *to = *from++;
case 1: *to = *from++;
} while ((count -= 8) > 0);
} -
artiny
őstag
kingaboezt a feladatot csak gyakorlas keppen talaltam ki magamnak,hogy lehetne megirni.
TXT knél mikor melyiket használjuk/ printf, fprintf, scanf, fscanf putchar, getchar, fputc, fgetc fpots, fgets /?
printf, - ha ki akarok íratni valamit txtbol pl. egy getc bol
fprintf, - ha egy beolvasott karaktert kiíratok,elmentek egy txt be
scanf, - érteket adok egy változónak
fscanf,
putchar, - egy darab karaktert megjelenít a képernyőn,
getchar, - egy darab karaktert beolvas egy txtbol,
putc,
getc,
fputc,
fgetc,
fputs,
Amihez nem irtam azzal nem vagyok tisztába teljesen vagy mar teljesen összekavart.
www.cplusplus.com/
cpprefence oldalakon mar átnéztem többször is de....nem értem teljesen stb ...
feladatokhoz kell ez az összegzés nekem hogy tudjam mikor melyiket kell használni altban. -
kingabo
őstag
Köszönöm a segítségeteket,sikerült így
most már megírni /talán jól is
/#include <stdlib.h> // for itoa() call
#include <stdio.h> // for printf() call
int main() {
int num,i,mard,erd = 0,num2;
printf("Adjon meg egy szamot \n");
scanf("%d",&num);
num2=num;
for(i = 1; ; i++){
mard = num%10;
// printf("mardadek %d\n", mard);
if(!(mard == 0 || mard == 3 || mard == 6 || mard == 9)){
erd = erd + mard;
}
num = num/10;
// printf("%d\n", num);
if(num==0){
break;
}
}
printf("Szamjegyek osszege /0,3,6,9 kivul/ %d\n", erd);
if(erd%3 == 0){
printf("%d oszthato 3 .al",num2);
}
else{
printf("%d nem oszthato 3 .al \n\n",num2);
}
return 0;
}Nem tudom feladat-e, de célszerű lenne ellenőrizni, hogy tényleg számot adott-e meg a lyúzer.
Pár észrevétel a kódhoz:
- az itoa-t nem használod, szerintem felesleges a hozzá tartozó include
- if(!(mard == 0 || mard == 3 || mard == 6 || mard == 9)) helyet írhatod ezt is
if(mard != 0 && mard != 3 && mard != 6 && mard != 9)) (ha már 1 hamisat talál, akkor a többit ki se értékeli)
- nem tudom kötelezőe a fenti módon való számolás, de sokat gyorsíthatnál, ha simán csak összegzed a számjegyelet, esetleg a mard-nak a 3al vett maradékát néznéd, hogy 0-e (ez utóbbi valszeg lassabb lenne, de a kód átláthatóbbá válna, illetve könnyebben módosítható, ha 3 helyett a 9-el való osztás kell)
- for ciklus helyett egy while sokkal szebb lenne
-
artiny
őstag
Ciklusban kell végezned amit leírtam.
Tehát a példádnál maradva az első iterációban leszeded az 1-et, a szám 15 lesz, aztán a másodikban a 5-t, a szám 1 lesz, aztán a harmadikban a maradék 1 lesz, a szám 0.Szerk:
Ez azért így elég csúnya: data[sizeof(int)];!! 32bites gépen ez 4 lesz, viszont 9 számjegyű számot is lehet tárolni a változóban!Köszönöm a segítségeteket,sikerült így
most már megírni /talán jól is
/#include <stdlib.h> // for itoa() call
#include <stdio.h> // for printf() call
int main() {
int num,i,mard,erd = 0,num2;
printf("Adjon meg egy szamot \n");
scanf("%d",&num);
num2=num;
for(i = 1; ; i++){
mard = num%10;
// printf("mardadek %d\n", mard);
if(!(mard == 0 || mard == 3 || mard == 6 || mard == 9)){
erd = erd + mard;
}
num = num/10;
// printf("%d\n", num);
if(num==0){
break;
}
}
printf("Szamjegyek osszege /0,3,6,9 kivul/ %d\n", erd);
if(erd%3 == 0){
printf("%d oszthato 3 .al",num2);
}
else{
printf("%d nem oszthato 3 .al \n\n",num2);
}
return 0;
} -
kingabo
őstag
Helo
"Ezt kell addig csinálnod, amíg végül 0-t nem kapsz." -ezt nem nagyon ertem,
hogyan tudok beljebb halladni,hogy nem csak az utolso szamot tudjam "levagni",ellenorizni?
pl.: 151
a = num%10; // erdemeny: 1
b = num%100; // erdemeny: 51
itt a baj hogy az 5 utan az 1 is ott van...hogy lehet h csak az 5 .st irja ki?
Ciklusban kell végezned amit leírtam.
Tehát a példádnál maradva az első iterációban leszeded az 1-et, a szám 15 lesz, aztán a másodikban a 5-t, a szám 1 lesz, aztán a harmadikban a maradék 1 lesz, a szám 0.Szerk:
Ez azért így elég csúnya: data[sizeof(int)];!! 32bites gépen ez 4 lesz, viszont 9 számjegyű számot is lehet tárolni a változóban! -
doc
nagyúr
Helo
"Ezt kell addig csinálnod, amíg végül 0-t nem kapsz." -ezt nem nagyon ertem,
hogyan tudok beljebb halladni,hogy nem csak az utolso szamot tudjam "levagni",ellenorizni?
pl.: 151
a = num%10; // erdemeny: 1
b = num%100; // erdemeny: 51
itt a baj hogy az 5 utan az 1 is ott van...hogy lehet h csak az 5 .st irja ki?
a szamot minden lepesben oszd el a szamrendszer alapjaval (jelen esetben 10)
-
artiny
őstag
Helo
"Ezt kell addig csinálnod, amíg végül 0-t nem kapsz." -ezt nem nagyon ertem,
hogyan tudok beljebb halladni,hogy nem csak az utolso szamot tudjam "levagni",ellenorizni?
pl.: 151
a = num%10; // erdemeny: 1
b = num%100; // erdemeny: 51
itt a baj hogy az 5 utan az 1 is ott van...hogy lehet h csak az 5 .st irja ki?
mar meg van>
int main() {
int x, data[sizeof(int)];x=251;
data[2] = x/100; x%=100; //data[2]=2; x=51;
printf("%d\n",data[2]);data[1] = x/10; x%=10; //data[1]=5; x=1;
printf("%d\n",data[1]);
data[0] = x; //1
printf("%d\n",data[0]); -
artiny
őstag
5let: A számot osztod maradékosan 10-el, így megkapod az utolsó számjegyet, amit hozzáadsz egy összeghez. Ezt kell addig csinálnod, amíg végül 0-t nem kapsz. Ezután megvizsgálod, hogy az összeget 3-al osztva 0-e a maradék.
C-s megvalósításhoz:
maradek = szam % 10;: a szám 10-el vett osztási maradéka (a szam változatlan marad)
szam = szam / 10;: a szám osztása 10-el (int osztás)Helo
"Ezt kell addig csinálnod, amíg végül 0-t nem kapsz." -ezt nem nagyon ertem,
hogyan tudok beljebb halladni,hogy nem csak az utolso szamot tudjam "levagni",ellenorizni?
pl.: 151
a = num%10; // erdemeny: 1
b = num%100; // erdemeny: 51
itt a baj hogy az 5 utan az 1 is ott van...hogy lehet h csak az 5 .st irja ki?
-
kingabo
őstag
Hogyan lehet egy számot ami több számjegyből áll feldarabolni?
Ilyet megirni :
3-mal osztható az a szám, melynek számjegyeinek összege 3-mal osztható. (Úgy is meg lehet fogalmazni, hogy 3-mal osztható az a szám, amelynek a 3-mal nem osztható számjegyeinek (vagyis a 0, 3, 6, 9 számjegyeket nem számolva) összege osztható hárommal (például a 3694692306 szám osztható 3-mal, mert hárommal nem osztható számjegyeinek összege 4+2=6 osztható 3-mal))
5let: A számot osztod maradékosan 10-el, így megkapod az utolsó számjegyet, amit hozzáadsz egy összeghez. Ezt kell addig csinálnod, amíg végül 0-t nem kapsz. Ezután megvizsgálod, hogy az összeget 3-al osztva 0-e a maradék.
C-s megvalósításhoz:
maradek = szam % 10;: a szám 10-el vett osztási maradéka (a szam változatlan marad)
szam = szam / 10;: a szám osztása 10-el (int osztás) -
artiny
őstag
Hogyan lehet egy számot ami több számjegyből áll feldarabolni?
Ilyet megirni :
3-mal osztható az a szám, melynek számjegyeinek összege 3-mal osztható. (Úgy is meg lehet fogalmazni, hogy 3-mal osztható az a szám, amelynek a 3-mal nem osztható számjegyeinek (vagyis a 0, 3, 6, 9 számjegyeket nem számolva) összege osztható hárommal (például a 3694692306 szám osztható 3-mal, mert hárommal nem osztható számjegyeinek összege 4+2=6 osztható 3-mal))
-
Jester01
veterán
Az értékadás mint kifejezés inkább feltételben szokott előfordulni, ilyesmiket lehet gyakrabban látni:
while ((c = fgetc(in)) != EOF) { ... }
vagy
while ((bytes = read(...)) > 0) { ... }Ezekben az esetekben olvashatóbbá teszi a kódot, artiny verziójában valóban fölösleges, inkább zavaró volt.
-
artiny
őstag
sscanf-re gondoltam, csak rosszul... elfelejtettem, hogy fájlból olvasol...
Hogy hogyan kezeli őket, az attól függ, hogy hogyan olvasod be.
Mindenesetre fscanf-et és f(?)getc-t nem kéne keverni, elég a kettő magában is (az előbbi kódoddal levágsz egy karaktert, aztán beolvasol egy számot a maradékból).
Egyszerű programban én simán fscanf-fel olvasnék, esetleg vizsgálnám, hogy sikeres-e.
oke.koszi vegul sikerult a fscanf l.
-
Korcsii
őstag
(s)sanf itt a fscanf re gondoltal? mert a sanf t nem ismerem es nem adott semmit a google.
Valmi ilyesmit probaltam. Harom szamot beolvasni egy txt bol es azt osszeadni es kiiratni.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
int i;
int d;
FILE * f;
f = fopen("szam.txt","r");
while (( i= getc(f)) != EOF ){
fscanf(f,"%d",&i);
}
fclose(f);
printf("%d",d);
return 0;
}sscanf-re gondoltam, csak rosszul... elfelejtettem, hogy fájlból olvasol...
Hogy hogyan kezeli őket, az attól függ, hogy hogyan olvasod be.
Mindenesetre fscanf-et és f(?)getc-t nem kéne keverni, elég a kettő magában is (az előbbi kódoddal levágsz egy karaktert, aztán beolvasol egy számot a maradékból).
Egyszerű programban én simán fscanf-fel olvasnék, esetleg vizsgálnám, hogy sikeres-e.
-
birno
addikt
Csak fura volt elsore, meg szokatlan, nem probaltam meg ilyesmit, Jester01 valtozata mar ismerosebb.

-
artiny
őstag
(s)sanf itt a fscanf re gondoltal? mert a sanf t nem ismerem es nem adott semmit a google.
Valmi ilyesmit probaltam. Harom szamot beolvasni egy txt bol es azt osszeadni es kiiratni.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
int i;
int d;
FILE * f;
f = fopen("szam.txt","r");
while (( i= getc(f)) != EOF ){
fscanf(f,"%d",&i);
}
fclose(f);
printf("%d",d);
return 0;
} -
Korcsii
őstag
Legegyszerűbb talán (s)sanf-fel egyből számkénet beolvasni...
birno:
Lehet, hogy működne (miért is ne?), de nem szép, szerintem a (gépi)kód sem lesz egyszerűbb tőle, sőt... Írjunk leforduló C programot minél rövidebben címűversenyben van szerintem csak helye.
-
artiny
őstag
Van több is

while(d != '1');
Ide nem karakter konstans kell, csak simán egy szám.Másik probléma, hogy a d-be számítod ki az új értéket de az a-t használod.
Kicsit letisztázva ilyesmi lehet:
#include <stdio.h>
int main(void)
{
int a;
scanf("%d",&a);
do
{
if (a % 2 == 0)
{
a = a / 2;
} else {
a = a * 3 + 1;
}
printf("%d\n", a);
} while (a != 1);
return 0;
}Köszi szépen
esetleg erre valki:
C ben hoyan kell txt böl beolvasott számokat osszeadni, mivel karakterenkent kezeli oket ezert az ASCII ertekuket adja ossze?
-
birno
addikt
Van több is

while(d != '1');
Ide nem karakter konstans kell, csak simán egy szám.Másik probléma, hogy a d-be számítod ki az új értéket de az a-t használod.
Kicsit letisztázva ilyesmi lehet:
#include <stdio.h>
int main(void)
{
int a;
scanf("%d",&a);
do
{
if (a % 2 == 0)
{
a = a / 2;
} else {
a = a * 3 + 1;
}
printf("%d\n", a);
} while (a != 1);
return 0;
}S egyebkent a printf-ben az ertekadas mukodne?
-
Jester01
veterán
köszi a válaszokat

esetleg erre:
pl. irj egy fol progit ami bekér egy számot,ha páros,akkor irja ki a felét a számnak ,ha nem akkor irja ki a haromszorosát es adjon hozzá egyet. Csak akkor áll le a progi ha valamelyik érték 1 -s lessz. pl. 3 számra ezt fogja kiirni 3, 10, 5, 16,
8, 4, 2, 1. Gondolod hogy valaha is megáll a program futása.#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
int a,d,egy = 1;
scanf("%d",&a);
do{
d=a%2;
if (d == 0)
{
printf("\n%d ",d=a/2);
}
else{
printf("\n%d ",d=a*3+1);
}
}while(d != '1');
return 0;
}
Erre jutottam,de valmi gond van vele
Van több is

while(d != '1');
Ide nem karakter konstans kell, csak simán egy szám.Másik probléma, hogy a d-be számítod ki az új értéket de az a-t használod.
Kicsit letisztázva ilyesmi lehet:
#include <stdio.h>
int main(void)
{
int a;
scanf("%d",&a);
do
{
if (a % 2 == 0)
{
a = a / 2;
} else {
a = a * 3 + 1;
}
printf("%d\n", a);
} while (a != 1);
return 0;
} -
artiny
őstag
Kösz a korrekciót, bár a végső megállapításom sztem azért helyesnek tekinthető.

köszi a válaszokat

esetleg erre:
pl. irj egy fol progit ami bekér egy számot,ha páros,akkor irja ki a felét a számnak ,ha nem akkor irja ki a haromszorosát es adjon hozzá egyet. Csak akkor áll le a progi ha valamelyik érték 1 -s lessz. pl. 3 számra ezt fogja kiirni 3, 10, 5, 16,
8, 4, 2, 1. Gondolod hogy valaha is megáll a program futása.#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
int a,d,egy = 1;
scanf("%d",&a);
do{
d=a%2;
if (d == 0)
{
printf("\n%d ",d=a/2);
}
else{
printf("\n%d ",d=a*3+1);
}
}while(d != '1');
return 0;
}
Erre jutottam,de valmi gond van vele
-
WonderCSabo
félisten
-
Jester01
veterán
Mindegyiknél Enterrel viszed be az adatot.
Azok közül csak a gets vár entert, a többinél csak azért látszik úgy, mert az alatta lévő réteg eleve soronként pufferel. Ennek kikapcsolása vagy megkerülése sajnos platformfüggő.
-
WonderCSabo
félisten
-
artiny
őstag
gets(&b)
Enter nyomás nélkül nem tudsz adatot bevinni ezekkel a fvekkel, amennyire én tudom.
koszi szepen
getchar,gets,scanf ezeken kozzul melyik a jo megoldas ilyes fajta feladatoknal?
-
WonderCSabo
félisten
/C/ hogyan irjuk meg olyan feladatokat amik ugy szolnak, pl. irjon programot ami addig olvas be karaktereket amig nem adjuk meg az X -et?
Ez igy helyes,kezdo szintu megoldas,
Irjon progit ami addig olvasbe karaktereket amig nem adjuk meg az X -et,majd a vegen irja ki hanyszor szerepelt az A betu a beolvasottak kozott.
A kerdesem hogy nem all meg rogton a beolvasas pedig megadtam az X -t ,csak akkor ha az entert lenyomom akkor ertekeli ki hogy megadtam e vagy nem.#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define konstans 'A'
int main(void)
{
char b;
int szamlalo=0;
printf("Adjon meg betuket, az 'X' jelzi a veget \n\n");
while(b != 'X'){
scanf("%c",&b);
if (b ==konstans){
szamlalo++;
}
}
printf("\n A betuk szama: %d\n",szamlalo);
return 0;
}Probaltam volna gets(b); a scanf("%c",&b); helyett,de ez a hiba jon ki:
Compiling...
yt.cpp
D:\VB6\yt\yt.cpp(17) : error C2664: 'gets' : cannot convert parameter 1 from 'char' to 'char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.
yt.obj - 1 error(s), 0 warning(s)VB 6.0 hasznalok
gets(&b)
Enter nyomás nélkül nem tudsz adatot bevinni ezekkel a fvekkel, amennyire én tudom.
-
artiny
őstag
/C/ hogyan irjuk meg olyan feladatokat amik ugy szolnak, pl. irjon programot ami addig olvas be karaktereket amig nem adjuk meg az X -et?
Ez igy helyes,kezdo szintu megoldas,
Irjon progit ami addig olvasbe karaktereket amig nem adjuk meg az X -et,majd a vegen irja ki hanyszor szerepelt az A betu a beolvasottak kozott.
A kerdesem hogy nem all meg rogton a beolvasas pedig megadtam az X -t ,csak akkor ha az entert lenyomom akkor ertekeli ki hogy megadtam e vagy nem.#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define konstans 'A'
int main(void)
{
char b;
int szamlalo=0;
printf("Adjon meg betuket, az 'X' jelzi a veget \n\n");
while(b != 'X'){
scanf("%c",&b);
if (b ==konstans){
szamlalo++;
}
}
printf("\n A betuk szama: %d\n",szamlalo);
return 0;
}Probaltam volna gets(b); a scanf("%c",&b); helyett,de ez a hiba jon ki:
Compiling...
yt.cpp
D:\VB6\yt\yt.cpp(17) : error C2664: 'gets' : cannot convert parameter 1 from 'char' to 'char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.
yt.obj - 1 error(s), 0 warning(s)VB 6.0 hasznalok
-
Jester01
veterán
Nézz utána, mi az a pointer, mi az a C string, és a kettőnek mi köze egymáshoz. Ha ennyire alap dolgokat nem tudsz, akkor sztem így fórumon nincs értelme magyarázni.
Főleg, hogy ennek olyan szaga van, hogy valakivel megíratta a tanár meg lebuktatta...
-
WonderCSabo
félisten
Sziasztok! Egy kis segítségre lenne szükségem! Nemrég kezdtem a programozást, és van egy félévi feladatom, amit el is kéne magyarázni, de az egyik részét nem igazán értem! Ez lenne az:
int ellenorzes (char *str) {
if (!str || !*str)
return 0;
char c;
while(c=*str++)
if(c<'0' || c>'9')
return 0;
return 1;
}
Ez egy telefonszám-ellenőrző program részlete, és főként az első 3 sorát nem vágom. Persze a tanár abba kérdezett bele (miért *str, miért char van előtte, mi a funkciója, mit jelent az alatta lévő sor...). Nagyon nagy segítség lenne, ha leírni vki ennek az egésznek az értelmét!
Nézz utána, mi az a pointer, mi az a C string, és a kettőnek mi köze egymáshoz. Ha ennyire alap dolgokat nem tudsz, akkor sztem így fórumon nincs értelme magyarázni.
-
vorosbv
csendes tag
Sziasztok! Egy kis segítségre lenne szükségem! Nemrég kezdtem a programozást, és van egy félévi feladatom, amit el is kéne magyarázni, de az egyik részét nem igazán értem! Ez lenne az:
int ellenorzes (char *str) {
if (!str || !*str)
return 0;
char c;
while(c=*str++)
if(c<'0' || c>'9')
return 0;
return 1;
}
Ez egy telefonszám-ellenőrző program részlete, és főként az első 3 sorát nem vágom. Persze a tanár abba kérdezett bele (miért *str, miért char van előtte, mi a funkciója, mit jelent az alatta lévő sor...). Nagyon nagy segítség lenne, ha leírni vki ennek az egésznek az értelmét!
-
Korcsii
őstag
Olyan progit akarok,ami egy kisebb szamot...harmadik gyokre emel amit beolvassunk a billentyuzetrol...de mikor megadok egy szamot...mindig ketszer keri be a szamot mire kiirja:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
int a;
scanf("%d\n",&a);
a= a*a*a;
printf("%d\n",a);
return 0;
}scanf-be nem kell \n, mivel az pont az az enter, amivel el akarnád küldeni...
-
artiny
őstag
Olyan progit akarok,ami egy kisebb szamot...harmadik gyokre emel amit beolvassunk a billentyuzetrol...de mikor megadok egy szamot...mindig ketszer keri be a szamot mire kiirja:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
int a;
scanf("%d\n",&a);
a= a*a*a;
printf("%d\n",a);
return 0;
} -
Zefír
őstag
-
kispx
addikt
Sziasztok!
Egy olyan kérdéssel fordulnék felétek, hogy szeretnék megtanulni c-nyelveken programozni, viszont jelenleg, nincsen pénzem megvenni programozó könyveket, ezért valami olyan lehetőséget keresek, ami letölthető netről, és az alapoktól bevezet a C-programozásba, ja és persze MAGYAR. A végső célom, hogy objecitve orientált programozzak, mobileszközökre szeretnék fejleszteni, ( de persze ez csak egy cél, amit kitűztem, majd idő kőzben elvállik.)Bocsánatot kérek, ha a topikban leírtátok 1000-szer, de nagyonsokszor az van, hogy megtalálok egy jó könyvet, letöltő linkel, és elavult, leszedték a szerverről, ezért szeretnék aktuális választ kapni.
Talán még az fontos lehet, hogy MAC-em van, (osx lion) bár ez nem befolyásol semmit.
Előre is hatalmas köszönet a válaszokért!!!!

Üdv: Andrew
-
Zefír
őstag
Sziasztok!
Egy olyan kérdéssel fordulnék felétek, hogy szeretnék megtanulni c-nyelveken programozni, viszont jelenleg, nincsen pénzem megvenni programozó könyveket, ezért valami olyan lehetőséget keresek, ami letölthető netről, és az alapoktól bevezet a C-programozásba, ja és persze MAGYAR. A végső célom, hogy objecitve orientált programozzak, mobileszközökre szeretnék fejleszteni, ( de persze ez csak egy cél, amit kitűztem, majd idő kőzben elvállik.)Bocsánatot kérek, ha a topikban leírtátok 1000-szer, de nagyonsokszor az van, hogy megtalálok egy jó könyvet, letöltő linkel, és elavult, leszedték a szerverről, ezért szeretnék aktuális választ kapni.
Talán még az fontos lehet, hogy MAC-em van, (osx lion) bár ez nem befolyásol semmit.
Előre is hatalmas köszönet a válaszokért!!!!

Üdv: Andrew
-
artiny
őstag
Még mindig nem sikerült összehozni? char delims[] jelen esetben ";", egy külső ciklussal soronként beolvasod a fájlt, egy belső ciklussal meg szétdarabolod ahogy a példában van írva.
igen sajnos nem sikerult...
ezert most neki allok minden fele ebooknak ami van C bol es elolvasom oket ..majd gyakorlasnak szeretnek egy feladatgyujtemenyt hogy ha nem megy a porgram akkor legalabb lassam,hogy kellet volna...
-
WonderCSabo
félisten
CSV fájl szétdarabolása strtok () függvény segítségével?
Ilyan adat szerepel a csv fájlban.akcia;action;0;0
autobus;bus;0;0
budova;building;0;0
celkom;quite;0;0
centrum;centre;0;0ezt csv fajlban hogyan kell szetdarabolni?
Beolvasas a csv fájlnak és szetdarabolas majd kiiratas..hogyan kéne?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main() {
FILE *doo = fopen("slovnik.csv", "r");
fclose(doo);
return 0;
}Strtok()
Example:
char str[] = "now # is the time for all # good men to come to the # aid of their country";
char delims[] = "#";
char *result = NULL;
result = strtok( str, delims );
while( result != NULL ) {
printf( "result is "%s"\n", result );
result = strtok( NULL, delims );
}OUTPUT:
result is "now "
result is " is the time for all "
result is " good men to come to the "
result is " aid of their country"Még mindig nem sikerült összehozni? char delims[] jelen esetben ";", egy külső ciklussal soronként beolvasod a fájlt, egy belső ciklussal meg szétdarabolod ahogy a példában van írva.
-
MacCaine
őstag
-
artiny
őstag
tudtok segiteni..egy olyan felaladgyujtemeny kene ami kezdoknek programok vannak es megoldasokkal egyutt? C ben
-
artiny
őstag
CSV fájl szétdarabolása strtok () függvény segítségével?
Ilyan adat szerepel a csv fájlban.akcia;action;0;0
autobus;bus;0;0
budova;building;0;0
celkom;quite;0;0
centrum;centre;0;0ezt csv fajlban hogyan kell szetdarabolni?
Beolvasas a csv fájlnak és szetdarabolas majd kiiratas..hogyan kéne?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main() {
FILE *doo = fopen("slovnik.csv", "r");
fclose(doo);
return 0;
}Strtok()
Example:
char str[] = "now # is the time for all # good men to come to the # aid of their country";
char delims[] = "#";
char *result = NULL;
result = strtok( str, delims );
while( result != NULL ) {
printf( "result is "%s"\n", result );
result = strtok( NULL, delims );
}OUTPUT:
result is "now "
result is " is the time for all "
result is " good men to come to the "
result is " aid of their country" -
artiny
őstag
C programot átírni, valaki megtudná csinálni?
Van egy alap program:
ez egy szotar akar lenni..
Randomban adja a magyar szavakat es angolra kell forditani. Ha nem jo akkor kiirja a helyes megoldast. MIkor kilepunk a programbol akkor irja ki azokat a szavakat amire rosszul válaszotltunk.Itt a magyar vezioja /Szaab nevű programozó érdeme/:
http://pastebin.com/ViFeNimBItt pedig a szlovak,amiben több minden meg van valositva/be van fejezve/
http://pastebin.com/jbP8N18FEzt a programot kell átiri:
Olyan feladat van,hogy az előző szótárt kell át írni,hogy ezt a fájlt CSV /ezt kell használni/ olvassa be:
http://www.mediafire.com/?057r7i17uklqi7tEl kell tárolni a helyes/nem helyes válaszok számát egy csv fájlba/azt hiszem hogy a slovnik.csv fájlba/ és dolgozni/számolni vele ha újra belép a felhasználó. A program engedélyezi/lehetővé teszi ,hogy újabb szavakat tudjon a felhasználó elmenteni a szótár fájlban és azokat abcd szerint lesznek majd sorba téve.
A baj hogy mar az elejen elakadtam...
Ha beolvasom a csv fájlt:
FILE *doo = fopen("slovnik.csv", "r");
ekkor:
hlboko;deep;0;0igy teszi ki nem pedig csak a hlboko szavat.Hogyan kell megcsinalni hogy csak a hlbko -t irja ki?
-
Jester01
veterán
Sziasztok!
Szeretnek segitseget kerni az alabbi programhoz:
#include <stdio.h>
#define TABLA_MERET 8
void futo(char tabla[TABLA_MERET][TABLA_MERET], char input[3]){
int sor, oszlop;
printf("Kerem a futo poziciojat:");
scanf("%s", input);
sor = input[1] - '1';
oszlop = input[0] - 'a';
tabla[sor][oszlop] = 'f';
}
void gyalog(char tabla[TABLA_MERET][TABLA_MERET], char input[3]) {
int sor, oszlop;
do {
printf("Kerem a gyalogok helyzetet:");
scanf("%s", input);
if (input[0] != '*') {
sor = input[1] - '1';
oszlop = input[0] - 'a';
tabla[sor][oszlop] = 'g';
}
} while (input[0] != '*');
}
void futolepes(char tabla[TABLA_MERET][TABLA_MERET]){
int i, sor, oszlop;
int bl = 0;
int bf = 0;
int jl = 0;
int jf = 0;
for (i=sor+1; i<TABLA_MERET; i++) {
//balra le
if ((oszlop+(sor-i) >= 0) && !bl) {
if (tabla[i][oszlop+(sor-i)] != 'g') {
tabla[i][oszlop+(sor-i)] = '*';
}else {
bl++;
}
}
//jobbra le
if ((oszlop-(sor-i) < TABLA_MERET) && !jl) {
if (tabla[i][oszlop-(sor-i)] != 'g') {
tabla[i][oszlop-(sor-i)] = '*';
}else {
jl++;
}
}
}
for (i=sor-1; i>-1; i--) {
//jobbra fel
if ((oszlop+(sor-i) < TABLA_MERET) && !jf) {
if (tabla[i][oszlop+(sor-i)] != 'g') {
tabla[i][oszlop+(sor-i)] = '*';
}else {
jf++;
}
}
//balra fel
if ((oszlop-(sor-i) >= 0) && !bf) {
if (tabla[i][oszlop-(sor-i)] != 'g') {
tabla[i][oszlop-(sor-i)] = '*';
}else {
bf++;
}
}
}
}
void kiir(char tabla[TABLA_MERET][TABLA_MERET]) {
int i, j;
printf("A tabla:\n");
printf("\n ");
for (i=0; i<TABLA_MERET; i++) {
printf("%c ",'A'+i);
}
printf("\n");
for (i=0; i<TABLA_MERET; i++) {
printf("%d ", i+1);
for (j=0; j<TABLA_MERET; j++) {
if (tabla[i][j] != '\0') {
printf("|%c", tabla[i][j]);
} else {
printf("|%c", '.');
}
}
printf("|\n");
}
printf("\n");
}
int main() {
char tabla[TABLA_MERET][TABLA_MERET];
int i, j;
char input[3];
for (i=0; i<TABLA_MERET; i++) {
for (j=0; j<TABLA_MERET; j++) {
tabla[i][j] = '\0';
}
}
futo(tabla, input);
gyalog(tabla, input);
futolepes(tabla);
kiir(tabla);
return 0;
}Ez igy elszall hibaval a futolepes fuggvenyben, meghozza ha minden igaz az oszlop erteke miatt. Hogy lehetne oda atadni a futo aktualis helyzetet a a futo fv-bol? tabla[sor][oszlop]
Ha a gyalog fuggveny fut le elobb, mint a futo fv, akkor jo.
koszi, udv,
Ahogy mondod

Mivel a main a kapcsolat a futo és a futolepes között, így először futo-ból kellene visszaadni a main-be, majd onnan tovább. A helyzetet bonyolítja, hogy 2 értékről van szó. Egy lehetséges megoldás ha definiálsz egy struktúrát a két értéknek és azt adogatod, valahogy így:struct pozicio
{
int sor;
int oszlop;
};
struct pozicio futo(char tabla[TABLA_MERET][TABLA_MERET], char input[3])
{
struct pozicio p;
...
return p;
}
...
void futolepes(char tabla[TABLA_MERET][TABLA_MERET], struct pozicio p)
{
...
}
...
int main()
{
struct pozicio p;
...
p = futo(tabla, input);
gyalog(tabla, input);
futolepes(tabla, p);
...
}A naív megoldás persze a globális változók használata lenne, de az általában nem ajánlott.
-
e=mc²
őstag
Sziasztok!
Szeretnek segitseget kerni az alabbi programhoz:
#include <stdio.h>
#define TABLA_MERET 8
void futo(char tabla[TABLA_MERET][TABLA_MERET], char input[3]){
int sor, oszlop;
printf("Kerem a futo poziciojat:");
scanf("%s", input);
sor = input[1] - '1';
oszlop = input[0] - 'a';
tabla[sor][oszlop] = 'f';
}
void gyalog(char tabla[TABLA_MERET][TABLA_MERET], char input[3]) {
int sor, oszlop;
do {
printf("Kerem a gyalogok helyzetet:");
scanf("%s", input);
if (input[0] != '*') {
sor = input[1] - '1';
oszlop = input[0] - 'a';
tabla[sor][oszlop] = 'g';
}
} while (input[0] != '*');
}
void futolepes(char tabla[TABLA_MERET][TABLA_MERET]){
int i, sor, oszlop;
int bl = 0;
int bf = 0;
int jl = 0;
int jf = 0;
for (i=sor+1; i<TABLA_MERET; i++) {
//balra le
if ((oszlop+(sor-i) >= 0) && !bl) {
if (tabla[i][oszlop+(sor-i)] != 'g') {
tabla[i][oszlop+(sor-i)] = '*';
}else {
bl++;
}
}
//jobbra le
if ((oszlop-(sor-i) < TABLA_MERET) && !jl) {
if (tabla[i][oszlop-(sor-i)] != 'g') {
tabla[i][oszlop-(sor-i)] = '*';
}else {
jl++;
}
}
}
for (i=sor-1; i>-1; i--) {
//jobbra fel
if ((oszlop+(sor-i) < TABLA_MERET) && !jf) {
if (tabla[i][oszlop+(sor-i)] != 'g') {
tabla[i][oszlop+(sor-i)] = '*';
}else {
jf++;
}
}
//balra fel
if ((oszlop-(sor-i) >= 0) && !bf) {
if (tabla[i][oszlop-(sor-i)] != 'g') {
tabla[i][oszlop-(sor-i)] = '*';
}else {
bf++;
}
}
}
}
void kiir(char tabla[TABLA_MERET][TABLA_MERET]) {
int i, j;
printf("A tabla:\n");
printf("\n ");
for (i=0; i<TABLA_MERET; i++) {
printf("%c ",'A'+i);
}
printf("\n");
for (i=0; i<TABLA_MERET; i++) {
printf("%d ", i+1);
for (j=0; j<TABLA_MERET; j++) {
if (tabla[i][j] != '\0') {
printf("|%c", tabla[i][j]);
} else {
printf("|%c", '.');
}
}
printf("|\n");
}
printf("\n");
}
int main() {
char tabla[TABLA_MERET][TABLA_MERET];
int i, j;
char input[3];
for (i=0; i<TABLA_MERET; i++) {
for (j=0; j<TABLA_MERET; j++) {
tabla[i][j] = '\0';
}
}
futo(tabla, input);
gyalog(tabla, input);
futolepes(tabla);
kiir(tabla);
return 0;
}Ez igy elszall hibaval a futolepes fuggvenyben, meghozza ha minden igaz az oszlop erteke miatt. Hogy lehetne oda atadni a futo aktualis helyzetet a a futo fv-bol? tabla[sor][oszlop]
Ha a gyalog fuggveny fut le elobb, mint a futo fv, akkor jo.
koszi, udv,
-
vanek
tag
Nem tudom, hogy hova masolod ki, nekem Notepad++-ba, meg vim-be is 3 szokoz maradt.

A kolleganak tovabbra is ajanlom, hogy ha nem is kabinetes gepen irja meg, de mindenkepp ott forditsa es ellenorizze a progit, mert ott azonnal kitunt, hogy tobb szokoz van a kelletenel s a Bironal is valszeg ezert hasal el.
valahogy nem töltöttem fel..

mikor most átnéztem a programom már kitöröltem a 3 spacet..+ az egyik \n-t
ma feltöltöttem és minden jó! 
nagyon szépen köszönök minden segítséget!!
jövök mindenkinek egy sörrel!

-
birno
addikt
Nem tudom, hogy hova masolod ki, nekem Notepad++-ba, meg vim-be is 3 szokoz maradt.

A kolleganak tovabbra is ajanlom, hogy ha nem is kabinetes gepen irja meg, de mindenkepp ott forditsa es ellenorizze a progit, mert ott azonnal kitunt, hogy tobb szokoz van a kelletenel s a Bironal is valszeg ezert hasal el.
-
Jester01
veterán
-
birno
addikt
-
vanek
tag
-
Jester01
veterán
-
vanek
tag
-
Jester01
veterán
-
vanek
tag
-
Jester01
veterán
A lineáris algebrából jól ismert linearis diofantoszi egyenlet megoldásának a megvalósítása a feladat.
Tekintsük a lineáris difantoszi egyenleteket a következő alakban:
ax - by = c , ahol a, b, c eleme Z+
Ekkor keressük azt az x, y egész számpárt, amely a legkisebb nem negatív megoldása az egyenletnek,
amennyiben létezik megoldás. Ennek menete a következő: d = lnko(a, b), ahol a = d * av, b = d * bv
és c = d * cv. Ha c nem osztható d-vel, akkor nincs megoldás, különben oldjuk meg az av *x0+bv * y0 = 1
egyenletet az egész számok halmazán az euklideszi algotritmussal (az lnko-t is ezzel tudjuk kiszámolni).
Pl.: 1027 * x0 + 712 * y0 = 1 esetén1027 = 712 * 1 + 315
712 = 315 * 2 + 82
315 = 82 * 3 + 69
82 = 69 * 1 + 13
69 = 13 * 5 + 4
13 = 4 * 3 + 10 + 1 * 3 = 3;
1 + 3 * 5 = 16;
3 + 16 * 1 = 19;
16 + 19 * 3 = 73;
19 + 73 * 2 = 165;
73 + 165 * 1 = 238;A második részt az első részben kapott számok segítségével számolva végül megkapjuk a két számot: 165
és 238. Ez után ki kell próbálni, hogy mi lehet a két szám előjele (4 variáció). Majd ha az előző megoldás
volt av * x+bv * y = 1 -re, akkor av * x0 - bv * (-y0) = 1 lesz, ami nekünk kell. Végül az eredeti egyenlet
megoldását kapjuk, ha vissza szorzunk cv * d-vel:av * x0 - bv * (-y0) = 1
av * x0 * cv - bv * (-y0) * cv = cv
d * av * x0 * cv - d * bv * -y0 * cv = a * (x0 * cv) - b * (-y0 * cv) = c = d * cvTehát x = x0 * cv és y = -y0 * cv megoldás, de nem feltétlenül a két legkisebb nemnegatív, tehát ezt még
meg kell keresni: x- = k * bv és y- = k * av mind megoldások bármely k eleme Z-re. Keresd meg a megfelelő
k-t és kész vagy.Bemenet: be.txt a, b, c
Kimenet: ki.txt x, yPl:
Be: 53,8,64
Ki: 8,45Be: 516,390,564
Ki: 54,70A bemásolt kiírásban a számokat a bemenetben és a kimenetben egyaránt vessző választja el, a programod viszont szóközt (whitespace) használ. Feltehetőleg a bíró is ezért nem fogadja el.
-
vanek
tag
A lineáris algebrából jól ismert linearis diofantoszi egyenlet megoldásának a megvalósítása a feladat.
Tekintsük a lineáris difantoszi egyenleteket a következő alakban:
ax - by = c , ahol a, b, c eleme Z+
Ekkor keressük azt az x, y egész számpárt, amely a legkisebb nem negatív megoldása az egyenletnek,
amennyiben létezik megoldás. Ennek menete a következő: d = lnko(a, b), ahol a = d * av, b = d * bv
és c = d * cv. Ha c nem osztható d-vel, akkor nincs megoldás, különben oldjuk meg az av *x0+bv * y0 = 1
egyenletet az egész számok halmazán az euklideszi algotritmussal (az lnko-t is ezzel tudjuk kiszámolni).
Pl.: 1027 * x0 + 712 * y0 = 1 esetén1027 = 712 * 1 + 315
712 = 315 * 2 + 82
315 = 82 * 3 + 69
82 = 69 * 1 + 13
69 = 13 * 5 + 4
13 = 4 * 3 + 10 + 1 * 3 = 3;
1 + 3 * 5 = 16;
3 + 16 * 1 = 19;
16 + 19 * 3 = 73;
19 + 73 * 2 = 165;
73 + 165 * 1 = 238;A második részt az első részben kapott számok segítségével számolva végül megkapjuk a két számot: 165
és 238. Ez után ki kell próbálni, hogy mi lehet a két szám előjele (4 variáció). Majd ha az előző megoldás
volt av * x+bv * y = 1 -re, akkor av * x0 - bv * (-y0) = 1 lesz, ami nekünk kell. Végül az eredeti egyenlet
megoldását kapjuk, ha vissza szorzunk cv * d-vel:av * x0 - bv * (-y0) = 1
av * x0 * cv - bv * (-y0) * cv = cv
d * av * x0 * cv - d * bv * -y0 * cv = a * (x0 * cv) - b * (-y0 * cv) = c = d * cvTehát x = x0 * cv és y = -y0 * cv megoldás, de nem feltétlenül a két legkisebb nemnegatív, tehát ezt még
meg kell keresni: x- = k * bv és y- = k * av mind megoldások bármely k eleme Z-re. Keresd meg a megfelelő
k-t és kész vagy.Bemenet: be.txt a, b, c
Kimenet: ki.txt x, yPl:
Be: 53,8,64
Ki: 8,45Be: 516,390,564
Ki: 54,70aztan rájöttem, hogy a 0ra nem kell, mivel abc eleme Z+..
-
vanek
tag
A lineáris algebrából jól ismert linearis diofantoszi egyenlet megoldásának a megvalósítása a feladat.
Tekintsük a lineáris difantoszi egyenleteket a következő alakban:
ax - by = c , ahol a, b, c eleme Z+
Ekkor keressük azt az x, y egész számpárt, amely a legkisebb nem negatív megoldása az egyenletnek,
amennyiben létezik megoldás. Ennek menete a következő: d = lnko(a, b), ahol a = d * av, b = d * bv
és c = d * cv. Ha c nem osztható d-vel, akkor nincs megoldás, különben oldjuk meg az av *x0+bv * y0 = 1
egyenletet az egész számok halmazán az euklideszi algotritmussal (az lnko-t is ezzel tudjuk kiszámolni).
Pl.: 1027 * x0 + 712 * y0 = 1 esetén1027 = 712 * 1 + 315
712 = 315 * 2 + 82
315 = 82 * 3 + 69
82 = 69 * 1 + 13
69 = 13 * 5 + 4
13 = 4 * 3 + 10 + 1 * 3 = 3;
1 + 3 * 5 = 16;
3 + 16 * 1 = 19;
16 + 19 * 3 = 73;
19 + 73 * 2 = 165;
73 + 165 * 1 = 238;A második részt az első részben kapott számok segítségével számolva végül megkapjuk a két számot: 165
és 238. Ez után ki kell próbálni, hogy mi lehet a két szám előjele (4 variáció). Majd ha az előző megoldás
volt av * x+bv * y = 1 -re, akkor av * x0 - bv * (-y0) = 1 lesz, ami nekünk kell. Végül az eredeti egyenlet
megoldását kapjuk, ha vissza szorzunk cv * d-vel:av * x0 - bv * (-y0) = 1
av * x0 * cv - bv * (-y0) * cv = cv
d * av * x0 * cv - d * bv * -y0 * cv = a * (x0 * cv) - b * (-y0 * cv) = c = d * cvTehát x = x0 * cv és y = -y0 * cv megoldás, de nem feltétlenül a két legkisebb nemnegatív, tehát ezt még
meg kell keresni: x- = k * bv és y- = k * av mind megoldások bármely k eleme Z-re. Keresd meg a megfelelő
k-t és kész vagy.Bemenet: be.txt a, b, c
Kimenet: ki.txt x, yPl:
Be: 53,8,64
Ki: 8,45Be: 516,390,564
Ki: 54,70 -
Jester01
veterán
közben letelt a határidő..
de van más problémám is..
szóval a feladatom a lineáris diofantoszi egyenlet..
próbálkoztam a megírásával..de nem sokáig jutottam..a legnagyobb közös többszörös még ment..de utána már problémám volt...be kell vallani, hogy nem könnyű program..
szerencsémre, vagy nem..de véletlen rátaláltam a kész programra..igaz, nem volt nehéz, mivel csak be kellett írnom..nah de a lényeg, hogy ,tanulva a hibámból megnéztem a példában szereplő példákat és mindegyik a helyes eredményt adja vissza..
#include <stdio.h>
#include <stdlib.h>
#define HAMIS 0
#define IGAZ 1
int lnko(int x, int y) {
int maradek;
int temp;
if (y > x) {
temp = y;
y = x;
x = temp;
}
maradek = y;
while (y != 0) {
if ((x % y) == 0) {
break;
}
maradek = x % y;
x = y;
y = maradek;
}
return maradek;
}
void euklidesziAlg(int av, int bv, int* x0, int* y0) {
int i;
int szorzo[100];
int darab = 0;
int maradek;
int temp;
int avSeged;
int bvSeged;
int x0Seged;
int y0Seged;
int voltCsere = HAMIS;
avSeged = av;
bvSeged = bv;
if (bv > av) {
temp = bvSeged;
bvSeged = avSeged;
avSeged = temp;
voltCsere = IGAZ;
}
if (bvSeged != 1) {
do {
szorzo[darab] = avSeged / bvSeged;
maradek = avSeged % bvSeged;
avSeged = bvSeged;
bvSeged = maradek;
darab++;
} while (maradek != 1);
maradek = 0;
x0Seged = 1;
for (i = darab-1; i >= 0; i--) {
y0Seged = maradek + x0Seged * szorzo[i];
if (i > 0) {
maradek = x0Seged;
x0Seged = y0Seged;
}
}
} else {
x0Seged = 1;
y0Seged = 1 - avSeged;
}
if (voltCsere) {
temp = y0Seged;
y0Seged = x0Seged;
x0Seged = temp;
}
if (-av*x0Seged + bv*y0Seged == 1) {
x0Seged *= -1;
} else if (av*x0Seged - bv*y0Seged == 1) {
y0Seged *= -1;
} else if (-av*x0Seged - bv*y0Seged == 1) {
x0Seged *= -1;
y0Seged *= -1;
}
*x0 = x0Seged;
*y0 = -y0Seged;
}
int main() {
FILE *f, *fk;
int a;
int b;
int c;
int d;
int av;
int bv;
int cv;
int x0;
int y0;
int x;
int y;
int teszt;
f=fopen("be.txt", "r");
fk=fopen("ki.txt", "w");
if(f==NULL)
{
exit (-1);
}
teszt=fscanf(f, "%d %d %d", &a, &b, &c);
if(teszt!=3)
{
fprintf(fk, "0\n");
}
else
{
d = lnko(a, b);
av = a / d;
bv = b / d;
cv = c / d;
if (c % d == 0) {
euklidesziAlg(av, bv, &x0, &y0);
x = x0 * cv;
y = y0 * cv;
while (x < 0 || y < 0) {
x += bv;
y += av;
}
while (x-bv >= 0 && y-av >= 0) {
x -= bv;
y -= av;
}
fprintf(fk,"%d %d\n\n", x, y);
}
else {
fprintf(fk, "0\n");
}
fclose(f);
fclose(fk);
return 0;
getchar();
}
}de ha feltöltöm a bíróra..nincs helyes eredmény..
lehet, hogy a nagy zűrzavarban félrenéztem valamit..
tudom, hogy így csak nekem lesz nehezebb a vizsga..de hátha tanulok belőle..
köszi előre is!
Ettől a kódtól megint fejfájást lehet kapni

Viszont legalább teljes, fordítható program
Már csak a feladat specifikáció hiányzik ... -
vanek
tag
közben letelt a határidő..
de van más problémám is..
szóval a feladatom a lineáris diofantoszi egyenlet..
próbálkoztam a megírásával..de nem sokáig jutottam..a legnagyobb közös többszörös még ment..de utána már problémám volt...be kell vallani, hogy nem könnyű program..
szerencsémre, vagy nem..de véletlen rátaláltam a kész programra..igaz, nem volt nehéz, mivel csak be kellett írnom..nah de a lényeg, hogy ,tanulva a hibámból megnéztem a példában szereplő példákat és mindegyik a helyes eredményt adja vissza..
#include <stdio.h>
#include <stdlib.h>
#define HAMIS 0
#define IGAZ 1
int lnko(int x, int y) {
int maradek;
int temp;
if (y > x) {
temp = y;
y = x;
x = temp;
}
maradek = y;
while (y != 0) {
if ((x % y) == 0) {
break;
}
maradek = x % y;
x = y;
y = maradek;
}
return maradek;
}
void euklidesziAlg(int av, int bv, int* x0, int* y0) {
int i;
int szorzo[100];
int darab = 0;
int maradek;
int temp;
int avSeged;
int bvSeged;
int x0Seged;
int y0Seged;
int voltCsere = HAMIS;
avSeged = av;
bvSeged = bv;
if (bv > av) {
temp = bvSeged;
bvSeged = avSeged;
avSeged = temp;
voltCsere = IGAZ;
}
if (bvSeged != 1) {
do {
szorzo[darab] = avSeged / bvSeged;
maradek = avSeged % bvSeged;
avSeged = bvSeged;
bvSeged = maradek;
darab++;
} while (maradek != 1);
maradek = 0;
x0Seged = 1;
for (i = darab-1; i >= 0; i--) {
y0Seged = maradek + x0Seged * szorzo[i];
if (i > 0) {
maradek = x0Seged;
x0Seged = y0Seged;
}
}
} else {
x0Seged = 1;
y0Seged = 1 - avSeged;
}
if (voltCsere) {
temp = y0Seged;
y0Seged = x0Seged;
x0Seged = temp;
}
if (-av*x0Seged + bv*y0Seged == 1) {
x0Seged *= -1;
} else if (av*x0Seged - bv*y0Seged == 1) {
y0Seged *= -1;
} else if (-av*x0Seged - bv*y0Seged == 1) {
x0Seged *= -1;
y0Seged *= -1;
}
*x0 = x0Seged;
*y0 = -y0Seged;
}
int main() {
FILE *f, *fk;
int a;
int b;
int c;
int d;
int av;
int bv;
int cv;
int x0;
int y0;
int x;
int y;
int teszt;
f=fopen("be.txt", "r");
fk=fopen("ki.txt", "w");
if(f==NULL)
{
exit (-1);
}
teszt=fscanf(f, "%d %d %d", &a, &b, &c);
if(teszt!=3)
{
fprintf(fk, "0\n");
}
else
{
d = lnko(a, b);
av = a / d;
bv = b / d;
cv = c / d;
if (c % d == 0) {
euklidesziAlg(av, bv, &x0, &y0);
x = x0 * cv;
y = y0 * cv;
while (x < 0 || y < 0) {
x += bv;
y += av;
}
while (x-bv >= 0 && y-av >= 0) {
x -= bv;
y -= av;
}
fprintf(fk,"%d %d\n\n", x, y);
}
else {
fprintf(fk, "0\n");
}
fclose(f);
fclose(fk);
return 0;
getchar();
}
}de ha feltöltöm a bíróra..nincs helyes eredmény..
lehet, hogy a nagy zűrzavarban félrenéztem valamit..
tudom, hogy így csak nekem lesz nehezebb a vizsga..de hátha tanulok belőle..
köszi előre is!
még valami..ha 0 van a be.txt fájlba..kiakad a program..:\
-
vanek
tag
Bocs, nem tudok olvasni. Se.
közben letelt a határidő..
de van más problémám is..
szóval a feladatom a lineáris diofantoszi egyenlet..
próbálkoztam a megírásával..de nem sokáig jutottam..a legnagyobb közös többszörös még ment..de utána már problémám volt...be kell vallani, hogy nem könnyű program..
szerencsémre, vagy nem..de véletlen rátaláltam a kész programra..igaz, nem volt nehéz, mivel csak be kellett írnom..nah de a lényeg, hogy ,tanulva a hibámból megnéztem a példában szereplő példákat és mindegyik a helyes eredményt adja vissza..
#include <stdio.h>
#include <stdlib.h>
#define HAMIS 0
#define IGAZ 1
int lnko(int x, int y) {
int maradek;
int temp;
if (y > x) {
temp = y;
y = x;
x = temp;
}
maradek = y;
while (y != 0) {
if ((x % y) == 0) {
break;
}
maradek = x % y;
x = y;
y = maradek;
}
return maradek;
}
void euklidesziAlg(int av, int bv, int* x0, int* y0) {
int i;
int szorzo[100];
int darab = 0;
int maradek;
int temp;
int avSeged;
int bvSeged;
int x0Seged;
int y0Seged;
int voltCsere = HAMIS;
avSeged = av;
bvSeged = bv;
if (bv > av) {
temp = bvSeged;
bvSeged = avSeged;
avSeged = temp;
voltCsere = IGAZ;
}
if (bvSeged != 1) {
do {
szorzo[darab] = avSeged / bvSeged;
maradek = avSeged % bvSeged;
avSeged = bvSeged;
bvSeged = maradek;
darab++;
} while (maradek != 1);
maradek = 0;
x0Seged = 1;
for (i = darab-1; i >= 0; i--) {
y0Seged = maradek + x0Seged * szorzo[i];
if (i > 0) {
maradek = x0Seged;
x0Seged = y0Seged;
}
}
} else {
x0Seged = 1;
y0Seged = 1 - avSeged;
}
if (voltCsere) {
temp = y0Seged;
y0Seged = x0Seged;
x0Seged = temp;
}
if (-av*x0Seged + bv*y0Seged == 1) {
x0Seged *= -1;
} else if (av*x0Seged - bv*y0Seged == 1) {
y0Seged *= -1;
} else if (-av*x0Seged - bv*y0Seged == 1) {
x0Seged *= -1;
y0Seged *= -1;
}
*x0 = x0Seged;
*y0 = -y0Seged;
}
int main() {
FILE *f, *fk;
int a;
int b;
int c;
int d;
int av;
int bv;
int cv;
int x0;
int y0;
int x;
int y;
int teszt;
f=fopen("be.txt", "r");
fk=fopen("ki.txt", "w");
if(f==NULL)
{
exit (-1);
}
teszt=fscanf(f, "%d %d %d", &a, &b, &c);
if(teszt!=3)
{
fprintf(fk, "0\n");
}
else
{
d = lnko(a, b);
av = a / d;
bv = b / d;
cv = c / d;
if (c % d == 0) {
euklidesziAlg(av, bv, &x0, &y0);
x = x0 * cv;
y = y0 * cv;
while (x < 0 || y < 0) {
x += bv;
y += av;
}
while (x-bv >= 0 && y-av >= 0) {
x -= bv;
y -= av;
}
fprintf(fk,"%d %d\n\n", x, y);
}
else {
fprintf(fk, "0\n");
}
fclose(f);
fclose(fk);
return 0;
getchar();
}
}de ha feltöltöm a bíróra..nincs helyes eredmény..
lehet, hogy a nagy zűrzavarban félrenéztem valamit..
tudom, hogy így csak nekem lesz nehezebb a vizsga..de hátha tanulok belőle..
köszi előre is!
-
WonderCSabo
félisten
Bocs, nem tudok olvasni. Se.
-
Jester01
veterán
Ja igen. Akkor működik, ha a második sor az uccsó.
És ez volt a specifikáció. 
Tévedés:
A bemenet két sorból áll. Mindkét sorban egy-egy szóközt nem tartalmazó, legalább egy de maximum 255 karakter hosszú sztring található, melyeket rögtön sorvégejel követ.
Mind a két sor végén kellene \n legyen. És akkor már nem működik.
-
WonderCSabo
félisten
Nekem nem. Hol vágja le a sorvég jelet amit az fgets beolvas?
(gdb)
40 fgets(s,256,f);
(gdb)
41 fgets(d,256,f);
(gdb)
43 kimenet=vizsgal(s,d);
(gdb) x/s s
0x7fffffffe5d0: "abrakadabra\n"
(gdb) x/s d
0x7fffffffe4d0: "rak\n"A vizsgal függvénynek meg kutya kötelessége az egész stringet nézni a lezáró 0-ig, vagyis a \n-t is. Így pedig csak a sor végén fog egyezni.
255-nél hosszabbra nem is kell működnie, de ez már 255-re sem működik, amire még kellene. A tesztelő meg lehet, hogy gonosz módon ki is próbálja azt.
Ja igen. Akkor működik, ha a második sor az uccsó.
És ez volt a specifikáció. 
-
birno
addikt
Becopyznád a jelenlegi teljes programodat?
Mert en most megneztem az eredeti kododdal, meg a javitasokkal is, de mar a linkelt pdf-ben szereplo peldat hasznalva is helytelen eredmenyt ad...
Meg milyen kornyezetben probaltad te ezt?
En egy kabinetes gepen futtattam s ott adott vissza rosszat s ugye a Biro is ugyanilyen kornyezetben futtattja majd.Szerk: Latom Jester01 megelozott.

-
Jester01
veterán
Ezáltal egyfelől csak akkor találod meg a dolgokat ha az éppen a sor végén van
Miért is? Én lefuttattam a progit a kijavított keresőfv-el, megtalált mindent, ezzel nem volt gond. Nyilván 255-nél hosszabb stringekre nem próbáltam meg.
Egyébként a maint nem nagyon néztem, csak az algoritmust.

Nekem nem. Hol vágja le a sorvég jelet amit az fgets beolvas?
(gdb)
40 fgets(s,256,f);
(gdb)
41 fgets(d,256,f);
(gdb)
43 kimenet=vizsgal(s,d);
(gdb) x/s s
0x7fffffffe5d0: "abrakadabra\n"
(gdb) x/s d
0x7fffffffe4d0: "rak\n"A vizsgal függvénynek meg kutya kötelessége az egész stringet nézni a lezáró 0-ig, vagyis a \n-t is. Így pedig csak a sor végén fog egyezni.
255-nél hosszabbra nem is kell működnie, de ez már 255-re sem működik, amire még kellene. A tesztelő meg lehet, hogy gonosz módon ki is próbálja azt.
-
WonderCSabo
félisten
Ez nagyon kreatívan megírt program. Ha ember bírálná el, nem sok jó származna belőle.
Mindenesetre a baj az fgets körül lehet, az ugyanis eltárolja a sorvég jelet is. Ezáltal egyfelől csak akkor találod meg a dolgokat ha az éppen a sor végén van, másfelől pedig a 255 hosszú sorokon elcsúszik a feldolgozás (és onnan már nem is jön helyre). Jelen formájában a feladatkiírásban lévő példára sem működik, nem értem ezt hogy nem vetted észre.
Ezáltal egyfelől csak akkor találod meg a dolgokat ha az éppen a sor végén van
Miért is? Én lefuttattam a progit a kijavított keresőfv-el, megtalált mindent, ezzel nem volt gond. Nyilván 255-nél hosszabb stringekre nem próbáltam meg.
Egyébként a maint nem nagyon néztem, csak az algoritmust.

-
Jester01
veterán
Van egy programom..amely sztringet keres egy adott sztringben..
a problémám, hogy mikor beadom a programot a netes program tesztelőbe, akkor 5 pontra azt írja ki, hogy hibás eredmény..gondolom 5 példa hibás..de sajnos nem tudok rájönni, hogy milyen fajta példák lehetnek azok..
a programom..
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int vizsgal(char s1[], char d1[])
{
int i,j;
for(i=0; i<strlen(s1); i++)
{
if (s1[i]==d1[0])
{
for(j=1;j<strlen(d1);j++)
{
if ((s1[i+j]!=d1[j]) || ((i+j)>strlen(s1)-1)) break;
if (j==strlen(d1)-1) return i;
}
if (strlen(d1)==1) return i;
}
}
return -1;
}
int main()
{
FILE *f,*fk;
char s[256],d[256],e[261];
char ch;
int i,j,kimenet=0;
fk=fopen("ki.txt", "wt");
f=fopen("be.txt", "rt");
if(f==NULL)
{
exit(-1);
}
fgets(s,256,f);
fgets(d,256,f);
kimenet=vizsgal(s,d);
printf("%i",kimenet);
if (kimenet!=-1)
{
strcpy(e,"IGEN ");
for (i=0;i<kimenet;i++)
{
e[i+5]=s[i];
}
e[kimenet+5]='\n';
for (j=0;j<=kimenet+5;j++)
{
fputc(e[j],fk);
}
}else {
strcpy(e,"NEM");
for (j=0;j<3;j++)
{
fputc(e[j],fk);
}
e[3]='\n';
fputc(e[3],fk);
}
fclose(f);
fclose(fk);
return 0;
}köszi előre is
Ez nagyon kreatívan megírt program. Ha ember bírálná el, nem sok jó származna belőle.
Mindenesetre a baj az fgets körül lehet, az ugyanis eltárolja a sorvég jelet is. Ezáltal egyfelől csak akkor találod meg a dolgokat ha az éppen a sor végén van, másfelől pedig a 255 hosszú sorokon elcsúszik a feldolgozás (és onnan már nem is jön helyre). Jelen formájában a feladatkiírásban lévő példára sem működik, nem értem ezt hogy nem vetted észre.
-
WonderCSabo
félisten
Megírtam egy picit más megközelítéssel. Nem lehet, hogy a mainben rossz vmi? Én most már fáradt vagyok elemezni ezt a bonyolult problémát.

int vizsgal(char s1[], char d1[])
{
int i, j;
int b = 1;
for(i = 0; i<= strlen(s1)-strlen(d1); ++i)
{
for(j=0; j < strlen(d1); ++j)
{
if(s1[i+j-1] != d1[j])
{
b = 0;
break;
}
else
b = 1;
}
if(b)
return i-1;
}
return i-1;
}
Új hozzászólás Aktív témák
-
3100 - 3001
6397 - 6001 6000 - 5901 5900 - 5801 5800 - 5701 5700 - 5601 5600 - 5501 5500 - 5401 5400 - 5301 5300 - 5201 5200 - 5101 5100 - 5001 5000 - 4901 4900 - 4801 4800 - 4701 4700 - 4601 4600 - 4501 4500 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- új 0 km es garanciás lenovo loq rtx 5050 8gb
- Eladó teljesen újszerű karcmentes Samsung Galaxy Watch Ultra
- DDR4 memóriák eladóak
- Hihetetlen Gaming PC brutális specifikációkkal! A dán Topdata.dk IT-cég által összerakva
- 2.5" 100% noti HDD-k Western Digital, Seagate 320Gb (3k) +1Tb (15k) van 1db SSHD is (15k)
- Sosemhasznált! HP OmniBook 5 Flip i5-1334U 16GB 1000GB 14" FHD+ áthajtós-érintős Gar.: 1 év
- BESZÁMÍTÁS! Nintendo Switch V2 64GB játékkonzol sok extrával garanciával hibátlan működéssel
- BESZÁMÍTÁS! ASRock X570 R7 5700X 32GB DDR4 1TB SSD RTX 4070 12GB Zalman S2 TG ADATA 750W
- Apple iPhone 13 128GB, Kártyafüggetlen, 1 Év Garanciával
- HPE ProLiant 32GB DDR4 ML350 Gen9 Hot Plug 8SFF Rack Szerver! x2 XEON + HDD
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

Neki kutya kötelessége, ha én azt mondom.




most már megírni /talán jól is 






