Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointiputka: PHP-haaste: 10: Kertoma

Sivun loppuun

tpohjis [13.11.2009 21:40:30]

#

Ihan esiksi kiitokset hyvästä php toiminnasta. todella parantanut mieltä.

mutta koulujakäymättömänä seuraava tuloste php haasteessa ihmetyttää:

onko kyseessä syöte 0! missä typo? olenko oikealla palstalla? ja mikä on se käsky millä muutetaan string integeriksi? ja jos pitää nenästä kiinni kun aivastaa niin voiko pää räjähtää? (no joo, antakaa huumorille tilaa..)

tehtävä 10 - kertoma

TESTI 1...OIKEIN
TESTI 2...OIKEIN
TESTI 3...OIKEIN
TESTI 4...OIKEIN
TESTI 5...OIKEIN
TESTI 6...VÄÄRIN

Syöte:

n=0

Sinun ratkaisusi:

0

Oikea ratkaisu:

1

Takaisin tehtävään

Takaisin tehtävälistaan

Grez [13.11.2009 21:42:34]

#

Siis jos oikein ymmärsin, niin ohjelmasi antaa 0! tehtävälle väärän tuloksen (0). Eli mikä oli ongelma?

http://fi.wikipedia.org/wiki/Kertoma

(Tosin kieltämättä Wikin ensimmäisen kappaleen mukaan 0! olisi 0. "Positiivisen kokonaisluvun n kertoma on n:n ja kaikkien n:ää pienempien positiivisten kokonaislukujen tulo." Määritelmä kohdassa oleva kaava sen sijaan on oikein. Kuka käy korjaamassa Wikin :D )

Chiman [13.11.2009 21:44:34]

#

tpohjis kirjoitti:

ja mikä on se käsky millä muutetaan string integeriksi?

intval: https://www.php.net/manual/en/function.intval.php

Jaska [13.11.2009 21:56:06]

#

Grez kirjoitti:

