Hollosi Information eXchange /HIX/
HIX CODER 441
Copyright (C) HIX
1999-04-25
Új cikk beküldése (a cikk tartalma az író felelőssége)
Megrendelés Lemondás
1 Re: bitszamolas (mind)  54 sor     (cikkei)
2 Symantec C++ 7.5 vagy Espresso kerestetik (mind)  17 sor     (cikkei)
3 Re: Karakter ASCII kodja (C++) (mind)  16 sor     (cikkei)
4 billentyuzet es paletta (mind)  25 sor     (cikkei)
5 Delphi3 Database Pack kerdes (mind)  28 sor     (cikkei)
6 Re: Icon (mind)  7 sor     (cikkei)
7 Adatbazis Pack-olas Delphi-ben (mind)  14 sor     (cikkei)
8 Kagylo nelkuli telefonalas (mind)  11 sor     (cikkei)
9 C - 286 (mind)  13 sor     (cikkei)
10 Re: DLL owners (mind)  18 sor     (cikkei)
11 bitszamolas (mind)  60 sor     (cikkei)
12 Re: *** HIX CODER *** #440 (mind)  23 sor     (cikkei)
13 Re: *** HIX CODER *** #440 (mind)  24 sor     (cikkei)
14 Egy Bitszamolas megoldas (mind)  42 sor     (cikkei)
15 Re: String C++ (#440) (mind)  15 sor     (cikkei)
16 Re: String C++ (#440) (mind)  22 sor     (cikkei)
17 libc5, libc6, Linux driver (mind)  13 sor     (cikkei)

+ - Re: bitszamolas (mind) VÁLASZ  Feladó: (cikkei)

Sziasztok!

Nem csalodtam a jatekos kedvetekben, jott jopar megoldas. :-)

A megoldasokat ketfele csoportba lehet sorolni:

- Nehanyan a shift-elest probaltak kikuszobolni a bitek
osszeszamolasabol. Eredetileg nem erre gondoltam (csak valoszinu 
rosszul fogalmaztam a kerdest), de nem baj, itt is szulettek erdekes 
megoldasok, pl. Aggod Jozsefe a tegnapi Coder-ben.

- Harman is eszrevettek szabalyossagot az egyesek szamanak
sorozataban, es szuletett ket programkod is, amik generaljak a
sorozat elemeit egymas utan. Mink Barna negysorosa (a tegnapi
coderben) a valtozoneveket kiveve pont ugyanaz, mint amit en is
irtam Baumann Joco otlete alapjan :) Csiszar Laszlo megoldasaban (a
mai coderben) az az erdekes, hogy egyetlen for ciklust hasznal csak,
nem pedig ket egymasba agyazottat -- igaz, hogy ez kicsit lassabb az
allando if miatt.

Rekurziv megoldast nem kuldott senki, de nem menekultok, leirom, hogy 
mit talaltam ki :)

Az elv ugyanaz, mint a fentebbi sorozat generalos megoldasoknal: Ha
az N bites szamok egyesevel novekvo sorozatat nezzuk, akkor a
sorozat masodik feleben pontosan 1-gyel tobb egyes erteku bit van
minden egyes szamnal, mint elemenkent parhuzamosan az elso feleben,
hisz csak az N-edik (legfelso) bit lett 1-es erteku, a tobbi bit
szamparonkent ugyanaz. 

Hogyha ezt az elvet alulrol (n=1-tol) kezdjuk hasznalni felnovelve 
n=8-ra, akkor szuletnek a tobbiek altal irt ciklusok. Ha viszont 
felulrol (n=8-rol) kiindulva megyunk lefele, akkor szuletik a 
rekurziv megoldas:

  int x, tomb[256];

  void egyesekszama(int maradekbit, int eddigiegyesek)
  {
    if (maradekbit == 0) tomb[x++] = eddigiegyesek;
    else {
      egyesekszama(maradekbit-1, eddigiegyesek);
      egyesekszama(maradekbit-1, eddigiegyesek+1);
    }
  }

  x=0; egyesekszama(8,0);

Annak ellenere, hogy a rekurziv megoldasokat hatarozottan szebbnek
szoktam latni, Mink Barna negysorosa most jobban tetszik :)

