Hollosi Information eXchange /HIX/
HIX CODER 1439
Copyright (C) HIX
2002-02-18
Új cikk beküldése (a cikk tartalma az író felelőssége)
Megrendelés Lemondás
1 Re: egy kis matek (mind)  17 sor     (cikkei)
2 Re: egy kis matek (mind)  65 sor     (cikkei)
3 Re: backtracking (mind)  85 sor     (cikkei)

+ - Re: egy kis matek (mind) VÁLASZ  Feladó: (cikkei)

Hello!

Irtak egy par felezmerolegeses megoldast latom, szerintem mindenesetre
egyszerubb a kovetkezo:
3 pont -> Ismered x,y koordinatakat

Kor: (x-u)^2 + (y-v)^2 = R^2

A 3 pont koordinatai teljesitik az egyenletet => abban 3 ismeretlen
van: Kor kp-janak x,y koordinataja: u,v es sugara: R

3 egyenlet, 3 ismeretlen => megoldhato

Tehat szepen egyikbol a masikba egy-egy ismeretlent kifejezve megoldod
az egyenletrendszert.

Udv
+ - Re: egy kis matek (mind) VÁLASZ  Feladó: (cikkei)

On 15 Feb 02, at 10:43,  wrote:

> > Felado :  [International]
> 
> > algoritmust keresek 3 egysiban levo pontra kene kort rajzolni
> > kellene a sogar es a kozeppont
> 
 ...
> Mivel a haromszok koreirhato korenek kozeppontja az oldalfelezo
> merloegesek metszepontjaban talalhato, ezert ket oldalra meroleges
> allitva megkaphatjuk ezek metszespont helyvektorat (jelolje m_):

Sziasztok!

Ketten is ugy lattatok neki, mintha szerkeszteni kellene. Persze igy
is kijon a megoldas, de azt hiszem, egyszerubb az alapdefiniciot
hasznalni: A kor azon pontok mertani helye, amik a kozepponttol azonos
r tavolsagra vannak (a sikban). Szoval olyan pontot keresunk, amik
mindharomtol azonos tavolsagra vannak. Ez a tavolsag mellesleg pont a
sugar.

A harom pont legyen az (ax,ay), (bx,by) es (cx,cy). Az egyszerubb
szamolas miatt toljuk el az origot mondjuk az A-ba, igy vegulis (0,0)
(b1,b2) es (c1,c2) lesznek a pontok, ahol b1=bx-ax, b2=by- ay, stb.

A keresett kozeppont az (x,y) pont (az A-ba tolt koordinata-
rendszerben), ami mindharomtol azonos tavolsagra van. Tehat egyszeruen
a Pitagorasz tetel szerint:

r^2 = x^2+y^2 = (x-b1)^2+(y-b2)^2 = (x-c1)^2+(y-c2)^2

ez valojaban ket egyenlet (ha az r^2-et nem tekintem), csak egy 
sorba irtam. Az elso egyenletbol ez jon:

x^2-(x-b1)^2 = (y-b2)^2-y^2
x^2-x^2+2x*b1-b1^2 = y^2-2y*b2+b2^2-y^2
2x*b1=b1^2+b2^2-2y*b2

szoval:

x = (b1^2+b2^2)/(2*b1) - (b2/b1)*y

A masik egyenletbol termeszetesen ugyanigy kijon ez is:

x = (c1^2+c2^2)/(2*c1) - (c2/c1)*y

Ebbol a ket egyenletbol y-t konnyen ki lehet fejezni:

y = [ (b1^2+b2^2)/(2*b1) - (c1^2+c2^2)/(2*c1) ] / [b2/b1 - c2/c1]

kozos nevezore hozva, hogy csak egy osztas maradjon:

y = [ c1*(b1^2+b2^2) - b1*(c1^2+c2^2) ] / [ 2*(c1*b2 - c2*b1 ) ]

Ezt visszahelyettesitve kiszamithato lenne az x is, de kar vele
veszodni, mivel teljesen szimmetrikus a dolog x-re y-ra, igy siman fel
lehet irni x-et az y mintajara behelyettesites nelkul:

x = [ c2*(b1^2+b2^2) - b2*(c1^2+c2^2) ] / [ 2*(c2*b1 - c1*b2) ]

