From Pascal to C – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

From Pascal to C – C / C++ – Fórum – Programujte.comFrom Pascal to C – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Manas
~ Anonymní uživatel
5 příspěvků
13. 10. 2010   #1
-
0
-

Umel by nekdo prepsat tento kod do C?



Program DekompreseRLE;
Uses CRT;

var fi : file of byte;
fo : text;
i,j,b : byte;

Begin
Clrscr;
assign(fi,'text.kmp');
reset(fi);
assign(fo,'text.dat');
rewrite(fo);
while not eof(fi) do
Begin
read(fi,b);
if (b and $c0) = $c0 then
begin
j:= b and $3f;
read (fi,b);
for i:= 1 to j do
write(fo,char(b));
end
else
write(fo,char(b));
end;
Close(fi);
Close(fo);
End.

Nahlásit jako SPAM
IP: 147.229.213.–
Reklama
Reklama
Manas
~ Anonymní uživatel
5 příspěvků
13. 10. 2010   #2
-
0
-

Nejprve mne napadlo toto:

while ((c = getchar()) != EOF) {

if (isdigit(c) != 0)
c = pom1;
getchar(d);
for (pom2 = 1; pom2 < pom1 - 48; pom2 ++)
putchar(d);
}

ale getchar() ma v tomto pripade dva argumenty, takze to nikdz fungovat nebude. Nejaka rada?

Nahlásit jako SPAM
IP: 147.229.213.–
m->29+6
Super člen
13. 10. 2010   #3
-
0
-

No nie je to ťažké. Akurát neviem čo robia tieto riadky (nabudúce pripíš komentáre):

if (b and $c0) = $c0 then
j:= b and $3f;
Myslím si, že je to bitový & s HEXa číslom 0xC0 a potom 0x3F. Ale čo konkrétne si tým zamýšlal. ALe k veci.

Súbory sa otvárajú takto
FILE *fin = fopen("nazov_suboru", "mod");
Tento riadok vytvori "súbor" s menom "fin". Názov súboru je hádam jasný, a mód sa nastavuje podľa operácie, kt. chceš vykonať. Tebe stačí "r" pre čítanie a "w" pre zápis.

Cykly sú jasné, ako vidím v 2. príspevku.

Čítanie znaku zo súboru robí funkcia fgetc(); Teda, pre prečítanie znaku zo súboru "fin" postupuj takto:
int character = fgetc(fin);
Vždy treba testovať vrátený znak na konštantu EOF. Toto značí koniec súboru.

Zápis robí obdobná funkcia fputc();
fputc(character, fout);


A samozrejme nezabudni na konci
fclose(fin); fclose(fout);


A ešte k tomu
if (isdigit(c) != 0)
Toto sa dá písať takto:
if (isdigit(c))
. Vyzerá to prirodzene ako veta potom - ak je znakom číslica ...

Nahlásit jako SPAM
IP: 147.229.179.–
Manas
~ Anonymní uživatel
5 příspěvků
13. 10. 2010   #4
-
0
-

Předpokládejme, že tam ten soubor nechci dávat napevno, ale pomocí argumentu z příkazové řádky ,,projekt < test.txt. Tím odpadá nutnost otevírat a zase zavírat soubor (terminál to udělá za nás). V kódu je popsán jednoduchý dekomprimační algoritms na text. Př. vstupu: 2b4c6o program vypíše bbccccoooooo. Konkrétně nerozumím tomuto

read(fi,b); 

if (b and $c0) = $c0 then
begin
j:= b and $3f;
read (fi,b);
for i:= 1 to j do
write(fo,char(b));
end

Jak můžu zadat dvakrát čtení ,,read(),,?!

Co znamenají značky $c0 a $3f bych neřešil.

Nahlásit jako SPAM
IP: 147.229.213.–
KIIV+42
God of flame
13. 10. 2010   #5
-
0
-

To Manas : $ je v pascalu hexadecimalni cislo..
+ proc bys nemohl precist dalsi bajt ze souboru?

kazdopadne to bude



b = fgetc(file_in);
if ( (b & 0xC0) == 0xC0 ) {
j = b & 0x3F;
b = fgetc(file_in);
for ( i=1; i<=j ; i++ ) {
fprintf(file_out,"%c", b);
}
}


no a je to asi takto:
kdyz 7. a 6. bit v bajtu je nastaven pak zbyle bity urcuji pocet opakovani bajtu za tim ..


ale nejsem si moc jist jestli to sezere zrovna toto: 2b4c6o to uz bude spis preklad po j = b & 0x3F; a vypsanej dalsi znak

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
m->29+6
Super člen
13. 10. 2010   #6
-
0
-

No to vyzerá na VUT FIT od Ing. Martinka "IZP - Projekt č. 1 - Jednoduchá komprese textu" :-D Neviem či je dobrý prístup, prepísať kód z Pascalu, ktorý si našiel niekde na nete. Martinek má ten jeho SW na odhalenie plagiátov, že vraj premakaný ;-) Radšej by som neodovzdal nič ako niečo takéto, nie celkom čisté.

Navyše boli aj nejaké bakalárky a diplomky na vypracovanie SW na hľadanie kódov po nete (nejaký pavúci a tak). Takže je celkom možné, že to nájde aj tento thread...

K implementačnej časti sa vyjadril KIIV.

Nahlásit jako SPAM
IP: 90.177.12.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 61 hostů

Podobná vlákna

Pascal: kurz turbo pascal II — založil Systém

Pascal — založil Filip

Pascal — založil Lasserus

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý