- Mindenki Z Fold7-et akar
- iPhone topik
- Bemutatkozott a Poco X7 és X7 Pro
- Samsung Galaxy A54 - türelemjáték
- Hivatalosan is bemutatta a Google a Pixel 6a-t
- Kikristályosodik a Razr 60
- Samsung Galaxy A53 5G - kevesebbet többért
- Magisk
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
Hirdetés
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!
-
Mobilarena
Új hozzászólás Aktív témák
-
Jester01
veterán
-
Jester01
veterán
-
Jester01
veterán
válasz
emitter #1138 üzenetére
Igen, ez pontosan ezt jelenti
Amit te írtál, az sajnos azt jelentené, hogy csak átlósan menne tovább, hiszen megköveteled, hogy i és j sem nulla. Amit én írtam, az a !(i == 0 && j== 0) átalakítása a De Morgan azonosság szerint. Lehet, hogy ebben a formában érthetõbb lett volna, bocs
MOD: Amúgy ezt meg lehet spórolni, ha elõre felveszed mind a 8 lehetséges elmozdulásvektort és simán egy ciklusban mész végig rajtuk.[Szerkesztve]
-
Jester01
veterán
válasz
emitter #1134 üzenetére
kicsit bonyolultabb a helyzet, mint gondoljátok
Nagyképűség be: Szerintem mi remekül átlátjuk a helyzetet
Van ilyen egyáltalán?
Nincs. De magadnak ellenőrizheted.int mx, my; /* palya meret */
int x, y; /* ennek a szomszedait keressuk */
for(int dx = -1; dx <= 1; dx++)
{
for(int dy = -1; dy <= 1; dy++)
{
int cx = x + dx;
int cy = y + dy;
if ((dx != 0 || dy != 0) && cx >= 0 && cx < mx && cy >= 0 && cy < my)
{
...
}
}
}
Nyilván külön függvénybe is teheted az ellenőrzést, és akkor még szebb lesz.
MOD: A cx kiszámítását és ellenőrzését persze az y cikluson kívülre is lehet tenni, úgy gyorsabb lesz[Szerkesztve]
-
Jester01
veterán
válasz
emitter #1129 üzenetére
Rögvest három probléma is van vele, de fagyasztani elvileg csak az egyik fagyaszt. De a végtelen ciklus egyébként is garantált
if(y==0) //ha a legfelsõ sorban vagyunk
{
if(mezo[x][y-1].akna==0)
Ez nagyon egészségtelen. -1 lesz az index. Bye-bye ...
MOD: ebbõl van több is. Nem lenne egyszerûbb, ha mindig kiszámolnád mind a nyolc szomszéd koordinátáját, és egyszerûen ellenõriznéd, hogy a pályán belülre esik-e?
Második probléma, hogy nem ellenõrzöd merre jártál már.
A harmadik pedig alapvetõ koncepciós probléma: nem azt kell nézni, hogy az adott mezõn van-e akna, hanem azt, hogy az adott mezõ szomszédain van-e akna. Csak akkor szabad továbbmenni, ha egyik szomszédján sincs.[Szerkesztve]
-
Jester01
veterán
1) Ahogy gondolod. Nem fáj sokba.
2) Abszolút nem megy, hiszen ez így nem függvényhívás. ''warning: statement with no effect''
3) Felõlem
5) Jah, kivéve ha mondjuk read-only directoryban futtatja.
6) ''gcc-t használ, hát a fene sem tudja, hogy mikor mit ront el.'' Nem ront el semmit.
7) Érdekes. Nekem nagyjából hasonló eloszlású számok jöttek ki.
Sajna nem tudok random generátort. -
Jester01
veterán
válasz
emitter #1125 üzenetére
Khm, a fejed fogod a falba csapkodni
A fagyi konkrétan azért van, mert a mezo változót akarod felszabadítani, aminek sosem adtál értéket. Ugyanúgy mint az mx és my esetén, ha azt akarod, hogy a függvénybõl visszajöjjön, akkor pointert kell átadni. Itt ez már 3 csillag lesz(Persze void visszatérési típus helyett lehet palya** is, és akkor return-nel adod vissza)
Ezen kívül: nem tudom mit ittál amikor ezt írtad:
temp=(char*)malloc((*mx)*sizeof(char)+(int)my);
Gondolom szegény fordító tiltakozott az my ellen (hiszen az most egy pointer!), de te jól ''megerõszakoltad''
Mivel az egész pálya most egy sorban van, így nyilván 4 * (*mx) * (*my) hely kell. Plusz az egy byte a lezáró nullának amire már valamikor felhívtam a figyelmed
Ha ez mind megvan, akkor már csak az a baj, hogy a k=k+4 rossz helyen van, a belsõ ciklusmag végére való (vagyis a kapcsoszárójelen belülre). -
Jester01
veterán
1) a main függvénynek nincs megadva visszatérési típus. gcc szerint ez defaultból int. Viszont nincs return sem
A helyes megoldás: kiírni, hogy int, és egy return 0 a végére.
2) az exit hívás így hibás, lemaradt a zárójel, nomeg a paraméter. Helyesen pl.: exit(1);
3) A ''/n Tul nagy elemszam,inditsa ujra.'' kiírásnál / van \ helyett. Különben meg szebb lenne, ha inkább újra bekérnéd a hibás értéket.
4) A ''\nKivanja fajba irni az adatokat? (i/n)'' kiírásnál kimaradt egy l betû
5) A ki.txt megnyitásának sikerességét nem ellenõrzöd.
6) Rengeteg double cast tök fölösleges.
7) A ''itt nem szabad osztani sehogy, mert nem kapunk jo eredmenyt'' megjegyzést nem értem. Itt pl. lehetne castolni, de persze simán egy lebegõpontos konstans is jó: szam=random(10000)/10000.; Mi ezzel a baj? -
Jester01
veterán
válasz
emitter #1092 üzenetére
Ez most jónak tűnik, kivéve, hogy a temp változó mérete eggyel kisebb mint kellene, mert a fscanf tesz egy lezáró nulla byteot a beolvasott string végére. De hogy ettől fagy-e azt nem tudom. Esetleg a program másik részében lehet hiba. (Miért nem rakod ki az egészet a weboldalra?
)
Amúgy a k változóra nincs szükség, mert egyszerűen 4*j módon számítható. De ez nyilván nem hiba. Legközelebb holnap este leszek, remélem addig segít valaki más[Szerkesztve]
-
Jester01
veterán
válasz
emitter #1089 üzenetére
A temp az minek is? A c változót hol inicializálod? A ciklusban j miért 4*(*mx) -ig megy?
Gondolom azt akartad csinálni, hogy a temp-be beolvasod a sort, és aztán abból alakítod át a saját adattípusodra. Ez persze fölösleges, ha úgyis fgetc-t hívsz.for(i=0;i<*my;i++) //az allas beolvasasa
{
for(j=0;j<*mx;j++)
{
mezo[ i ][ j ].akna=fgetc(fs)-48;
mezo[ i ][ j ].reveal=fgetc(fs)-48;
mezo[ i ][ j ].mark=fgetc(fs)-48;
mezo[ i ][ j ].szomsz=fgetc(fs)-48;
printf(''%d'',mezo[ i ][ j ].akna);
}
MOD: az persze kérdés, hogy a mentett állásban táblasorok után van-e enter, vagy egy sor az egész. A fenti kód akkor működik, ha egy sor.
[Szerkesztve] -
Jester01
veterán
-
-
Jester01
veterán
válasz
emitter #1070 üzenetére
remélem működni fog, mert ezt most hirtelen a szám-rendezősből írtam át
Sajna nem fog
qsort (tomb, elemszam, maxhossz*sizeof (char), string_cmp);
...
ahol maxhossz a tomb legnagyobb sztrigjének a hossza
Itt egy (char*) elemeket tartalmazó tömböt rendezel. Vagyis helyesen:
qsort (tomb, elemszam, sizeof(char*), string_cmp)
A stringek hossza nem számít. Amúgy jelen feladat esetén ha a string betûit rendezzük, akkor a generált permutációk már eleve a jó sorrendben jönnek ki. Tehát nem ilyen rendezés kell, hanem az eredeti (a számos), csak nem int hanem char típussal. -
Jester01
veterán
válasz
emitter #1075 üzenetére
fscanf példád azért nem jó, mert a \n whitespace, és mint ilyen, azt jelenti, hogy bármennyi bármilyen whitespace lehet ott. Helyette (ha mindenképp fscanf kell) a fscanf(f, ''%*[\n]'') lehet jó. Mit jelent az, hogy új sorra pozícionálni? Eldobni a sorból hátralévõ összes karaktert? fscanf(f, ''%*[^\n]%*[\n]'').
Az fgetc() karaktert olvas be.
A sor helyes, csak nem azt csinálja amire te feltehetõleg gondolsz. Az i egymás utáni hívások esetén 48 vagy 49 lesz (a 0 és az 1 ascii kódja). -
Jester01
veterán
Először rendezd abc sorrendbe a beadott szót. Ez gondolom menni fog.
Utána csinálj egy tömböt amiben jelzed, ha egy betűt már felhasználtál.
Alapesetben ez legyen csupa igaz érték (true/1).
Egy másik tömbben pedig a permutált indexeket gyűjtöd, ez alapesetben egyesével nő.
Rögvest írd is ki, mert ez lesz a legelső permutáció.
A következőt pedig úgy kapod meg, hogy az utolsó karaktertől elindulsz és mindig megkeresed a következő fel nem használt betűt. Ha már nincs ilyen, akkor lépsz eggyel visszább (ha nem tudsz, akkor kész vagy). Amint találtál egyet, ismét elindulsz előre és szépen veszed az első fel nem használt betűt.
Igy valahogy:for(i = len - 1; i >= 0; i--)
{
int current = indices[ i ];
used[current] = 0;
current = findnextunused(used, current + 1, len);
if (current < len)
{
indices[ i ] = current;
break;
}
}
if (i < 0)
{
break;
}
indices[++i] = findnextunused(used, 0, len);
for(i++; i < len; i++)
{
indices[ i ] = findnextunused(used, indices[i - 1] + 1, len);
}
A findnextunused függvényem második paramétere a keresés kezdőpozíciója.
A megtalált betűt be is jelöli, hogy használatban van.
Biztos van egyszerűbb módja, mindig is utáltam a kombinatorikát
Emitter: a rekurziót is utálomDe azért persze szoktam használni.
MOD: [ i ]
[Szerkesztve] -
Jester01
veterán
válasz
Protezis #1060 üzenetére
Csak kicsit pontosítok: a hülye VC sehol nem keresi a fájlt. A relatív útvonalak mindig az aktuális munkakönyvtárhoz képest értendők. Ha a progidat egy másik dirben állva parancssorból indítom, akkor sem fogja megtalálni. Ha a progidat tartalmazó könyvtárra van szükséged, akkor a GetModuleFileName API függvénnyel kérdezd le az exe abszolút fájlnevét, és abból vágd le a könyvtár nevét.
-
Jester01
veterán
válasz
Boolash #1043 üzenetére
Mail ment, de ide is beírom:
Azt leszámítva, hogy a bill() függvény nincs definálva sztm ez jó. Legalábbis szintaktikailag. Mi a pontos hibaüzenet?
Most pedig néhány megjegyzés:
1) A kiíratások után fflush(stdout) kell, nem pedig fflush(stdin).
2) Kerüld a gets() függvényt, mert nem ellenõrzi a hosszt. Mi történik, ha 15 karakternél hosszabb telefonszámot írok be? Helyette használhatod az fgets() függvényt.
3) A gotoxy varázslás helyett ajánlom, hogy nézz utána a printf formátumsztringeknek. Pl. egy ''%-30s %15s %-30s'' vagy hasonló szerintem megfelel a célnak.
De különben még mûködik is
[Szerkesztve] -
Jester01
veterán
válasz
emitter #1032 üzenetére
Azért mert neked kell előre lefoglalni a helyet a stringnek.
Ugyanez igaz a scanf-re is, gondolom ezért fagy a progid.
És ha már lefoglaltad a helyet, akkor biztosítani kell, nehogy túl sokat írj bele (ez az ún. buffer overrun, ami azon kívül, hogy bug még biztonsági rés is)
A helyet statikusan vagy dinamikusan foglalhatod. Pl. az itoa esetén legrosszabb esetben 12 byte hely kell, úgyhogy a char* s helyett írhatsz char s[ 12 ]-t.
De továbbra is ajánlom az fprintf-et mert akkor nem kell bufferrel szórakozni. -
Jester01
veterán
válasz
emitter #1028 üzenetére
1. A létező fájlt illene bezárni akkor is, ha a felhasználó nem kér felülírást.
2. Ha a c != 'i', akkor a return miatt visszatér, így a while-ban nincs is mit ellenőrizni. Amit különben is elrontottál, hiszen csak akkor lépne ki, ha a c egyszerre 'i' és 'n' is, ami lehetetlen.
3. Az itoa inicializálatlan területre fog írni. Ha szöveges mentést akarsz csinálni, akkor egyszerűbb az fprintf(f, ...) formát használni.Bináris mentéshez fwrite.
4. A mentésednek nem sok értelme lesz, ha nem írod bele a pálya méretét.
5. fclose előtt nem szükséges fflush (de nem is árt - ezt akár benne is hagyhatod) -
Jester01
veterán
válasz
emitter #1024 üzenetére
Ez az eredeti verzió. Az mindenképpen igaz, hogy a ciklusnak addig kell futni, amennyit foglalsz. Csak nem a ciklus a rossz, hanem a foglalás, mivel a progidban egyébként az y az első koordináta. Szóval így:
mezo=malloc(my*sizeof(palya*)); //dinamikus memoriafoglalas
if(mezo==NULL)
{
fprintf(stderr,''Out of memory!\n'');
return -1;
}
for(i=0;i<my;i++)
{
mezo[ i ]=malloc(mx*sizeof(palya)); -
Jester01
veterán
válasz
emitter #1016 üzenetére
miért foglal a progim a windóz szerint 44kB-ot, mikor van összesen 6 int változóm, összesen 12bájtot kéne foglalni nekik, nem?
Programkód, verem, betöltött dllek ...
Egyébként az int az 32 bites szóval 24 byte.
én számításaim alapján 2mb-ot kéne foglaljon, mégis 4megát foglal
Lásd fennt, valamint van overhead is. Plusz ha debug verziót fordítasz akkor sokkal több helyet foglal.
segítsetek pls
Honnan tölthetem le a kódot? -
Jester01
veterán
válasz
emitter #1014 üzenetére
Sajnos az üres sort már a scanf lekezeli, úgyhogy muszáj lesz fgets/sscanf párosra átállni.
A 9,10g esetet pedig úgy lehet megvizsgálni, hogy megköveteljük a sorvég jelet a második szám után:do{
char buf[80];
char c;
printf(''Mekkora palyan szeretne jatszani? (sor,oszlop) '');
fgets(buf, 80, stdin);
temp=sscanf(buf, ''%d,%d%[\n]'', &mx, &my, &c);
} while( (temp!=3) );
Ezzel most még az a baj, hogy a sor lehet hosszabb mint 80 karakter, házi feladat, hogy ezt még ellenőrizd. -
Jester01
veterán
Also hatar=0
Felso hatar=1.5
Hany reszre osszam be a szamkozt?15
0.100
x y
_____________________
0.000 3.980
0.100 3.952
0.200 3.876
0.300 3.753
0.400 3.584
0.500 3.374
0.600 3.125
0.700 2.842
0.800 2.530
0.900 2.194
1.000 1.842
1.100 1.481
1.200 1.120
1.300 0.769
1.400 0.440
1.500 0.151
Google szerint jók
(A dx kiíratásnál kimaradt egy f betű a formátumstringből) -
Jester01
veterán
válasz
emitter #1000 üzenetére
A foglaláskor és a felszabadításkor a belsõ ciklusban cella[i] kell, hiszen az i. sort (oszlopot) piszkáljuk. Általában (persze nem mindig) eleve gyanúsak az olyan ciklusok amelyek magjában nincs hivatkozás a ciklusváltozóra. Te pedig ugyanazt a változót írtad felül úrja meg újra.
A bekérõ kód kicsit zavarosra sikerült, a végtelen ciklustól eltekintve is.
A temp változót fölösleges kinullázni, hiszen úgyis értéket adsz neki.
A típusa feltehetõleg int, mivel a scanf azzal tér vissza. Márpedig ha ez így van, akkor ne NULL-lal hasonlítsd össze, mert az pointer.
Az az összehasonlítás egyébként teljesen felesleges, hiszen a kilépési feltétel elegendõ. Nézd meg hogyan lehet bekapcsolni a figyelmeztetéseket a fordítóban, szokott segíteni. Gcc pl. a fenti összehasonlításért is szól:
warning: comparison between pointer and integer.
A végtelen ciklus pedig azért van, mert a scanf abbahagyja a beolvasást az elsõ olyan karakternél amit nem tud értelmezni. Igy aztán legközelebb megint belefut. Ki kell ûríteni az input puffert, pl. ilyesmivel:while(getchar() != '\n');
[Szerkesztve] -
Jester01
veterán
aha, akkor ezt most a main-be írjam?
A típus deklarációt ne (azt kirakhatod egy header fájlba), csak a példányosítást.
mit tárolnék a cell típusban?
Amit akarsz, te írtad: egy két dimenziós tömbben tárolnám az egyes cellák tulajdonságait, azaz a tömb minden eleme egy struktúra lennestruct state {
int xsize;
int ysize;
struct cell** cells;
...
};
A kétdimenziós tömb tulajdonképpen egy pointertömbre mutató pointer, ezért ciklusban kell lefoglalni:
[link]
Figyelj oda, hogy a te példádban definiáltál egy cella nevű globális változót, amire nincs szükséged. Ha tulajdonképpen rövid nevet akartál, akkor egy typedef kell elé:typedef struct cell
{
int vmi;
int vmi;
...
} cella; -
Jester01
veterán
még csak most tanulgatom a C-t, nem megy minden elsőre
Semmi probléma, próbálkozz és kérdezz nyugodtan
Alapvetően szebb, ha nem globális a tömböd. És hogy egyszerűbb legyen dolgozni vele,
rakd bele egy struktúrába, pl így:struct cell {
...
};
struct state {
int xsize;
int ysize;
struct cell* cells;
...
};
Innentől kezdve elég egy state típusú változót átadni a függvényeidnek, és egyben megkapják a szükséges információkat. Ha valóban kétdimenziós tömböt akarsz, akkor
struct cell** cells kell, csak ilyenkor bonyolultabb az inicializálás és felszabadítás (cserébe viszont egyszerűbb az indexelés). -
Jester01
veterán
az mit jelent hogy ''invalid use of array with unspecified bounds
Nemtom, szerintem pont olyasmit, amihez ismerni kellene a méretet. (sizeof pl.)
szóval egy függvénynek akarom átadni a tömböt paraméterként, és a fv belül kéne, h tudja a sorok és oszlopok számát
Ehhez át kell adnod a méretet is paraméterben. -
Jester01
veterán
viszont nem igazán tudom értelmezni a clrscr() -t
Ez a kód egy-az-egyben a microsoft oldaláról van, csak kitörölték a megjegyzéseketItt az eredeti: [link]
ha egy konzolablakban véget ér valahol a szöveg, akkor az utolsó karakterhelyen áll valamilyen lezárókarakter
Nem.
hogyan oldhatnám meg, hogy takarékosság miatt pontosan csak az utolsó sorig törölje a képernyőt
Megjegyzed mennyit írtál ki.
az adott kurzor-pozíción álló karaktert adja vissza
ReadConsoleOutputCharacter [link] -
Jester01
veterán
-
Jester01
veterán
Akkor biztos a szokásos wildcard globbingra gondol (* és ?), ehhez az fnmatch függvény kell még neked.
Az adatbázis készítéshez megnyitod a megadott kiindulási directoryt (opendir), végigmész a bejegyzéseken (readdir) amiket kiírsz egy szövegfájlba. Ha directoryról van szó, akkor rekurzívan meghívod ezt a feldolgozó függvényt. A végén szépen bezárod a directoryt (closedir).
Keresésnél simán sorokat olvasol az adatbázis fájlból és az fnmatch függvényt hívogatva ellenõrzöd az illeszkedést. Ha nem találtál semmit, akkor meghívod az adatbázis készítõ függvényt és újra próbálod.
Még arra érdemes esetleg figyelni, hogy abszolút elérési utat használj.
Ha konkrét kérdésed van írj ide, dobj mailt, vagy nyugodtan keress aimon. -
Jester01
veterán
Az ncurses sem kifejezetten linuxos és azt különben is csak a referencia miatt tettem be.
Maga a curses (mert azt írtam) az platformfüggetlen, van windowsra is.
A winapinál meg ne keverjük a szezont a fazonnal. Winapi, mert az operációs rendszert szerencsétlen módon windowsnak hívják. De ezek nem grafikus függvények, mint ahogy egy csomó más winapi függvény sem. Például a kurzor pozíciót a SetConsoleCursorPosition függvénnyel lehet állítani.
Sajna konkrétan devc-hez nem értek, nem tudom mire lehet rávenni és mire nem.
A haragos smileyt meg mivel érdemeltem ki? -
Jester01
veterán
csillagászati okai vannak?
Igen. Az év hossza (kb) 365.242199 nap. Vagyis 4 évente majdnem egy teljes nap (0.97) csúszás van.
Ha ezt teljes napként korrigáljuk, akkor 100 év alatt már kb 0.78 nappal ''túlkorrigáltunk'', ezért azt visszavesszük (igazából elég lenne 125 évenként, de így egyszerûbb). Így viszont megint alulkorrigálunk, ezért a 400 éves szabály. És így tovább. Ráadásul a szökõmásodpercekrõl még nem is beszéltünk.
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- ÚJSZERŰ! HP ProDesk 600 G6 SFF - i5-10500 (6 mag!) / 16GB DDR4 / ÚJ! 512GB NVMe SSD / HDMI / USB C
- Minőségi üzleti! HP EliteDesk 705 G1 SFF - AMD A8 7600B / 8GB DDR3 / 128 SSD + 500 HDD / Radeon R7
- PC - Hardcore Gamer - Snowflake Edition - i7-14700K / RTX 4070Ti SUPER / 64GB DDR5 RAM / 2TB SSD
- PC - Hardcore Gamer - Snowflake Edition - i7-14700K / RTX 4070Ti SUPER / 64GB DDR5 RAM / 2TB SSD
- Samsung S23 Ultra 15 hónap garanciával, enyhén sérült kijelzővel
- IKEA Format lámpák eladóak (Egyben kedvezménnyel vihető!)
- Telefon felvásárlás!! iPhone 15/iPhone 15 Plus/iPhone 15 Pro/iPhone 15 Pro Max
- LG 27GR95QE - 27" OLED / QHD 2K / 240Hz & 0.03ms / NVIDIA G-Sync / FreeSync Premium / HDMI 2.1
- HUAWEI MateBook 13 2020 - Kijelző nélkül - I7-10510U - 16GB - 512GB SSD - Win11 - MAGYAR
- Gamer Notebook! Csere-Beszámítás! Asus Tuf F15 FX506H / 11400H / RTX 3050 / 16GB DDR4 / 512 SSD
Állásajánlatok
Cég: FOTC
Város: Budapest