(Tosin kieltämättä Wikin ensimmäisen kappaleen mukaan 0! olisi 0. "Positiivisen kokonaisluvun n kertoma on n:n ja kaikkien n:ää pienempien positiivisten kokonaislukujen tulo."

Eihän nolla ole positiivinen. Korjausta ei tarvita.

tpohjis [13.11.2009 21:57:44]

#

"Siis jos oikein ymmärsin, niin ohjelmasi antaa 0! tehtävälle väärän tuloksen (0). Eli mikä oli ongelma? "

ei. ohjelmani antaa kuten tuloste eli 0

mutta kun oikeavastaus olisi kertomalle 0 olisi 1 kuten tulosteesta ymmärsin.

Metabolix [13.11.2009 22:01:31]

#

Kysytty tapaus on n=0 eli 0!. Oikea vastaus on 1. Ohjelmasi tulostaa 0. Ohjelmasi toimii väärin. Muuta sitä.

tpohjis [13.11.2009 22:04:38]

#

nyt en ymmärrä...

luvun 0 kertoma olisi 1 ?

(edit) joo niinhän se on määritelty...

lukeminen kannattaa aina (J.Donner)

Sami [13.11.2009 22:05:17]

#

0! = 1

Metabolix [13.11.2009 22:20:55]

#

tpohjis kirjoitti:

luvun 0 kertoma olisi 1 ?

Kyllä. Tehtävänannossakin lukee näin: "Lisäksi on määritelty 0! = 1."

tpohjis [13.11.2009 22:41:59]

#

no tulipahan opittua että se huuto merkki tarkoittaa kertomaa eikä sitä että esim 10! olisi 11, kirjainta ja numeroa sekoittamassa. no--->

  $i= str_split($i);
   while($count<$sana){
          if ($i[$count]==0 && $i[$count+1]=="!")
           {$luku[$kierros]=1;$count++;$kierros++;}
            else {$luku[$kierros]=$i[$count];$kierros++;}

                $count++;

        }
    $income=implode($i);

oli kivaa, kerrankin virheistä oppii...

mistä muuten editori jossa tuo borlandin turbopascalin näköinen koodi.

Grez [13.11.2009 23:08:16]

#

tpohjis kirjoitti:

mistä muuten editori jossa tuo borlandin turbopascalin näköinen koodi.

Siis mikä ja missä on tuo "tuo"?

hk [28.11.2009 23:28:56]

#

Totuus nollan kertomasta ei ole yksioikoinen. Nollan kertoma voi olla nolla tai määrittelemätön, mutta yleisimmin sovitaan, että se on yksi. Nimenomaan sovitaan, koska mitään intuitiivista logiikkaa siinä ei ole, eikä se sovi kertoman perusmääritelmään. Mutta monissa tilanteissa tuo sopimus toimii mielekkäästi, esim. permutaatioiden ja kombinaatioiden laskukaavoissa.

Wikipedian artikkeli on vähän epätäsmällinen, sillä siellä puhutaan välillä positiivisista kokonaisluvuista ja välillä luonnollisista luvuista, mikä ei ole sama asia. koska nollan kuuluminen luonnollisiin lukuihin on myös sopimuksenvarainen asia.

Ohjelmointitehtävässä nollan kertoma on tietysti se, mikä tehtävänannossa määrätään.

Jaska [29.11.2009 22:22:45]

#

hk kirjoitti:

Totuus nollan kertomasta ei ole yksioikoinen. Nollan kertoma voi olla nolla tai määrittelemätön, mutta yleisimmin sovitaan, että se on yksi.

Minkä lähteen mukaan nollan kertoma on nolla tai määrittelemätön? Olen lukenut aika paljon matikkaa ja aina kun nollan kertoma on määritelty, se on nimenomaan yksi.

hk [29.11.2009 23:15:27]

#

Jaska kirjoitti:

Minkä lähteen mukaan nollan kertoma on nolla tai määrittelemätön? Olen lukenut aika paljon matikkaa ja aina kun nollan kertoma on määritelty, se on nimenomaan yksi.

Lähde, jonka mukaan nollan kertomaksi voidaan joskus sopia nolla, oli matematiikan tohtori, mutta en ole matemaatikko, joten en sen paremmin tiedä, onko se totta. Sen sijaan olen nähnyt kertomia sisältäviä kaavoja, jotka eivät toimi, kun n=0, mutta joissa ei ole erikseen mainittu, että n ei saa olla nolla, joten niihin on sisältynyt oletus, että n! tarkoittaa vain lukusarjaa 1*2*...*n jollain positiivisella kokonaisluvulla.

Jtm [29.11.2009 23:50:09]

#

Kokonaislukukertoma n! voidaan yleistää käsittämään koko kompleksiavaruus. Yleistyksessä apuna toimii Gammafunktio. Sille on määritelty integraaliyhtälö, joka on yksiselitteinen myös kohdassa 0! (n = 0).

Lisätietoja:
http://mathworld.wolfram.com/GammaFunction.html

Kertoma n! voidaan siis määritellä seuraavasti:
n! = Gammafunktio(n+1),
jossa n voi olla myös kompleksinen.

Johtopäätös:
0! = 1, koska integraaliyhtälö Gammafunktio(1) on yksiselitteinen.

EDIT:
Hyvä lisähuomio: älkää hyvät ihmiset missään tapauksessa etsikö suomenkielisiä Wikipedia-artikkeleja matemaattisista aiheista (tai yleensä tieteellisistä aiheista). Vaihtakaa Wikipedian kieli englanniksi niin huomaatte saavanne paljon enemmän irti aiheesta. Kertoma in english:
http://en.wikipedia.org/wiki/Factorial

hk [03.12.2009 00:56:39]

#

Gammafunktio näyttäisi olevan jonkinlainen kertoman laajennus, jonka argumentti voi olla myös muuta kuin kokonaisluku, poiketen siis kertomafunktiosta, jonka argumentti voi olla vain määritelmästä riippuen jokin positiivinen kokonaisluku tai jokin kokonailuku >=0. Argumentti näyttäisi voivan kertoman määritelmästä poiketen olla myös kompleksiluku.

Avaisitko nyt vähän miksi meidän pitäisi jotenkin piitata tuosta gammafunktiosta sen enempää kuin vaikka funktiosta f(x)=6, joka taas on kertoman supistus, ja antaa helposti laskettavan ja täsmällisen oikean arvon kertomalle kohdassa x=3, mutta tuottaa vähän virheellisen arvon kertomalle joillakin muilla x:n arvoilla.

Funktiolla f, jonka lähtöjoukko on eri kuin funktiolla g ei oikein mitenkään voine perustella funktion g lähtöjoukkoa saati funtion g maalijoukkoa?

Ja jos et voi todistaa, että juuri funktio f(x) = 1*2*3*..*x saa x:n arvolla 0 arvon 1, niin minusta ko. funtio saa kyllä arvon 0, sillä 1*2*3*..*0 = 0. Voisin myös väittää, että nollan kertoma = 16, ja sitäkään ei voi kumota millään muulla funktiolla.

Ajatellaanpa vielä perustetta, että 0! = 1, koska ei minkään lukujen tulo = 1. Mutta eihän sillä ole mitään tekemistä kertoman kanssa, koska kertoma on 1*2*3*..*n, n on kokonaisluku ja vähintään 0 tai vähintään 1.

Toisaalta myös luvun n! on aina tulo, jossa n on yhtenä tekijänä, ja kaikki tulot, joissa 0 on tekijänä, ovat 0.

Päärynämies [03.12.2009 02:42:51]

#

Jtm kirjoitti:

Kokonaislukukertoma n! voidaan yleistää käsittämään koko kompleksiavaruus. Yleistyksessä apuna toimii Gammafunktio. Sille on määritelty integraaliyhtälö, joka on yksiselitteinen myös kohdassa 0! (n = 0).

Lisätietoja:
http://mathworld.wolfram.com/GammaFunction.html

Kertoma n! voidaan siis määritellä seuraavasti:
n! = Gammafunktio(n+1),
jossa n voi olla myös kompleksinen.

Johtopäätös:
0! = 1, koska integraaliyhtälö Gammafunktio(1) on yksiselitteinen.

Niin ja tämä johtopäätöshän on riippuvainen juuri tuosta valinnasta, että kertoma tuossa määritellään gammafunktion kautta. Toki tavallinen kertoma on gammafunktion rajoittuma positiivisten kokonaislukujen ja nollan muodostamaan joukkoon, jos nyt on määritelty että 0! = 1. Yleensä kertomaa ei kuitenkaan taideta määritellä gammafunktion kautta.

hk kirjoitti:

Ja jos et voi todistaa, että juuri funktio f(x) = 1*2*3*..*x saa x:n arvolla 0 arvon 1, niin minusta ko. funtio saa kyllä arvon 0, sillä 1*2*3*..*0 = 0.

Ja minusta tässä esimerkissä lasketaan hieman oudosti, kun yleensä merkintä 1*2*3*..*x meinaa, että kerrotaan lukuja ykkösestä äksään asti niiden järjestyksessä, jolloin 1*2*3*..*0 näyttää merkintänäkin jo hieman ongelmalliselta.

hk kirjoitti:

Voisin myös väittää, että nollan kertoma = 16, ja sitäkään ei voi kumota millään muulla funktiolla.

Ja tämän väitteen totuusarvohan on sitten riippuvainen vain kertoman määrittelystä arvolla 0. Näin lisäkommenttina.

hk kirjoitti:

Toisaalta myös luvun n! on aina tulo, jossa n on yhtenä tekijänä, ja kaikki tulot, joissa 0 on tekijänä, ovat 0.

Tuo ei ole tapauksessa n = 0 tulo, jos yksinkertaisesti on määritelty, että se on tulo vain positiivisten kokonaislukujen tapauksessa, ei nollan. Ja noinhan tuo kertoma on määriteltykin.

http://mathworld.wolfram.com/Factorial.html:

The factorial is defined for a positive integer as

n! = (n-1)..2*1

...

The special case 0! is defined to have value 0! = 1, consistent with the combinatorial interpretation of there being exactly one way to arrange zero objects (i.e., there is a single permutation of zero elements, namely the empty set).

Tuossa asiasta vielä. Tulee muistaa tietysti, että 0 ei ole positiivinen kokonaisluku. Tuo positiivisille kokonaisluvuille käytettävä määritelmä käy ongelmalliseksi, jos sitä koitetaan soveltaa tapaukseen n = 0. Ongelma vain kierretään määrittelemällä siten, miten koetaan mielekkääksi. Voitaisiin määritellä toisellakin tapaa. Tai voitaisiin jättää määrittelemättä koko tapaus n = 0.

Semmoista täältä suunnalta.

Jaska [03.12.2009 02:42:59]

#

Jtm kirjoitti:

Kokonaislukukertoma n! voidaan yleistää käsittämään koko kompleksiavaruus. Yleistyksessä apuna toimii Gammafunktio.

Ei vaan joukko C\Z_-. Gamma-funktiolla on navat negatiivisilla kokonaisluvuilla?

Muttä määritelmät ovat määritelmiä ja niitä ei voi todistaa. Kuitenkin 0!=1 voidaan perustella vaikkapa sillä, että n alkion joukosta voidaan valita nolla alkiota yhdellä tavalla; ei valita mitään alkiota. Samoin binomikerroin ei vaadi erikoistapausta, jos 0!=1. Toisaalta on ihan järkeenkäypää perustella luvun n! olemaan luku, jossa kerrotaan luvut min(n,1):stä max(n,1):een. Tällöin 0!=0.

Matemaatikot ovat valinneet määritelmäksi 0!=1, koska sitä ei voi todistaa muuten ja ilmeisesti sen takia, että binomikerroin ei vaadi erikoistapauksia.

Jtm [03.12.2009 20:20:36]

#

Vielä selvennykseksi kaikille. Kertoman määritelmä on johdettu seuraavasta rekursiokaavasta:

f(n+1) = (n+1)*f(n),
jossa f(x) = x! ja f(1) = 1! = 1 (oletus).

Rekursiokaavoille ominaista on se, että niille voidaan muodostaa sarjakehitelmät, jotka noudattavat rekursiokaavan asettamia 'sääntöjä' ja annettuja reunaehtoja. Esimerkiksi yllä oleva rekursiokaava voidaan hajoittaa kahdeksi sarjakehitelmäksi, joista toinen on määritelty negatiivisille kokonaisluvuille (n <= 0) ja positiivisille kokonaisluvuille (n > 0). Jälkimmäinen on kaikkien tuntema kertoma. Negatiivista sarjakehitelmää ei ole mielekästä muodostaa, koska rekursiokaava antaa äärettömiä lukuja kaikille negatiivisille kokonaisluvuille (poislukien 0). Asia on helppo todistaa ratkaisemalla f(n) rekursiokaavasta. Eli ratkaistaan rekursioyhtälöstä f(n):

f(n+1) = (n+1)*f(n)
=>
f(n) = f(n+1)/(n+1)

Lasketaan muutama arvo: (oletetaan edelleen, että 1! = 1)
n = 0: f(0) = f(0+1)/(0+1) eli 0! = 1! / 1 = 1 (hyvin määritelty)
n = -1: (-1)! = 0! / 0 = 1 / 0 = inf (huonosti määritelty)
n = -2: (-2)! = (-1)!/(-1) = inf / (-1) = -inf (huonosti määritelty)
...

Olemme nyt siis todistaneet, että rekursiokaavan nojalla kaikkien negatiivisten kokonaislukujen (poislukien 0) kertomat ovat huonosti määriteltyjä. Ei siis mikään ihme, ettei negatiivista rekursiokaavaa ole esitetty missään. Eihän siitä olisi kellekään mitään hyötyä.

Joka tapauksessa, gammafunktio on johdettu samasta rekursiokaavasta [f(n+1) = (n+1)*f(n)]. Ehto toteutuu, kun f(n) = Gammafunktio(n+1), jossa n voi olla myös kompleksinen luku. Tämä ei ole mitenkään ristiriidassa alkuperäisen rekursiokaavan ja reunaehdon kanssa. Gammafunktio toteuttaa rekursiokaavan niin täydellisesti, että sillä on myös oikean suuruiset navat negatiivisilla kokonaisluvuilla (poislukien 0) rekursiokaavan epäjatkuvuuskohdissa.

Gammafunktio on funktio, joka toteuttaa rekursioehdon täydellisesti (mukaan lukien epäjatkuvuudet) sekä reunaehdon f(1) = 1. Voidaan siis päätellä, että kertoma n! on Gammafunktio(n+1), jossa n = kompleksiluku. Tuntemamme sarjakehitelmä kertomalle on siis ainoastaan gammafunktion erikoistapaus positiivisille kokonaisluvuille. Voiko asiaa tämän selkeämmin esittää? :)

