Hollosi Information eXchange /HIX/
HIX CODER 81
Copyright (C) HIX
1998-04-18
Új cikk beküldése (a cikk tartalma az író felelőssége)
Megrendelés Lemondás
1 Re: Cipper KEYBOARD C-ben (mind)  33 sor     (cikkei)
2 Re: Karakterfelismeres (mind)  40 sor     (cikkei)
3 =?iso-8859-1?Q?Re:_Tartalmazas?= (mind)  21 sor     (cikkei)
4 Re: Cipper KEYBOARD C-ben (mind)  15 sor     (cikkei)
5 Re: *** HIX CODER *** #78 (mind)  6 sor     (cikkei)
6 Re: Tartalmazas (mind)  26 sor     (cikkei)
7 re: pont tartalmazas (mind)  25 sor     (cikkei)
8 MemCopy (xxmc.zip) program WEB publikalas (mind)  19 sor     (cikkei)
9 Mintaillesztes (mind)  18 sor     (cikkei)
10 Re: Cipper KEYBOARD C-ben (mind)  78 sor     (cikkei)
11 Re: korbejaro planetas (mind)  30 sor     (cikkei)
12 Re: Varakozas (mind)  69 sor     (cikkei)

+ - Re: Cipper KEYBOARD C-ben (mind) VÁLASZ  Feladó: (cikkei)

> Felado :  [Hungary]
> Temakor: Cipper KEYBOARD C-ben ( 58 sor )
> Idopont: Thu Apr 16 09:36:41 EDT 1998 CODER #80
> - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> A kerdes a kovetkezo:
> Nem e lehetne e, ezt a kis eljarast egyszerubben megoldani?
> Ami egyebkent muxik es nallam nem akadt ossze semmivel.

Szia!

Nem teljesen vilagos, hogy ha mukodik, akkor miert kellene megvaltoztat-
ni; valami bajod csak van vele... Ha nem is ismered a C-t, az a megjegy-
zesekbol latszik, hogy minden sornak funkcioja van... :-)
Masfelol hogyan akarod lecserelni?

Kulonben csak addig nem akad ossze semmivel, amig mondjuk nem probalod
NT-n futtatni, mivel a memoriahoz vedett modban mar nem lehet "csak ugy"
hozzaferni. Javaslom, hogy ilyen trukkoket ne hasznalj, barmennyire is
megszokott a Clipperben.

Kesziteni lehetne egy sajat rutint, amit mindig az eddig megszokott
karakter-beolvaso rutin helyett kellene hasznalni (Inkey(), ha jol em-
lekszem), ennek sajat puffere lehetne, amit egy masik rutinnal lehetne
toltogetni, amikor szukseges.

A Clipper 5-ben mar te is osszeallithatod a fontosabb objektumokat (pl.
sajat Get osztaly) es megoldhato bennuk valamennyire a sajat billentyu-
zet-beolvaso rutin hasznalata, de nem tudom, ki lehet-e _mindent_ cse-
relni (pl. SetKey() ?).

Regen volt, talan igaz sem volt... :-)
-- 
Tibor
+ - Re: Karakterfelismeres (mind) VÁLASZ  Feladó: (cikkei)

Sziasztok!

Istvan feladataira a megoldasok (szerintem):

+4 ha az alakzat kulso korvonalat jarjuk be (1. eset),
-4 ha az alakzaton belul egy lyukat (2. eset).
Felteszem, hogy indulasnal a vektor felfele mutat (legutobb
ebben allapodtunk meg ugye). Hogy miert ennyi, arrol mar irtam
egyszer. Azert van, mert amig visszaerunk a kiindulasi helyzetbe
pontosan egyszer fordul korbe a vektor.
Szinbadnak: ha konvex az alakzat (mundjuk ez pixeles alakzanal
csak a teglalapra, negyzetre igaz), akkor csak egy iranyban
fordulunk; ha konkav, akkor ide-is, oda-is, de a "belso"
csucsoknal az ellenkezo iranyu fordulas mindig "kiejt" egy sima
fordulast, igy a vegeredmeny ugyanaz (vagyis egy teljes fordulat).
A lyuknal azert -4 az eredmeny, mert az elkereses a lyuk hatso
szelenel all meg, igy a korbejaras az oramutatoval ellentetesen
halad.

