- Mobil flották
- Samsung Galaxy Watch8 - Classic - Ultra 2025
- One mobilszolgáltatások
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- Samsung Galaxy S25 - végre van kicsi!
- Huawei Mate 9 - Mate evangéliuma
- Android alkalmazások - szoftver kibeszélő topik
- Leesett a kamionról több millió eurónyi Z Fold7
- Garmin Venu X1 - vékony, virtuóz, váltságíjas
- Xiaomi 13 - felnőni nehéz
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
-
emitter
őstag
válasz
Jester01 #1149 üzenetére
köszi, már be is építettem!
és ezennel jelentem, kész a második verzió, felraktam a táramra! [link]
egy probléma lép még föl néha: a képen látszódó 2 db 1-es rögtön indítás után (új játék) jelent meg magától, úgy, hogy nem is nyomtam még sehova
de ez teljesen random, néha csinálja néha nem, ha csinálja akkor mindig a baloldali első v második sorban egy-két mezőt előre felderít nekemráadásul nem is mindig jól, mert volt, h feketével jelölt nekem egy mezőt, mire miztonságból rákattintottam, ásláss csodát: akna volt alatta
halvány gőzöm sincs, h ez mitől lehet...
-
emitter
őstag
válasz
emitter #1142 üzenetére
közben sikerült minden színt kikevernem:
#define color_white SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_INTENSITY)
#define color_lightgray SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED)
#define color_gray SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY)
#define color_black SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), )
#define color_red SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED|FOREGROUND_INTENSITY)
#define color_darkred SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED)
#define color_lime SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN|FOREGROUND_INTENSITY)
#define color_green SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN)
#define color_blue SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE|FOREGROUND_INTENSITY)
#define color_darkblue SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE)
#define color_navyblue SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN|FOREGROUND_BLUE
#define color_cyan SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY)
#define color_fuchsia SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE|FOREGROUND_RED)
#define color_purple SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_INTENSITY)
#define color_brown SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN|FOREGROUND_RED)
#define color_yellow SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY)
sztem ennyi az összes lehetséges kombináció
azért csodálkozom, h C-ben ennyire alapszinten kezelik a színeket... pascalban simán rendelkezésre állt az összes szín... -
emitter
őstag
válasz
Jester01 #1139 üzenetére
na asszem ezt mára feladom, már nem fog az agyam ilyen későn
egyszerűen ez a rekurzív dolog nagyon bekavar, nem is értem a lényegét, hogy honnan hova ugrik a progi futása a rek. fv-hívások közben, stb...
másik kérdés:
konzolos módban végre rájöttem, hogyan lehet színeket kevergetni, de nincs vhol egy táblázat, hogy milyen kevergetéssel milyen színeket lehet előállítani?
ha jól számolok, összesen 22 színárnyalatot lehet csinálni, beleértve a fehéret, feketét, ugye? -
-
emitter
őstag
válasz
Jester01 #1132 üzenetére
kicsit bonyolultabb a helyzet, mint gondoljátok
szóval ha lehet, máshogy oldom meg ezt a rekurzív cuccost:
kérdés, hogy lehet azt lekérdezni (''felfogni''), hogy ha én egy tömb nemlétező indexű elemét akarom elérni. Gondolom ilyen esetben a progi generál magának valahova egy hibaértéket (valami error-output-ba?) Van ilyen egyáltalán?
Csak mert ha ezt tudnám hasznosítani, akkor nem kellene ennyiféle if-elágazást csinálni a feltar() fv-emben, hanem elég lenne megnézni a szomszédos mezők akna-vizsgálatakor, hogy az igaz-e az error (azaz nem létezik ilyen indexű tömbelem, azaz túlléptem a pálya szélét).
Ha error==1, akkor break; vagy vmi ilyesmi, és folytatom a következő mezővel a vizsgálást.
Szal van ilyesmi error-cucc? -
emitter
őstag
válasz
Jester01 #1130 üzenetére
ok, javítottam, most jó kell legyen
meek csicsikálni, holnap a suliban még debuggolok
még azon a feltar()-on van mit csiszolni
meg a mentett pálya folytatása sem az igazi
ja, ha még nézegeted, akkor 'proba.txt' néven mentsd el a pályát, mert a load() is azt olvassa vissza (egyelőre)
jó éjt!
és köszi a segítséget[Szerkesztve]
-
emitter
őstag
válasz
emitter #1128 üzenetére
most palya**-t adtam vissza a load()-dal, most nem fagy
és műxik a betöltés is, eddig miden ok, köcce
még ott van viszont a szerencsétlen és átláthatatlan feltar() fv-em, ami szintén fagyaszt, de simán elronthattam benne akármit, mert rekurzív, és mint mondtam, ehhez nem sokat értek
bár ha te sem találod meg benne első ránézésre a hibát, akkor sztem ne fáradj vele, legfeljebb kihagyom a progiból ezt a fícsörtmondjuk így majd sokkal többet kell kattintgatni...
-
emitter
őstag
válasz
Jester01 #1121 üzenetére
hali!
én is sokat szívtam nélküledde legalább kisebb simításokat tudtam végezni a ''holt időmben''
szóval a kérdésem az, h miért száll el a progim (lefut, rögtön bezáródik hibaüzi nélkül)
mindent kikommenteztem, csak a load() maradt, ez nem akar menni rendesen
[link]
megköszönném ha rá tudnál pislantani, köszi előre is! -
emitter
őstag
azt nem tudjátok, hogy lehet C-ben pl. copyright-jelet írni? Meg az egyéb szimbólumokat, mondjuk a Unicode-kódokat kiiratni?
-
emitter
őstag
/*printf(''\nKivanja latni az adatokat? (0/1)'');
scanf(''%s \n'',&a);
if (a=='i')*/
ez gondolom nem műxik, ha már kikommentezted
helyesen így nézne ki:
printf(''\nKivanja latni az adatokat? (i/n)'');
a=getch();
if (a=='i')
egyébként sajnos nem sokat réünk a forráskóddal, mert ha bekopipésztelem akárhova, átalakítja a '' idézőjelet ' ' idézőjellé
próbáld meg felrakni 1 tárhelyre
egyébként a scanf() nem parázik azért, mert beleírtál egy '\n'-t? Nálam ugyanilyenért asszem ezért fagyott rendesen a progi[Szerkesztve]
-
emitter
őstag
Egy elég nehéz akadályba ütköztem aknakeresőm készítése közben:
ugye az úgy szép, meg elegáns, ha egy mezőnek a környezetében vmelyik másik mezőn nincs akna, és én erre a mezőre ''kattintok'', akkor addig tárja fel a szomszédos aknátlan mezőket, amíg csak lehet.
Hogy kicsit érthetőbb legyen, itt egy kép, h a májkroszofték ezt hogyan oldották meg:
Ha jól gondolkozom, akkor vmiféle rekurzív algoritmus kéne ehhez, de én az ilyenekben béna vagyok, nem nagyon tudnék magamtól ilyen algoritmus kitalálni.
Nálam így néz ki a dolog:
Pl. mikor a sárgán jelölt mezőre kattintottam, akkor csak azt az 1 mezőt tárta föl. Azt szeretném elérni, hogy az összes szomszédos nem-aknás mezőt tárja föl ilyenkor, tehát legalább a két fehér-keretes mezőig jusson el. (a fehér téglalap a kurzor akar lenni, azt nem kell nézni)
Szóval ha bárkinek bármilyen ötlete van, ne hallgassa el!
Előre is thx -
emitter
őstag
hát ezaz, csak nem tom, mi a rand_max értéke, sehol nem találtam hozzá ''útmutatót''
azt sem tudom, hogyan lehet adott tartományon belül generálni számot:
devc++ om nem akarja elfogadni a random() fv-t, pedig elvileg ez lenne a megoldás
#include <time.h>
#include <stdlib.h>
int main()
{
double veletlenszam;
srand((unsigned)time(NULL));
veletlenszam=random(10000)/10000;
printf(''%lf\n'',veletlenszam);
system(''pause'');
}
próbáld ki, neked megy-e -
emitter
őstag
#include <time.h>
int main()
{
double veletlenszam;
srand(time(NULL));
veletlenszam=rand();
printf(''%lf\n'',veletlenszam);
system(''pause'');
}
ez elvileg működőképes kell, h legyen, próbáld ki!
az a baj, hogy nemigazán tudom, hogyan lehet 0 és 1 közé szorítani a visszaadott értéket, mert nem találtam egy olyan fv-t se, amelyik két nagy szám hányadosának a törtrészét adta volna vissza, double értékűként.
persze lehet, h csak rosszul kerestem -
emitter
őstag
-
emitter
őstag
válasz
Jester01 #1090 üzenetére
Igen, elég zavaros volt, kijavítottam a hibákat. A fájlban a mezőket mátrix-formában tárolom, szal Enterrel a sorok végén, ezért kell először egy átmeneti temp-változóba olvasni.
Most ott tartok, h műxik a dolog, kiírja a képernyőre a fájl helyes tartalmát, de rögtön lefutás után feldob egy hibaüzit, h a ''0x7c...'' címen található utasítás ''0x00...'' mem.címre hivatkozott. stb.
[link]
és ha kell, itt a file [link] -
emitter
őstag
válasz
Jester01 #1088 üzenetére
oks, megint igazad volt
most műxik, de futás után rögvest bezárja a konzolablakot, pedig nem kéne neki
ha főprogramból nem hívom meg a load() fv-t (kikommentezem), akkor ok a progi futása,
amúgy meg bezáródik
int load(char *fajl, int *mx, int *my, palya **mezo)
{
FILE *fs;
int i=0, j=0;
char c;
char *temp;
fs=fopen(fajl,''rt'');
fscanf(fs,''%d'',mx);
printf(''%d\n'',*mx);
fscanf(fs,''%d'',my);
printf(''%d\n\n'',*my);
mezo=malloc((*my)*sizeof(palya*)); //dinamikus memoriafoglalas
if(mezo==NULL)
{
fprintf(stderr,''\nKeves a memoria!\n'');
return -1;
}
for(i=0;i<(*my);i++)
{
mezo=malloc((*mx)*sizeof(palya));
if(mezo==NULL)
{
fprintf(stderr,''\nKeves a memoria!\n'');
return -1;
}
}
temp=(char*)malloc((*mx)*(*my)*sizeof(char));
for(i=0;i<*my;i++) //az allas beolvasasa
{
fscanf(fs,''%s'',temp);
printf(''%s'',temp);
for(j=0;j<(4*(*mx));j++)
{
mezo[ i ][ j ].akna=c-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);
}
printf(''\n'');
}
free(temp);
fflush(fs);
fclose(fs);
}
egy pillanatra látom felvillanni az ablak tartalmát, és kiírja rendesen a beolvasott cuccokat, de aztán nagy semmi -
emitter
őstag
válasz
Jester01 #1084 üzenetére
na, ma átnézettem a kódot az C-tanárommal, úgyhogy kicsit tisztább lett a kép a kimenő paramétereket illetően
azóta viszont újabb érdekes probléma adódott, futtatáskor ezt kapom:
[Warning] parameter names (without types) in function declaration
<pre>
int load(char *fajl, int *mx, int *my, palya **mezo)
{
...
char *temp;
...
temp=malloc((*mx)*(*my)*sizeof(char));
...
fscanf(fajl,''%s'',temp);
...
free(temp);
...
}
</pre><p></p>
[Szerkesztve] -
emitter
őstag
válasz
Jester01 #1081 üzenetére
na neeee!
ennyire nem lehetek lámer
kicsit le vagyok fáradva...
oks, így megy a dolog, köszi
viszont újabb kérdésem akadt:
ha egy fv-nek kimenő paraméterként akarok átadni int értékeket, azt gondolom érték szerint nem lehet, vagy igen?
ez így nem műxik, hogyan írjam át, h jó legyen?
...
void load(char *fajl, int *mx, int *my, palya **mezo)
{
...
fscanf(fajl,''%d'',&mx);
fscanf(fajl,''%d'',&mx);
...
}
...
int main()
{
int mx, my;
...
load(''proba.txt'', mx, my, mezo);
...
}
az mx, my változóknak a load fv adna értéket, kimenő paraméterként
szal mikor meghívom a load fv-t, nem adok át neki bemenő mx,my értéket, viszont azt akarom, h ő adjon vissza mx,my-t
remélem érthető vok -
emitter
őstag
válasz
Jester01 #1076 üzenetére
oké, értem
akkor hogyan tudom a beolvasott számok ascii értékei helyett a valódi értéküket megkapni?
van erre vmi konvertáló fv?
for(i=0;i<my;i++) //az allas beolvasasa
{
for(j=0;j<mx;j++)
{
mezo[ i ][ j ].akna=fgetc(fs);
printf(''%d'',mezo[ i ][ j ].akna);
}
temp=fgetc(fs); //EOL-karakter olvasása
printf(''\n'');
}
így 48, meg 49 értékeket ír ki -
emitter
őstag
ha text-fájl olvasásakor új sorba akarok pozicionálni, azt hogyan kell?
fscanf(fajl,''\n'');
miért nem jó?
fgetc() karaktert olvas be vagy számot?
ez a sor helyes (ha i integer, és a fájlban egész számok vannak pl. 01001101)?
i=fgetc(fajl); -
emitter
őstag
az abc-rendezést meg így tudod megoldani:
<pre>
int string_cmp(char *c1, char *c2)
{
return strcmp (c1,c2);
}
...
int main(void)
{
char* tomb[elemszam];
...
qsort (tomb, elemszam, maxhossz*sizeof (char), string_cmp);
...
}
</pre><p>
ahol maxhossz a tomb legnagyobb sztrigjének a hossza
remélem működni fog, mert ezt most hirtelen a szám-rendezősből írtam át</p>
Jester01:
úgy látszik, rokon lelkek vagyunk
a kombinatorikát én is utáltam (meg még utálni is fogom), a rekurziót meg még nem használtam annyiszor, h ráérezzek a jelentőségére, egyelőre elég nehéz átlátni nekem egy rekurzív függvényt
[Szerkesztve] -
emitter
őstag
a sorba rendezésre itt van egy, de ez csak számokat rak sorba, mingyá előkotrom a stringes verziót is
[link]
a betűk megkeverését (amit n! féleképp tudsz megtenni) szvsz vhogy rekurzióval kell (érdemes ) megoldani, a baj csak az, h nem tudom hogyanmajd vki okosabb megmondja a tutit
for ciklusokkal is lehetne, de ekkor szvsz annyi ciklus kéne amennyi a string hossza, ez a megoldás márpedig enyhén ronda -
emitter
őstag
válasz
Jester01 #1033 üzenetére
ok, a save-t átírtam fprintf-re, magában működik is, azaz ha mainből így hívom:
save(''proba.txt'', mx, my, mezo);
akkor sikeresen elmenti
viszont ha a fájlnevet stringként akarom átadni, akkor fagy:save(fnev, mx, my, mezo);
mainben fnev-et így deklaráltam:char *fnev;
hol van a kutyi elásva? -
emitter
őstag
válasz
Jester01 #1029 üzenetére
köszi az ötleteket, főként a pályaméretest
az itoa miért fog inic. területre írni? leírnád a helyes megoldást?
kicsit (nagyon!) átírtam a progit, a main-ben kezelem a fájl létezését, felülírását, stb, a save() pedig csak az adott névre elmenti az állást (ezen még javítani fogok)
szóval a kérdés, hogy a következő main-beli részlettel mi a gond:
(fnev string típusú)printf(''\nMilyen neven akarod elmenteni (xxx.txt): '');
scanf(''%s\n'',fnev);
f=fopen(fnev,''rt'');
if(f==NULL) //ha hiba van a megnyitaskor, azaz ha nincs ilyen
{ //nevu fajl, akkor elmentjuk egy ujba ezen a neven
// fflush(f);
// fclose(f);
save(fnev, mx, my, mezo);
}
_____________ a save() fv________________int save(char *fajl, int x, int y, palya **mezo) //parameter: a fajlnev,
{ //a jatek allasat tarolo 2D-s tomb (elemei 3-bitesek),
FILE *fs; //a tomb meretei
char *s;
int i=0, j=0;
fs=fopen(fajl,''wt'');
for(i=0;i<y;i++) //az allas fajlba irasa
for(j=0;j<x;j++)
{
itoa(mezo[ i ][ j ].akna,s,10);
fputs(s,fs);
}
fflush(fs);
fclose(fs);
return 1;
}
a progi legelőször bekéri a fájl nevét, aztán lefagy, pedig nem is létezett előtte a fájl -
emitter
őstag
válasz
Jester01 #1027 üzenetére
igen, ez nekem nem nagyon szúrt szemet
, de köszi!
szóval:int save(char *fnev, int x, int y, palya **mezo) //parameter: a fajlnev,
{ //a jatek allasat tarolo 2D-s tomb (elemei 3-bitesek),
FILE *f; //a tomb meretei
char c;
char *s;
int i=0, j=0, temp=0;
if(!(f=fopen(fnev,''rt''))) //ha hiba van a megnyitaskor, azaz ha nincs ilyen
{ //nevu fajl, akkor nyitunk egy ujat ilyen neven
f=fopen(fnev,''wt'');
}
else //ha nincs hiba megnyitaskor, azaz letezik a fajl,
{ //megkerdezzuk, hogy felulirjuk-e
do
{
printf(''\nIlyen nevu fajl mar letezik. Felulirja? (i/n) '');
c=getch();
if(c=='i') //felulirjuk
{
fflush(f);
fclose(f);
f=fopen(fnev,''wt'');
}
else return 0; //sikertelen mentes, nem irjuk felul
}
while((c!='i')||(c!='n'));
}
for(i=0;i<y;i++) //az allas fajlba irasa
for(j=0;j<x;j++)
{
itoa(mezo[ i ][ j ].akna,s,10);
fputs(s,f);
}
fflush(f);
fclose(f);
return 1;
}
létrehozza a fájlt, de nem ír bele semmit
ha mégegyszer lefuttatom, már létezik ugye a fjl, megkérdezi h felülírja-e, ha ekkor 'i'-t nyomok, mégegyszer megkérdezi, majd megint...
(ha itt mást bill-t nyomok, akkor teszi a dolgát, nem írja felül)
mi lehet a bibi -
emitter
őstag
válasz
Jester01 #1025 üzenetére
huh, ez nehéz szülés volt!
én már teljesen belezavarodtam ezekbe az indexekbe, nélküled nem tudtam volna rájönni a hiba okára az tuti!
Tényleg, úgy jó, ahogy te írtad, még annyit kellett tenni, hogy a free()-nél is változtatni kellett:
<pre>for(i=0;i<my;i++) free(mezo[ i ]); //memoriafelszabaditas
free(mezo);</pre><p>
akkor ez a része ok
ha esetleg még van rá lehetőséged, megnéznéd, hogy a save() miért fagyasztja le a cumót?
1000thx!!!!!
szerk: arra is rájöttem, miért maradt le az egyik (meg az összes többi) hsz-ben az [ i ] : mert ez a ph-n a dőltbetű
[Szerkesztve]
[Szerkesztve] -
emitter
őstag
válasz
Jester01 #1021 üzenetére
akkor most hogyan jó véglegesen?
most így néz ki, de így is fagy néhamezo=malloc(mx*sizeof(palya*)); //dinamikus memoriafoglalas
if(mezo==NULL)
{
fprintf(stderr,''Out of memory!\n'');
return -1;
}
for(i=0;i<my;i++)
{
mezo=malloc(my*sizeof(palya));
if(mezo==NULL)
{
fprintf(stderr,''Out of memory!\n'');
return -1;
}
}
sokszor ilyet dob fel:
vagy simán bezárja magát, vagy a windóz zárja be a szokásos ablakot megjelenítve (ami felajánlja a ''jelentés a microsoftnak'' lehetőséget)
-
emitter
őstag
válasz
Jester01 #1019 üzenetére
így jó? egyébként így is éppúgy kifagy egy-két menet után
mezo=malloc(mx*sizeof(palya*)); //dinamikus memoriafoglalas
if(mezo==NULL)
{
fprintf(stderr,''Out of memory!\n'');
return -1;
}
for(i=0;i<mx;i++)
{
mezo=malloc(my*sizeof(palya));
if(mezo==NULL)
{
fprintf(stderr,''Out of memory!\n'');
return -1;
}
}
vagy a 2. malloc is mx*sizeof(palya)-t foglaljon le? -
emitter
őstag
egyébként 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?
ha dinamikus memóriafoglalást is beleveszek a dologba, de még nem jut el a progi a futás közben addig a részig, ahol a memet din. foglalnám, (mertt még az elején várakozik egy inputra), mégis több mint 1MB-ot foglal a progi.
Akkor most mitől lehet ez?
Ha lefoglaltatok neki dinamikusan egy területet, az én számításaim alapján 2mb-ot kéne foglaljon, mégis 4megát foglal
aztán, mikor felszabadítom a memet, visszaesik az induló 1megára, szal jól működik ez a része
Viszont a nagy problémám az, hogy mikor többször hívom a progit (nem zárom be, csak a memóriafelszabadítás elvégeztével visszatérek az elejére), szóval néhány ilyen menet után elszáll, sokszor simán csak kilép, máskor feldob egy hibaüzit, hogy illegális memóriaműveletet végzettpedig minden ciklus után felszabadítottam a lefoglalt memót
Az az érzésem, h nem működik megfelelően ez a din-foglalás, mintha bennmaradna a mem-ben az adat, és egy idő után túlcsordulna (malloc-cal csinálom a foglalást)
segítsetek pls!!! -
emitter
őstag
válasz
Jester01 #1001 üzenetére
Igen, azt a cella-t csak elnéztem, nem ezt akartam írni
Köszi a scanf-hez az ötletet, de még mindig van rajta mit javítani, mert ha pl olyat adok be, hogy ''9,10g'', azaz a megengedett ''int,int'' végére még egy betűt is írok, akkor elszáll az aranyos!
Ezt hogy tudnám kivédeni?
Aztán, ha először beadok pár entert, majd utána adom meg a két számot, akkor is összedől
most így néz ki:
(mx,my,temp,pmeret int típusúak)
do{
system(''cls'');
printf(''Mekkora palyan szeretne jatszani? (sor,oszlop) '');
temp=(scanf(''%d, %d'',&mx,&my));
while(getchar() != '\n'); //scanf pufferenek uritese
}
while( (temp!=2) || (mx<pmeret) || (my<pmeret) ); -
emitter
őstag
válasz
Jester01 #999 üzenetére
Hát nagyon hálás vagyok neked, pont ez a linkelt oldal kellett nekem
tök érthetően leír mindent, pedig ráadásul angol
akkor nekem uezt kell leírnom, csak a mutatók nem int-re hanem egy struct-ra fognak mutatni, ugye?
így:
...
typedef struct
{
int...
} palya;
...
main()
{
...
palya **cella;
...
cella=malloc(mx*sizeof(palya*)); //dinamikus memoriafoglalas
if(cella==NULL)
{
fprintf(stderr,''Out of memory!\n'');
return -1;
}
for(i=0;i<my;i++)
{
cella=malloc(my*sizeof(palya));
if(cella==NULL)
{
fprintf(stderr,''Out of memory!\n'');
return -1;
}
}
for(i=0;i<mx;i++) free(cella); //memoriafelszabaditas
free(cella);
...
Más:
ez végtelen ciklusba kerül, ha karaktert adok be neki, miért?
do{
system(''cls'');
temp=0;
printf(''Mekkora palyan szeretne jatszani? (sor,oszlop) '');
temp=(scanf(''%d, %d'',&mx,&my));
if(temp==NULL) continue;
}
while(temp!=2); //bekeres, amig pont 2 parametert kapunk -
emitter
őstag
válasz
Jester01 #997 üzenetére
aha, akkor ezt most a main-be írjam?
ha jól érteleztem, akkor lesz egy state típusú struktúrám, aminek elemei a 2D-s tömb méretei, és egy cell típusú elemekből álló cells nevű struktúra?
miért kell a cell*, miért nem elég a cell?
mit tárolnék a cell típusban?
mégis maradnék a 2D-s tömbnél, erre is tudnál írni egy deklaráció-példát?
én így írtam eddig:
struct cell
{
int vmi;
int vmi;
...
} cella;
cell **tomb (azért nem tomb[][], mert így meg kéne adnom előre a mértetét) -
emitter
őstag
válasz
Jester01 #995 üzenetére
köszi szépen!
még csak most tanulgatom a C-t, nem megy minden elsőre
lenne még egy kérdésem:
-az aknakereső-progimban 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 lenne
-a tömb méretét a progi futása közben a felhasználó adná meg (mekkora pályán akar játszani)
-van egy-két függvényem, amelyeknek ezt a 2D-s tömböt kéne átadni paraméterben, úgy, hogy változtatni is tudják a tartalmát (gondolom a tömb címét kell átadni)
és akkor a kérdés: hogyan érdemes megvalósítani ezt a tömböt? Globális változóként deklarálni, vagy csak a main-en belül, vagy van vmi egyszerűbb és jobb megoldás a bonyolult tömb kiváltására?
(próbáltam már mindenféleképpen megvalósítani ezt a rendszert, de a progi a függvények hívásakor mindig elszáll, és nem tudom, hol a hiba)
köszi előre is! -
emitter
őstag
Szerintetek hogyan érdemes egy aknakereső progit írni: konzolos, dos-grafikás, vagy esetleg windóz-grafikás a jó választás? A tanárom szerint a win-grafika nem nehéz, de én mégsem érzem olyan hűdekönnyűnek
Az feltétel lenne, hogy a koordinátákat ne kézzel kelljen megadni (beírni), hanem kurzornyilakkal elnavigálni a megfelelő celláig, majd enter.
Win-grafikával pedig egérrel kéne kattintani.
Konzolos ablakban meg lehet jeleníteni a kurzort, és lehet pozicionálni?
konzolos ablakon nem dos-ablakot, hanem wineset értek. -
emitter
őstag
az mit jelent hogy ''invalid use of array with unspecified bounds''
másik, hogy van egy 2D-s tömböm, ennek hogyan tudom a méretét (sorok/oszlopok) kiszámítani?
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 (fájlba akarom írni a tömböt, na ennyi a lényeg) -
emitter
őstag
ha minden nap otthon ülnél, és programoznál, akkor talán lenne erre esély, de nem hiszem, hogy működne a dolog...
egyáltalán mit értesz az alatt, hogy ''mesteri szint''az ember mindig tanulhat valami újat
könyvet sajna csak C-t tudok ajánlani, mert mi azt tanulunk (a Benkő-Tóth féle), de uennek a kiadónak van C++os könyve is, az se lehet rosszabb [link] -
emitter
őstag
válasz
Jester01 #980 üzenetére
köszi a linkeket!
végülis rátaláltam egy oldalra, és ezzel oldottam meg a problémát [link]
viszont nem igazán tudom értelmezni a clrscr() -t
úgyhogy írtam egy saját törlőfv-t, de nem tudom, h meddig töröljem a képernyő tartalmát, azaz hányadik sorig
nem értek hozzá, de ha egy konzolablakban véget ér valahol a szöveg, akkor az utolsó karakterhelyen áll valamilyen lezárókarakter (pl. '\0') ?
vagy hogyan oldhatnám meg, hogy takarékosság miatt pontosan csak az utolsó sorig törölje a képernyőt?
vagy olyan cucc, ami az adott kurzor-pozíción álló karaktert adja vissza? -
emitter
őstag
válasz
Jester01 #976 üzenetére
ok, köszi
akkor megpróbálkozom ezzel a winapival
ez ugye szabványos cucc, devc ismerni fogja?
ha nem az se baj, nemsokára visualC-t szerzek
a haragos szmájli nem neked szólt, hanem a windóznak, vagy inkább magának a helyzetnek, hogy még mindig windózt használok, mert suli közben egyszerűen nincs időm linuxot fölrakni, megszokni, beletanulni
majd talán karácsony után, meg a vizsgaidőszak elteltével lesz erre mód... addig még szívok egy picit a puhával -
emitter
őstag
válasz
Jester01 #970 üzenetére
bocs, de az ncurses linuxos, nekem meg még sajna windózom van
a winapi-s dolgot nem igazán értem: ez miért dolgozik mindenféle windózos cuccokkal, mikor konzolban fut a progi? mi nem tanultunk még ilyeneket, szal a c nyelv ezen része elég kínai
egyszerűbben nem lehet megoldani a dolgot? devc-t nem tudom rávenni arra, h elfogadja a borlandos függvényeket? -
emitter
őstag
-
emitter
őstag
Nekem az a kérdésem, hogy devc++ miért nem értelmezi a turboC függvényeket?
pl. randomize, random, clrscr, gotoxy stb.
egyáltalán mi az a turbo c? a devc++ a szabványos ansi c-elemeken kívül más nem kezel?
ha pl. clrscr nincs, akkor hogyan tudom törölni a karakteres képernyőt?
hogyan tudok karakterkiírást pozicionálni?
várom az ötleteket
Jester01: ez valami megállapodás? csillagászati okai vannak?
[Szerkesztve] -
emitter
őstag
válasz
* GeniuS * #950 üzenetére
szerintem itt kérdezz: [link]
linux topic, de az végülis unix, biztos tudnak segíteni
-
emitter
őstag
végülis az aknakereső ablakos megoldása mellett döntöttem
ha elakadok, majd jövök segítségért
addig is ha vkinek van ilyenről tapasztalata v tanácsa, szívesen fogadom -
emitter
őstag
jó, és egy girbe-gurba függvénynél hogyan rajzolsz vonalakat?
a pixeleket úgy értettem, hogy ne essen szét a fv, összefüggőnek látszódjon, ezért olyan kicsi ''felbontással'' dolgozni, amilyen kicsivel csak lehet, azaz a ciklus lépésközét nagyon kicsire kell tenni
persze lehet, h rosszul gondolom, neked biztosan nagyobb tapasztalatod van ebben
nem tudnád vhogy eljuttatni azt a szakdolit? -
emitter
őstag
Én is gondolkoztam ilyen függvény-ábrázoló progi készítésén, de valszeg nem ezt fogom házinak megírni.
Ha jó az elgondolásom, én úgy csinálnám, hogy egy ciklussal bizonyos lépésközzel (mondjuk 0.1, vagy még kisebb) minden x-re kiszámlonám az y-értéket, majd az így kapott koordinátájú pixelt berajzolnám. Természetesen mindezt egy adott intervallumban, mondjuk -100 és +100 közötti x-ekre. Ja és előtte megrajzolnám a koord. tengelyeket.
Közelebbi tanácsot sajnos nem tudok adni, én is most kezdtem a C-t, a helyedben átolvasnám egy C-könyv grafikával foglalkozó részét.
Sok sikert! -
emitter
őstag
Sziasztok!
Tudnátok tanácsot adni, hogy félévi nagyházinak milyen programot írjak? C-ben kell, kb 1,5 hónapom van rá, nem kell rögtön oprendszert írni, pl most még csak a fájlműveleteknél járunk. Én eddig egy függvényábárzoló progira gondoltam, valakinek van ilyesmivel tapasztalata? Egyáltalán ablakos felületre csináljam, vagy csak dos-grafikával? Nehéz ablakozóst programozni? Vagy C-builderrel azt is könnyű?
Esetleg valami más ötlet hasaonló kaliberű progihoz?
Köszi előre is!
Kristóf -
emitter
őstag
Hát így első ránézésre semmit!
Egyrészt kihagytál pár case-t az ágakban:int main()
{
switch (5 / 2) {
case 1: printf(''Morgo\n'');
case 2: printf(''Tudor\n'');
case 3: printf(''Vidor\n'');
default: printf(''Hofeherke\n'');
}
Így már elvileg a 2. opciótírja ki, azaz ''Tudor'',
mert ugye kiértéleki a switch() paraméterét, aminek egy kifejezésnek kéne lennie, de végülis egy szám is az, szóval 5/2=2 (2.5 kerekítve), azaz a 2. pontot fogja végigcsinálni.
Viszont, mivel nem raktál minden egyes 'statement' (azaz opció) után egy break; utasítást, végre fogja hajtani a 3. és a default ágat is, vagyis a progi eredménye ez lesz:
Tudor
Vidor
Hofeherke
A helyes kód:int main()
{
switch (5 / 2) {
case 1: printf(''Morgo\n''); break;
case 2: printf(''Tudor\n''); break;
case 3: printf(''Vidor\n''); break;
default: printf(''Hofeherke\n''); break;
}
Egyébként itt tudsz a függvényről (és úgy általában a C-ről) többet megtudni: [link] AJÁNLOTT!
Sok sikert!
szerk: 8472: lassú voltam
[Szerkesztve] -
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) -
emitter
őstag
hali!
c-ben hogyan lehet azt ellenőrizni, h egy adott érték benne van-e egy tömb elemei között vagy nem?
Pascalban egyszerű volt, ottvolt erre az ''in'' operátor, igaz csak halmazoknák működött
viszont c-ben ha jól tom, nincsenek halmazok...
szal azt akarnám elérni, h miközben bekérek billről számokat egy tömbbe, mindig ellenőrizné a bekérés után, h nem írtam-e korábban már be ugyanazt a számot, azaz nem szerepel-e az adott szám a tömbben... ugye érthető a problémám
várom az ötleteket!
köszi előre is! -
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... -
emitter
őstag
az lenne a kérdésem, hogyan oldható meg c-ben a köv. probléma:
be akarok kérni (konzolban) x számot, úgy, h egy szám beadása után az enter-rel kérné a progi a köv. számot. Ezt addig kellene csinálni, amíg egy üres enter (vagy akármi más vezérlőkarakter) nem kerül lenyomásra.
szóval valahogy így:
1. szam=25 //[enter]
2. szam=12 //[enter]
...
n. szam=[enter]
remélem, érthető
(én a getch()-csel próbálkoztam, de kevés sikerrel. A referencia, és a c-könyvem se hoz ilyesmire példát)
köszi -
emitter
őstag
ha tudsz angolul:
Bővebben: link
Bővebben: link
egyébként gugli 1-2 találata a ''unix script sed''-re -
emitter
őstag
Bővebben: link
és a hozzá tartozó a,b,c stb. sztringeket pedig úgy tudnád kiírni, hogy kétdimenziós tömböt csinálsz, amibe az egyik sorba az értékeket, a másikba meg a sztringeket írod
de ez csak egy 5let, lehet h van egyszerűbb megoldás is -
emitter
őstag
válasz
Protezis #859 üzenetére
Köszi, így működik.
De nincs erre mégis másik megoldás? Visual C++ simán megtartja a konzolablakot.
Újabb probléma: nem tudok pontosvesszőt írni, nem csinál semmit az ''AltGr+,'' kombináció, az ''AltGr+.'' kommentet nyit, a többi altgr-es cucc jól műxik, csak ez a kettő nem.
Megnéztem a hotkeys-nél, semmi nincs beállítva erre a kombinációra. -
emitter
őstag
Hali!
C-hez devc++ környezetet (4.9.9.2) használok (használnék), de a fordítás/futtatás után rögötn bezárja a konzolablakot (amiben a progim futna). Ezen lehet vhogy segíteni? Vagy visszanézni vmi bill.kombinációval?
Sőt, ha a lefordított exe-t indítom el, azt is rögötn bezárja...
Egyáltalán mi értelme van ennek, mármint az azonnali bezárásnak? Mindenki szeretné látni a programja futását, vagy eredményét, nem?
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- Hamarosan megjön az ASUS házak új zászlóshajója
- Intel Core Ultra 3, Core Ultra 5, Ultra 7, Ultra 9 "Arrow Lake" LGA 1851
- Mobil flották
- Counter-Strike: Global Offensive (CS:GO) / Counter-Strike 2 (CS2)
- E-roller topik
- No Man's Sky (PS4, PC, Xbox One)
- Mibe tegyem a megtakarításaimat?
- Új szintre emeli a csalók elleni védelmet a Battlefield 6
- Autós topik
- Okos Otthon / Smart Home
- További aktív témák...
- LENOVO T14 GEN 5 l TÖBB DARAB l RENDELÉSRE IS
- Apple iPhone 16 Pro Max 256GB,Natúr Titán Színben ,2028.04.29-ig iStyle Garancia,Makulátlan állapot.
- ASUS ROG Ally RC71L-NH001W. 512GB. SSD. AMD Ryzen Z1 Extreme. 16GB. LPDDR5X. RAM. CSERE IS.
- iPad Pro 11" M4 2024 256GB Cellular - Apple garancia, 100%, független, ezüst, doboz, számla
- Macbook Pro 16" M4 PRO - 2025 gyártás, 14/20 mag, 24GB RAM, 1 TERA SSD, 2 ciklus - Apple garancia
- Bomba ár! Dell Latitude 7320 - i5-11GEN I 8GB I 256SSD I HDMI I 13,3" FHD I Cam I W11 I Garancia!
- HATALMAS AKCIÓK! GARANCIA, SZÁMLA - Windows 10 11, Office 2016 2019 2021,2024, vírusírtók, VPN
- GYÖNYÖRŰ iPhone 13 mini 128GB Pink -1 ÉV GARANCIA - Kártyafüggetlen, MS3048, 94% Akkumulátor
- Update 08.01. - Bomba árak 2025-ben is! Üzleti - Consumer laptopok DELL FUJITSU HP LENOVO
- Új Asus F16 TUF WQXGA 165Hz G-Sync i7-14650HX 16mag 16GB 1TB SSD Nvidia RTX 5050 8GB Win11 Garancia
Állásajánlatok
Cég: FOTC
Város: Budapest