Szoval kesz is vagyunk, megvan az (x,y) kozeppont, es az sqrt(x^2+y^2)
sugar is. Persze az eredeti koordinatarendszerbe visszatolva a
kozeppont (x+ax,y+ay) lesz!

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

On 14 Feb 02, at 21:33,  wrote:

> Sziasztok!
> 
> Kellene nekem valami magyar nyelvu, ertheto backtracking es rekurzio
> leiras...
> Algoritmus illetve peldaprogik C-ben...

Szia!

A rekurzio nagyon egyszeru, pont ugyanaz, mint a matekban a teljes
indukcio: a problemat sajat magaval oldod meg. Ez igy persze nem
ertheto, vegyunk egy peldat:

A faktorialis nem rekurzios definicioja ez: Pozitiv egesz N-re N! (N
faktorialis) az a szam, amit az 1-tol N-ig tarto egeszek
osszeszorzasaval kapunk. Ezt at lehet ultetni rekurziv formaba is:
Ha tudjuk (N-1)! erteket, akkor N! azonos lesz N es (N-1)! 
szorzataval. Ahhoz, hogy a teljes rekurziv definicio meglegyen, 
annyit kell meg hozzatenni, hogy tudjuk azt is, hogy 1! = 1.

Mindez programmal megvalositva:

int factor(int n)
{
        if (n==1)
                return 1;
        else
                return n*factor(n-1);
}

(ez a fenti kod persze nem bombabiztos, mert negativ szamokra meg 0-ra
hulyeseget csinal, valamint viszonylag gyorsan tul is csordul, de az
most nem problema.)

Altalanossagban is hasonlo utat kell kovetni: meg kell fogalmazni a
feladat rekurziv definiciojat, amibe beletartozik az is, hogy a
feladat legegyszerubb fajtajat hogyan kell megoldani onmagaban, es
utana mar nagyon egyszeru mindebbol kodot gyartani.

Vegyunk egy masik, nem ennyire evidens peldat is: Hogyan kell egy
szamot atkonvertalni ascii stringge mondjuk 10-es szamrendszerben?
Szoval ha a szam maga a 0x1000 (4096), akkor azt a stringet kell
eloallitani, hogy "4096".

Egy 10-nel kisebb szambol ugy tudunk stringet csinalni, hogy a '0'
kodjahoz hozzaadjuk a szam erteket, es ez lesz a string egyetlen
betuje (mogotte zaro nulla). Nagyobb szambol tobbjegyu string lesz,
meghozza ugy, hogy az elso jegyek string-je megegyezik a szam
tizedreszenek (egesz osztas!) a stringjevel, az utolso jegy pedig a
10-zel osztas maradekanak kodda konvertalt betuje lesz.

char *decstr(int n, char *buf)
{
        if (n<10) {
                *buf++ = '0' + n;
                *buf = 0;
                return buf;
        } else {
                buf = decstr(n / 10, buf);
                return decstr(n % 10, buf);
        }
}

Megint csak ez a kod nem figyel semmi puffertulcsordulast, de ez
persze konnyen megoldhato. Kicsit mas szervezessel meg lehetne
sporolni a masodik decstr() hivast, de igy erthetobb, ezert igy
hagytam.

Fontos dolog, hogy tisztaban legyunk azzal, hogy mi a rekurzio soran
az invarians, nem valtozo dolog, es mi az, amit maga a rekurziv kod
modosithat. Statikus valtozokat altalaban nem szabad hasznalni, mivel
a problema rekurziv megfogalmazasakor tipikusan kihasznaljuk azt, hogy
az egyszerubb problema megoldasanak nincs mellekhatasa. Ez auto
(stack) valtozok hasznalataval minden tovabbi nelkul teljesul. Neha
viszont szukseg van mellekhatasra is, ilyen volt a masodik peldaban a
buf valtozo modositasa, vagyis hogy a rutin visszaadja, hogy hol van a
kialakult string vege, hova kell a maradekot irni. Ezt egyszerubb lett
volna egy globalis (de legalabbis statikus) buf valtozoval csinalni,
de valahogy viszolyogtam tole ;)

Lassan kimeritem a sorlimitet, ugyhogy a backtrack-rol majd 
holnap...

Istvan

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