3-4. eset: Egy megjegyzesem lenne mielott az erredmenyt kozolnem.
A korbejaras szabalyainak leirasanal nem derult ki vilagosan,
hogy amikor fordulunk, akkor a vektor a helyen marad-e, vagy nem
(mivel BIZTOS, hogy a fordulas utan az adott iranyban legalabb
1-et kell elore is lepni, nem mindegy), illetve ha ott marad,
akkor az uj iranyba allva is el kell-e vegezni a vizsgalatot es
szamolast, vagy csak a kovetkezo lepes utan. En megneztem mind a
ket esetet, es nekem a 2. a szimpatikusabb, mivel igy kaptam
olyan erteket, amit ertelmezni tudok. Ebben az esetben a kapott
ertek a korbejart alakzaton beluli pontok szamat vagyis teruletet
adja. Pozitiv ha az oramutato jarasaval egyezo iranyban (tehat
kulso korvonalon), negativ ha ellenkezo iranyban (tehat lyukon)
haladunk korbe. Vegig gondoltam a dolgot, le is tudnam vezetni
hogy miert, de mar igy is sokat irtam. Most nem farasztalak
vele titeket. Ha kell majd azt is megszulom.

Udv!

Emze
---
MailTo: 
+ - =?iso-8859-1?Q?Re:_Tartalmazas?= (mind) VÁLASZ  Feladó: (cikkei)

Feladat: eldonteni a sikon egy x,y pontrol, hogy az a,b,c,d pontok
konvex burkanak belso pontja-e.

Nem algoritmus, de kezdetnek remelem jo.

I. Négy pont ket kulonbozo negyszoget alkot, ezert celszeru ket
haromszogre, az abc-re es a bcd -re bontani es a tartalmazast azokra
vizsgalni. Egy pont akkor van egy haromszog belsejeben, ha mindharom e'l
"jobb" oldalan helyezkedik el. Az e'l egyenletebe helyettesitve a pont
koodinatait: Ax+By+C =0, >0 vagy <0 a szerint, hogy az (x,y) pont az
egyenesre illeszkedik vagy az egyenes "bal" vagy "jobb" oldalara esik
(az egyenes normalvektorának (A,B) iranyaba, vagy azzal ellentetes
oldalra).

II. Egy pont akkor belso pontja egy poligonnak, ha egy a pontbol
kiindulo felegyenes a poligon oldalait paratlan szamuszor metszi. A
csucson atmeno felegyenes egy metszespontnak szamit.

Gondold át, mert nem vagyok biztos benne, hogy jol irtam :)

z2
+ - Re: Cipper KEYBOARD C-ben (mind) VÁLASZ  Feladó: (cikkei)

Szia!

Szerintem ezt egy kicsit egyszerubben is meg lehetne csinalni, ugyanis van 
a C-ben egy ilyen fv, ami pont erre valo.

#include <conio.h>

int ungetch(int ch);

Ha EOF -ot ad vissza, akkor valami hiba volt. Egyebkent a ch-t beleteszi a 
bill.pufferbe.

Udv
Csaba

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

Hogy lehet egy voice-os modemet programozni C-ben vagy Pascal-ban, hogy egy
voice-menu-s rendszert lehessen letrehozni, de fax, illetve adat-atvitelt
is lehessen
megoldani?

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

Sziasztok!
> =======================================================
> Felado :  [Belgium]
> Temakor: Tartalmazas ( 14 sor )
> Idopont: Thu Apr 16 03:21:46 EDT 1998 CODER #80
> - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> 
> kerdes. Szoval... Adott 4 pont egy sikon kordinataikkal. Ez a negy pot
> termeszetesen egy negyszoget hataroz meg. Hogyan tudom eldonteni a sik egy
> otodik pontjarol, hogy az eleme-e a negy pont altal meghatarozott
> sikidomnak vagy sem? Valami olyan megoldas kellene, ami konnyen
1)
Huzol egy egyenes, ami atmegy az otodik ponton es metszi valahol a 
negyszoget is.
2)
A negyszog oldalai szakaszokra bontottak az egyenest.
3) 
Meg kell keresni, hogy az otodik pont az egyenes melyik szakaszban 
van. Az negyszogon kivul kell elkezdeni a szamolast.
Minden paratlan es paros metszespont kozott bent vagy a negyszogbe. 
Minden paros es paratlan metszespont kozott kint vagy a negyszogbol.

Pisti

p.s.: Ez nem csak negyszogre mukodik, hanem barmilyen sikidomra. 
(szerintem)
+ - re: pont tartalmazas (mind) VÁLASZ  Feladó: (cikkei)

  kerdezte
>Adott 4 pont egy sikon kordinataikkal. Ez a negy pot
>termeszetesen egy negyszoget hataroz meg. Hogyan tudom eldonteni a sik egy
>otodik pontjarol, hogy az eleme-e a negy pont altal meghatarozott
>sikidomnak vagy sem? 
Ehhez az kell, hogy tudjam a negyszog koruljarasi iranyat, azaz, hogy milyen so
rrendben jonnek egymasutan 
a pontok. Legyen a negyszog negy oldalegyenese  n1,n2,n3,n4 es az otodik pont P
0.
Huzok egy E felegyenest P0 -bol valamilyen iranyba (mondjuk vizszintesen jobbra
)
Veszem E-nek n1,n2,n3,n4-gyel valo metszespontjai kozul azokat, amelyek belul v
annak a negyszog oldalain.
Ha ezek paratlan sokan vannak, akkor a P0 belul van , ha paros sokan vannak, (a
 0 is paros szam :-) ) akkor kivul.
Ha a metszespontok kozul valamelyik egyenlo P0-lal (es belul van az oldalon) ak
kor P0 a hataron van.

Remelem erthetoen fogalmaztam, ha nem, akkor irj, es maganban kuldok rola rajzo
t...


 Szabó Zsolt Mihály
  
  
+ - MemCopy (xxmc.zip) program WEB publikalas (mind) VÁLASZ  Feladó: (cikkei)

Hi Coders!

A CODER#80 megjelent progim bovitett forraskodjat a
http://neutron.szfki.kfki.hu/dice/letoltes.htm
cimen lehet elerni.

Kiegeszitenem a programot azzal, hogy:
 A PentiumPro optimalizalast termeszetesen 32biten lehet a 
 legjobban kihasznalni. Az eredetiben is (si, di, cx helyett
 esi, edi, ecx, stb.) igy szerepelt az eredetiben is csak en 
 irtam at 16bitesre. Tehat PPro eseten inkabb 32bitesre csinaljatok.

Ha hujjesegeket irogatok akko bocsika :)

udv: XiX

       -=-  -=-
-=- Minden masodik szavam hazugsag -=-
-=- Az orokevalosagnak kell elni. Na bumm, legfeljebb nem sikerul -=-
+ - Mintaillesztes (mind) VÁLASZ  Feladó: (cikkei)

Hali, Coderek!

  Egy kis segitsegre lenne szuksegem, megpedig a kovetkezore:
  A Do:mo:lki fele mintailleszto algoritmus leirasa kellene. Ezt ugyan
  elmondtak programozas gyakszin, dehat az ember ugye nem mindig figyel. :)
  Utana meg rohangalhat a hianyzo anyag utan. :(

  Ha valaki ismerne ezt az algoritmust, kerem segitsen.

  A cim: , de mehet a listara is a valasz.

  Elore is koszonom mindenkinek a faradozasat.

							    Pisti

  U.i.:
  Esetleg a Knuth-Morris-Pratt mintaillesztest is leirhatja valaki, bar ezt
  valoszinuleg ki tudom bogaraszni.
+ - Re: Cipper KEYBOARD C-ben (mind) VÁLASZ  Feladó: (cikkei)

On 16 Apr 98 at 9:36,  > wrote:

> Aki ismeri a Clipper KEYBOARD nevu rutinjat
> es meg a C-t is az elemezze ki az alabbi C rutint
> ami a Clipper KEYBOARD rutinjat hivatott megvalositani!

A billentyuzet leutesek 2 byte-os kodjait (ascii kod es scan kod) egy 
gyurupufferben tarolja a dos, ami puffer a 0x40-es szegmensben a 0x1E 
cimen kezdodik, es 16 leutesnyi hely van benne (32 byte). Elvileg a 
puffer lehet mashol is (gyakorlatilag nem tudom, hogy atteszi-e 
valaki, nem hiszem) ezert a 0x40:0x80-as cimen van egy near pointer, 
ami a kezdetere mutat a 0x40-es szegmensben!!! (Ezert nem hiszem, 
hogy atteszi valaki mashova) Van pointer a vegehez is (40:82), szoval 
elvileg a merete is lehet tobb vagy kevesebb 16 leutesnel. Ez a 
program egyiket sem figyeli, szoval mindig a default hellyel 
dolgozik.

A gyurupuffert ket near pointer valositja meg, ezek (a 40-es 
szegmensben szinten) a 0x1A (head) es 0x1C (tail) cimeken vannak. 
Amikor head==tail, akkor ures a puffer. A dos head-rol olvas, az 
interruptkor meg tail-re ir.

> A kerdes a kovetkezo:
> Nem e lehetne e, ezt a kis eljarast egyszerubben megoldani?

(Ha ASM-ben lenne irva, egyszerubb lenne :))

