forum.kai.ru

Форум КНИТУ-КАИ
Текущее время: 24 ноя 2017, 18:20

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 10 окт 2006, 07:30 
Не в сети
ник, генерирующий сообщения

Зарегистрирован: 08 окт 2004, 15:54
Сообщений: 305
Откуда: выпуск 2009 4-й фак
Пёс писал(а):
Народ!
Как в ДЕлфи можно решить дифуры?

Пёс! Так же, как и на любом другом языке. Наверно, с применением численных методов


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 окт 2006, 12:14 
Не в сети
Постоянный посетитель

Зарегистрирован: 05 сен 2006, 12:01
Сообщений: 142
Откуда: Казань, Квартал А
По конкретнее можно? Я в программировании вообще профан.

_________________
Если тебя не любит дурак, считай это комплиментом.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 окт 2006, 09:37 
Не в сети
ник, генерирующий сообщения

Зарегистрирован: 08 окт 2004, 15:54
Сообщений: 305
Откуда: выпуск 2009 4-й фак
что поподробнее? берешь любую книжку по численным методам и пишешь. Т.е. нужна некая итерационная формула, вычисляющая решение твоего уравнения при неком начальном приближении(при каждой итерации погрешность становится всё меньше, и в конце концов она станет меньше некой заданной точности, и будет тебе приближенное решение). В умных книжках пишут об этом. Иди в библиотеку


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 дек 2006, 02:19 
Не в сети
Новый посетитель
Аватар пользователя

Зарегистрирован: 13 дек 2006, 01:35
Сообщений: 2
Откуда: http://www.noil.pri.ee/
Amir писал(а):
пишу сейчас модуль в виде DLL и сразу же появилась куча вопросов :)
1. В библиотеку мне нужно встроить бесконечный цикл, типа один раз через rundll32 запустил, и она так и работает пока комп не вырубишь... Вроде всё просто, нужно только посавить таймер. Но как его можно поставить в остутствии формы??? это раз :)
2. синтаксис rundll следующий: rundll32 my.dll,MyFunction
а как передать параметр функции если она например выглядит так function MyFunction(name: string): integer;
как мне передать этот параметр name?

пока всё ;)


Таймер, можно организовать как цикл с ожиданием типа Sleep или Винайпи функцией WaitForSingleObject

Если нужно вести ожидание паралельно то тоже без проблем: используем потоки TThread
Цитата:
Как реализовать обработку информации одновременно несколькими потоками
Previous Top Next





Автор: Садыков Алексей Николаевич

Запускайте Delphi. Итак, наша программа будет представлять из себя форму с двумя edit'ами и кнопкой. Добавьте их на форму.

При нажатии на кнопку будут осуществляться некоторые долгие вычисления. Если бы мы не использовали потоки, то, пока эти вычисления не закончатся, делать мы ничего бы не смогли. Надо было бы ждать. Но, так как потоки у нас будут, то во время долгих вычислений можно будет что-нибудь вводить во второй edit (он, собственно, только для этого и существует). В первый же edit наш поток будет выводить некоторые промежуточные результаты своей работы.

Добавьте в программу еще один модуль (меню File, New, Unit).

Внесите в окно кода нового модуля следующий код:



unit Unit2;

interface

uses
Classes;

type
TMyThread = class(TThread) //Новый класс
private
answer: Integer;
protected
procedure ShowResult;
procedure Execute; override;
end;

implementation

uses
SysUtils, Unit1;

//Процедура для вывода информации из потока
procedure TMyThread.ShowResult;
begin
Form1.Edit1.Text := IntToStr(answer);
end;

//Длинная процедура
procedure TMyThread.Execute;
var
i: Integer;
begin
for i := 1 to 10000 do
begin
answer := answer + 1;
Synchronize(ShowResult);
end;
end;

end.