István
--  Istvan Marosi  --  http://www.sch.bme.hu/~marosi  --
--  Recosoft Ltd.  --  mailto:  --
+ - Symantec C++ 7.5 vagy Espresso kerestetik (mind) VÁLASZ  Feladó: (cikkei)

Halihoooo !

Rengeteg energiat beleoltem, hogy talaljak egy forgalmazot
aki a fenti programot forgalmazza Magyarorszagon.
Sajnos a hivatalos allaspont szerint mar lealltak a gyartasaval,
es emiatt nem is tudnak utanrendelni sem.
Arlistakban meg itt ott talaltam a neten, de nem lehetett rendelni
belole mar. :(

Kerem akinek megvan a fenti program es eladna jelentkezzen.
Ha esetleg valaki tudna valami olyan "titkos" raktarkeszletrol ahol
meg megvan az is erdekelne. 

Ha valakinek megvan, de nem elado, kerem jelentkezzen, 
talan licencet konnyebben tudok vasarolni, mint a dobozos verziot.

Koszonettel : Pet
+ - Re: Karakter ASCII kodja (C++) (mind) VÁLASZ  Feladó: (cikkei)

Hali!

>     Hogyan lehet egy karakter ASCII kodjat visszakerni C++ -ban?

 int AsciiCode;
 char c='a';

 AsciiCode=c;

 vagy asszem ez is megy: AsciiCode='a' vagy AsciiCode=(int)'a'

Udv
-- 
Tamas Selmeci / TOR][UM 
 
  F0 0F C7 C8 rulez!
+ - billentyuzet es paletta (mind) VÁLASZ  Feladó: (cikkei)

Hello Coderek!

Az egyik kerdesem az lenne, hogy nem tudja-e valamelyikotok, hogy tud-e
az AT billentyuzet olyat, hogy egyes megadott gombokat nem ismetel (csak
akkor kuld adatot, ha lenyomtuk vagy ha felengedtuk). Mert en talaltam a
hexa 60-as portra kuldheto utasitasok kozul olyat, hogy "Billentyu
ismetles egyedi engedelyezese", de az parja, a billentyu ismetles egyedi
tiltasa nincs benne. Szoval ennek kene a parancskodja ... (Huhh, jol
osszekuszaltam .....)

A masik meg az, hogy szuksegem lenne egy algoritmusra, amivel a
szivarvany szineit tudom eloallitani (pontosabban azok RGB ertekeit). Az
lenne a legjobb, ha feketevel kezdodne (0-s szin) es a feherrel
vegzodne... A PhotoShopban nagyon jo ilyenek vannak, gondolom ok sem
manualisan irtak be az RGB-ket (igaz, 16 bit es felett mar nincs is
palettaprogramozas ... de a PhotoShop 256 szin alatt is mutat palettat),
hanem valami algoritmust hasznaltak ...

Koszi

Udv
-- 
Tamas Selmeci / TOR][UM 
 
  F0 0F C7 C8 rulez!
+ - Delphi3 Database Pack kerdes (mind) VÁLASZ  Feladó: (cikkei)

>Nem tudok megbirkozni a kov. feladattal: a tablabol torolt rekordokat
>fizikailag is torolni kellene idonkent programbol.
>Erre vonatkozoan a helpben semmifele utalast nem talaltam,
>de megprobaltam mindenfele trukkot, amibol eddig a
>BatchMove parancs volt a legjobb, de azzal is nagyon
>sok godom akadt.
>A Database Desktop-pal viszont nagyon korrektul tudok
>tomoriteni, de nekem mindenkeppen programbol kellene.

Probald ki az alabbi reszletet:

   e:=DbiPackTable(Table1.DBHandle, Table1.Handle, nil, szdBASE, True);
    case e of
    DBIERR_NONE:           m:='';            // 'Successful'
    DBIERR_INVALIDPARAM:   m:='The specified table name or the pointer to
the table name is NULL';
    DBIERR_INVALIDHNDL:    m:='The specified database handle or cursor
handle is invalid or NULL';
    DBIERR_NOSUCHTABLE:    m:='Table name does not exist';
    DBIERR_UNKNOWNTBLTYPE: m:='Table type is unknown';
    DBIERR_NEEDEXCLACCESS: m:='The table is not open in exclusive mode';
    else
      DbiGetErrorString(e,s);
      m:='['+IntToStr(e)+']: '+s;
    end;
    if m<>'' then MessageDlg(m, mtWarning, [mbOk], 0);

Veres Sandor
+ - Re: Icon (mind) VÁLASZ  Feladó: (cikkei)

>    Hogy lehet kimasolni a windowsos program icon-jat? Nem, API erdekel,
hanem
>    en direct az EXE-bol akarom kiolvasni!
Probald meg a Borland Resource workshop-ot.

Levente

+ - Adatbazis Pack-olas Delphi-ben (mind) VÁLASZ  Feladó: (cikkei)

Sziasztok!

Valaki kerdezte, hogy hogyan lehet Delhi-vel adatbazist Pack-olni. Nos, en
meg nem csinaltam, de a BDE elvileg tud ilyen. A Delphi lista archivumban az
alabbiakat talaltam, remelem segit:

DBIPackTable(Table1.DbHandle, Table1.Handle, PChar(Table1.TableName),
szDBASE, TRUE)

function DbiPackTable (hDb: hDBIDb; hCursor: hDBICur; pszTableName: PChar;
pszDriverType: PChar; bRegenIdxs: Bool): DBIResult stdcall;


Udv Szucs Zolatn
+ - Kagylo nelkuli telefonalas (mind) VÁLASZ  Feladó: (cikkei)

Hy Coderek!

Tudom, mar volt tema a voyce modem programozasa, de ugy tunik, kicsit
keson kapcsolodtam be, s kulonben is szeretem az egybe-doksikat. Szoval
azt szeretnem megcsinalni, hogy a modem hangkimenetere rakotok egy
fulhallgatot, a bemenetere egy mikrofont, s igy mar tudok kagylo nelkul
telefonalni. A modemem Acorp 33.6-os, s az a bajom, hogy ha rakotok egy
mikrofont, akkor a masik nem hallja amit mondok, es a fulhallgaton is eleg
halk a hang. Lehet ezt hangositani?
udv:
         Zsolt
+ - C - 286 (mind) VÁLASZ  Feladó: (cikkei)

Udv. Mindenkinek,
halas koszonetem annak a varazslonak, aki megfelel a kovetkezo kerdesre:
Hogyan lehet valamely C-t (Turbo, Borland) uzembe helyezni 286-oson ???
Hibauzenete: DPMI server initialization error -> machine not in database.
Ajanlottak nekem, h. probalkozzak a dpmiinst.exe file inditasaval - eredmeny
egy masfele uzenet, azonban program sehol.
Megkoszonom, ha kuldesz egy (vonalas) telefonszamot, avagy irsz cimemre
(listan nem vagyok rajta).
<<<<<<<<<<<<<<<<<Bacsek Lajos>>>>>>>>>>>>>>>>>>
---------------mailto: -------------------
---------homepage: www.k2.jozsef.kando.hu/~bacsek-----------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tel: 36-1/215-6226
+ - Re: DLL owners (mind) VÁLASZ  Feladó: (cikkei)

Hello!

A 32-bites Windows-okban a DLL-ek mindig reszei a hivo processznek, ezert az ak
tualis PID ugyanaz mint a hivo processz PID-je. Vigyazat: ha mondjuk ket proces
sz hivja ugyanazt a DLL-t, akkor a DLL adatai ket szigoruan szeparalt peldanyba
n leteznek, tehat nem lehet egy statikus valtozoban szamolni, hogy hany process
z hivta meg ezt vagy azt a fuggvenyt. Ha irsz egy DLL-t, akkor programozoi szem
pontbol ugy lehet tekinteni, hogy egyetlen processz kulonbozo szalai hivogatjak
 majd a fuggvenyeidet.

A DllMain() fuggveny pontosan egyszer fog tehat meghivodni a DLL_PROCESS_ATTACH
 dwReason parameterrel, ezen a ponton erdemes a logolast elvegezni (peldaul kii
rsz egy sort egy file-ba az aktualis PID-del).

Szanto Tamas
MOL Rt. IT

(webes bekuldes, a bekuldo gepe: szfw.mol.hu)
+ - bitszamolas (mind) VÁLASZ  Feladó: (cikkei)

hi

kicsit lemaradtam. magamtol en is csak rekurzioval oldottam volna meg,
de ahogy elneztem a tegnapi valaszokat, tenyleg a ketszeres ciklus
a leggyorsabb.

azert itt van egy-ket meres (pII orajel-ben, vc6 fordito.
char[256] tablazatot general, ott lehet jol optimalizalni :)

1. shift-es modszer referenciakent (felteteles ugrasokkal szerintem 
lassabb lenne) 4710 orajel 

void CalcTable( char* Table )
{
  for (int i=0;i<256;i++)
    *Table++ = (i & 1)+((i>>1) & 1)+((i>>2) & 1)+((i>>3) & 1)+
          ((i>>4) & 1)+((i>>5) & 1)+((i>>6) & 1)+((i>>7) & 1);
}

---------------------
2. egyszeru rekurzio
4700 orajel 

void CalcTable(char* p,int i = 256,int a = 0)
{
  if (i >>= 1)
  {
    CalcTable(p,i,a);
    CalcTable(p+i,i,a+1);
  }
  else
    *p = a;
}

---------------------
3. optimalizalt rekurzio
630 orajel 

void CalcTable(long* p,int i=32,long a=0x02010100)
{
  p[0] = a; 
  p[1] = a += 0x01010101;
  while (i >>= 1) CalcTable(p+i*2,i,a);
}

---------------------
4. optimalizalt dupla ciklus (Barna es Joco levele alapjan)
320 orajel

void CalcTable(long* p)
{
  p[0] = 0x02010100;
  for (int i=1;i<=32;i<<=1)
    for (int j=0;j<i;j++)
      p[j+i]=p[j]+0x01010101;
}

bye
-- 
Picard
+ - Re: *** HIX CODER *** #440 (mind) VÁLASZ  Feladó: (cikkei)

Hi!

 Csak 1 kerdes: mi van, ha van 1 tablam es azt vmelyik (a user menet kozben
valtoztathatja) oszlopa szerint szeretnem megjeleniteni. Ez most merult fel,
eddig szimplan egy TDBGrid jelenitette meg egy TDataSet-en keresztul a
TTable-t. Egyetlen megoldakent azt latom, ha irok 1 parameterezheto SQL-t, 
amiben parameter lesz, hogy melyik oszlop szerint rendezze az adatokat:

SELECT
 *
FROM
 LOFASZ
ORDER BY
 :oszlopszam   <--- nem biztos, hogy jol emlekszem, hogy kell a parametert
                    az SQL-be irni ;)

 Ez OK, de kicsit korulmenyes mindenhol atirnom, arrol nem is beszelve, hogy a
