Polynomit

AAAAPUAAA kuten täällä usein sanotaan. Eli pitäisi repäistä sellainen ohjelma, joka piirtää annetun polynomifuntion kuvaajan ja laskee nollakohdat. Jäin miettimään tuota polynomifunktiota. Siinä kun olisi hyvä voida laittaa:
a)potensseja
b)sulkeita
c)- */
d)extrana voisi kehitellä myös tan,sin,cos
e)megaextra: integrointi ja derivointi!!! =)

Onko teillä antaa mielipiteitä? Ajattelin ensin vääntää komennon, joka parsii annetun funktion eli kertoo sulut auki. (ja mahdollisesti poistaa myös vastakkaismerkkiset
esim. 46x^5 4x x^2 - 4x= 46x^5 x^2
Sitten ajattelin korvata kaikki x:ät aina muuttujalla ja laskea y:n arvon. Oletteko sitä mieltä, että tuo voisi toimia?

Lähettäkää valmis ratkaisu osoitteeseen ********@suomi24.fi! Ei vaiskaa, en minä nyt ole niin epätoivoinen kuin ERÄÄT! En mainitse ketään nimeltä, muuten vain..
181084
Äänestä

Muut lukivat myös

Vastaukset 18

Vanhimmat

Delphin Object Pascal tai sitten C . Valitettavasti on tykännyt Dev ohjelmasta, kun se tunkee ulos jostain syystä jo pelkällä
void main(void) 400 kt:n tiedoston. Tiedä sitten miksi. Ajattelin tehdä Pascalina ja kääntää sitten Delphin kääntäjän läpi, mutta en tykkää konsoliohjelmista. Eli ehkä teen sittenkin lomakkeelle tuon.

Äänestä

Se kuvaajan piirtäminen vai funktion esikäsittely. Nollakohdat nyt löytyvät vaikka tiheällä silmukalla kun käy kaikki X:n arvot läpi.

Mä näkisin vaikeaksi miten syötät helposti sen funktion ohjelmalle...siis käyttöliittymän.

Äänestä
  • Konsolina tekee niin ei ole vaikea tuokaan =)) Ainakaan tuossa tehtävänannossa ei ole sanottu että sen pitäis olla graafinen. Voihan sen kuvaajankin piirtää vaikka pistejonolla.

    Äänestä

  • Että kun delphistä on puhe, ei käyttöliittymä ole ongelma, vaan funktio joka laskee pisteen sijainnin käyrällä polynomifunktion ja muuttujien avulla, eli jonkinlainen funktio.

    Äänestä

  • Polynomifunktion nollakohtien etsiminen ohjelmallisesti ei ole ihan noin helppoa. Irrationaalisia arvoja kun et voi antaa muuttujalle ollenkaan;)

    Haarukointi halutulla tarkkuudella on juttu erikseen. Sekin menee nahkalammaksi, jos väli supistetaan hyvin pieneksi.

    Kuvaajan piirtäminen onnistunee helpoimmin näin:
    derivoidaan funktio, etsitään derivaatan nollakohtien likiarvot haarukoimalla, lasketaan pienin ja suurin arvo ko. väliltä ja niiden avulla rosoluution sopivat skaalauskertoimet.

    Äänestä

  • Okeido kirjoitti:

    Polynomifunktion nollakohtien etsiminen ohjelmallisesti ei ole ihan noin helppoa. Irrationaalisia arvoja kun et voi antaa muuttujalle ollenkaan;)

    Haarukointi halutulla tarkkuudella on juttu erikseen. Sekin menee nahkalammaksi, jos väli supistetaan hyvin pieneksi.

    Kuvaajan piirtäminen onnistunee helpoimmin näin:
    derivoidaan funktio, etsitään derivaatan nollakohtien likiarvot haarukoimalla, lasketaan pienin ja suurin arvo ko. väliltä ja niiden avulla rosoluution sopivat skaalauskertoimet.

    ...vaan näin tietokone ja graafinen laskin asian ymmärtää:

    Meillä on polynomifunktio, vaikka
    Y = 2X^ 4X
    Sitten aletaan piirtämään kuvaajaa
    Annetaan X:lle alkuarvo vaikka -10 ja lisätään sitä kierroksittain vaikka 0.1 (step)
    Sitten piirretään pikseli pisteeseen ( X, Laske('2X^ 4X',X) )
    Tai voidaan käyttää viivaa, joka piirtyy edellisestä pisteestä aina nykyiseen, jotta voidaan käyttää suurempaa step-arvoa.

    Äänestä

  • ... kirjoitti:

    ...vaan näin tietokone ja graafinen laskin asian ymmärtää:

    Meillä on polynomifunktio, vaikka
    Y = 2X^ 4X
    Sitten aletaan piirtämään kuvaajaa
    Annetaan X:lle alkuarvo vaikka -10 ja lisätään sitä kierroksittain vaikka 0.1 (step)
    Sitten piirretään pikseli pisteeseen ( X, Laske('2X^ 4X',X) )
    Tai voidaan käyttää viivaa, joka piirtyy edellisestä pisteestä aina nykyiseen, jotta voidaan käyttää suurempaa step-arvoa.

    typo

    Äänestä

  • ... kirjoitti:

    typo

    Eli ajattelin ensimmäisenä sitä, että miten lasketaan käyttäjän antaman funktion arvoja?
    Kun käyttäjä antaa tyypin String, mutta se pitäisi muuttaa jokaisella X:n arvolla joksikin Y:n arvoksi, eli Integeriksi.
    Tuo lähinnä on vaikea, eli miten saada takuuvarmasti toimiva systeemi, joka laskee merkkijonon arvon. Kun ei ole valmista Y:=CalculatePolynom('X^6 7X^3 5');
    Eli pitäisi tehdä funktio (toiminto), joka laskee arvon. Silloin kai lasketaan, että järjestyksessä potenssiin korotukset, kerto- ja jakolaskut ja plus- ja miinus-laskut, kunhan sulut on kerrottu auki.
    Käyttöliittymä ei ole mitenkään vaikea tehdä.
    Derivoimalla nollakohdat? Voisi kai sitä käyttääkin, kun nehän voivat varmaan olla kuvaajan raja-alueilla.

    Äänestä

  • Mr..........?? kirjoitti:

    Eli ajattelin ensimmäisenä sitä, että miten lasketaan käyttäjän antaman funktion arvoja?
    Kun käyttäjä antaa tyypin String, mutta se pitäisi muuttaa jokaisella X:n arvolla joksikin Y:n arvoksi, eli Integeriksi.
    Tuo lähinnä on vaikea, eli miten saada takuuvarmasti toimiva systeemi, joka laskee merkkijonon arvon. Kun ei ole valmista Y:=CalculatePolynom('X^6 7X^3 5');
    Eli pitäisi tehdä funktio (toiminto), joka laskee arvon. Silloin kai lasketaan, että järjestyksessä potenssiin korotukset, kerto- ja jakolaskut ja plus- ja miinus-laskut, kunhan sulut on kerrottu auki.
    Käyttöliittymä ei ole mitenkään vaikea tehdä.
    Derivoimalla nollakohdat? Voisi kai sitä käyttääkin, kun nehän voivat varmaan olla kuvaajan raja-alueilla.

    Miksi ihmeessä annat sen käyttäjän syöttää luvut stringinä...jospa teet vain integerlaatikot (UI kontrollit) kullekin potenssille ja poimit luvut sieltä. Esim 3X^2 4X 2 syötetäännäin:

    5 4 3 2 1 0
    [0] [0] [0] [3] [4] [2]

    jossa laatikot ovat ui kontrolleja johon käyttäjä syöttää lukuja. Tuossa on tietty rajoitus max. 5:een potensiin.

    ja math cad on kanssa keksitty, joten ei paljoa kannata itse keksiä.

    Äänestä

  • Koodari kirjoitti:

    Miksi ihmeessä annat sen käyttäjän syöttää luvut stringinä...jospa teet vain integerlaatikot (UI kontrollit) kullekin potenssille ja poimit luvut sieltä. Esim 3X^2 4X 2 syötetäännäin:

    5 4 3 2 1 0
    [0] [0] [0] [3] [4] [2]

    jossa laatikot ovat ui kontrolleja johon käyttäjä syöttää lukuja. Tuossa on tietty rajoitus max. 5:een potensiin.

    ja math cad on kanssa keksitty, joten ei paljoa kannata itse keksiä.

    Käyttäjän kannalta on kaikkein helpoin syöttää ohjelmalle string-lauseke. Aika hankala olis tällaista muuten tehdä:
    y = (4/x)^(2x)-tan(sin(4z-2 x^2))

    Ei tuohon tarvi kuin parsia tuo lauseke termeihin, operaattoreihin, funktioihin ja sulkuihin. Merkitsee ylös sulkujen korkeuden ja lähtee korkeimmasta aloittaen sieventämään.

    Sin( tai muu funktio voi olettaa olevan myös sulun aloitusmerkkejä.

    Äänestä

  • Koodari kirjoitti:

    Miksi ihmeessä annat sen käyttäjän syöttää luvut stringinä...jospa teet vain integerlaatikot (UI kontrollit) kullekin potenssille ja poimit luvut sieltä. Esim 3X^2 4X 2 syötetäännäin:

    5 4 3 2 1 0
    [0] [0] [0] [3] [4] [2]

    jossa laatikot ovat ui kontrolleja johon käyttäjä syöttää lukuja. Tuossa on tietty rajoitus max. 5:een potensiin.

    ja math cad on kanssa keksitty, joten ei paljoa kannata itse keksiä.

    Math Cad? En ole moisesta kuullutkaan! Ja kyllä se on minusta paras antaa käyttäjälle mahdollisuus syöttää se funktio stringinä, jottei tule mitään rajoituksia.
    Onkos tälle jo valmis kirjasto?? Muistaakseni näin yhden, mutta se oli Delphi5:lle ja minulla on D3.
    No eiköhän tuo tästä. Pitäisi siis kerto sulut auki, suorittaa mahdolliset vähennyslaskut, sitten sijoitetaan X, lasketaan termien arvot ja aletaan plussailla niitä toisiinsa, kunnes kaikki on lisätty. Sitten piirretään saatu Y koordinaatistoon. OK, vois kai tuota yrittää. C :lla muuten tekisin, mutta kun ei ole vielä tiedossa muuta kuin tuo syntaksi ja noiden kirjastojen käyttö on melkoista häsläämistä.

    Äänestä

  • Mr..........?? kirjoitti:

    Math Cad? En ole moisesta kuullutkaan! Ja kyllä se on minusta paras antaa käyttäjälle mahdollisuus syöttää se funktio stringinä, jottei tule mitään rajoituksia.
    Onkos tälle jo valmis kirjasto?? Muistaakseni näin yhden, mutta se oli Delphi5:lle ja minulla on D3.
    No eiköhän tuo tästä. Pitäisi siis kerto sulut auki, suorittaa mahdolliset vähennyslaskut, sitten sijoitetaan X, lasketaan termien arvot ja aletaan plussailla niitä toisiinsa, kunnes kaikki on lisätty. Sitten piirretään saatu Y koordinaatistoon. OK, vois kai tuota yrittää. C :lla muuten tekisin, mutta kun ei ole vielä tiedossa muuta kuin tuo syntaksi ja noiden kirjastojen käyttö on melkoista häsläämistä.

    polynomilaskentaa
    http://perso.wanadoo.fr/jean-pierre.moreau/p_polynoms.html

    Äänestä

  • dlp kirjoitti:

    polynomilaskentaa
    http://perso.wanadoo.fr/jean-pierre.moreau/p_polynoms.html

    Tuolta tuskin löytyy vastausta..hurjasti tavaraa johon syötetään termi kerrallaan. Pitääkö mun korjata oman funktion bugit poikkeen kun muualta tätä ei tunnu löytyvän :(

    String-muotoisen yhtälön laskemiseen riittää melko vähän koodia joka käytännössä on ollu nopea vielä.

    Äänestä

  • ... kirjoitti:

    Tuolta tuskin löytyy vastausta..hurjasti tavaraa johon syötetään termi kerrallaan. Pitääkö mun korjata oman funktion bugit poikkeen kun muualta tätä ei tunnu löytyvän :(

    String-muotoisen yhtälön laskemiseen riittää melko vähän koodia joka käytännössä on ollu nopea vielä.

    stringien parsiminen ei ole koskaan nopeata eikä käyttäjän koskaanole helppo syöttäää stringinä yhtään mitään.

    Helpompi syöttää kertoimet UI kontrollilla, joka hyväksyy vain numeroita...

    Äänestä

  • Koodari kirjoitti:

    stringien parsiminen ei ole koskaan nopeata eikä käyttäjän koskaanole helppo syöttäää stringinä yhtään mitään.

    Helpompi syöttää kertoimet UI kontrollilla, joka hyväksyy vain numeroita...

    ...se on nopeaa, jopa reaaliaikaista, ja UI-kontrollin teko on paljon työläämpi operaatio, jolla ei kuitenkaan saa yhtä helppoa lopputulosta aikaiseksi.

    Nopeaa kuvaajan piirtoa varten kannattaa pitää parsitut termit muistissa, ja kun seuraavan kerran kutsutaan funktiota samalla stringillä, voidaan jättää parsiminen väliin ja suorittaa vain laskutoimitus uusilla muuttujilla.

    Äänestä

http://www.a3calc.com

BASIC-ohjelmoitava kalkulaattori! Ominaisuuksia:
- Voit tehdä omia funktioita (polynomeja tms)
- Piirtää kuvaajan
- Laskee nollakohdat
- Ym

Saatavana 2 versiota:
- Windows (ilmainen)
- Symbian /Nokia 9210 (kaupallinen)

Äänestä
  • halua mitään Basic-ohjelmoitavaa laskinta, vaan haluan tehdä laskimen, joka laskee annetusta stringistä funktion nollakohdat ja sitten vielä piirtää funktion, kaikkine skaalaus toimintoineen, pelkällä OK-napin painalluksella. No pitää katella tuota juttua. Ja miten sinä Koodari muka toteutat esim.
    X^(X 3*25X^(2 X)) funktion osan käyttämättä Stringiä? Eihän kyse ole numeroiden, vaan muuttujien antamisesta, ja siitä, miten ne kasvavat.
    Tein muuten tuossa joutessani HTML-editorin. Piti vain kertoa. Jos vaikka jotain ei kiinnostaisi. =)

    Äänestä

En muista tarkkaan missä järjestyksessä nämä tuli, mutta löytyy varmaan jostain..

Ensin poistat kaikki välilyönnit stringistä

Eli teet rekursiivisen ohjelman, joka lukee stringiä lopusta alkuun. Jos vastaan tulee sulje ), niin lisäät sulje laskuria, jos ( niin vähennät laskuria. Jos vastaan tulee luku, niin se tulkitaan lukuna ja jos vastaan tulee kirjain, niin katsotaan onko samaan ryhmään kuuluvat kirjaimet joku ennalta mainittu funktio. Jos vastaan tulee operaattori */ -, niin se tulkitaan sellaisenaan. Pientä järkeä pitää käyttää noiden tulkitsemisjärjestysten kanssa ,eli miten menee sulkeet jne, mutta tässä perusajatus..

Nämä eri itemit sitten tallenetaan puu-rakenteeseen, josta pistäisi muodostua esim. tämän näköinen (copy pastaa notepadiin niin noi menee jotenkin edes kohdalleen):
......y.....
.....*. ....
....x..sin..
...... ...-.
.....x.....4

Funktio voidaan laskea muistaakseni niin, että ensin lasketaan oikea haara ja sitten vasen, eli (y*x) sin(x-4)=??

nyt nuo kaikki operaatiot on atomisia, niin ei tuota ongelmia.. Tää lasku funktiokin on sitten rekursiivinen

Äänestä

Kommentoi aloitusta


Mr..........?? kirjoitti:

AAAAPUAAA kuten täällä usein sanotaan. Eli pitäisi repäistä sellainen ohjelma, joka piirtää annetun polynomifuntion kuvaajan ja laskee nollakohdat. Jäin miettimään tuota polynomifunktiota. Siinä kun olisi hyvä voida laittaa:
a)potensseja
b)sulkeita
c)- */
d)extrana voisi kehitellä myös tan,sin,cos
e)megaextra: integrointi ja derivointi!!! =)

Onko teillä antaa mielipiteitä? Ajattelin ensin vääntää komennon, joka parsii annetun funktion eli kertoo sulut auki. (ja mahdollisesti poistaa myös vastakkaismerkkiset
esim. 46x^5 4x x^2 - 4x= 46x^5 x^2
Sitten ajattelin korvata kaikki x:ät aina muuttujalla ja laskea y:n arvon. Oletteko sitä mieltä, että tuo voisi toimia?

Lähettäkää valmis ratkaisu osoitteeseen ********@suomi24.fi! Ei vaiskaa, en minä nyt ole niin epätoivoinen kuin ERÄÄT! En mainitse ketään nimeltä, muuten vain..

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu