Informatika2-2015/Gyakorlat12
A MathWikiből
A lap korábbi változatát látod, amilyen Csirke (vitalap | szerkesztései) 2015. május 9., 22:29-kor történt szerkesztése után volt.
Tartalomjegyzék |
12. gyakorlat - Új típusok
Ezen a gyakorlaton az előző heti előadás anyagát dolgozzuk fel.
Feladatok
Feladatok a CloudCoder-en megtalálhatóak. Ajánlott sorrend:
- fibonacci
- matrix_szorzas_1
- matrix_szorzas_2
- atlag
Feladatok megoldása
fibonacci
int fibonacci(int limit, int tomb[], int meret) { int i; tomb[0] = 1; tomb[1] = 1; for(i = 2; i < meret && tomb[i-1] + tomb[i-2] < limit; ++i) { tomb[i] = tomb[i-1] + tomb[i-2]; } return i; }
matrix_szorzas_1
void szoroz(matrix a, matrix b, matrix ret) { int i, j, k; for(i = 0; i < 2; ++i) { for(j = 0; j < 2; ++j) { ret[i][j] = 0; for(k = 0; k < 2; ++k) { ret[i][j] += a[i][k] * b[k][j]; } } } }
matrix_szorzas_2
struct MatrixTar szoroz(struct MatrixTar a, struct MatrixTar b) { int i, j, k; struct MatrixTar ret; for(i = 0; i < 2; ++i) { for(j = 0; j < 2; ++j) { ret.adat[i][j] = 0; for(k = 0; k < 2; ++k) { ret.adat[i][j] += a.adat[i][k] * b.adat[k][j]; } } } return ret; }
atlag
Amire itt figyelni kell, és sokaknak meglepő, hogy ha a mértani középnél "1 / N"-et írunk, akkor azt egész számok osztásaként értelmezi a C. Meg lehet mondani direkt hogy valós számokként kezelje őket, ha az egyiket valós számmá konvertáljuk, pl: "1 / (float)N". De egyszerűbb az "1" helyett, ami egy egész szám, azt írni hogy "1.0", ami már egy valós szám (a C szemszögéből).
float atlag(int tomb[], int N, enum atlag_fajta fajta) { float sum; int i; switch(fajta) { case SZAMTANI: sum = 0; for(i = 0; i < N; ++i) { sum += tomb[i]; } return sum / N; case MERTANI: sum = 1; for(i = 0; i < N; ++i) { sum *= tomb[i]; } return powf(sum, 1.0 / N); case NEGYZETES: sum = 0; for(i = 0; i < N; ++i) { sum += tomb[i] * tomb[i]; } return sqrtf(sum / N); default: return -1; } }