Regisztráció Blogot indítok
Adatok
borokcs

0 bejegyzést írt és 13 hozzászólása volt az általa látogatott blogokban.

Admin Szerkesztő Tag Vendég
"Alighogy átszállt a határon a győzelem, az a hat-három s fáradtan a nagy drukkolástól ledőlnék, egyszer csak rámszól a rádió és arra bíztat, hogy verset írjak... Hát írok is." Zelk Zoltán: Rímes üdvözlő távirat http://www.mtv.hu/modernkepmesek/cikk.php?id=165709…..
A DE IK Prog2, programozás bevezető kurzusát támogató címbeli intézményt most megszervezzük! Párhuzamosan ez a poszt a nyolcadik előadás és labor posztja is. Prog2 labor labdarúgó-bajnokság, PLB Figyelj, mert a határidő közeli, lásd a kiírást a könyvben! 1.3.1.1.2.Prog2 labor…..
Mivel jó néhányan ráéreztek a dolog ízére, íme ide gyűjtünk majd néhány további kisbajnokságot. (Itt a kettőnél nagyobb egyenlőt érő kisbajnokságok programjait személyesen kell bemutatni és megvédeni, kivéve, ha jelezzük, hogy adott poszt kommentjeként is beküldhető.) 7…..
man compress: DESCRIPTION        The  compress  utility  shall attempt to reduce the size of the named files by using adaptive Lempel-Ziv coding algorithm.        Note:  Lempel-Ziv is US Patent 4464650, issued to…..
borokcs 2011.04.21 10:32:01
#include <iostream>
#include <cmath>
#include <fstream>

class LZWBinFa
{
public:

LZWBinFa (): fa(&gyoker) {}

void operator<<(char b)
{

if (b == '0')
{

if (!fa->nullasGyermek ()) // ha nincs, hát akkor csinálunk
{

Csomopont *uj = new Csomopont ('0');
fa->ujNullasGyermek (uj);
fa = &gyoker;
}
else
{
fa = fa->nullasGyermek ();
}
}

else
{
if (!fa->egyesGyermek ())
{
Csomopont *uj = new Csomopont ('1');
fa->ujEgyesGyermek (uj);
fa = &gyoker;
}
else
{
fa = fa->egyesGyermek ();
}
}
}

void kiir (void)
{

melyseg = 0;

kiir (&gyoker, std::cout);
}
void szabadit (void)
{
szabadit (gyoker.egyesGyermek());
szabadit (gyoker.nullasGyermek());

}

int getMelyseg (void);
double getAtlag (void);
double getSzoras (void);

friend std::ostream& operator<< (std::ostream& os, LZWBinFa& bf)
{
bf.kiir(os);
return os;
}
void kiir (std::ostream& os)
{
melyseg = 0;
kiir (&gyoker, os);
}

private:
class Csomopont
{
public:

Csomopont (char b = '/'):betu (b), balNulla (0), jobbEgy (0) {};
~Csomopont () {};

Csomopont *nullasGyermek () const {
return balNulla;
}

Csomopont *egyesGyermek () const {
return jobbEgy;
}

void ujNullasGyermek (Csomopont * gy) {
balNulla = gy;
}

void ujEgyesGyermek (Csomopont * gy) {
jobbEgy = gy;
}

char getBetu() const {
return betu;
}

private:

char betu;

Csomopont *balNulla;
Csomopont *jobbEgy;

Csomopont (const Csomopont &);
Csomopont & operator=(const Csomopont &);
};

Csomopont *fa;

int melyseg, atlagosszeg, atlagdb;
double szorasosszeg;

LZWBinFa (const LZWBinFa &);
LZWBinFa & operator=(const LZWBinFa &);

void kiir (Csomopont* elem, std::ostream& os)
{

if (elem != NULL)
{
++melyseg;
kiir (elem->egyesGyermek(), os);

for (int i = 0; i < melyseg; ++i)
os << "---";
os << elem->getBetu() << "(" << melyseg - 1 << ")" << std::endl;
kiir (elem->nullasGyermek(), os);
--melyseg;
}
}
void szabadit (Csomopont * elem)
{

if (elem != NULL)
{
szabadit (elem->egyesGyermek());
szabadit (elem->nullasGyermek());

delete elem;
}
}

protected:

Csomopont gyoker;
int maxMelyseg;
double atlag, szoras;

void rmelyseg (Csomopont* elem);
void ratlag (Csomopont* elem);
void rszoras (Csomopont* elem);

};

int LZWBinFa::getMelyseg (void)
{
melyseg = maxMelyseg = 0;
rmelyseg (&gyoker);
return maxMelyseg-1;
}
double LZWBinFa::getAtlag (void)
{
melyseg = atlagosszeg = atlagdb = 0;
ratlag (&gyoker);
atlag = ((double)atlagosszeg) / atlagdb;
return atlag;
}
double LZWBinFa::getSzoras (void)
{
atlag = getAtlag ();
szorasosszeg = 0.0;
melyseg = atlagdb = 0;

rszoras (&gyoker);

if (atlagdb - 1 > 0)
szoras = std::sqrt( szorasosszeg / (atlagdb - 1));
else
szoras = std::sqrt (szorasosszeg);

return szoras;
}
void LZWBinFa::rmelyseg (Csomopont* elem)
{
if (elem != NULL)
{
++melyseg;
if (melyseg > maxMelyseg)
maxMelyseg = melyseg;
rmelyseg (elem->egyesGyermek());
rmelyseg (elem->nullasGyermek());
--melyseg;
}
}
void
LZWBinFa::ratlag (Csomopont* elem)
{
if (elem != NULL)
{
++melyseg;
ratlag (elem->egyesGyermek());
ratlag (elem->nullasGyermek());
--melyseg;
if (elem->egyesGyermek() == NULL && elem->nullasGyermek() == NULL)
{
++atlagdb;
atlagosszeg += melyseg;
}
}
}
void
LZWBinFa::rszoras (Csomopont* elem)
{
if (elem != NULL)
{
++melyseg;
rszoras (elem->egyesGyermek());
rszoras (elem->nullasGyermek());
--melyseg;
if (elem->egyesGyermek() == NULL && elem->nullasGyermek() == NULL)
{
++atlagdb;
szorasosszeg += ((melyseg - atlag) * (melyseg - atlag));
}
}
}

