Lista 2 -- Wstęp do informatyki, W. Hebisch
Wypróbować poniższy program:
/*
Program oblicza sumę częściową szergu zadającego
funkcję wykładniczą.
Kompilacja
gcc -o expsum expsum.c -lm
*/
#include <stdio.h>
#include <math.h>
int main(void)
{
double suma = 1.0;
double wyraz = 1.0;
double x = -2.0;
int n = 10;
int i;
for(i=1; i<=n; i=i+1) {
wyraz = wyraz * x/i;
suma = suma + wyraz;
}
printf("Suma dla n=%d wynosi %20.16f, błąd %20.16f\n",
n, suma, suma - exp(x));
return 0;
}
Zmodyfikować program tak by:
Wiadomo że jeśli f jest funkcją ciągłą na odcinku [0,1] to suma (f(0)+f(1/n)+...+f((n-1)/n)+f(1))/(n+1) dąży do całki z f gdy n dąży do nieskończoności. Oznacza to że powyższa suma może być użyta to przybliżonego obliczania całki. Napisać program który w obliczy przybliżoną wartość całki (tzn. powyższą sumę) dla f(x)=x oraz dla f(x)=x*x. Obliczyć analitycznie dokładne wartości tych całek i wstawiając dokładną wartość do programu obliczyć błąd przybliżenia dla kilku różnych n.
Zastąpić powyższą sumę przez (f(1/n)+...+f((n-1)/n)+f(1))/n oraz przez (f(0)/2+f(1/n)+...+f((n-1)/n)+f(1)/2)/n, porównać błędy przybliżenia dla f(x)=x oraz dla f(x)=x*x.
#include <stdio.h>
int main(void)
{
char tab[21][21];
int i,j;
/* Inicjujemy tabelę spacjami */
for(i=0; i<21; i=i+1) {
for(j=0; j<21; j=j+1) {
tab[i][j]=' ';
}
}
/* Wpisujemy dużego X-a do tabeli */
for(i=0; i<21; i=i+1) {
tab[i][i] = '*';
tab[i][21-i-1] = '*';
}
/* Wypisujemy tabelę na ekranie */
for(i=0; i<21; i=i+1) {
for(j=0; j<21; j=j+1) {
putchar(tab[i][j]);
}
putchar('\n');
}
return 0;
}
Zmodyfikować program by: