Hirdetés
- Gamer headsetek a felsőkategóriából
- ThinkPad (NEM IdeaPad)
- Androidos fejegységek
- OLED TV topic
- Milyen notebookot vegyek?
- DUNE médialejátszók topicja
- Amlogic S905, S912 processzoros készülékek
- HiFi műszaki szemmel - sztereó hangrendszerek
- MediaTek alapokon dolgozik a Honor Pad V9 is
- Modding és elektronikai kérdések
-
PROHARDVER!
Új hozzászólás Aktív témák
-
Miracle
senior tag
válasz emitter #1399 üzenetére
IMHO teljesen felesleges a hangkartyaval foglalkozni, kezdj vaw streammel, es legyen vaw stream a kimenet is, ezt mind a ket rendszeren nagyon konnyen le tudod jatszani, elo tudod allitani, es nem kell vele szorakozni. namarmost vaw streamet nem kuldunk at halozaton, mert a rendszergazda sovenyvagoval disconnectel a halozatrol, valamifele tomoritest kell alkalmazni. hasznalhatsz valami vesztesegmentes stream tomorito eljarast, mint pl lz algoritmusok, vagy hasznalhatsz valamilyen minosegveszteseges tomoritest, mint pl. mp3 vagy ogg (utobbit javaslom, mert jobban tomorit) majd az igy letrejovo adatfolyamot valahogy at kell tuszkolni a halozaton, ami egy TCP csatorna felett nem egy nehez feladat. a nehezseg ott kezdodik az egeszben, hogy neked detektalnod kell, hogy ha keves a savszelesseg akkor nyilvan nem er el eleg adat a fogadohoz, ekkor valahogy ra kell birni a szervert, hogy nehany masodpercet ugorjon at, esetleg csokkentsen bitratat stb.stb. ez a nehez resze a feladatnak szerintem. Azon kivul lehet kis problema a TCP kapcsolattal is, de ezzel szerintem oprendszer szinten kell foglalkozni, puffermeretek beallitasa, utemezo algoritmusok beallitasa stb. Segitesz magadon, ha mind a ket oldalra egy eleg tetemes meretu buffert sikerulne beepitened, es igy kis kesleltetesert cserebe a felmerulo problemakat elore lathatod, es nem tuzolto munkaval kell majd a streamet rendberakni. mindenkeppen szukeged lesz ennek az elkeszitesehez ezekre:
vaw fileok megnyitasa, esetleg atkodolasa (mp3lame, oggvorbis remek libek, sok anyag letezik, ez nem gazos)
valamilyen halozati kapcsolat kezelese, en socketeket ajanlok, az eleg baratsagos dolog, rengeteg anyag
valamilyen szintu operacios-rendszer ismeretre a finomhangolashoz
sztem ennyi eleg is ;)
sok sikert, telleg szep feladat ;)értelmező késziszótár :: rekurzió --> lásd : rekurzió
-
emitter
őstag
válasz Jester01 #1398 üzenetére
Szép feladat.
De azért nem reménytelen, ugye?
Nem értem, hogy miért különbözőek a két rendszer által küldött streamek... ez nem csak a hangkártyától függ? Mi az a full-duplex hangkártya, és mit csinál?
El tudnád magyarázni, hogy hogyan is fog működni a rendszer? Szóval milyen formátumban szaladgálnak majd a hangok, hogyan küldöm/fogadom őket, a dolog hálózati része, ilyesmik...
Mire guglizzak rá, hogyan induljak el?
thx
mod: hálózatokhoz, hang-cuccokhoz lövésem sincs szóval jó lenne valami olvasnivaló
[Szerkesztve] -
Jester01
veterán
válasz emitter #1397 üzenetére
Elvileg elég a virtuális hangkártya a szerverbe, de egyszerûbb egy full duplex hangkártyával ''felvenni'' a kimenõ hangot.
Olyan szinten lehet kompatibilitás, hogy a win által szolgáltatott streamet linuxon hallgathatod vagy fordítva. Viszont a feladat jelentõs része (értsd: hang kezelés) tök máshogy néz ki a 2 rendszeren. Szóval véleményem szerint a két platformra külön kell megírnod a progit. Bár lehetnek benne közös részek, pl. a magas szintû protokoll kezelése.
Szép feladat.Jester
-
emitter
őstag
Hi!
Ebben a félévben is köll egy prog-beadandót írni (C++), szeretném időben elkezdeni
amire gondoltam, az egy hálózatos zenelejátszó cucc lenne,
de nem akármilyen:
a lényege hogy az A gépen elindítok valamilyen streamet, ezt a progi (a hangkártya kimenetéről?) feldolgozza, átküldi B gépnek hálózaton, majd B gép szépen kinyomja a saját hangkártyájára.
A kérdéseim ezzel kapcsolatban:
-az A gépbe kell-e egyáltalán hangkártya, vagy lehet vmilyen virtuális eszközről leszedni a hangot? (a progiba nem akarok zenelejátszót integrálni, más progik által keltett hangot akarok vele transzportálni)
-milyen irodalmat tudtok ehhez ajánlani, milyen témaköröknek olvassak utána?
-mennyire nehéz egy ilyen progit úgy megírni, hogy windózos és linuxos gépek között teljes kompatbilitás legyen? Értem ezalatt, hogy - mivel gondolom a proginak 2 részből kell állnia, egy szerver, és egy kliens részből - szóval írnék egy-egy szervert/klienst linuxra és windózra is, akkor ezek gond nélkül tudnának egymással kommunikálni? (windóz-linux)
Ha minden részt szabványos C++ban írok, akkor ezzel a kompatibilitással nem lehet gond, ugye?
Minden észrevételt, jótanácsot örömmel várok!!!
Köszi előre is -
Robaj
addikt
válasz Miracle #1395 üzenetére
Köszi, de már elvileg megvan, a 21!-ot tudom még belegyömöszölni double-ba
Mint írtam, progi megvolt, csak egy szám kell, h. hibaüzit dobjak ki rá, h. túl nagy a szám, kisebbel próbálkozz.
És sztem 21.
[link]
Mivel a 21-st még ki tudja számolni pontosan. A 22-nél már kerekít. -
Miracle
senior tag
#include <iostream>
long fact(long n)
{
long toret = 1;
for (long i = 1; i <= n; ++i)
toret *= i;
return toret;
}
int main()
{
long max = 2;
while ( fact(max) / max == fact(max - 1) )
++max;
--max;
std::cout << ''A legnagyobb szam amelynek nem csordul tul a faktorialisa : '' << max << std::endl;
}
ez megmondja ;) ha atirod a longot double-ra akkor is mukodik, de en sepciel nem vagyok hive annak, hogy lebegopontos tipusokban egyes szamokat taroljunk, es ugy tegyunk, mintha ez teljesen rendben lenne ;)
egyebkent ez a resz:
Ha jól tudom 15 számjegyig pontos a double.
ezt inkabb felejtsd el, es nezz utana hogyan mukodik a lebegopontos szamabrazolas, talalsz rola remek cikket pl a wikipedian.értelmező késziszótár :: rekurzió --> lásd : rekurzió
-
Robaj
addikt
Kérdés: Visual C, Double típus. Ha jól tudom 15 számjegyig pontos a double.
A progit már megírtam.
És az lenne a kérdés, h. Melyik az a legnagyobb szám, aminek faktoriálisa nem
csordul túl? -
REDeath
őstag
Microsoftnál néztem de ott nem letölthető a skin creation giude, és elég rossz onnan nézegetni. Vagy valahogy le lehet szedni az MSDN libraryból azt ami kell?
thxKodály mondta volt: "Legyen a zene mindenkié". en inkabb neki hiszek, mint az ASVAnak
-
REDeath
őstag
Sziasztok! Nem tudtok linket vagy leírást Media Player skin programozáshoz?
Én csak a nagyon alap dolgokra jöttem rá, se mute se hangerő se shuffle se repeat funkciót nem tudtam beleírni úgy hogy az általam készített skinnel menjen.
megnéztem a gyári skineket, ott viszont túl sok paraméter van ezekhez(pl. minimize, repeat, volume, stb.) Így meg elég gáz hogy csak play, pause, next, prev, stop,meg exit van. Előre is köszi.Kodály mondta volt: "Legyen a zene mindenkié". en inkabb neki hiszek, mint az ASVAnak
-
c4-eXp
aktív tag
válasz emitter #1389 üzenetére
Nekem az első linkelt van meg, sztem korrekt kis könyv, ha csak az alapok kellenek, akkor tökéletesen megfelelel. A 3. linkelt könyvet nemrég vette meg a barátom. Azt mondta rá, hogy jó, viszont más stílusú, mint az első. Ha kifejezetten a c++ nyelvet akarod elsajátítani, akkor sztem az elsőt válaszd. A másik könyv asszem már feltételez egyfajta előismeretet, és inkább a programozási módszereket, praktikákat, trükköket részesíti előnyben. Inkább ilyen gyakorlati féle könyv. Tulajdonképpen a kettő együtt a legjobb, mivel kiegészítik egymást. A Stroustrup féle könyv pedig szerintem felesleges, ha csak az alapok kellenek.
while (state(Korso) != _BROKEN) go(Korso, &Kut);
-
emitter
őstag
hi!
C++ könyvet keresek, de nem akarok zsákbamacskát venni tanár az OO-szoftverfejl. c -t ajánlotta, de ezenkívül van még pár. Kérdés, ti melyike(ke)t ajánljátok? (akár 2-t is vennék, ha nagyon dícséritek )
szal van eddig ez a 2:
[link]
[link]
[link]
vélemények, esetleg tudtok más könyvet ajánlani?
thx
[Szerkesztve] -
Miracle
senior tag
válasz KngAlex #1383 üzenetére
valtozo deklaracio:
int i;
double d;
double *pd = malloc(sizeof(double)); /*ez a heapen foglal neki helyet, nem a stacken*/
kezeles:
i = 2;
d = 3.0;
i = (int) d;
*pd = 5.5;
d = *pd;
ha mar nincs szukseged a memoriara amire a pd mutat akkor
free (pd);
tomb:
int a[4];
a[0] = 0; /*elso elem*/
a[3] = 3; /*utolso elem*/
ez a tomb a stacken van.
ez igy keves az elethez. ha meg nem volt dolgod C szeru nyelvvel, akkor mindenkeppen keresd meg valami konyvesboltban a Ritche - Kernighan fele ,,A C programozasi nyelv'' c. konyvet, mert rengeteg meglepetest fog neked tarogatni, es ha nem eleg mely a tudasod rengeteget fogsz szenvedni vele, es egy igazi C coder kodjat nem fogod megerteni.
szerk: melyik egyetemen tanulsz?
[Szerkesztve]értelmező késziszótár :: rekurzió --> lásd : rekurzió
-
Protezis
őstag
válasz KngAlex #1380 üzenetére
Első dolog, hogy letöltöd/lefénymásolod stb. az előadásanyagot. Ha ez nem elég, veszel egy könyvet. Ha konkrét kérdésed van, először utánanézel neten, C-ről millió oldalt találhatsz, ha nem megy így sem, segítséget kérsz itt, vagy más fórumon. Sokan nagyon szívesen segítenek (én is, ha tudok)
-
KngAlex
tag
válasz Miracle #1379 üzenetére
Ha beírom a keresőbe azt hogy C szerinted mit fog kidobni? Mert szerintem mindent csak azt nem ami nekem kell
Szeretnék segítséget kérni C programozáshoz. Programoztam már más nyelveken (Assembly, Pascal) de C ben még nem és most az egyetemen ezt tanulok.
Úgyhogy az elejétől kellene de nem vagyok teljesen ''béna'' hozzá. -
KngAlex
tag
Bocs hogy ide írom, van külön ''sima'' C vel foglalkozó topic?
Segítség kellene. -
EnCica
csendes tag
Sziasztok!
Most írok először! És azért mert szakdogát kellene írnom .
A téma már megvan(kereskedelmi nyilvántartó progi). Már a terve is megvan csak a gyakorlati megvalósításban kellene nekem jó nagy segítség . C#-ban kell írni, mivel azt tanítják és nem nagyon tanultunk még adatbázissal kapcsolatos dolgokat hozzá
Szóval ha valaki tudna nekem segíteni ebben az lécci írjon mailt!!
Előre is köszike!!!
[Szerkesztve] -
BullSoft
tag
válasz Miracle #1374 üzenetére
Ma is keresgéltem, és ráleltem a magyarázatra, nem az oprendszeren/fordítón múlik
''A PASCAL nyelvben megismert EOF függvénytõl eltérõen mûködik a C feof( ) függvénye. Míg a PASCAL-ban az EOF elõre ''jósol'', addig a C-ben a feof( ) egy állapotjelzõ lekérdezésére szolgál, azaz C-ben a feof( ) akkor ad igaz értéket, ha egy korábbi mûvelet file végét jelzett.''
Igy a feltételbe fgets(puff, 255, f)!=NULL-t írva már helyesen működik.
[Szerkesztve]Állatkertben: -Apu! Nézd mennyi Linux!
-
Miracle
senior tag
válasz BullSoft #1373 üzenetére
az eof() akkor ad vissza igazat, ha megprbaltal olvasni onnan, ahol EOF van. igy szerintem ket lehetseges oka van :
1: az tortenik, hogy a fgets szepen elolvassa az utolso sort, es latja, hogy itt egy terminalo karater van (newline/eof) es akkor visszater, de a filevaltozo nem kerul invalid allapotba
2: lehet, hogy windows alatt minden textfile a vege elott tartalmaz egy CR LF tokent, ebben nem vagyok biztos, de ekkor a fgets nem az EOF miatt all meg, hanem a newline miatt, es meg egyszer olvasni kell belole, hogy latszodjon, hogy a kov. sor ures.
de ha ilyen kerdeseknel oprendszert, es forditot verzioszammal is postolnal az jo volnaértelmező késziszótár :: rekurzió --> lásd : rekurzió
-
BullSoft
tag
Hali!
Lehet amatőr kérdés, de ha van C-ben egy
while (!feof(f)) {
...
fgets(tmp, 255, f);
...
}
ciklusom, akkor a file utolsó sorát miért dolgozza fel mindig kétszer? (do-while-al is)
ProgZH-ban is írták a javítók hogy kétszer dolgozza fel, de MIÉRT?
[Szerkesztve]Állatkertben: -Apu! Nézd mennyi Linux!
-
Miracle
senior tag
válasz Forest_roby #1366 üzenetére
telepiteskor felajanl a cygwin par1000 csomagot, es azt hiszem, hogy a gcc nem default. egyebkent a devc++ is ugyan azt a GCCt hasznalja (azaz a windowsos portjat, ami mingw neven fut) mint ami egyebkent bennevan a cygwinben is.
értelmező késziszótár :: rekurzió --> lásd : rekurzió
-
emitter
őstag
válasz Forest_roby #1366 üzenetére
vagy próbáld meg devc++t jó C-re is, grafikus fejlesztőkörnyezet, nekem bejött (semmit nem kellett állítani rajta)
-
-
ALI_G
veterán
válasz Forest_roby #1366 üzenetére
Szerintem megkéne adnod a parancsokat a win-nek is hogy lássa. asszem ott a környezeti változok között a PATH-hoz kell hozzáadni a mappát, amibel a gcc van.
-
Forest_roby
őstag
hi!
Windows alatt is szeretném beállítani magamnak a c programozáshoz szükséges cuccokat. Persze mi mással mint a c fordítóval van bajom. Letöltöttem vmi cygwin nevezetü dolgot, azt írták a neten, hogy tartalmazza a gcc -t de egyszerüen nem sikerül használni. Azt írja ki a gcc parancsra, hogy command not found, persze nem találja a gcc-t, de akkor mit tehetek? vmi ötlet? másik progi?
(a borland c++ nem érdekel)
Elöre is köszi.-=Legyél Laza!=- __ ''Have you tried turning it off and on again?'' __ ''Is it definitely plugged in?'' /o\ :D:D
-
Jester01
veterán
-
Thyb
senior tag
Hi, mivel a kérdésem több totyikot is érint, igy ugy döntöttem itt teszem fel:
Az uj Acrobat 7 Designerében lehetőség van a lenyitható Combo és egyébb objektumok tartalmát XML-ből táplálni. A kérdésem a következő: Javaban van programozva, de hogyan határozom meg a file-t és az utvonalat?
Dolgozott már ezzel valaki?Ha a hatalom csúcsán nincs erkölcs, alatta nincs szabadság.
-
ReJim
őstag
valaki ügyködött már kylixben? mert kellene használnom portot (ki/be), de sehogy sem jön össze, valakinek nincs valami ötlete?
(borland delphi-ben sem működik a port($378):=1? ez csak pascalos lenne?)</end.?>
-
k.t.a.
senior tag
Nézegettem közben még példaprogit, és ott dinput.h-t, illetve a dinput8.lib-et használnak, csak az include elé kell egy #define DIRECTINPUT_VERSION 0x0800 konstans deklaráció. Kipróbáltam én is így (nem először), és jónak kellene lennie, de mégis, hibaüzenetet kapok a linker-től error LNK2001: unresolved external symbol _IID_IDirectInput8A. Az objeltumot ugyanúgy hozom létre mint a példaprogiban DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&m_DirectInputObject, NULL); ezért nem értem mi a baja. Olyan mintha a IID_IDirectInput8 konstans nem szerepelne a dll-ben, amit belinkelek. De akkor a példaprogiban miért müxik?
A help ezt mondja róla:
Unique identifier of the desired interface. This value is IID_IDirectInput8A or IID_IDirectInput8W. Passing the IID_IDirectInput8 define selects the ANSI or Unicode version of the interface, depending on whether UNICODE is defined during compilation. -
k.t.a.
senior tag
válasz azsolty #1359 üzenetére
Azzal nem megy, mert a help pont azt mondja, hogy a DirectX9SDK-ban használjam a dinput8.h-t.
To create a DirectX 8.x interface with the DirectX 9.0 software development kit (SDK) without using CoCreateInstance :
1.Set ''#define DIRECTINPUT_VERSION 0x0800'' before the include statement for Dinput8.h.
2.Call DirectInput8Create instead of DirectInputCreateEx.
3.Link to the Dinput8.lib library instead of Dinput.lib. -
k.t.a.
senior tag
válasz Miracle #1356 üzenetére
Semmi gond. Nem tudsz valakit, aki DirectX programozással foglalkozik C++ban. Mert szükségem lenne a már említett dinput8.h fájlra, mert a DirctInput még mindig a 8-as verziószámnál tart és az új SDK-ból ezt a fájlt kihagyták, és nem tudom honnan beszerezni. Az M$ oldala számomra nem hozzáférhető.
-
Miracle
senior tag
oké, így már értem, hogyan ertetted, elnezest az előző hozzászóláséert
igazábol a visszatérés Cben mindíg érték szerint történik, és igy nekem az az érzésem, hogy (ugyan úgy, mint paraméterátadásnál) pusztán hatékonysági okokból nem lehet. de ez csak megerzesértelmező késziszótár :: rekurzió --> lásd : rekurzió
-
k.t.a.
senior tag
válasz Miracle #1346 üzenetére
Jók a jegyzeteim, és a tanár is érti a dolgát, csak akkor szerintem arra gondolt, hogy olyat nem csinálhatsz, hogy pl int[4] fv(void) {....... return tomb;} int[4] tomb; deklarációval.
Hanem ahogy Te is mondtad az elején a függvény típusának pointert adsz meg (pl.: int*), és akkor a visszatérési értéked mi is lesz? Mert ha azt mondod hogy return tomb; Az előző példa alapján, akkor egy olyan változót adsz visszatérési értéknek, ami megszűnik létezni, mert az ugye a függvény lokális változója. Na ezért nem lehet tömb sem a visszatérési érték. Szvsz. Vélemény? -
9CS
senior tag
Nem tudja Valaki, hogy a Visual C++ webBrowser-ét hogy lehet rávenni arra, hogy egy richTextBox Text-et jelenítsen meg? Vagy mi lenne a legegyszerűbb módszer arra, hogy a programon belül szerkezzek egy weblapot, és azt utána meg tudjam nézni, szintén a programomon belül? Előre is köszönöm.
'' - Tizenkettőt üt az óra, térjenek márrrrgghhhh... ''
-
azsolty
csendes tag
válasz Miracle #1350 üzenetére
Mar exkuzaltam magam struc ugyben. Amugy gcc-t hasznalok.
A config file beolvaso azert erdekelne mert neha nagyon sok parameter is belekerulthet egy programba. Ilyenkor egyszerubb lenne definialni a valtozo osszerendelesi tombot es indulaskor incializalni az egeszet...
Sok programnal lattam mar ilyet igy eleg bevett szokasnak tunik es nekem is szompatikus. De tobbnyire mindnki ujra megirta a sajat rutinjait es belegyogyitotta a kodba -
-
azsolty
csendes tag
válasz Miracle #1342 üzenetére
Kosz a kimerito valaszt!
A 2-es verzio mukodik mert struct-ot nem lehet visszaadni. (Mivel osszetettebb muveletek is belekerulhetnek ilyenkor mugysem rossz ha az int altal visszateresi erteket tudok adni a belso folyamatokrol).
A sikeren folbuzdulva lenne egy mas jellegu kerdesem is: tud valaki olyan kesz kodrol ami az egyszeru config file-ok beolvasasat (param=value formatumu text file) elvegzi es osszekapcsolja a belso valtozokkal? Beleneztem mar par opensource programba amelyeknek ilyen a config fileja de tobbnyire tulsagosan bele van integralva a program tobbi reszebe ez a kod ahhoz hogy egyszeruen ki tudjam emelni... -
Miracle
senior tag
hat akkor az egyetemi jegyzetedet olyan bizalommal forgasd hogy aki irta bizony meg nem programozott Cben igazan, ugyanis mint mondtam tombok parameteratadaskor pointerre konvertalodnak, es pointert adhatsz vissza, az pedig mutathat tombre, szoval ugyan annyira lehet tomb parameter, mint visszateresi ertek
értelmező késziszótár :: rekurzió --> lásd : rekurzió
-
k.t.a.
senior tag
válasz Miracle #1344 üzenetére
Utána néztem és a függvényeknek nem lehet tömb visszatérési értéke. Ezt az egyetemi jegyzetemben találtam.
Esetleg valaki nem tudna küldeni az adataimnál lévő címre egy dinput8.h fájlt. Mert a 9-es dirctx sdk-ban nincs benne, csak a régebbi 8.0-ásban volt, és szükségem lenne rá. THX -
Miracle
senior tag
hmm. tomb biztos lehet, hiszen a tomb parameteratadaskor pointerkent viselkedik... struct az lehet gazosabb, az lehet hogy standard C szerint nem, de erdemes megnezni hatha a forditod engedi, vagy hatha a C99 mar tudja...
en alapvetoen C programokhoz is c++ forditot hasznalok, igazi C forditok neha nyuszitettek hulyesegekert, azota inkabb elkerulom oketértelmező késziszótár :: rekurzió --> lásd : rekurzió
-
Miracle
senior tag
válasz azsolty #1340 üzenetére
ez a parameteratadasi mod, amit itt irsz az ertek szerinti parameter-atadas. az aktualis structrol, amivel meghivod a fv-t keszul egy masolat, es azon dolgozol a fv belsejeben vegig. amikor a fv. visszater a masolatod (ami a fv. torzseben lokalis valtozo) elvesz teljesen. ez termeszetesen mas parametertipusokra is vonatkozik, intek, mas structok, pointerek is.
ha Ct hasznalsz ket megoldas van:
1: visszaadod visszateresi ertekkent, ez nagon nem hatekony, de igy kell kevesebbet gepelni.
2: int initparamarray(struct authinfo *userinfo);
ilyenre modositod a fvt, azaz atirod szepen a mezo-elereseket pointeren keresztulive, es amikor hivod a fv-t pointert adsz at.
ha c++t hasznalsz, akkor eleg modositani a fv. headerjet ilyen modon:
int initparamarray(struct authinfo &userinfo);
es mar meg is oldodott a problema, ez a referencia szerinti atadasértelmező késziszótár :: rekurzió --> lásd : rekurzió
-
k.t.a.
senior tag
válasz azsolty #1340 üzenetére
A függvénynek pointereket adj át szerintem, és akkor jó lesz.
Pl.: típus függvénynév( *típus változó1){*változó1 = érték;}
Amikor meghívod akkor meg függvénynév( &változó2);
Talán nem írtam nagy hülyeséget.
Meg tudna valaki lepni egy dinput8.h fájllal a DirectX8SDK-ból. Tudom, hogy le lehet tölteni az m$ oldaláról, de túl sok az egész sdk, meg .... tudjátok. Thx -
azsolty
csendes tag
Sziasztok! Nemreg ismerkedem a C-vel es van egy-ket dolog ami nem tiszta, remelem lesz itt olyan aki tud es hajlando segiteni
(Elore is bocs a valoszinuleg lama kedesekert!)
Szet akarom szorni a fuggvenyeimet tobb helyre ezert van egy kulon file amiben hasznos fuggvenyek vannak (a .h pedig includeolva a fo .c-bol). Az egyik ilyen egy struktura inicializalasat csinalna.
Valami ilyesmi lenne:
int initparamarray(struct authinfo userinfo);
A fuggvenyben pedig mindenfele memset es default ertek beallitasok vannak.
A bajom az, hogy az inicializalas megtortenik (a fuggvenybol kiiratva a struktura elemket a megfelelo ertekeket kapom), viszont a main()-ben ezek mar uresek. A valtozok viszont inicializalva maradtak, mert tudom irni oket rendesen, csak az ertekek vesznek el. (int -> 0, char -> ures).
Mit csinalok rosszul? -
KngAlex
tag
Tud itt valaki assembly-ben programozni?
-
Jester01
veterán
válasz emitter #1334 üzenetére
Igen, ez alap linuxon. A bemenet soronként pufferelt és echo módban van.
Használd a wincon.h-t, azért írtam
A terminálkezelõ curses könyvtár átkapcsolja a bemenetet és van benne getch is.
Egy kicsit módosítani kellene a headert, mert az inicializálás eléggé igénytelen módon az aknakeresõ progidhoz van illesztve (ha jól emlékszem arra épít, hogy az elsõ hívás egy képernyõtörlés lesz.)Jester
-
emitter
őstag
válasz Jester01 #1328 üzenetére
na, így egy fokkal jobb, de a fflush vhogy nem műxik
szóval azt szeretném, h ha nyomok 1 entert, vagy bármilyen más billt, akkor az ne jelenjen meg a képernyőn. Ráadásul most csak az entert érzékeli lenyomásként, a többi karakterre nem írja ki h ''gomnyomas tortent''
emitter@LAPTOP:~$ ./time_select
0
gomnyomas tortent 1
2
gomnyomas tortent 3
gomnyomas tortent 4
gomnyomas tortent 5
6
j7
gomnyomas tortent 8
9
emitter@LAPTOP:~$
vagy nem volt érthető, h mi a hiba
ja és getch()-re parázik, csak getchar-t fogadja el
time_select.c.text+0xac): undefined reference to `getch'
collect2: ld returned 1 exit status
mod: kód: [link]
[Szerkesztve] -
emitter
őstag
válasz Mr.gonzales #1332 üzenetére
hi!
én ezt találtam csak az a baj, h prolog nyelven
talán segít valamiben
[link] -
Mr.gonzales
csendes tag
Sziasztok!
Kérdésem,hogy találkozott-e már valaki a grafilogika nevezetű igen érdekes játékkal,
és e találkozást megörökítette-e pl. c++-ban írt kód formályában is???
Azaz:kódolta-e már valaki ezt a játékot és a forrást - akár nagyon lebutítva - oda tudná e adni nekem?
Előre is köszönöm a segítséget,Jani.zavard össze a világot: mosolyogj hétfőn!
-
Protezis
őstag
válasz Jester01 #1327 üzenetére
Kösz szépen
Igen, elolvastam, amit írtál, és ezt mondtad valóban, csakúgy, mint én a válaszomban. Mindössze a jegyzetemet nem értem. Akkor egyetlen magyarázat az ottani példára, hogy azok globális változók, azért nics ott a static (és mégis az adatszegmensben vannak)
Mégegyszer köszönöm -
emitter
őstag
válasz emitter #1323 üzenetére
najó elég béna voltam, nem godnolkoztam
szóval müxik, de nem teljesen úgy ahogy én akarom:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
int
input_timeout (int filedes, unsigned int seconds)
{
fd_set set;
struct timeval timeout;
/* Initialize the file descriptor set. */
FD_ZERO (&set);
FD_SET (filedes, &set);
/* Initialize the timeout data structure. */
timeout.tv_sec = seconds;
timeout.tv_usec = 0;
// select returns 0 if timeout, 1 if input available, -1 if error.
return select (FD_SETSIZE,
&set, NULL, NULL,
&timeout);
}
int
main (void)
{
int i=0;
while(i<10)
{
if( input_timeout(STDIN_FILENO, 1) )
{
printf(''gomnyomas tortent '');
printf(''%d\n'',i);
i++;
}
else
{
printf(''%d\n'',i);
i++;
}
}
return 0;
}
ugyanis pl. 3 mp-ig várok, ok, számol 3-ig
aztán nyomok 1 entert, ekkor azt kéne kiírnia, h ''gomnyomas tortent 4''
majd kéne tovább számolnia, nem?
ehelyett ezt írja:
gomnyomas tortent 4
gomnyomas tortent 5
gomnyomas tortent 6
gomnyomas tortent 7
gomnyomas tortent 8
gomnyomas tortent 9
és mindezt 1 pillanat alatt, mintha már nem számolna a timeout
mit rontottam el -
Jester01
veterán
válasz emitter #1323 üzenetére
azt mondtad h szedjem ki a temp_failure-t, hát kiszedtem, de így meg a select ha jól látom, nem is hívódik meg sehol
Persze, mert azt is kiszedted Talán azt hagyd benne, a return-nel egyetemben.
return select (FD_SETSIZE, &set, NULL, NULL, &timeout));
Már most nem tudom hogyan magyarázzam, ha az elõzõt nem értetted.
Na még egy próba.
Nézzük onnan, hogy mit szeretnél:
1. Ha a felhasználó megnyom egy gombot, akkor arra reagálni akarsz.
2. Másodpercenként kiírni az idõt.
3. Közben nem terhelni a processzort.
A 3. pont miatt meg kell mondani az operációs rendszernek, hogy az 1. és 2. események bekövetkeztekor fusson a progi. Ezt például a select függvénnyel lehet, ami azt tudja, hogy figyel tetszõleges számú fájlleírót megadott ideig. Billentyûleütés akkor van, ha a stdin fájlból van mit olvasni. Ezt szépen meg lehet adni a select-nek. Sajnos azt viszont nem tudja, hogy másodpercenként térjen vissza akkor is ha nincs billentyûleütés, csak várakozási idõt lehet neki megadni. Ezért a 2. pontot kicsit át kell fogalmazni, mégpedig úgy, hogy nem azt mondod, hogy másodpercenként, hanem azt, hogy a következõ másodpercig. Ezt pedig úgy csinálod, hogy minden frissítésnél illetve a select meghívása elõtt lekéred az idõt (a gettimeofday függvénnyel, mert kell a pontosság!) és a timeout értéket ebbõl számolod, értelemszerûen: timeout = elõzõ frissítés + 1mp - aktuális idõ.
A select visszatérési értéke elárulja, hogy az 1. vagy a 2. feltétel következett-e be, vagyis a felhasználó megnyomott egy gombot (ekkor getch() és eseménykezelés) vagy pedig a várakozási idõ járt le (ekkor idõ frissítése kell.).Jester
-
Protezis
őstag
válasz Jester01 #1322 üzenetére
Azt olvasom, hogy ha a global scopeban (nem ez a válasz a kérdésedre? ) deklarálok static kulcsszóval egy változót, az a fájl scopeba kerül, adatszegmensben lesz eltárolva, ha függvényen belül deklarálom, akkor csak az adott blokkon belül lesz látható, de a blokkból való kilépéskor nem szűnik meg, értékét megtartja, tehát ekkor is az adatszegmensben lesz eltárolva.
Ez így világosnak tűnik számomra. Lényegében ezt mondtad te is, csak én annyival mondtam többet a jegyzet alapján, hogy mindkét esetben az adatszegmensben lesz. De objektumok esetén is így kell eljárni? De akkor az a.) pontban miért nincs ott a static szó a típus előtt?
Mert úgy a logikus, hogy csak akkor kell adatszegmensben tárolnom valamit, ha annak a program futása alatt végig léteznie kell, ehhez pedig kell a static szó függetlenül a különböző láthatóságokon. Fraction a; mitől sztatikus? pfffff -
emitter
őstag
válasz Jester01 #1318 üzenetére
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
int
input_timeout (int filedes, unsigned int seconds)
{
fd_set set;
struct timeval timeout;
/* Initialize the file descriptor set. */
FD_ZERO (&set);
FD_SET (filedes, &set);
/* Initialize the timeout data structure. */
timeout.tv_sec = seconds;
timeout.tv_usec = 0;
/*
// select returns 0 if timeout, 1 if input available, -1 if error.
return TEMP_FAILURE_RETRY (select (FD_SETSIZE,
&set, NULL, NULL,
&timeout));
*/
}
int
main (void)
{
fprintf (stderr, ''select returned %d.\n'',
input_timeout (STDIN_FILENO, 9));
return 0;
}
pedig 5-öt ír ki, illetve azt amit megadok neki az input_timeout-nál
azt mondtad h szedjem ki a temp_failure-t, hát kiszedtem, de így meg a select ha jól látom, nem is hívódik meg sehol...
a timeout-ot még mindig nem értem: ez a kód hol számol vissza, mettől, és egyáltalán miért jó nekem ha visszaszámol? Vagy hogyan értelmezzem ezt a timeout-dolgot -
Jester01
veterán
válasz Protezis #1321 üzenetére
Sajnos a static kulcsszót több célra is használja a C és a C++ is
Ha egy változót függvényen és osztályon kívül hozol létre (hogy is mondjuk ezt? ), akkor az az adatszegmensbe kerül. A láthatóságát befolyásolja, hogy static vagy sem. Elõbbi esetben modulváltozó utóbbi esetben globális változó lesz. Globális változó másik modulból extern kulcsszóval deklarálva látható.
Ha függvényen belül vagy, akkor a static az ekvivalens egy modul változóval aminek a láthatósága az adott blokkon belülre korlátozódik.
Tömören: függvényen kívül mindig adatszegmens, a static a láthatóságot adja meg. Függvényen belül a láthatóság mindig az aktuális blokk végéig tart, a static az élettartamot adja meg.
Remélem jól mondomJester
-
Protezis
őstag
válasz Jester01 #1313 üzenetére
És az adatszegmensbe mikor kerül? Ha static-ként hozom létre?
Jegyzetben ez van:
''a.) sztatikus objektum létrehozása az adatszegmensben
Fraction a, b, c(3), D(5,2), e(”12/65”) ;
b.) lokális objektum létrehozása a veremben
void Add(Fraction f1, Fraction f2 = Fraction(”0/1”))
{
Fraction res(0) ;
...
}
A fenti Add eljárásban szereplő Fraction(0,1) egy úgynevezett objektum konstans. Objektumokat tartalmazó kifejezésekben vagy default paraméterek esetén használhatjuk.
Objektum példányokból további összetett adatstruktúra építhető fel: például tömb, mátrix, létrehozható objektum példányra mutató pointer, vagy objektum példány értékű függvény.
Fraction f = 32 * Fraction(6,8) + Fraction(9,15) ;
Fraction f[5,5], *pFr, Add(Fraction &, Fraction &) ;''
És van a dinamikus, az érthető. De ha a sztatikus objektum kerül az adatszegmensbe, akkor az a) pontban miért nincs előtte, hogy static?
Igen, én is úgy tudtam C-beli tanulmányaim alapján, hogy függvényen belül deklarált változó a verembe kerül, C++ -ban ráadásul belső blokkon belül is deklarálhatunk, és a blokkból való kilépésnél meg is szűnik. De így meg az a) pont nem világos. -
Jester01
veterán
válasz emitter #1316 üzenetére
5? Azt ne írja már ki ...
nem kaptam választ arra, h mi is az a file-descriptor
Pontosan az, amit írtál. Egy szám amivel alacsony szinten fájlokra lehet hivatkozni. A 0,1,2 sorban az stdin, stdout és stderr, de ezekre van makró. (STDIN_FILENO & co)
A select akkor tér vissza ha valamelyik fájlon a kért írás vagy olvasás elvégezhetõ avagy a timeout letelik. Jelen esetben arra használjuk, hogy térjen vissza ha történt gombnyomás (vagyis ha az stdin-rõl van mit olvasni) vagy letelt a következõ frissítésig hátralévõ idõ.Jester
-
Jester01
veterán
Ha ez a RealBasic Visual Basic 6.0 szintaxisú, akkor így:
Elsõ verzió (ajánlott):
Private Sub Button1_Click()
CommonAction
End Sub
Private Sub Button2_Click()
' button2 code
CommonAction
End Sub
Private Sub CommonAction()
' common code
End Sub
Másik verzió:
Private Sub Button1_Click()
' common code
End Sub
Private Sub Button2_Click()
' button2 code
Button1_Click
End SubJester
-
Jester01
veterán
válasz Protezis #1308 üzenetére
C++ -ban hogy hozok létre lokális objektumot a veremben?
Ha függvényen belül definiálod, akkor az a verembe kerül, úgy mint minden más változó (automatikus változónak hívják, ha jól tévedek.) Explicit még az alloca és a placement new operátor segítségével, vagy felüldefiniált new operátorral tudsz a veremben létrehozni objektumot (ezek már csak a guruknak )Jester
-
sekli
addikt
Lenne egy nagyon láma kérdésem:
RealBasic-ben, ami lényegében egy VisualBasic, hogy lehet megoldani:
pl.: egy gomb megnyomására történjen valami, és még lefusson egy másik gomb Sub Action() részénél lévő rész is, meg lehetne ugy is oldani, hogy bemásolom, de ugy nagyon macerás lenne vmit módosítani...
HELP! -
Jester01
veterán
válasz emitter #1309 üzenetére
A TEMP_FAILURE_RETRY gondolom csak egy kis makró volt, ami addig próbálja a selectet amíg 0-t vagy 1-et ad vissza (vagyis nem hibát). Neked ez eleve nem jó, mert majd újra kell számolni a timeout-ot. Szóval simán hagyd el.
Úgy kell használni, hogy nyilvántartod mennyi idõ múlva esedékes a következõ frissítés, ez lesz a timeout értéke az input_timeout hívásban (kicsit át kell alakítani, hogy ne csak másodperceket tudjon). A filedes az az STDIN_FILENO, ahogy a példában is van. Megvizsgálod az input_timeout visszatérési értékét: ha 0 akkor timeout miatt tért vissza, vagyis az idõt kell kiírni. Ha 1 akkor a felhasználó nyomott egy billenytût amit nyugodtan beolvashatsz a getch()-val, már nem fog blokkolni.
Ezután lekéred az idõt, újraszámolod a timeout értékét és ismét mehet a select. Ne a time() függvényt használd, mert nagyobb pontosságra van szükség, hanem a gettimeofday-t.Jester
-
emitter
őstag
válasz emitter #1309 üzenetére
egyébként nem is fordul a példakód, ezt dobja:
emitter@LAPTOP:~$ gcc -Wall -o time_select time_select.c
time_select.c: In function ‘input_timeout’:
time_select.c:21: warning: implicit declaration of function ‘TEMP_FAILURE_RETRY’
/tmp/cck7Ph7m.o: In function `input_timeout':
time_select.c: (.text+0x73): undefined reference to `TEMP_FAILURE_RETRY'
collect2: ld returned 1 exit status
emitter@LAPTOP:~$
mod: auto szmálji-konverzió
[Szerkesztve] -
emitter
őstag
válasz Jester01 #1307 üzenetére
De ezzel hogyan tudom megvalósítani a ''stoppert''? Ez ha jól értelmeztem a kódot, egy visszaszámláló, nem pedig egy előreszámláló
azonkívül ezt hogyan tudnám beépíteni? Ha ez a visszaszámlálás idejére blokkol minden inputot, akkor addig nem tud a juzer játszani
szóval nem igazán értem, hogy ezzel mit tudok elérni... főként, hogy a forráskód működését sem igazán értem... pl hol az a rész, ahol számol? semmi ciklus nincs benne
szóval még1x: a proginak számolnia és kiírnia kéne az eltelt sec-eket, lehetőség szerint tudjon pause-t is
ha vki tud jobb (vagy egyszerűbb) megoldást, ne tartsa vissza!
egy másik: mi pontosan magyarul a file descriptor, azon kívül, h fájl-leíró vmi -
Protezis
őstag
válasz Miracle #1282 üzenetére
Köszi a választ, bár nem nagyon könnyítetted meg az életemet
Azonban azt hiszem, kapizsgálom.
Lenne egy másik kérdésem is. C++ -ban hogy hozok létre lokális objektumot a veremben? Nem látom a különbséget a statikus adatszegmensbeli objektum, és a lokális objektum deklarációja között. -
Jester01
veterán
válasz emitter #1305 üzenetére
info libc, 13.8 Waiting for Input or Output. [link]
Az a lényeg, hogy olyan select hívást használj ami addig blokkol amíg nem lehet olvasni az stdin-t és nem múlik el a következõ frissítés idõpontja. (Ott a példa a doksiban)
Miracle, nyugodtan segíts ám te is, és szólj ha hülyeségekre biztatom EmittertJester
-
Miracle
senior tag
válasz Jester01 #1304 üzenetére
bar keves helyen reklamozzak, de a windows posix kompatibilis, nemi hatekonysagi problemaval (pl. az egymas utani fork()ok kozul az elso 10 faja utana meg tizedmasodpercekben merheto ido lesz )
szpval ha platformfuggetlenseg a cel akkor POSIX fuggvenyekkel lehel a legkulturaltabban megoldani C nyelven, vagy eluloniteni a platformfuggo reszt, es #ifdef..#endifek kozott a ket platformra specializalt kod, de ez joval ganyabb.. szoval inkabb POSIX... a baj azzal lehet nemtudom a melyik szemafor-implementacio resze a posixnak, es melyik kerult bele a kesobbi szabvanyokkal a unix spec.ba, mert ezek mar nem erhetok el windows alatt :-|értelmező késziszótár :: rekurzió --> lásd : rekurzió
-
Jester01
veterán
-
emitter
őstag
válasz emitter #1299 üzenetére
hát télleg nagyon béna voltam, úgylátszik kicsit elszoktam a kódolástól, de mostantól megint belejövök
szal csak simán át kellett konvertálni int-be a time_t-t
és sikerült megoldani a másodperc-számlálást mindenféle delay nélkül:
#include <time.h>
#include <stdio.h>
int main()
{
int i, kezdo, akt, t;
kezdo=t=(int)time(NULL);
printf(''Kezdo ido: %d\n'',kezdo);
i=0;
while(1)
{
akt=(int)time(NULL);
if(akt!=t)
{
t=akt;
printf(''%d\n'',akt-kezdo);
i++;
}
if(i==5) break;
}
printf(''Press any key!'');
getchar();
return 0;
}
akkor most ezzel a megpróbálom megcsinálni az aknakeresőm idő-számlálóját
mod: Jester01: azért figyeled az 5 századmásodperces hsz-időkülönbségünket
[Szerkesztve]
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Axon Labs Kft.
Város: Budapest