function f(x:real):real; begin f:=sin(x); end; const MaxSteps=200; var a0,b0,a,b,eps,fa,fb,t,ft:real; step,sa,sb:integer; begin writeln('Нахождение корней функции методом половинного деления:'); a0:=3; {writeln(' Input a0: ');readln(a0);} b0:=4; {writeln(' Input b0: ');readln(b0);} eps:=0.0000001; {writeln(' Input eps: ');readln(eps);} fa:=f(a0); fb:=f(b0); if (fa*fb>0) then begin writeln(' На заданном промежутке корней нет.'); halt; end; a:=a0; b:=b0; step:=0; t:=a; ft:=fa; while (abs(b-a)>eps) and (step<MaxSteps) do begin inc(step); t:=(a+b)/2; ft:=f(t); if (fa*ft>0) then begin fa:=ft; a:=t; end else b:=t; writeln('step:',step:4,' t=',t,' f(t)=',ft); end; if (step>MaxSteps) then writeln('Отсутствие сходимости. Уточните промежуток.') else writeln('Найден корень с заданной точностью.'); end.
среда, 28 апреля 2010 г.
Нахождение корня функции.
Здесь описан метод половинного деления (дитохомии?). Суть проста. Есть функция f(x), есть интервал [a,b], есть условие, что на концах промежутка функция имеет разный знак: f(a)*f(b)<0. Требуется найти с заданной точностью eps корень этой функции. Поступаем так: выбираем середину отрезка [a,b]. Если в середине функция имеет тот же знак что и слева, то принимаем середину за новую левую границу, в противном случае - за правую. Повторяем до тех пор, пока отрезок не станет меньше eps. В данном примере в качестве функции берем синус, а отрезок - [3,4]. Таким образом мы должны найти число пи.
нахождения корней уравнения методом половинного деления
PROGRAM KORNI; VAR A,B,PREC:REAL; FUNCTION F(X:REAL):REAL; BEGIN F:=X*X-3*X+2 END; FUNCTION KORENJ(A,B,PREC:REAL):REAL; VAR X,Y,Z:REAL; BEGIN IF ABS(A-B)<PREC THEN KORENJ:=(A+B)/2 ELSE BEGIN X:=F(A); Y:=F((A+B)/2); Z:=F(B); IF X*Y<0 THEN KORENJ:=KORENJ(A,(A+B)/2,PREC) ELSE KORENJ:=KORENJ((A+B)/2,B,PREC) END END; BEGIN READLN (A,B,PREC); WRITELN ('X=',KORENJ(A,B,PREC)) END.
вторник, 27 апреля 2010 г.
определитель матрицы
и снова определитель матрицы
#include <stdio.h> #include <stdlib.h> #include <time.h> const int n = 4; void print(int**, int); void clear(int**, int**, int, int, int); long Determinant(int**, int); void main() { time_t t; srand(time(&t)); int** a = new int*[n]; for (int i = 0; i < n; i++) a[i] = new int[n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j ++) { a[i][j] = rand() % 10; } } print(a, n); long dt = Determinant(a, n); printf("\nDeterminant = %d\n", dt); for (int i = 0; i < n; i++) delete[] a[i]; delete[] a; } void print(int** a, int n) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%d\t", a[i][j]); } printf("\n"); } } void clear(int** a, int** b, int m, int i, int j) { int di = 0; int dj; for (int ki = 0; ki < m - 1; ki++) { if (ki == i) di = 1; dj = 0; for (int kj = 0; kj < m - 1; kj++) { if (kj == j) dj = 1; b[ki][kj] = a[ki + di][kj + dj]; } } } long Determinant(int** a, int n) { if (n == 1) return a[0][0]; if (n == 2) return a[0][0] * a[1][1] - a[0][1] * a[1][0]; int** b = new int*[n]; for (int i = 0; i < n; i++) b[i] = new int[n]; int d = 0; int k = 1; for (int i = 0; i < n; i++) { clear(a, b, n, i, 0); d += k * a[i][0] * Determinant(b, n - 1); k--; } for (int i = 0; i < n; i++) delete[] b[i]; delete[] b; return d; }
понедельник, 26 апреля 2010 г.
борьба с банерами от порно-информермеров
Конечно никто не хочет себе такие красОты, но когда они появляются, то хочется по скорее от них избавиться...
Наши Касперские и др. не спят и уже придумали генераторы кодов для снятия блокировок.
Здесь представлены генераторы кодов от разных производителей:
Наши Касперские и др. не спят и уже придумали генераторы кодов для снятия блокировок.
Здесь представлены генераторы кодов от разных производителей:
понедельник, 12 апреля 2010 г.
полезные скрипты для bash
замена переводов строк на запятую
$ awk '{printf $0","}' input.txt > output.txt
размер директории (заметьте - новый формат в системе CИ)
$ du --si
$ awk '{printf $0","}' input.txt > output.txt
размер директории (заметьте - новый формат в системе CИ)
$ du --si
Подписаться на:
Сообщения (Atom)