Informatika2-2012/Hazi03
(Új oldal, tartalma: „3. házi feladat: Polinomok kezelése Írjunk programot, mely képes legföljebb 10-edfokú polinomokkal számolni. A polinomokat egyszerűen együtthatóinak tömbjek…”) |
|||
1. sor: | 1. sor: | ||
− | 3. házi feladat: Polinomok | + | === 3. házi feladat: Polinomok tömbök segítségével === |
Írjunk programot, mely képes legföljebb 10-edfokú polinomokkal | Írjunk programot, mely képes legföljebb 10-edfokú polinomokkal | ||
számolni. A polinomokat egyszerűen együtthatóinak tömbjeként kezeljük, | számolni. A polinomokat egyszerűen együtthatóinak tömbjeként kezeljük, | ||
− | például a | + | például a <math>p_1(x) = x^3 - 5x + 12</math> polinomot egy olyan p1 nevű |
− | tömbbel adjuk meg, melynek elemei: p1[0]=12, p1[1]=-5, p1[2]=0, | + | tömbbel adjuk meg, melynek elemei: <code>p1[0]=12</code>, |
− | p1[3]=1, p1[4]=0,... p1[10]=0. | + | <code>p1[1]=-5</code>, <code>p1[2]=0</code>, |
+ | <code>p1[3]=1</code>, <code>p1[4]=0</code>,... <code>p1[10]=0</code>. | ||
Írjunk két függvényt a main-en kívül: | Írjunk két függvényt a main-en kívül: | ||
− | + | ||
+ | 1. Az egyik függvény legyen az, amely megállapítja, és értékként | ||
visszaadja egy polinom fokát! Ennek deklarációja lehet például a | visszaadja egy polinom fokát! Ennek deklarációja lehet például a | ||
következő: | következő: | ||
− | + | <C> | |
− | + | int fok( float polinom[] ); | |
− | + | </C> | |
− | hívása például fok( p1 ), ahol p1 egy már definiált polinom. | + | hívása például <code>fok( p1 )</code>, ahol <code>p1</code> egy már definiált polinom. |
Az algoritmus egyszerűen keresse meg a legnagyobb indexű nemnulla | Az algoritmus egyszerűen keresse meg a legnagyobb indexű nemnulla | ||
értéket a polinomot megadó tömbben. Az azonosan nulla polinom fokát | értéket a polinomot megadó tömbben. Az azonosan nulla polinom fokát | ||
20. sor: | 22. sor: | ||
ábrázolható legkisebb egészt! E függvényhez el kell tudnunk dönteni, hogy egy | ábrázolható legkisebb egészt! E függvényhez el kell tudnunk dönteni, hogy egy | ||
lebegőpontosan ábrázolt szám egyenlő-e nullával. A számábrázolás | lebegőpontosan ábrázolt szám egyenlő-e nullával. A számábrázolás | ||
− | pontatlansága miatt az (a == 0.0) feltétel nem lesz jó, ezért egy | + | pontatlansága miatt az <code>(a == 0.0)</code> feltétel nem lesz jó, ezért egy |
számról akkor fogjuk azt mondani, hogy 0, ha valamely előre megadott | számról akkor fogjuk azt mondani, hogy 0, ha valamely előre megadott | ||
− | EPSILON értéknél abszolút értékben kisebb. Lehet például EPSILON = | + | <code>EPSILON</code> értéknél abszolút értékben kisebb. Lehet például <code>EPSILON = 1e-10</code>, vagyis <math>10^{-10}</math>. Használjuk az alábbi kódot (vagy helyettesítsük egy jobbal): |
− | 1e-10, vagyis | + | |
− | helyettesítsük egy jobbal): | + | |
<C> | <C> | ||
int kbNulla( float a ){ | int kbNulla( float a ){ | ||
34. sor: | 34. sor: | ||
</C> | </C> | ||
− | + | 2. Írjunk egy függvényt, mely kiszámolja egy polinom értékét egy | |
megadott helyen a Horner-módszert használva. A Horner-módszer az | megadott helyen a Horner-módszert használva. A Horner-módszer az | ||
− | + | <math>a_n x^n + a_{n-1} x^{n-1} + \dots + a_1 x + a_0 = | |
− | + | (\dots((a_n x+a_{n-1}) x + a_{n-2}) x + \dots + a_1) x + a_0 </math> | |
összefüggésre épül, mellyel hatványozás nélkül, és gyorsan értékelhető | összefüggésre épül, mellyel hatványozás nélkül, és gyorsan értékelhető | ||
ki egy polinom. Ha e függvény deklarációja | ki egy polinom. Ha e függvény deklarációja | ||
− | + | <C> | |
− | + | float Horner( float polinom[], float x ); | |
− | + | </C> | |
− | akkor például a fent megadott p1 polinom és x=1.0 esetén a | + | akkor például a fent megadott p1 polinom és <code>x=1.0</code> esetén a |
− | Horner( p1, x ) függvényhívás 8.0-át ad vissza. E függvényben | + | <code>Horner( p1, x )</code> függvényhívás <code>8.0</code>-át ad vissza. E függvényben használjuk a fokszámot megadó függvényt. |
− | használjuk a fokszámot megadó függvényt. | + | |
A programunkat kezdjük az alábbi sorokkal: | A programunkat kezdjük az alábbi sorokkal: | ||
53. sor: | 52. sor: | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <limits.h> | #include <limits.h> | ||
− | #define MAX_POL 11 // minden polinomon legföljebb 10-edfokú | + | #define MAX_POL 11 // minden polinomon legföljebb 10-edfokú |
</C> | </C> | ||
− | Az utolsó sorban egy konstanst definiáltunk | + | Az utolsó sorban egy konstanst definiáltunk. Ez a makróparancs a fordítás első fázisában a kód a MAX_POL változó helyébe 11-et helyettesít. |
− | + | ||
A main függvényben az alábbi polinomokat definiáljuk, és mindegyiknek | A main függvényben az alábbi polinomokat definiáljuk, és mindegyiknek | ||
− | írjuk ki a fokát és a helyettesítési értékét az x=1.2 helyen! | + | írjuk ki a fokát és a helyettesítési értékét az <code>x = 1.2</code> helyen! |
<C> | <C> | ||
int main(void){ | int main(void){ | ||
67. sor: | 65. sor: | ||
float p4[MAX_POL]={0,0,0,0,0,0,0,0,0,0,0}; | float p4[MAX_POL]={0,0,0,0,0,0,0,0,0,0,0}; | ||
</C> | </C> | ||
− | A két függvény és a kbNulla függvény mindegyikét a main előtt | + | A két függvény és a <code>kbNulla</code> függvény mindegyikét a main előtt |
deklaráljuk, és a main után definiáljuk! | deklaráljuk, és a main után definiáljuk! |
A lap 2012. február 25., 18:29-kori változata
3. házi feladat: Polinomok tömbök segítségével
Írjunk programot, mely képes legföljebb 10-edfokú polinomokkal
számolni. A polinomokat egyszerűen együtthatóinak tömbjeként kezeljük,
például a p1(x) = x3 − 5x + 12 polinomot egy olyan p1 nevű
tömbbel adjuk meg, melynek elemei: p1[0]=12
,
p1[1]=-5
, p1[2]=0
,
p1[3]=1
, p1[4]=0
,... p1[10]=0
.
Írjunk két függvényt a main-en kívül:
1. Az egyik függvény legyen az, amely megállapítja, és értékként visszaadja egy polinom fokát! Ennek deklarációja lehet például a következő:
int fok( float polinom[] );
hívása például fok( p1 )
, ahol p1
egy már definiált polinom.
Az algoritmus egyszerűen keresse meg a legnagyobb indexű nemnulla
értéket a polinomot megadó tömbben. Az azonosan nulla polinom fokát
mínusz végtelennek szokás definiálni, ekkor e függvény adja vissza az
ábrázolható legkisebb egészt! E függvényhez el kell tudnunk dönteni, hogy egy
lebegőpontosan ábrázolt szám egyenlő-e nullával. A számábrázolás
pontatlansága miatt az (a == 0.0)
feltétel nem lesz jó, ezért egy
számról akkor fogjuk azt mondani, hogy 0, ha valamely előre megadott
EPSILON
értéknél abszolút értékben kisebb. Lehet például EPSILON = 1e-10
, vagyis 10 − 10. Használjuk az alábbi kódot (vagy helyettesítsük egy jobbal):
int kbNulla( float a ){ float EPSILON=1e-10; if ( a < EPSILON && a > -EPSILON ) return 1; return 0; }
2. Írjunk egy függvényt, mely kiszámolja egy polinom értékét egy megadott helyen a Horner-módszert használva. A Horner-módszer az
összefüggésre épül, mellyel hatványozás nélkül, és gyorsan értékelhető ki egy polinom. Ha e függvény deklarációja
float Horner( float polinom[], float x );
akkor például a fent megadott p1 polinom és x=1.0
esetén a
Horner( p1, x )
függvényhívás 8.0
-át ad vissza. E függvényben használjuk a fokszámot megadó függvényt.
A programunkat kezdjük az alábbi sorokkal:
#include <stdio.h> #include <limits.h> #define MAX_POL 11 // minden polinomon legföljebb 10-edfokú
Az utolsó sorban egy konstanst definiáltunk. Ez a makróparancs a fordítás első fázisában a kód a MAX_POL változó helyébe 11-et helyettesít.
A main függvényben az alábbi polinomokat definiáljuk, és mindegyiknek
írjuk ki a fokát és a helyettesítési értékét az x = 1.2
helyen!
int main(void){ float p1[MAX_POL]={12,-5,0,1,0,0,0,0,0,0,0}; float p2[MAX_POL]={1,0,0,0,0,0,0,0,0,0,1}; float p3[MAX_POL]={5,0,0,0,0,0,0,0,0,0,0}; float p4[MAX_POL]={0,0,0,0,0,0,0,0,0,0,0};
A két függvény és a kbNulla
függvény mindegyikét a main előtt
deklaráljuk, és a main után definiáljuk!