Jaska [03.12.2009 20:40:59]

#

Jtm kirjoitti:

Vielä selvennykseksi kaikille. Kertoman määritelmä on johdettu seuraavasta rekursiokaavasta:

Ei. Matematiikassa määritelmiä ei johdeta, vaan määritelmistä lähdetään liikkeelle ja tulokset johdetaan, todistetaan tai osoitetaan.

Jtm [04.12.2009 15:13:34]

#

Jaska kirjoitti:

Jtm kirjoitti:

Vielä selvennykseksi kaikille. Kertoman määritelmä on johdettu seuraavasta rekursiokaavasta:

Ei. Matematiikassa määritelmiä ei johdeta, vaan määritelmistä lähdetään liikkeelle ja tulokset johdetaan, todistetaan tai osoitetaan.

Osaatpas sinä saivarrella. Ruvetaan sitten samaan leikkiin :) Sanotaan näin, että harvemmin matematiikan määritelmät ovat itsenäisiä. Aksioomia lukuunottamatta ne perustuvat suureen joukkoon muita määritelmiä ja siksi ovat johdannaisia niistä. Esimerkiksi on mahdollista johtaa Sine- ja Cosine-funktioiden määritelmät kompleksisen eksponentin määritelmästä, vaikka näiden yhteys keksittiin vasta paljon myöhemmin. Näin ollen kertoman määritelmä on sitä kuvaava sarjakehitelmä, joka pätee ainoastaan luonnollisille luvuille. Samainen sarjakehitelmä (kertoman määritelmä) johdetaan rekursioehdosta (yleisen kertoman määritelmä), josta kerroin aikaisemmassa viestissä :)

Kuvittele, että matematiikan määritelmät ovat kuin palapelin paloja, joiden huomataan muodostavan suurempia kokonaisuuksia, joista ne olisi voitu johtaa (eikä vain keksiä, kuten ensimmäiset matematiikot ovat tehneet). Kun paloja on riittävästi, suurempi kokonaiskuva alkaa hahmottua ja parhaimmassa tapauksessa loput palat voidaan arvata/ennustaa, kunhan kokonaisuus vaikuttaisi johdonmukaiselta. Hyvä esimerkki haastavasta 'palapelistä' on matematiikan tutkijoiden suosikki, alkuluvut.

Jaska [04.12.2009 16:46:49]

#

Jtm kirjoitti:

Esimerkiksi on mahdollista johtaa Sine- ja Cosine-funktioiden määritelmät kompleksisen eksponentin määritelmästä, vaikka näiden yhteys keksittiin vasta paljon myöhemmin.

Ei. En ole loogikko, joten joudun turvautumaan köäsien heilutteluun tässä asiassa. Johtaminen tarkoittaa suurinpiirtein sitä, että postulaateistä päästään loogisilla välivaiheilla lopputulokseen. Jos lopputulosta ei tiedetä, niin johtamista ei voi tehdä. Matematiikassa ei voi käyttää käsitteitä, joita ei ole määritelty. Sekoitatkohan siihen, että käsitteille voidaan antaa useita määritelmiä, jotka osoitetaan ekvivalenteiksi?

hk [04.12.2009 21:13:22]

#

Kyllä määritelmät ovat matematiikassa sitä, miltä kuulostavatkin, jotain mitä on sovittu, ei jotenkin todistettu. Kuten Jaska sanoi, ne määrittelevät käsitteitä, antavat asioille nimen, jolla voidaan sitten puhua niistä.

Lauseet taas ovat todistettuja johdoksia määritelmistä, toisista lauseista ja pohjimmiltaan aksioomeista.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta