Zdravím,
potřeboval bych vědět, jak v NASM prohodím např. horní nibble ah a dolní nibble bh... Mělo by to být asi pomocí posunů a rotací, ale za boha nemůžu přijít jak na to...
Díky za odpovědi.
Assemblery máme jako předmět ve škole, studuju informatiku :) Tak už se nemůžu dočkat, až to pochopím :-D Jinak učitel na střední nám říkal, že nejhorší pro začátečníka je pochopit právě ty ukazatele... Tak snad to časem půjde :) Díky moc.
Koukám, že s tímhle budu asi bojovat sakra dlouho, teď mi to vyplivlo asi 40 errorů :-D už na tom makám hodinu a pořád sem nic nevyřešil v podstatě... Tam má být *, tam &, tam **, už mi z toho de hlava kolem :( ale i tak díky za rady, snad se do toho nějak dostanu...
Já řeším obecné vlastnosti jazyka, v podstatě je to to samé jako kdybych to vyčetl z knížky, akorát když mi to někdo vysvětlí, tak to pochopím líp než z té knížky. Příklad je ilustrační, není to tak jak to bude vypadat v onom projektu. Po nikom nežádám, aby mi napsal kód, jen jsem potřeboval nasměrovat. To se doufám může :-) Projekty samozřejmě řeším sám a tohle byla poslední záchrana, když jsem opravdu nevěděl, jak na to.
Zdravím, četl jsem knihu od Herouta (1. díl). Jednu věc jsem nepochopil, a to jak předávat struktury mezi funkcemi... Dejme tomu, že prostě potřebuju dostat 3 hodnoty skrz 3 funkce.
tak udělám:
typedef struct
{
int x;
int y;
int z;
} CISLO;
Tohle musí být globálně?
Dále vytvořím funkci:
CISLO funkce(CISLO *vypocet, int a) // a z mainu je 2 { vypocet->x = 2*a; vypocet->y = 5*a; vypocet->z = 8*a;
return *vypocet;
}
No a jak teď tento údaj předat další funkci, aby s ním mohla pracovat? Opravdový problém je složitější, chtěl bych to ale pochopit komplexně.
Nebo když předávám odkazem, tak proměnná vypocet se uchová a můžu ji napsat jako parametr jiné funkce? Např.
CISLO vypsat(CISLO *vypocet)
{
printf("%d %d %d", &vypocet->x, &vypocet->y, &vypocet->z);
return *vypocet;
}
Vypsalo by to 4 10 16?
Díky za odpovědi :)
Ok, udělal jsem tohle:
while (!isspace(znak))
{
znak = getchar();
vstup = 10*vstup + (znak - '0');
}
Funguje to, ale na konci to udělá nesmyslně ještě nějaký výpočet, takže finální výstup je chybný. Vypisoval jsem si to printf("%ld\n", vstup) po každém kroku v cyklu a vracelo to asi tohle:
Vstup: 54861
5
54
548
5486
54861
548572
Absolutně nechápu, čím by to mohlo být... Jinak výborný nápad s převodem soustav jako takovým, myslím, že to ještě hodněkrát využiju :) Díky.
Tušák správný :) Né že bych chtěl být plagiátor, já už to mám víceméně hotové, ale se scanf :) A nemůžu přijít na to, jak to bez scanf udělat, měl jsem od C menší pauzu :)
No mám projekt s tím, že nemám používat scanf :)
Zdravím, jak načtu v C do jedné proměnné číslo, dejme tomu 841688641? Normálně bych použil scanf, ale to není povoleno.
Díky :)
Jo, to jsem se upsal :-) Samozřejmě tam mělo být 100/vzorky.
Už to funguje, zapomněl jsem na ono přetypování :-). Bohužel to ale vůbec nepomohlo rychlosti. Je to stejně rychlé jako při předchozím provedení :-(.
Když se nevypisuje nic, tak je to hotový cca za 5 vteřin a když vypisuje (třeba i bez počítání, jen třeba písmeno i), tak minutu. Nechápu.
Nevím, jak bych to s tím dělením měl udělat. Je to klasická trojčlenka a všechny hodnoty jsou int. Kdýž dám dělení před cyklus, tak si musím vytvořit pomocnou proměnnou, něco jako:
int procenta_pom;
procenta_pom = i / vzorky_fw1;
Zdravím,
programuju editor wav souborů a když se provádí např. rozdělení souboru na 2, tak bych chtěl vypisovat něco ve stylu:
Probiha vytvareni prvni casti.
100% dokonceno.
Probiha vytvareni druhe casti.
25% dokonceno.
Problém je, že tohle vypisování drasticky zpomaluje proces. Když tam to vypisování není, tak je procesor s programem za pár sekund vypořádán, ale když je, tak to trvá minutu. Dotaz tedy zní, jde to udělat tak, aby to vypisovalo %, ale nezpomaloval se samotný proces?
Teď to vypadá takto:
// zapsani dat do fw1
fseek(fr, 4, SEEK_CUR);
printf("Probiha vytvareni prvni casti.\n");
for (i = 0; i < vzorky_fw1; i++) {
printf("%d%% dokonceno.\r", i * 100 / vzorky_fw1);
if (i == vzorky_fw1 - 1) {
printf("100%% dokonceno.\n");
}
if (fread(&buffer, 1, 1, fr) != 1) {
return CHYBA_READ;
}
if (fwrite(&buffer, 1, 1, fw1) != 1) {
return CHYBA_WRITE;
}
}
// zapsani dat do fw2
printf("Probiha vytvareni druhe casti.\n");
for (i = 0; i < vzorky_fw2; i++) {
printf("%d%% dokonceno.\r", i * 100 / vzorky_fw2);
if (i == vzorky_fw2 - 1) {
printf("100%% dokonceno.\n");
}
if (fread(&buffer, 1, 1, fr) != 1) {
return CHYBA_READ;
}
if (fwrite(&buffer, 1, 1, fw2) != 1) {
return CHYBA_WRITE;
}
}
No skáču tím na první hudební vzorek ve fr2. Zkusil jsem tam teď dát prostě 47 (první vzorek podle Pspadu) a pořád nic. S tím koncem fw máš pravdu, a to odsazování mám vždy o 2 mezery, tady jsem to zkopíroval a nějak se to podělalo...
No, stejně moc nevím, co teda mám konkrétně udělat.. :/ Ale dík za odpověď...
A když už jsme u těch wavů, tak teď jsem napsal tuhle funkci:
/* ========================== */
/* SPOJENI 2 SOUBORU */
/* ========================== */
int spojeniSouboru(FILE *fr1, FILE *fr2, FILE *fw, struct sFileInfo file, struct sChunkInfo chunk)
{
short buffer;
fseek(fr1, 0, SEEK_SET);
do {
if (fread(&buffer, 2, 1, fr1) != 1) {
return CHYBA_READ;
}
if (fwrite(&buffer, 2, 1, fw) != 1) {
return CHYBA_WRITE;
}
} while (!feof(fr1));
fseek(fr2, chunk.poziceData+8, SEEK_SET);
fseek(fw, 0, SEEK_END);
do {
if (fread(&buffer, 2, 1, fr2) != 1) {
return CHYBA_READ;
}
if (fwrite(&buffer, 2, 1, fw) != 1) {
return CHYBA_WRITE;
}
} while (!feof(fr2));
return ZADNA_CHYBA;
}
Dík za odpověď, ale jdeš na mě moc odborně, já jsem dá se říct začátečník :-). Nevím, co myslíš převodem na int64, to slyším poprvé v životě. Mám funkci na zjištění byterate, samplerate, bitspersample, počet kanálu atd., takže s tím nebude problém.
No a ten little/big endian, to je taky novinka...
Byl bych moc vděčný, kdybys to popsal trošku víc amatérsky :-)... Je to maturitní projekt, můj první větší program.
Tom.
Jak to myslíš, zaokrouhlení a limity? A proč je cyklus špatně? Vzorky jsou 2bytové, to jsem podělal, buffer má být short, ale furt s tím nějak čachruju, tak jsou tam nesrovnalosti.
Když třeba zadám koeficient 2 (zvýšení hlasitosti na 200%), tak jsem zkoušel vypsat každý vzorek před a po násobení a neshodovalo se to... Jako originál jsem použil zvuk z QIPu a výsledný soubor jen tak trochu zachrastil...
Ahoj,
snažím se udělat editor WAV souborů v C a zasekl jsem se u změny hlasitosti. Nejsem si jistý příkazem:
buffer *= hlasitost;
int upraveniHlasitosti(FILE *fr, FILE *fw, float hlasitost, struct sFileInfo file, unsigned int data_size)
{
int buffer;
do {
if (fread(&buffer, 4, 1, fr) != 1) {
return CHYBA_READ;
}
else {
buffer *= hlasitost;
if (fwrite(&buffer, 2, 1, fw) != 1) {
CHYBA_WRITE;
}
}
} while (buffer != EOF);
return ZADNA_CHYBA;
}