- Sorra osztja a dollármilliárdokat az USA a chipgyártóknak
- Az Intel a legmodernebb chipgyártó géppel előzheti meg az egész szektort
- Leváltaná a Google a sütiket, de ez nem elég
- Nem igaz, hogy indiaiak működtetik az Amazon pénztármentes technológiáját
- Már azelőtt szoftvert írnak a chipekhez, hogy elindulna a gyártás
-
IT café
Új hozzászólás Aktív témák
-
Miracle
senior tag
az ablak eltunese ellen a devc++ altal generalt standard konzol applikacio ket programsorabol a felso nyujtja a helyes megoldast:
system(''pause'');
ez bill.lenyomasig tartja majd a konzolablakot.
pontosvesszot azert nem tudsz irni mert a decomment line gyorsbillentyu van rakonfiguralva a kerdeses bill.kombinaciora. keresd meg a gyorsbillentyuk beallitasait es szedd ki ezt a hotkeyt.értelmező késziszótár :: rekurzió --> lásd : rekurzió
-
emitter
őstag
vagy annak a megoldásnak is örülnék, ha egy sorban, de mondjuk vesszővel (vagy szóközzel) elválasztva adhatnám be a számokat, és a végén egy [enter] hatására beolvasná a vesszők között álló számokat egy tömbbe
ja, az előző verziót is egy tömbben szeretném tárolni, melynek méretét előre nem tudom, annyi eleme lesz, amennyi számot az [enter] lenyomásáig beolvasott a progi.
mintha úgy emlékeznék, h hasonló probléma megoldása pascalban egyszerűbb volt... -
Miracle
senior tag
a getch egy karaktert olvas be. ha entert nyomsz, az nem mas, mint egy karakter:
'\n'
tehat ha getchval olvasol akkor erre a karakterre kell figyelned, ez jeloli, hogy entert utottek.
figyelmedbe ajanlanam meg az atoi, atof fv.eket is, szukseged lehet ra.
soksikert.értelmező késziszótár :: rekurzió --> lásd : rekurzió
-
Miracle
senior tag
nem, nem tudom a pontos szabalyokat uppolasra de azokban a topikokban ahova irni szoktam nem szeretem az ilyen felorankent uppolast, mert annak semmi ertelme, csak telefossa hozzaszolassal az egeszet.
a problema az, hogy a conio.h a borland speci cucca, es csak borland C forditoval mukodik, azaz pontosabban csak abban van benne. szoval ha devC++al fejlesztesz akkor a C vagy C++ standard konyvtaraira kell hagyatkozni, vagy keresni valamilyen libet, amit a mingw (a devc++ forditoja) le tud forditani. persze erre csak akkor van szukseg ha valami tenyel komoly programot fejlesz, menuvel, stb. mert ha nem akkor a standard C library boven eleg lesz. linux alatt a kulonbozo courses verziok ilyen libek, de nem tudom pontosan windows alatt mivel lehet ilyet csinalni. ugy emlekszem devC++ topikokban mar elojott a kerdes, nezd meg ott.értelmező késziszótár :: rekurzió --> lásd : rekurzió
-
emitter
őstag
na, hát végülis megcsináltam egy sima ciklussal az érték-ellenőrzést, de azért még mindig örülnék az egyszerűbb ötleteknek, feltéve hogy van ilyen
más:
még mindig nem sikerült megoldani azt, h ha scanf egy sima üres enter-t kap, akkor csináljon vmit (lépjen ki az adat-bekérő ciklusból)
devc++ban nem műxik a conio.h, szal a getch() se, más megoldást nem tudtok?
(sima int számokat akarok beolvasni, enter-rel elválasztva az egyes bekéréseket, előre nem ismert alkalommal kéne a bekérő-ciklusnak lefutnia, és egy üres enter-rel lenne vége) -
Miracle
senior tag
a get() fv. elvileg egy karaktert olvas be, nezd meg a doksijat.
a tombos problemara meg nincs ennel jobb C-s megoldas, de ha nem C-t hanem C++t hasznalsz, akkor az std::set<elemtipus> tipus a te baratod, insert() meg find() metodusokkal
soksikertértelmező késziszótár :: rekurzió --> lásd : rekurzió
-
Sikoly
tag
Nálunk tavaly volt egy nagyon aranyos kis házifeladat a ZH-hoz:
aknakereső programot kellett írni!
Bemásolom ide az egész szöveget, hátha segít:
a) A játék egy MxN-es pályán játszódik. Az oszlopok jelölése betűvel (A..Z), a soroké számmal (1..26) történik. A pálya egyes mezőin bombák lehetnek. A pálya méretét (M és N) és a bombák sűrűségét (%) a játék kezdetén kell megadni. A bombák helye természetesen játékról játéra véletlenszerűen változik.
Az adatok megadása után a program kirajzolja a pályát, majd várakozik a játékos parancsára. Kezdetben minden mező helyén ? karaktert láthatunk. A játékos ezután a következő alakú parancsokat adhatja ki:
<oszlop><sor>
<oszlop><sor>!
Az első alakú parancs a mezőt „felderíti”. Amennyiben a mezőn bomba volt, a játék sikertelenül befejeződik. Ellenkező esetben a az adott mező helyén a ? helyett a szomszédos nyolc mezőn található bombák száma jelenik meg, illetve szóköz, amennyiben ez a szám 0. A második alakú paranccsal olyan mezőt jelölhetünk meg, amelyen bombát sejtünk.
A játékos egy lépésben több parancsot is megadhat, vesszővel elválasztva. Az érvénytelen parancs megadását a program hibaüzenettel jelzi. A program minden lépés után kirajzolja a módosult pályát, és újra várakozik a játékos parancsaira.
A játék akkor ér véget, ha a játékos aknát rejtő mezőre lép (veszít), vagy az összes nem aknát rejtő mezőt felderíti (nyer). Utóbbi esetben a program kiírja a játékos lépéseinek számát. Amennyiben veszít a játékos, a játék kiírja az összes mező tartalmát. A bombák helyét b betű jelzi.
b) Fejleszd tovább a játékot úgy, hogy amennyiben egy „felderített” cellának egyik szomszédján sincsen bomba, úgy a program automatikusan derítse fel az összes szomszédját is, egészen addig, amíg így nulla szomszédú cellára bukkan. A megjelölt (!) mezők nem vesznek részt az előbb említett „automatikus felderítésben”.
c) Egészítsd ki az aknakereső játékot a következő parancsokkal:
elment <állománynév>
betölt <állománynév>
Az első parancs a játék aktuális állását az adott állományba írja, ahonnan az később a betölt parancssal visszaolvasható kell, hogy legyen. Az állomány formátuma tetszőleges, de természetesen minden adatot tartalmaznia kell, ami a játék folytatásához szükséges (bombák helye, felderített mezők, megtett lépések száma). Az elment parancs természetesen csak játék közben adható ki, a betölt parancs játék közbeni kiadásakor viszont a játékostól megerősítést kell kérni.
sztem eléggé ötletes & talán még egyedi is
[Szerkesztve]---
-
PGee
tag
-
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.Jester
-
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?Jester
-
Jester01
veterán
Igen, ez az oprendszer része. Kérdés, van-e hozzá header és lib, de ne már, hogy ne legyen.
Header Declared in Wincon.h, include Windows.h.
Library Link to Kernel32.lib.
DLL Requires Kernel32.dll.
Egyébként egy win32 curses implementáció a pdcurses. [link]
[Szerkesztve]Jester
-
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éseket Itt 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]Jester
-
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.Jester
-
Miracle
senior tag
ha Jester valasza alapjan nem sikerult rajonni a problemara vazolj ide par sor kodot hogy mi is elmelyedhessunk a problemaban.
es ha fordito hibauzeneteket idezel legyszives fordito nevet (esetleg ver.szamat) is mellekeld kosziértelmező késziszótár :: rekurzió --> lásd : rekurzió
-
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).Jester
-
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;Jester
-
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]Jester
-
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.Jester
-
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?Jester
-
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));Jester
-
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)Jester
-
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.Jester
-
Deark
csendes tag
válasz emitter #1067 üzenetére
Eddig a betűk keverésére nem találtam lineáris algoritmust...
Gondoltam arra, hogy randomizálom az egészet és mindig megvizsgálom, hogy már megvan-e az adott string, de ez egy 10 betűs szónál túl sok lenne. Max 1 mp alatt le kéne futnia.
Gondoltam még arra is, hogy számrendszerekkel hozom össze valahogy. Tehát hogy olyan számrendszer, ahány karakteres a string. De még nem tom, hogy hogyan...
Szerintem a sok ciklus nem lenne ronda, azaz nem lenne baj, ha az. Max 10 betűs lehet a szó. (ezt nem kell ellenőrizni. alapból ilyen szavakkal lesz feltöltve.) -
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).Jester
-
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.Jester
-
Jester01
veterán
válasz emitter #1082 üzenetére
Az & jel nem kell a fscanf-be, mivel már eleve pointered van.
Ellenben a függvényhívásnál viszont kell.fscanf(fajl,''%d'',mx);
...
load(''proba.txt'', &mx, &my, mezo);
MOD: Ja és mielõtt lábon lövöd magad: a második fscanf-be nyilván my-t akartál írni
[Szerkesztve]Jester
-
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]Jester
-
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]
Jester
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- Rezsicsökkentés, spórolás (fűtés, szigetelés, stb.)
- Kínai, és egyéb olcsó órák topikja
- Politika
- Azonnali alaplapos kérdések órája
- Máris megrendelték a Fallout TV sorozat második szezonját
- Milyen videókártyát?
- Motorola Moto G54 5G Power Edition - nem merül le
- Alkoholista nevelde
- Amazon Prime Video
- Volkswagen ID.7 menetpróba
- További aktív témák...
- HUAWEI Band 8 aktivitásmérő (fekete), keveset használt, karcmentes kijelző
- 96GB (2x48GB) Crucial Pro DDR5 kit/ új, bontatlan/
- IPhone 15 Pro 128GB gyári független 2025.04.03. Apple garancia
- GAMER PC - RTX 3070 - i5 12400F/13400F - 16GB DDR4 - 500GB Nvme SSD
- LEGJOBB ÁR! GAMER PC - RTX 3070 - i5 10400F/11400F - 16GB DDR4 - 500GB Nvme SSD -