Informatika2-2012/Hazi03

A MathWikiből
(Változatok közti eltérés)
(Ú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…”)
 
 
(egy szerkesztő 2 közbeeső változata nincs mutatva)
1. sor: 1. sor:
3. házi feladat: Polinomok kezelése
+
=== 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 kiszámolja egy legföljebb 10-edfokú polinom fokát és helyettesítési értékét!
számolni. A polinomokat egyszerűen együtthatóinak tömbjeként kezeljük,
+
A polinomokat egyszerűen együtthatóinak tömbjeként kezeljük,
például a $p_1(x) = x^3 - 5x + 12$ polinomot egy olyan p1 nevű
+
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 adhatjuk 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:
#. Az egyik függvény legyen az, amely megállapítja, és értékként
+
 
 +
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[] );
+
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 $10^{-10}$. Használjuk az alábbi kódot (vagy
+
helyettesítsük egy jobbal):
+
 
<C>
 
<C>
 
int kbNulla( float a ){
 
int kbNulla( float a ){
  float EPSILON=1e-10;
+
    float EPSILON=1e-10;
  if ( a < EPSILON && a > -EPSILON )
+
    if ( a < EPSILON && a > -EPSILON )
    return 1;
+
        return 1;
  return 0;
+
    return 0;
 
}
 
}
 
</C>
 
</C>
  
#. Írjunk egy függvényt, mely kiszámolja egy polinom értékét egy
+
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
  
a_n x^n + a_{n-1} x^{n-1} + \dots + a_1 x + a_0 =
+
<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  
+
(\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 );
+
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ú lesz
+
#define MAX_POL 11  // minden polinomon legföljebb 10-edfokú
 
</C>
 
</C>
Az utolsó sorban egy konstanst definiáltunk, melyet többször is
+
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.
használni fogunk.
+
  
A main függvényben az alábbi polinomokat definiáljuk, és mindegyiknek
+
A main függvényben az alábbi polinomokat definiáljuk, majd 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){
  float p1[MAX_POL]={12,-5,0,1,0,0,0,0,0,0,0};
+
    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 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 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};
+
    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 jelenlegi, 2012. február 25., 23:03-kori változata

3. házi feladat: Polinomok tömbök segítségével

Írjunk programot, mely kiszámolja egy legföljebb 10-edfokú polinom fokát és helyettesítési értékét! 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 adhatjuk 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

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

ö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, majd 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!

Személyes eszközök