ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

12.09.2009, 12:03
|
|
Постоянный
Регистрация: 02.03.2008
Сообщений: 893
Провел на форуме: 5365841
Репутация:
712
|
|
Есть ли в Pascal'e функция для определения отрезка ?
Мне нужно проверить число, чтобы оно не входило в отрезок [0.5-2]
|
|
|

12.09.2009, 12:14
|
|
Участник форума
Регистрация: 17.08.2008
Сообщений: 212
Провел на форуме: 1063099
Репутация:
186
|
|
Помогите пожалуйста! мне нужно выполнить лабораторку, она маленькая. и сдать через 2 часа. помогите пожалуйста!!!!! на с++
Задание:
Решением дифференциального уравнения является неизвестная функция x(t). Необходимо, используя численные методы решения ДУ, найти эту функцию. Полученное численное решение необходимо сопоставить с точным, чтобы исследовать зависимость величины локальной ошибки от величины шага интегрирования.
1.Написать программу решения ДУ с помощью прямой (явной) формулы Эйлера.
2.Написать программу решения ДУ с помощью обратной (неявной) формулы Эйлера.
3.Написать программу решения ДУ с помощью формулы трапеций.
4.Сопоставить результаты численного и точного решений ДУ на экране монитора.
Дифференциальное уравнение (ДУ) - x'(t)=x(t)+t2
Решение ДУ - x(t) =6exp(t-1)- t2-2t-2
Последний раз редактировалось kyoko; 12.09.2009 в 12:26..
|
|
|

12.09.2009, 12:32
|
|
Участник форума
Регистрация: 05.06.2009
Сообщений: 127
Провел на форуме: 1313455
Репутация:
249
|
|
Есть ли в Pascal'e функция для определения отрезка ?
Мне нужно проверить число, чтобы оно не входило в отрезок [0.5-2]
Все очень просто If (твое число < 0.5) or (твое число > 2) then Пишеш тут что будет выполнятся если число не входит в данный отрезок.
По поводу ДУ, могу лишь предоставить код своей проги которая считала их методом:
1) Модифицированный метод Эйлера
2) Метод Рунге-Кутта
Описанные выше методы мне не знакомы, возможно это одно и тоже просто разными словами?
Код:
program TASK5;
uses graph;
var
mas:array[1..2]of real;
x0,y0,y1,y2,y3,h,t,y4,y5,x,y,xk,yk,ye,yr,ya,k1,k2,k3,k4,h1,k11,k21,k31,k41,ye1,yr1:real;
i,gd,gm,j,n,z:integer;
function xm(x:real):integer;
begin
xm:=round(320+960*x);
end;
function ym(y:real):integer;
begin
ym:=round(240-720*x);
end;
function f(a:real):real;
begin
f:=exp(a)+1;
end;
procedure linovka;
var x,y:integer;
begin
setcolor(15);{color is white}
x:=5;y:=0;
setlinestyle(2,6,1);
repeat {draw vertical line}
line(x,0,x,GetMaxY);
x:=x+35;
until x>GetMaxX;
repeat {draw horizontal line}
line(0,y,GetMaxX,y);
y:=y+30;
until y>GetMaxY;
end;
procedure DrawAxisA;
begin
setcolor(15);{color is white}
setlinestyle(0,3,3);{line style,border widht,Thickness of line}
{draw axis of ordinate}
line(round(GetMaxX/2),0,round(GetMaxX/2),GetMaxY);
line(round(GetMaxX/2),0,round(GetMaxX/2-5),10);
line(round(GetMaxX/2),0,round(GetMaxX/2+5),10);
{draw axis of abscis}
line(round(GetMaxX),round(GetMaxY /2),GetMaxX-10,round(GetMaxY/2-5));
line(round(GetMaxX),round(GetMaxY /2),GetMaxX-10,round(GetMaxY/2+5));
line(0,round(GetMaxY/2),GetMaxX,round(GetMaxY/2));
end;
begin
mas[1]:=0.01;
mas[2]:=0.001;
x0:=0;
xk:=10;
y0:=exp(1)+1;
writeln (' x 1 2 a ');
for j:=1 to 2 do
begin
x:=x0;
ye:=y0;
yr:=y0;
n:=round((xk-x0)/(mas[j]));
for i:=1 to n do
begin
ye:=ye+mas[j]*f(x+mas[j]/2);
k1:=mas[j]*f(x);
k2:=mas[j]*f(x+mas[j]/2);
k3:=mas[j]*f(x+mas[j]/2);
k4:=mas[j]*f(x+mas[j]);
yr:=yr+(k1+2*k2+2*k3+k4)/6;
ya:=exp(x)+x;
x:=x+mas[j];
if (j=1) and (i mod 100 = 0) then
writeln ('step = ', mas[j]:5:3,' ',x:8:5,' ',ye/10000:8:5,' ', yr/10000:8:5,' ', ya/10000:8:5);
if (j=2)and(i mod 1000= 0) then
writeln ('step = ', mas[j]:5:3,' ',x:8:5,' ',ye/10000:8:5,' ', yr/10000:8:5,' ', ya/10000:8:5);
end;
end;
readln;
gd:=detect;
initgraph(gd,gm,'');
linovka;
DrawAxisA;
setlinestyle(0,3,3);{line style,border widht,Thickness of line}
x0:=0;
xk:=10;
y0:=exp(1)+1;
x:=x0;
ye:=y0;
yr:=y0;
ye1:=y0;
yr1:=y0;
for j:=1 to 5000 do
begin
t:=j/500;
x:=t/50;
h:=0.01;
h1:=0.001;
ye:=ye+h*f(x+h/2);
k1:=h*f(x);
k2:=h*f(x+h/2);
k3:=h*f(x+h/2);
k4:=h*f(x+h);
yr:=yr+(k1+2*k2+2*k3+k4)/6;
ya:=exp(x)+x;
x:=x+h;
ye1:=ye1+h1*f(x+h1/2);
k11:=h1*f(x);
k21:=h1*f(x+h1/2);
k31:=h1*f(x+h1/2);
k41:=h1*f(x+h1);
yr1:=yr1+(k11+2*k21+2*k31+k41)/6;
putpixel(xm(x),ym(ye),red);
putpixel(xm(x),ym(yr),green);
putpixel(xm(x),ym(ye1),yellow);
putpixel(xm(x),ym(yr1),blue);
putpixel(xm(x),ym(ya),brown);
end;
readln;
end.
Последний раз редактировалось Dosia; 12.09.2009 в 13:52..
|
|
|