Az 'olvasok' nevu pointered pont az iro pointer cime, szoval zavaros
az elnevezes. Inkabb nevezd tail-nek.

> #pragma inline  // van erre szuksegem egyaltalan? (asm Int 0x09)

Szerintem nincs.

> 	while ( kbhit() )
> 	{
> 		getch();
> 	};

E helyett lehet egy
   *head = *tail;

ha elozoleg mar jo ertekek vannak a pointerekben:

   tail = (unsigned int far *)0x0040001C;
   head = (unsigned int far *)0x0040001E;

(persze ezeket korabbra kell tenni)

> 	olvasok = (unsigned int far *)0x0040001C;
> 	irok = (unsigned int far *)MK_FP( 0x0040, *olvasok );

Igen, csak mas nevekkel:

   irok = (unsigned int far *)MK_FP( 0x0040, *tail );

A tobbi jo, csak olvasok helyett tail-t irj. Esetleg lehet 
egyszerubben irni egy picivel:

   *tail += 2;
   if (*tail == 0x40) *tail = 0x1e;

Ez egyebkent veszelyesebb, mint az elozo!!! Ha ugyanis bejon egy 
billentyuleutes menet kozben, akkor tulirhat az interrupt, tehat le 
kell tiltani az interrupotokat a rutin korul!! A Te modszered szerint 
is le kell tiltani az IT-ket egyebkent, mert johet be ott is 
rosszkor. (Szoval asm cli; asm sti;)

> 	asm Int 0x09

Erre viszont az a gyanum, nincs szukseg. Ez a billentyuzet hardware-t 
olvassa le, hogy milyen billentyuleutes jon. Most viszont nem jon 
semmi!! Szoval probald ki, hogy mukodik-e, ha kihagyod. Azt hiszem, 
mennie kell.

István
--  Istvan Marosi  --  http://www.sch.bme.hu/~marosi  --
--  Recosoft Ltd.  --  mailto:  --
+ - Re: korbejaro planetas (mind) VÁLASZ  Feladó: (cikkei)

On 16 Apr 98 at 13:05,  > wrote:

> 1) fordulasos indexelesre:
> 
> - teglalapra negyszer fordulunk balra -> valtozo =  -4

Khmm...
Szoval a teglalapkor _jobbra_ fordulunk negyszer, tehat +4 lesz benne 
a vegen.

Tehat megint leirom: Indulaskor a vektorunk ugy all, hogy ha a
vektor iranyaba nezunk, akkor jobbra van a fekete pixel, balra pedig
a feher.

> - konkav idomokra ugy nez ki hogy a konkavitas csucsaban van egy
> plussz jobbra, az hogy a valtozo mennyivel nagyobb mint -4 a
> konkavitasok szamat mutatja.

Egyeb tipp?

> 2) iranyindexeles:
> 
> - szabalyos tegalalap => 0
 ...stb.

Egyeb tipp?