Немного комментария по коду. В нашем модуле мы вводим новый класс TMyThread как «потомок» TThread. В экземпляре нашего класса и будет выполнятся отдельный поток программы. В классе есть процедура ShowResult для вывода информации из работающего потока в основной поток (форму) нашей программы. Кроме того, в классе есть наша версия метода Execute из родительского класса TThread. Обратите внимание, что в нашей реализации Execute мы пишем


Synchronize(ShowResult);

Тем самым наш поток что-то отправляет в основной поток программы (в данном случае, значение переменной answer). Делаем мы это посредством вызова Synchronize, в котором в качестве параметра указываем имя нужной процедуры.

Теперь переходим к нашему основному модулю Unit1. Во-первых, добавьте в секцию uses ссылку на Unit2:


uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Unit2;

Во-вторых, напишите обработчик для нажатия кнопки:



procedure TForm1.Button1Click(Sender: TObject);
var
MyThread: TMyThread;
begin
MyThread := TMyThread.Create(False);
end;




Тут мы создаем второй поток для нашего приложения. Параметр False означает, что метод Execute для нашего потока вызовется немедленно.

Запускайте программу. Нажимайте на кнопку. В первом edit'е замелькают промежуточные результаты работы второго потока. Во время его работы вы можете вводить информацию во второй edit — т.е. работа одного потока не мешает работе другого.


А вот насчёт Вашего второго вопроса... нифига не понял, попдробней плиз и по понятней )

_________________
Главное в мире - ДОБРО


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 дек 2006, 02:26 
Не в сети
Новый посетитель
Аватар пользователя

Зарегистрирован: 13 дек 2006, 01:35
Сообщений: 2
Откуда: http://www.noil.pri.ee/
Пёс писал(а):
Народ!
Как в ДЕлфи можно решить дифуры?


Ну само собой :D
Вот например простейшая прога для решения уравнения dy/dt = -0,5y

Код:
{-----------------------------------------------------------}
function Func(t,c: Extended): Extended;
begin
   Result:= Exp(Ln(abs(c)) - (0.5*t));
end;
{-----------------------------------------------------------}
function c0(t0,y0: Extended): Extended;
begin
   Result:= Exp(Ln(abs(y0)) + (0.5*t0));
end;
{-----------------------------------------------------------}


procedure TForm1.BitBtn1Click(Sender: TObject);
var
  t0,y0,t,Yt,t1,t2,Stept,c: Extended;
  Code: Integer;
begin
   t0:= StrToFloat(LabeledEdit1.Text);
   y0:= StrToFloat(LabeledEdit2.Text);
   t1:= StrToFloat(LabeledEdit3.Text);
   t2:= StrToFloat(LabeledEdit4.Text);
   Val(LabeledEdit5.Text,Stept,Code);
   IF Code <> 0 then begin
      ShowMessage('Вы указали неправильный разделитель в шаге изменения параметра t (dt)');
      Exit;
   end;

   c:= c0(t0,y0);

   Memo1.Clear;
   Memo1.Lines.Append('Решение:');
   Memo1.Lines.Append(' ');
   t:= t1;
   Repeat
      Yt:= Func(t,c);
      Memo1.Lines.Append(' при t = ' + FloatToStr(t) + '  , y = ' + FloatToStr(Yt));
      t:= t + Stept;
   Until t >= (t2 + Stept);
end;

с - Сначало определяем значение свободного члена уравнения из заданых t и y(t)
Stept - шаг изменения (dt) от некого заданого пользователем t1 до t2

_________________
Главное в мире - ДОБРО


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 31 окт 2008, 15:56 
Не в сети
Новый посетитель

Зарегистрирован: 31 окт 2008, 15:32
Сообщений: 10
Фигассе народ проперло. Вы сами поняли куда углубились?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Решение задач
СообщениеДобавлено: 12 ноя 2008, 03:30 
Не в сети
Новый посетитель

Зарегистрирован: 12 ноя 2008, 03:27
Сообщений: 1
Разработка программ!
На языках: Pascal, Delphi, C/C++ Builder/Visual Studio C++
Выполнение любых работ для студентов!

_________________
ISQ: 371670735


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB