IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Переменные, Много...Много переменных
сообщение
Сообщение #1


Гость






Возможно ли сделать так, чтобы в TP7 не было ограничений по количеству переменных?

P.S.Написал программу по моделированию движения тел под действие гравитационных сил, а максимум тел которые могу рассматривать всего лишь 140, а очень хочеться больше.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Возможно ли сделать так, чтобы в TP7 не было ограничений по количеству переменных?
Я так понимаю, что вопрос связан с переполнением сегмента данных (данные статические)? Тогда переходи на использование динамической памяти. 640К больше чем 64К, правда?

Мажет быть есть и другие пути, например, уменьшение объема памяти, необходимого для хранения информации о каждом "теле", но это уже надо смотреть программу...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Чтобы не было никаких ограничений, сделать, естественно, невозможно в принципе. Но в разных случаях ограничения могут быть различными. Для твоих структур примерно так:
16-разрядный сегмент данных в реальном режиме - 140,
16-разрядный режим с динамической памятью - 1000,
16-разрядный защищенный режим - 30000,
32-разрядный режим при памяти 1 Гбайт - 2000000,

Вообще же, ты бы привел структуру данных, которой описываешь объект. Пол-килобайта навскидку кажется многовато для одного объекта.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата(andriano @ 19.06.2008 23:06) *

Вообще же, ты бы привел структуру данных, которой описываешь объект. Пол-килобайта навскидку кажется многовато для одного объекта.


У меня в программе 3 графических модуля. Вот их нее верхушки с переменными:

const Nn1=10; dim1=3; N1=Dim1*2*Nn1; NPR=1; G_grav=6.67E-11;
var Yu,Y,D,YG:array [1..2*N1] of extended;
TPR:array [1..NPR] of extended;
M,R:array [1..Nn1] of extended;
i,ii,j,Pn1,hi,hi1,dn,n0,pp,pp1,PN,PH,BB,C,CLR,Nn,N05,dim,N:longint;
Hour,Minute,Second,Sec100:word;
sec:array [1..4] of extended;
Sm,Sm1,T,EPS,EPS1,H,P,Rr,U,Ek,E0,YY,RT0,RT,TR,t1,wd,dat,data,EUK,Xt,Yt,W:extende
d;
ch:char;
var Gd,Gm,Mx,My:integer;
Xpl,Ypl,D,N,C:longint;
Xkp,Ykp,Xkp0,Ykp0,Xp,Yp,Xc,Yc:extended;
Wxx,Wyy,Wx,Wy:array [1..2] of extended;
Xmax,Ymax,Xmin,Ymin:array [1..3] of extended;
Px,Py:array [1..2] of longint;
AT,AT0:string;
const Nn=300; dimm=4; Ntt=2;
var X,Y:array [1..Nn,1..dimm,1..Ntt] of extended;
Nc,Nt,Nt1:array [1..dimm,1..Ntt] of longint;
Dim,N,dtl,ij,J,T:longint;
AT0,AT1:string;
Ymax,Ymin,Xmax,Xmin,Wy,Wx,Wxx,Wyy,Xc,Yc:array [1..Ntt] of extended;
Xp,Yp:extended;
D,I:longint;
AT:string;

Вообще программа не просто моделирует систему из N тел, она расчитана для нахождения наилучшего времени для того чтобы сбить астероид движущийся к Земле(естественно астероид выдуманный smile.gif , но можно и реальный yes2.gif ). И естественно графика в программе достаточно сложная(1 универсальный модуль для построения любого числа графиков из любого количества точек(хоть миллион точек, хоть 10 миллионов), но построения ведется не вреальном времени, тоесть сначала вы передаете все точки модулю а после он только сроит. В торой модуль ведет построение тоже по точкам только в реальном времени и естественно как и предыдущий модуль автоматически масштабирует его. А вот третий модуль выводит на экран три проекции происходящего и трех мерное изображение).

Немного о переменных, наверное все знают что для того чтобы описать движение N под действием гравитационных полей друг друга надо решить систему состоящую из 2*N дифференциальных уравнений, при этом можно воспользоваться разными методами численного интегрирования(Гира, Рунг- Кутт 1-4).

Переменные которые служат для реализация Ронге Кутта 4 порядка:
const Nn=140; Количество тел
dim=3; Количество измерений(X,Y,Z)
N=Dim*2*Nn; Колличество дифференциальных уравнений
N05=Dim*Nn;
NPR=10;
var Y,D,YG:array [1..N] of extended;
TPR:array [1..NPR] of extended;
I,K1,NP:Longint;
T0,TT,TP,H1,H02,H03,H06,EPSM,X,Z,SIGMA,EPSZ,YI:extended;
Y0,D0,D02,D02X:array [1..N] of extended;
KH:boolean;

переменные для того чтобы описать тело
R[1..Nn];
M[1..Nn];

Скажу так если работать в программе без каково то не было графического интерфейса то количесво тел которые можно с моделировать равно 250.

И вот еще ты пишеш про динамическую память, как ее можно активировать в TP7,
Если я не ошибаюсь, то какую то память можно меня через глобальную директиву {$M}, это то или не то?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Бросается в глаза: много массивов of Extended, неужели настолько высокая точность нужна ? На них можно было-бы памяти сэкономить.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Компилятор сменить..... 21 век на дворе никак, а вы все в 16 разрядном режиме....
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата(klem4 @ 20.06.2008 15:04) *

Бросается в глаза: много массивов of Extended, неужели настолько высокая точность нужна ? На них можно было-бы памяти сэкономить.


точность, да нужна очень высокая.