user a tablat irogatja at, akkor azt a lekerdezesen keresztul kell frissiteni,
igaz?

 Aron

 .web: http://almos.vein.hu/~gombasa  (refreshed at 02.25.)
+ - Re: *** HIX CODER *** #440 (mind) VÁLASZ  Feladó: (cikkei)

Yo.

 NT alatt kene a gepben levo vinyokat felterkepeznem es particios infokat
gyujtenem. 2 megoldas lehetseges:

 * dokumentalt DeviceIOControl hivasok hasznalata. Ez kenyelmes, meg
   szep, de a visszaadott particiok szama mindig 4, legalabbis nalam mind2
   vinyo eseteben ennyit ad vissza, holott az egyik 1, a masik meg 2
   reszbol all... Eleg erdekes, hogy 1 API hivas bugos. :)

 * a DISK registry key vizsgalata. Ez nem dokumentalt, de a web-en
   megtalaltam a leirasat, szoval menne a dolog. De:

   * egyreszt lusta vagyok atirni a mar meglevo DeviceIOControl-os kodot,
     bar ez a kisebb gond... :)

   * mivel nem dokumentalt, senki sem biztositja, hogy ez a kesobbi NT
     alatt is igy lesz... :(

 Ha vki tudja a megoldast, annak nagyon orulnek:

 Aron / Contract

 .web: http://almos.vein.hu/~gombasa  (refreshed at 02.25.)
+ - Egy Bitszamolas megoldas (mind) VÁLASZ  Feladó: (cikkei)

Hali !

Az en megoldasom rekurzio nelkuli. Illetve gyakorlatilag egy "kilapitott
rekurzio" :-))) (en hivom igy, sok koze nincs a rekurziohoz :-) )

Egyetlen ciklussal vezet a megoldashoz, darabonkent egy osszeadassal es
egy kivonassal(cimszamitasban), es a bitszamnak megfelelo szamu
leptetessel.
Egy pszeudo koddal szemleltetnem. (atmenet a basic es pascal kozott)

-------

tomb[0..255] : array of byte   // ez a lookup tabla
tomb[0]:=0

m:=0
c:=1
for I= 1 to 255
   if I and C then begin m:=c
                         SHL C     //C erteket eggyel balra leptetem 
                   end
   tomb[I]:=tomb[I-M]+1
next
-----------

Ennyibol all.
Mukodese azon a megfigyelesen alapul, hogy egy ilyen lookup tablaban,
ami a feladvany volt, a bitek szamanak ertekei periodikusan valtoznak.
Megpedig ugy, hogy minden uj helyiertek belepesekor a tablazat elozo
resze ismetlodik meg olyan modon, hogy minden addigi ertekhez egy
hozzaadodik, nevezetesen a belepett bit darabszama (1).
C erteke "kikapuzza" a belepo bitet, M erteke pedig (ami =C/2) mindig 
megmutatja hogy a tablabol mennyivel visszabbrol kell venni a
megnovelendo erteket.
A fenti kodot nem nehez ASM-be atultetni.

Kivancsi vagyok milyen megoldasok szuletnek me'g.

Udv:
-- 
Csiszar L.
http://www.stadium.hu/szt/
+ - Re: String C++ (#440) (mind) VÁLASZ  Feladó: (cikkei)

On Sat, 24 April 1999,  wrote:
> 
> Iiiigen, mondhatjuk igy is, bar ez IMHO inkabb ~~szintaktikai, mint 
> szemantikai kulonbseg. (A szemantikai kulonbseg az, amit en irtam, 
> hogy mas kod fordul belole.)
> 

<szorszalhasogatas>
 Igen, ha a statikus szemantikat a szintaxis reszenek tekintjuk... :-)
</szorszalhasogatas>

Az iment neztem utana egy konyvben, es ott ket kozvetlenul egymas
utan kovetkezo bekezdesben ez egyszer ide tartozott, egyszer oda... ;-))

Barna
+ - Re: String C++ (#440) (mind) VÁLASZ  Feladó: (cikkei)

On Sat, 24 April 1999,  wrote:
> Egyszeruen arrol van szo, hogy mindketfele 'indexelesi' szintaktikat
> (b[x] illetve *(b+x)) lehet tombre is meg pointerre is
> alkalmazni.

Ahogy jatszadoztam es olvasgattam a tankonyveket, egy erdekes dolog tunt
fel nekem az indexelessel kapcsolatban:

  char abc[5] = "12345";
  char *p = abc;
  int i;

  for (i=0;i<5;++i)
    printf("%c %c %c %c %c %c %c %c\n", 
	   *(abc+i), abc[i], *(i+abc), i[abc], *(p+i), p[i], *(i+p), i[p]);
                                       ^^^^^^                        ^^^^
Tehat a fordito szemszogebol a tomb/pointer es az index kommutativak, mivel
o az x[y] kifejezeseket *(x+y)-kent kezeli.

Aranyos, nem? En nem tudtam... :-)

Barna
+ - libc5, libc6, Linux driver (mind) VÁLASZ  Feladó: (cikkei)

Udv, Coderek!

Meg tudja nekem mondani valaki (tomoren), hogy mi a kulonbseg a libc5
es libc6 kozott?

Mas: lehet olyat csinalni, hogy az Xes programom kozvetlenul nyulkal egy
porthoz, vagy kell hozza irni egy drivert, modulba pakolni, es a drivertol kern
i,
amit akarok? (tv tuner)

Koszi & udv

Don Gergo

AGYKONTROLL ALLAT AUTO AZSIA BUDAPEST CODER DOSZ FELVIDEK FILM FILOZOFIA FORUM GURU HANG HIPHOP HIRDETES HIRMONDO HIXDVD HUDOM HUNGARY JATEK KEP KONYHA KONYV KORNYESZ KUKKER KULTURA LINUX MAGELLAN MAHAL MOBIL MOKA MOZAIK NARANCS NARANCS1 NY NYELV OTTHON OTTHONKA PARA RANDI REJTVENY SCM SPORT SZABAD SZALON TANC TIPP TUDOMANY UK UTAZAS UTLEVEL VITA WEBMESTER WINDOWS