István
--  Istvan Marosi  --  http://www.sch.bme.hu/~marosi  --
--  Recosoft Ltd.  --  mailto:  --
+ - Re: Varakozas (mind) VÁLASZ  Feladó: (cikkei)

On 15 Apr 98 at 6:30, Jalsovszky Tamas > wrote:

> Lenne egy keredesem: hogyan lehet PC-n mikroszekundumos kesleltetest
> (wait, delay ...) elerni. Tudom, hogy van valami 5-6 soros asm kod, de
> sajnos a vinyom eluszott, igy nem tudom hogyan volt a kod.

Szerintem egy megfelelo hosszusagu rovid ciklus a legjobb:

  mov cx,konstans
cikl:
  dec cx
  jnz cikl

Az izgalmas dolog a konstans kiszamolasa: ez proci tipustol es 
sebessegtol fugg, tehat programfutas kozben (inicialaskor) kell 
kiszamolni. Nezd meg, hogy a Linux hogyan szamolja a BogoMips-et, az 
egy ugyanilyen ciklusnak a konstansa.

Win dos boxaban egyaltalan nem evidens egyebkent a sebesseg
kiszamitasa, a Win sokat csal rajta (normal dos-ban nem tudom, az
EMM386 stb. mennyit csal a dolgon). Pl. gyakran elofordul dos 
box-ban, hogy a timer tick szamlaloja hirtelen kettot ugrik!!

Kovacs Antal (XiX) mar masodszor kuldte be a millisec idomero
kodjat, az is igen izgalmas dolog. Azon alapul, hogy az 55msec-es
timer tick interruptot egy szamlalo csinalja, ami az osregi 4.77
MHz-es PC orajelrol (pontosabban a felerol) jar, azt osztja le
65536-tal. (Tehat ffff-rol indul, es amikor leszamol 0-ig, elso
kozelitesben akkor lesz interrupt.) A kod lenyege eleg rovid:

  mov al,4
  out 43h,al  ; timer aktualis helyzete atmeneti regiszterbe
  in al,40h   ; atmeneti regiszter also byte-jat beolvassuk
  mov ah,al
  in al,40h   ; felso byte-jat is
  xchg al,ah  ; es hat azok pont forditva alakultak...
  not ax      ; a szamlalo lefele szamol, igy lesz felfele szamlalo

A gond ezzel a szammal az, hogy az interrupt vezerlo szintvezerelt 
uzemmodba van programozva (vagy pont forditva, most nem is tudom, de 
lenyeg, hogy pont rosszul), ezert csak minden masodik leszamlalaskor 
lesz belole interrupt!!!

Vagyis ahhoz, hogy a 0x40:0x6c cimen tarolt timer tick szamlalo 
erteke eggyel novekedjen, ketszer kell 65536-szor leszamolnia a 
szamlalonak, es amikor kiolvassuk az erteket a fenti modon, nem 
tudjuk, hogy eppen melyik felidoben vagyunk!!! Szoval az az erzesem, 
hogy a Clockmsec rutin nem jol mukodik!!! Szivesen veszem, ha valaki 
megcafol, mert tobbszor is lattam mar ilyen rutint, es nem ertettem, 
hogy miert mukodne jol.

XiX, probald ki, hogy merj meg vele egy kb. 20 msec-es rutint (azt
jol kell merje), majd egy kb. 40 msec-eset, azt rosszul kell merje 
(kb. 13 msec-nek).

Mindenesetre rovid (<27 msec) ido meresere jol hasznalhato. Viszont 
kimertem azt is, hogy maga ez a nehany utasitas a sok i/o muvelet 
miatt olyan lassu, hogy kozben kb. 30-at szamol a szamlalo, amit 
kiolvasunk, ami kb. 12 mikrosec. Szoval ennel pontosabb meresre nem 
hasznalhato.

Ja, win alatti dos box-ban ez a modszer is nagyon rossz eredmenyt ad, 
meg inkabb lassul a dolog (kb. 7-szer annyi ido kell hozza win alatt 
az i/o virtualizalas miatt) es nem is jar szinkronban ez a szamlalo a 
timer tick-kel!

István
--  Istvan Marosi  --  http://www.sch.bme.hu/~marosi  --
--  Recosoft Ltd.  --  mailto:  --

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