А насчет новых компиляторов, у меня возникают проблемы при работе с файлами, а она в программе очень интенсивно ведется, речь идет о FreePascal'е
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
у меня возникают проблемы при работе с файлами


Это какие например ? Ты бы поконкретней.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата(klem4 @ 20.06.2008 19:20) *

Это какие например ? Ты бы поконкретней.

Например в обычном TP7 вот эта простенькая программка работает спокойно, а вот во FreePascal'е пишит вот такую ошибку

RunTime error 2 at 0*0040105E
0*0040105E
0*004020F5

Сама программка

uses crt;
var a:longint;
begin
assign(input,'Y.txt');
reset(input);
readln(a);
writeln(a);
readkey;
end.

Что может быть не так7
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


попробуй скачать последнюю версию компилятора с оф. сайта.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Цитата(klem4 @ 20.06.2008 20:36) *

попробуй скачать последнюю версию компилятора с оф. сайта.

Все равно выдает ошибку, что делать?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Все проблема решена.

Но появился новый вопрос. Возможно ли сделать так чтобы когда активируется графический режим и рисуется графика, а мне к примеру нужно чтобы я в это время нажал любую кнопку, то для этого должна быть активна(лежать поверх графического окна)консоль, что естественно портит весь вид, вопрос заключаеться в том как сделать так чтобы можно было нажимать клавиши а при этом консоли на экране не было?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(-Александр- @ 20.06.2008 21:22) *

Например в обычном TP7 вот эта простенькая программка работает спокойно, а вот во FreePascal'е пишит вот такую ошибку
Это неправильная программа. Она не должна работать. Если она работат в ТР, то это ошибка ТР и ничего больше.


Добавлено через 2 мин.
Цитата(Гость @ 20.06.2008 22:36) *

Все проблема решена.

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

Для обработки клавиатуры консоль не нужна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 22
Пол: Мужской
Реальное имя: Саша

Репутация: -  0  +


Цитата(andriano @ 20.06.2008 23:29) *

Это неправильная программа. Она не должна работать. Если она работат в ТР, то это ошибка ТР и ничего больше.
Добавлено через 2 мин.

Для обработки клавиатуры консоль не нужна.


Тогда почему я могу использовать клавиатуру только тогда когда на экране весит консоль Смотри принскрин

Сообщение отредактировано: Александр-7300 -


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Александр-7300 @ 21.06.2008 11:20) *

Тогда почему я могу использовать клавиатуру только тогда когда на экране весит консоль Смотри принскрин

Потому, что твоя программа специально так написана.
Написана, вероятнее всего, не тобой, а автором тех модулей, что ты используешь для визуализации.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 22
Пол: Мужской
Реальное имя: Саша

Репутация: -  0  +


Цитата(andriano @ 21.06.2008 16:02) *

Потому, что твоя программа специально так написана.
Написана, вероятнее всего, не тобой, а автором тех модулей, что ты используешь для визуализации.


Чего не знаешь, того не говори, если хочешь могу выложить исходники(если хочешь могу за комментировать каждую строчку!!!).

Как тогда сделать так что бы консоль во время работы не появлялась?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Александр-7300 @ 21.06.2008 17:53) *
Как тогда сделать так что бы консоль во время работы не появлялась?
Не подключать лишних модулей (которые не знаешь, как работают).

Вот простенький пример.

uses Crt, Dos, Graph;

var
x,y : integer;
c : char;
InGraphicsMode : boolean; { Flags initialization of graphics mode }
PathToDriver : string; { Stores the DOS path to *.BGI & *.CHR }
GraphDriver : integer; { The Graphics device driver }
GraphMode : integer; { The Graphics mode value }
ErrorCode : integer; { Reports any graphics errors }
begin
DirectVideo := False;
PathToDriver := '';
GraphDriver := Detect; { use autodetection }
InitGraph(GraphDriver, GraphMode, PathToDriver);
ErrorCode := GraphResult; { preserve error return }
x := 320;
y := 240;
repeat
c := #0;
setcolor(12);
circle(x,y,30);
if keypressed then
c := readkey;
delay(10);
setcolor(0);
circle(x,y,30);
case c of
#72 : if y > 35 then dec(y,5);
#75 : if x > 35 then dec(x,5);
#77 : if x < 605 then inc(x,5);
#80 : if y < 445 then inc(y,5);
end;
until c = #27;
while keypressed do readkey;
CloseGraph;
end.



Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Новичок
*

Группа: Пользователи
Сообщений: 22
Пол: Мужской
Реальное имя: Саша

Репутация: -  0  +


Цитата(andriano @ 21.06.2008 19:27) *

Не подключать лишних модулей (которые не знаешь, как работают).


Я написал модули!!! И по твоему я в них ничего не понимаю?

Проблема в том что я пытаюсь портировать свою программу и свои модули из TP7 в FreePascal, что бы можно было использовать больше переменныхl!!!!!

Вопрос прямой: как избавиться от консоли?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


см. мой пост выше. Консоль просто не нужно создавать.

У тебя консоль появляется в ТР или FP? Если FP, то под какую платформу компилируешь?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Новичок
*

Группа: Пользователи
Сообщений: 22
Пол: Мужской
Реальное имя: Саша

Репутация: -  0  +


Цитата(andriano @ 21.06.2008 20:40) *

см. мой пост выше. Консоль просто не нужно создавать.

У тебя консоль появляется в ТР или FP? Если FP, то под какую платформу компилируешь?


Консоль появляеться в FPS а компилирую под WIN32

И твой пример в FPS все равно работает только тогда когда поверх графического окна лежит консоль(см принскрин)

Сообщение отредактировано: Александр-7300 -


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 23:03
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name