-
GAMEPOD.hu
Új hozzászólás Aktív témák
-
-
Jester01
veterán
Emitter kollega fentebb pont wav fájlokat töltöget be, igaz c-ben.
Mindenesetre a wav file elején egy header van amibõl ki lehet olvasni a paramétereket.
Utána az adatok jönnek, minden mintavételi idõponthoz az összes csatorna egymás után.
Tehát pl. 16 bites 2 csatornás wav adatrészébõl úgy csinálsz 1 csatornát, hogy 2 byteot megtartasz és a következõ kettõt eldobod, sít. Értelemszerûen a fejlécben pedig átírod a csatornák számát 1-re. (Hozzáteszem, hogy a wavban nem csak tömörítetlen adatfolyam lehet, de gondolom a feladatban ezt feltételezheted.)
Aztán hogy ezt hogyan lehet beletuszkolni egy OO programnyelvbe azt sajnos nem tudom.Jester
-
emitter
őstag
hát én ebből azt szűrtem le, hogy van a ''data'' string a 40-es offsettől, majd 4 bájt SubChunkSize (nemtom miez), majd így a 48.ik offset-től kezdődik az igazi stream
következőképpen:
mintánként 2 bájt bal-, majd 2 bájt jobb csatorna (egy hexa-kód (szám, betű) 4bit - tehát ha egy minta 3c f2 24 f2, akkor ebből 2 bájt (3c f2) a bal csati, és 2 bájt ( 24 f2) a jobb csati)
nem műxik így? azt nem tudom, h ez a szabványos wav, de elvileg annak kell lenni, mert nem írták, h nem így lenne
[Szerkesztve] -
shev7
veterán
egy forciklussal vegigmesz az elemeken es kinullazod. Egyebkent ezt letrehozaskor is erdemes megtenni, en nem biznam a progimat arra, hogy tutira nulla a tomb tartalma deklaralas utan...
''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''
-
shev7
veterán
es amikor deklaralod mi van benne? de egyebkent mindegy, mert ha beolvasol egy ''stringet'' azt egy \0 karakterrel lezarja, amikor intet konvertalsz belole, akkor a \0 utan levo karaktereket nem veszi figylembe.
[Szerkesztve]''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''
-
Jester01
veterán
A %d az 54-et fogja belerakni, mert whitespace (szóköz, soremelés) határig olvas.
#include <stdio.h>
int main(int argc, char* argv[])
{
int x;
FILE* f = fopen(argv[1], ''r'');
while(fscanf(f, ''%d'', &x) == 1) printf(''%d\n'', x);
fclose(f);
return 0;
}
be.txt:
1.54..2
123.....45
A szókózöket ponttal jelöltem, mert a fórummotor különben kitörli õket.
Futtatás eredménye:
1
54
2
123
45
[Szerkesztve]Jester
-
Jester01
veterán
Igen, ha a 3. sorba is %d-t írsz, és a ciklusba nem <= összehasonlítás kell, mert úgy eggyel többet fog olvasni mint amennyi van.
MOD #2228-ra: ez C kód, nem C++. Biztos le van írva a könyvben is hogy mûködik a scanf. A szóközt nem kell explicit kihagyni mert a scanf átlépi magától. Ha pontosan egy karaktert akarsz beolvasni akkor egyébként az fgetc függvény a barátod.
[Szerkesztve]Jester
-
Jester01
veterán
Akkor a szóköz nem is kell ide: fscanf...''%d %d''...?
Nem, de így olvashatóbb. Egyébként nyugodtan próbáld ám ki magadtól.
Ez itt miben különbözne C++ ban ha ez nem az?
Bár a C++ kompatibilis a C-vel de C++-ban igazából streameket illik használni, valahogy így:
ifstream f(''be.txt'');
f >> MaxTeher;
f >> csomiszam;
for (i=0;i<csomiszam;i++) f >> s[ i ];Jester
-
-
Jester01
veterán
azon y1...yk fiú felsorolva, amelyek az x-edik alatt helyezkednek el?
Igen. De nem úgy ahogy te gondolod, nem lefelé a hierarchiában. Az yi az x közvetlen gyereke.
3. minden pontnak legfeljebb egy apja lehet
Talán azért lett így leírva, mert így nem kell bele kivétel. De amúgy szerintem ekvivalens a kettõ. (A 4. tulajdonság miatt)Jester
-
cucka
addikt
pascalban is van ponter - igen, de a c sokkal jobban rákényszerít, hogy használd, pl. már a stringek normális kezeléséhez is elengedhetetlen.
Bár unokatesóm mondta pár éve, hogy van olyan dolog amit pascalban megírnak először (pl egy függvény), aztán átírják más nyelvre. - k*rva profik lehetnek akkor. miért nem írják meg egyenesen a másik nyelven? . az államnak dolgozni jó lehet.. -
Forest_roby
őstag
jól hangzik! már hallottam vhol ezt a szót!
Na, komolyabban - lehet opengl-ben programozni?! Ezek szerint igen! Mit érdemes tudnom róla, mielött nekiállnék?
(persze én is utánna nézek a dolognak!!)
köszi a tippet, elsőre nem rossz!
mod: nagyon is jól hangzik a dolog!!
[Szerkesztve]-=Legyél Laza!=- __ ''Have you tried turning it off and on again?'' __ ''Is it definitely plugged in?'' /o\ :D:D
-
Jester01
veterán
Ugye a kettővel osztás az egy bit léptetés. Hexa ábrázolás esetén a szomszédos jegy legalsó bitje kell még a működéshez.
Számolgatással pl. így lehet:
inline char to_hex(int v)
{
return v > 9 ? (v + 'A' - 10) : (v + '0');
}
inline int from_hex(char c)
{
return c > '9' ? (c - 'A' + 10) : (c - '0');
}
void shift(char* buffer)
{
int i;
int carry = 0;
for(i = 3; i >= 0; i--)
{
int v = from_hex(buffer[ i ]);
buffer[ i ] = to_hex((v >> 1) | carry);
carry = (v << 3) & 8;
}
}
Ha a számolgatás nem tetszik, akkor lookup táblát is lehet csinálni, pl így:
void shift(char* buffer)
{
static struct { char out[2], f; } map['G'] = {
['0'] = {''08'', 0},
['1'] = {''08'', 1},
['2'] = {''19'', 0},
['3'] = {''19'', 1},
['4'] = {''2A'', 0},
['5'] = {''2A'', 1},
['6'] = {''3B'', 0},
['7'] = {''3B'', 1},
['8'] = {''4C'', 0},
['9'] = {''4C'', 1},
['A'] = {''5D'', 0},
['B'] = {''5D'', 1},
['C'] = {''6E'', 0},
['D'] = {''6E'', 1},
['E'] = {''7F'', 0},
['F'] = {''7F'', 1}
};
int i;
int flag = 0;
for(i = 3; i >= 0; i--)
{
char c = buffer[ i ];
buffer[ i ] = map[c].out[flag];
flag = map[c].f;
}
}
Hibakezelés ezekben nyilván nincs.
Más ötlet momentán nem jut eszembe.
[Szerkesztve]Jester
-
sghc_toma
senior tag
mért akarod mindenképp elkerülni a konverziót?
strtol-lal konvertálsz int-té, itoa-val meg vissza.. én vhogy így csinálnám, aztán lehet, hogy tényleg van jobb megoldás.. (az is lehet. hogy ez az egyik legrosszabb )
char* HexNumber = ''CDAB'';
char* FirstTwoBytes;
memcpy(FirstTwoBytes, HexNumber, 2);
int a = strtol(HexNumber + 2, NULL, 16) * 128 + (int)(strtol(FirstTwoBytes, NULL, 16) / 2);
char buf[4];
HexNumber = itoa(a, buf, 16);
memcpy(FirstTwoBytes, HexNumber + 2, 2);
memcpy(HexNumber + 2, HexNumber, 2);
memcpy(HexNumber, FirstTwoBytes, 2);in asm we trust
-
Jester01
veterán
Nem, a little-endian esetén éppenhogy a byte[0] a legkisebb helyiérték.
Simán egy int* pointer hivatkozás és kész. Portabilis kód esetén pl. a kernel mintájára egy ''le32_to_cpu'' makrót vagy inline függvényt lehet használni ami az architektúrának megfelõen konvertál ha szükséges.Jester
-
amargo
addikt
Esetleg egy algoritmusok és adatszerkezetek könyvet nem árt fellapozni.. a backtrack olyan, mint a hanoi torony, azért nem találtál könyvekben (c, c++, c#, java) róla, mert nem nyelv függő. Namost a dinamikus programozás is ide soroljuk. Sőt!
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
-
peterszky
őstag
Most lehet, hogy lincshangulat fog kialakulni , de itt is van egy szép kis backtrack:
[Backtrack]
Nem mondanám, hogy könnyen emészthető (nekem sem sikerült tökéletesen )What else you gonna do on a Saturday?
-
Robaj
addikt
Hát, 1x változó létrehozás + 3x értékadás folyamatosan
VAGY
1x változó létrehozás +értékadás folyamatosanEz a kérdés most
Optimalizáláshoz nem nagyon értek, nem tudom melyik eszik kevesebbet (most 832 KB-nál járok, 8 megáról indultam )
Ha valaki tudna adni valami ilyesmiről szóló linket, annak is örülnék.
[ Szerkesztve ]
-
-
ALI_G
veterán
Azt mondjátok meg, hogy ebben a részben:
for(i=0; i<n; i++) {
for(j=0;j<m; j++) {
if(jatek_tabla[i][j]==1)
{fprintf(outfile, "csapda mezo van itt:\n---------\n%d %d\n", i, j);}
}
}az első for ciklus csak 1x fut let, a második pedig annyiszor, amennyi az m-ben van és a jatek_tabla egy mezője sem egyenlő 1-gyel, pedig azt is megnéztem, hogy 1-et rak bele mindig, n, m, csapdak_szama, csapda_n és csapda_m is mind helyes eredményt kap (kiirattam beolvasas utan a for ciklusban). Szóval miért?
[ Szerkesztve ]
-
doc
nagyúr
egy kis javítás: a második ciklus nem m-szer hanem n-szer fut le, de gondolom ez csak melléütés
azt mondod hogy leellenőrizted, hogy a tomb egyik mezoje sem 1?
akkor nyilvan a beolvasasban van a hiba
erre mondtam, hogy irasd ki menet kozben a fontos infokat
pl. a beolvaso ciklusban mindig ird ki az aktualis koordinatakat meg a beolvasott erteket
a fo hiba meg az, hogy nem ellenorzod a filemuveletek sikeresseget, igy lehet hogy meg sem nyitja az infile-t, csak nem veszed eszre... -
Tottu
senior tag
-
PazsitZ
addikt
Egy apróbb hibád volt.
Kiiratás esetén te a ++i és ++j értékadást használtad, amiben a ciklusváltozónak új értéket adtál.
Ehelyett a (i+1) és (j+1) érték kiiratása a megoldás.A másik változtatás, hogy érdemes kinullázni a tömböt, ami jelen esetben 1-esekkel való feltöltést takart, mivel te a nullát használtad a csapda jelölésére.
cpp
a tábla kiirva- http://pazsitz.hu -
-
PazsitZ
addikt
A << az bitléptetés balra.
Balra léptetés: mit << hány bittel, a jobbról belépő bitek 0-ák, a balra kilépő bitek elvesznek
Pl.:2<<3 → 16 0000 0010
0001 0000
256 <<1 → 0 1000 0000
0000 0000Jelen esetben f integer értéke 1, n értékkel eltolt bitértéket vesz fel.
[ Szerkesztve ]
- http://pazsitz.hu -
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- 1.250.000 FT helyett 940.000 FT !! MacBook Pro 16" M3 Pro 12CPU / 18GPU / 18GB / 512 SSD
- RTX 2080TI ROG STRIX GAMER PC
- AKCIÓ !! M3 Chip - MacBook Pro 14" 8C CPU / 10C GPU / 8 GB/ 1 TB / Bontatlan / Magyar
- Tidradio td-h3 akkumulátor
- HP ZBook Studio x360:i7 9850H,32GB,512GB,P2000,15.6" UHD 3840x2160 TOUCH 600nit 100%AdobeRGB,HP gari