12.09.2009, 12:53
|
|
Участник форума
Регистрация: 17.08.2008
Сообщений: 212
Провел на форуме: 1063099
Репутация:
186
|
|
Dosia мне на с++ (((
|
|
|

13.09.2009, 13:22
|
|
Новичок
Регистрация: 05.12.2006
Сообщений: 2
Провел на форуме: 34889
Репутация:
0
|
|
STL и C массивы
День добрый!
Столкнулся с одной проблемкой, никак не могу ее решить. Нужно одной строкой кода скопировать данные из встроенного С массива в vector. (без циклов и алгоритмов STL) Буду признателен за любую помощь.
|
|
|

12.09.2009, 13:19
|
|
Постоянный
Регистрация: 02.03.2008
Сообщений: 893
Провел на форуме: 5365841
Репутация:
712
|
|
Составить структурированнуб программу преобразования заданных вещественных хначений Х и Т по правилу: - если Х < 0, то X и Т заменить модулем
- если X < 0 или T < 0, то Х и Т увеличить на 0.5
- если Х > T и Т > 0 и ни одно из них не принадлежит отрезку [0.5-2], то Х и Т * 10
в противном случае Х и Т оставить без изменеий
Код:
program z1n17;
uses crt;
var
x,t: real;
begin
clrscr;
writeln ('Enter X,T');
read(x,t);
if (x < 0) and (t < 0) then { ШАГ 1 }
begin
x:=abs(x);
t:=abs(t);
clrscr;
writeln('Result:');
writeln('|X|=', x:5:3, ' and |T|=', t:5:3);
end
else
if (x < 0) or (t < 0) then { ШАГ 2 }
begin
x:=x+0.5;
t:=t+0.5;
clrscr;
writeln('Result:');
writeln('X+0.5=', x:5:3, ' and T+0.5=', t:5:3);
end
else
if (x>0) and (t>0) and (x<0.5) and (x>2) and (t<0.5) and (t>2) then { ШАГ 3 }
begin
x:=x*10;
t:=t*10;
clrscr;
writeln('Result:');
writeln('X*10=', x:5:3, ' and T*10=', t:5:3);
end
else
begin
clrscr;
writeln('Result:');
writeln('X=', x:5:3, ' and T=', t:5:3);
writeln;
writeln('Without changes');
end;
read(x);
end.
Вот у меня проблема на шаге 3:
if (x>0) and (t>0) and (x<0.5) and (x>2) and (t<0.5) and (t>2)
Это условие ни в какую не хочет работать
P.S. После третьего условия у меня действия "смещены" влево, т.к. в паскале повидимому ограничение на количество символов в строке.
Это как-то можно обойти, чтобы код выглядил "красиво" ?) (но это не принципиально, главная проблема с условием)
P.S.S. первая прога на паскале)
|
|
|

12.09.2009, 13:21
|
|
Участник форума
Регистрация: 17.08.2008
Сообщений: 212
Провел на форуме: 1063099
Репутация:
186
|
|
Помогите написать программу решения системы нелинейных уравнений методом Ньютона- Рафсона на с++
|
|
|

13.09.2009, 13:03
|
|
Участник форума
Регистрация: 15.12.2006
Сообщений: 212
Провел на форуме: 587761
Репутация:
144
|
|
Сообщение от kyoko
Помогите написать программу решения системы нелинейных уравнений методом Ньютона- Рафсона на с++
Объясни мне сам метод, я тебе программу напишу.
http://ru.wikipedia.org/wiki/Метод_Ньютона
Можешь постучать в аську. Помогу.
9один46девять3
Господа, нужна помощь... C++
Вообще не понимаю тему "Динамические структуры данных"
В составе программы описать функцию, которая объединяет два упорядоченных по невозрастанию списка в один упорядоченный по невозрастанию список.
Сообщение от Validol
Алгоритм программы я построил в принципе. По идее необходимо ввести с клавиатуры 1 строчку с вещественными числами. Затем вторую. Потом отсортировать первую строчку по убыванию. Затем вторую. Потом объединить их в одну и упорядочить по убыванию. Как объединять их в одну? Мне код на C++ нужен. А лучше пример программы, чтобы хоть как-то разобраться.
Код:
#include "SPIS.CPP" // Где начало программы?
void main()
{Zveno *S1, *S2, *S3, *V1, *V2, *V3; // Что это такое?
BT a; int i, n; // Что такое ВТ?
clrscr(); // Я так понимаю, это очистка экрана. Зачем?
randomize(); // Рандомайз чего?
S1=NULL;
// создаём первый элемент
a=-100+random(201);
S1=V_Nachalo(S1, a);
n=1+random(20);
// формируем список произвольной длины и выводим на печать
V1=S1;
for (i=2; i<=n; i++)
{
a=-100+random(201);
V1=V_Spisok(V1, a);
}
Print(S1);
V1 = S1; S2 = NULL; S3 = NULL;
while (V1)
{if (V1->Inf > 0)
if (!S2)
{S2=V_Nachalo(S2, V1->Inf); V2 = S2;}
else {V_Spisok(V2, V1->Inf); V2 = V2->Next;};
if (V1->Inf < 0)
if (!S3)
{S3=V_Nachalo(S3, V1->Inf); V3 = S3;}
else {V_Spisok(V3, V1->Inf); V3 = V3->Next;};
V1= V1->Next;}
cout << "Результирующий список из положительных элементов: \n";
Print(S2);
cout << "Результирующий список из отрицательных элементов: \n";
Print(S3);
S1=Ochistka(S1); S2=Ochistka(S2); S3=Ochistka(S3);
}
Если я правильно понял - взят тупо кусок программы и выкинут на обозрение. Есть проггеры, которые более менее могут написать программу, которая указана на предыдущей странице и объяснить комментариями?
Проблема актуальна. Надеюсь на помощь
Последний раз редактировалось Validol; 13.09.2009 в 13:07..
|
|
|

13.09.2009, 13:07
|
|
Участник форума
Регистрация: 04.01.2008
Сообщений: 186
Провел на форуме: 872350
Репутация:
72
|
|
Сообщение от kyoko
Помогите написать программу решения системы нелинейных уравнений методом Ньютона- Рафсона на с++
_http://www.machinelearning.ru/wiki/images/c/ca/Kasat.zip
(c) _http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0 %BA%D0%B0%D1%81%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%B D%D1%8B%D1%85_(%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%B D%D0%B0-%D0%A0%D0%B0%D1%84%D1%81%D0%BE%D0%BD%D0%B0)
в гугол полез смотреть что за метод, нашел исходники.
|
|
|

12.09.2009, 13:33
|
|
Участник форума
Регистрация: 05.06.2009
Сообщений: 127
Провел на форуме: 1313455
Репутация:
249
|
|
Код:
program z1n17;
uses crt;
var
x,t: real;
begin
clrscr;
writeln ('Enter X,T');
read(x,t);
{ ШАГ 1 }
if (x < 0) and (t < 0) then
begin
x:=abs(x);
t:=abs(t);
clrscr;
writeln('Result:');
writeln('|X|=', x:5:3, ' and |T|=', t:5:3);
readkey;
exit;
end;
{ ШАГ 2 }
if (x < 0) or (t < 0) then
begin
x:=x+0.5;
t:=t+0.5;
clrscr;
writeln('Result:');
writeln('X+0.5=', x:5:3, ' and T+0.5=', t:5:3);
readkey;
exit;
end;
{ ШАГ 3 }
{Проверяем условия по порядку}
if (x>t) and (t>0) then
if ((x<0.5) or (x>2)) and ((t<0.5) or (t>2)) then
begin
x:=x*10;
t:=t*10;
clrscr;
writeln('Result:');
writeln('X*10=', x:5:3, ' and T*10=', t:5:3);
readkey;
exit;
end;
clrscr;
writeln('Result:');
writeln('X=', x:5:3, ' and T=', t:5:3);
writeln;
writeln('Without changes');
readkey;
end.
мну ушел. Вроде все так, все должно работать.
если Х < 0, то X и Т заменить модулем. Если так то заменить первое условие на if (x < 0). Но тогда второе не будет выполнятся никогда. Так что ты скорее всего ошибся, когда написал нам условие, а в коде сделал все верно.
Последний раз редактировалось Dosia; 12.09.2009 в 13:51..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|