Új hozzászólás Aktív témák
-
artiny
őstag
válasz Korcsii #3050 üzenetére
(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
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.
[ Szerkesztve ]
-
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.
Jester
-
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))
-
kingabo
ő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)[ Szerkesztve ]
-
artiny
őstag
válasz kingabo #3057 üzenetére
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?
[ Szerkesztve ]
-
kingabo
ő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![ Szerkesztve ]
-
artiny
őstag
válasz kingabo #3061 üzenetére
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
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
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.[ Szerkesztve ]
-
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);
}[ Szerkesztve ]
-
Jester01
veterán
-
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!
-
Sk8erPeter
nagyúr
válasz kovacsakos91 #3069 üzenetére
Sk8erPeter
-
Sk8erPeter
nagyúr
-
kovacsakos91
csendes tag
válasz Sk8erPeter #3070 üzenetére
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
válasz kovacsakos91 #3072 üzenetére
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.Sk8erPeter
-
kispx
addikt
válasz kovacsakos91 #3069 üzenetére
-
kovacsakos91
csendes tag
válasz Sk8erPeter #3073 üzenetére
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.
-
Karma
félisten
válasz kovacsakos91 #3072 üzenetére
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ó.
[ Szerkesztve ]
“All nothings are not equal.”
-
kispx
addikt
válasz kovacsakos91 #3076 üzenetére
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.
-
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
[ Szerkesztve ]
-
Karma
félisten
válasz kovacsakos91 #3080 üzenetére
Sajnos nem tudom, én amikor használtam könyvtárból vettem ki, úgy hét éve Kecskeméten
“All nothings are not equal.”
-
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?[ Szerkesztve ]
Erkölcstelen csíkot húzni a másik krumplifőzelékébe csak azért, hogy legyen egy szünet.
-
Jester01
veterán
válasz Rickazoid #3085 üzenetére
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).
Jester
-
Rickazoid
addikt
-
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. -
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,[ Szerkesztve ]
-
bpx
őstag
válasz hruodnand #3090 üzenetére
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[ Szerkesztve ]
-
hruodnand
senior tag
Szia!
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.
-
kingabo
őstag
Ú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. -
kispx
addikt
válasz hruodnand #3095 üzenetére
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.[ Szerkesztve ]
-
-
hruodnand
senior tag
válasz Jester01 #3098 üzenetére
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?
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Azonnali VGA-s kérdések órája
- Windows 11
- Magga: PLEX: multimédia az egész lakásban
- Székesfehérvár és környéke adok-veszek-beszélgetek
- Facebook és Messenger
- Autós topik
- Mozilla Firefox
- HP notebook topic
- Azonnali informatikai kérdések órája
- A Gigabyte is visszaveszi alaplapjainak alapértelmezett tuningját
- További aktív témák...
- LG NanoCell 55NANO766QA Halvány píxel csík
- Philips 58PUS8545/12 1 ÉV GARANCIA Játék üzemmód
- Tyű-ha! HP EliteBook 850 G7 Fémházas Szuper Strapabíró Laptop 15,6" -65% i7-10610U 32/512 FHD HUN
- Bomba ár! HP EliteBook 840 G5 - i5-8G I 8GB I 128GB SSD I 14" FHD I HDMI I Cam I W10 I Gari!
- The Last of Us Part I Ps5