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)