int
main ()
{
char b;
LZWBinFa binFa;

while (std::cin >> b)
{
binFa << b;
}

std::cout << binFa;

std::cout << "depth = " << binFa.getMelyseg () << std::endl;
std::cout << "mean = " << binFa.getAtlag () << std::endl;
std::cout << "var = " << binFa.getSzoras () << std::endl;

binFa.szabadit ();

return 0;
}

void usage(void)
{
std::cout << "Usage: lzwtree in_file -o out_file" << std::endl;
}

int
main (int argc, char *argv[])
{

if (argc != 4) {

usage();

return -1;
}

char *inFile = *++argv;

if (*((*++argv)+1) != 'o') {
usage();
return -2;
}

std::fstream beFile (inFile, std::ios_base::in);
std::fstream kiFile (*++argv, std::ios_base::out);

unsigned char b;
LZWBinFa binFa;

while (beFile.read ((char *) &b, sizeof (unsigned char))) {

for (int i = 0; i < 8; ++i)
{
int egy_e = b & 0x80;

if ((egy_e >> 7) == 1)

binFa << '1';
else

binFa << '0';
b <<= 1;
}

}

kiFile << binFa;

kiFile << "depth = " << binFa.getMelyseg () << std::endl;
kiFile << "mean = " << binFa.getAtlag () << std::endl;
kiFile << "var = " << binFa.getSzoras () << std::endl;

binFa.szabadit ();

kiFile.close();
beFile.close();

return 0;
}
Módosítgassuk az első előadásban felvillantott, az strncpy könyvtári függvény manuáljabeli példa alapján megírt implementációnkat, hogy a forrásban kezdjen úgy kinézni néhány sor, mint amilyenek a C programok szoktak lenni! Például az Androidos telefonok Linux kernelében…..
borokcs 2011.02.12 13:30:45
#include <stdio.h>

#define MERET 5
char buffer[MERET];

char *
szimih (char *d, const char *s, int n)
{
char *p = d;

while (n-- && (*d++ = *s++))
;
while (n-- > 0)
*d++ = '\0';

return p;
}

char *
borokcs (char *d, const char *s, int n)
{

int e=0;
while(s[e]!='\0' && e<n)
d[e] = s[e++];
return d;

}

char *
basecamp (char *d, const char *s, int n)
{
char *p = d;

while (n--)
*d++ = *s ? *s++ : '\0';

return p;
/*
char *p = d;

while (n--)
*d++ = *s++;

return p;
*/
}

char *
nb (char *d, const char *s, int n) // 75 betű
{

int i;
char *p = d;

for (i = 0; i < n && (*d++ = *s++); i++)
;

for (; i < n; i++)
p[i] = '\0';

return p;
}

int
main ()
{

char *p;
char q[] = { 'x', 'x', '\0', 'y', 'y' };

p = szimih (buffer, q, MERET);
printf ("[%s] [%s] [%s]\n", buffer, p, buffer + 3);
p = szimih (buffer, "cc", MERET);

printf ("[%s] [%s]\n", buffer, p);

p = szimih (buffer, "aaaaaaaaaaaaaaaaaaaaaaaaaaa", MERET);
printf ("[%s] [%s]\n", buffer, p);

p = szimih (buffer, "bbbbbbbbbbbbbbbbbbbbbbbbbbb", MERET - 1);
printf ("[%s] [%s]\n", buffer, p);

printf("-----------\n");

p = borokcs (buffer, q, MERET);
printf ("[%s] [%s] [%s]\n", buffer, p, buffer + 3);

p = borokcs (buffer, "cc", MERET);

printf ("[%s] [%s]\n", buffer, p);

p = borokcs (buffer, "aaaaaaaaaaaaaaaaaaaaaaaaaaa", MERET);
printf ("[%s] [%s]\n", buffer, p);

p = borokcs (buffer, "bbbbbbbbbbbbbbbbbbbbbbbbbbb", MERET - 1);
printf ("[%s] [%s]\n", buffer, p);

printf("-----------\n");

p = basecamp (buffer, q, MERET);
printf ("[%s] [%s] [%s]\n", buffer, p, buffer + 3);

p = basecamp (buffer, "cc", MERET);

printf ("[%s] [%s]\n", buffer, p);

p = nb (buffer, "aaaaaaaaaaaaaaaaaaaaaaaaaaa", MERET);
printf ("[%s] [%s]\n", buffer, p);

p = nb (buffer, "bbbbbbbbbbbbbbbbbbbbbbbbbbb", MERET - 1);
printf ("[%s] [%s]\n", buffer, p);

return 0;
}
borokcs 2011.02.12 17:19:07