Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];




Вниз

Опять ТП7. 


Miwa   (2002-04-16 09:54) [0]

На этот раз я прозрел от следуещей вещи: Error 105: File not open for output. И это в следуещем месте:

procedure OutputRes;
var i:byte;
begin
i:=0;
GoToXY(5,wherey+1); Write("No");// <-- здесь и есть еррор
GoToXY(15, wherey); Write("X");
GoToXY(30, wherey); Write("Y");
GoToXY(50, wherey); Write("Y""");
GoToXY(70, wherey); Write("|X-X|");

Кстати говоря, в программе вообще не используется работа с файлами.
Вот правду говорят: век живи - век учись. Прога что, воспринимает консоль как файл? Тогда почему он не открыт для для вывода? Заранее спасибо.



MBo   (2002-04-16 10:10) [1]

чудеса какие-то говоришь ;)



drpass   (2002-04-16 10:16) [2]

Испокон веков консоль, принтер и порты ввода-вывода для операционки являются обычными файлами последовательного доступа, такими же, как и файлы на диске.
А раз выдает такую ошибку - значит, либо глюк с модулем System, либо ты что-то ранее намудрил с потоками ввода-вывода.



Miwa   (2002-04-16 10:22) [3]

2 МВо: Ага, говорю же, что прозрел.
2 drpass: Да я в курсе насчет файлов.
А вводом-выводом я вообще ничего не делал, клянусь ;о)). Насчет system - не знаю, не скажу.



Shaman_Naydak   (2002-04-16 10:22) [4]

Действительно.. интересные вещи ты сообщаешь..
а в каком режиме ты работаешь?
И попробуй установить DirectVideo:=True;
Хотя и так это должно быть установлено



Song   (2002-04-16 10:28) [5]

Может режимы текстовые меняли?



drpass   (2002-04-16 10:29) [6]

Попробуй сделать Assign(output, "CON");
Rewrite(output);



Shaman_Naydak   (2002-04-16 12:34) [7]

>> drpass.
черт с ним, с потоком вывода..
Ему как раз таки не надо работать через поток вывода (он же позиционирует на экране и потом выводит).. я потому и спросил насчет DirectVideo (когда подключаешь Crt, то вывод в Writeln идет напрямую в видеопамять)



Anatoly Podgoretsky   (2002-04-16 12:41) [8]

Да у тебя просто чудеса в программе и приведенного кода недостаточно для их определения.



Miwa   (2002-04-16 13:00) [9]

2 Anatoly Podgoretsky © (16.04.02 12:41):
Ну все, Вы напросились ;о) Привожу полный текст программы. Держитесь ;о)) Ошибка - почти в самом низу (OutputRes - кажись предпоследняя процедура.

uses crt;
const dn=11;{interfase...}
var look: char;{current char}
vrbl: real;{X}
i:byte;{char counter}
curr,funk,fdef,sdef:string;{functionals}
a,b,c:real;{borders}
eps:real;{bingo}
x,y,d,r:array[0..20]of real;
{---------------------------------------------------------------}
function Expression: real; Forward;
{---------------------------------------------------------------}
procedure GetChar;
begin
look:=curr[i];
if i>length(curr) then look:=" ";
inc(i);
end;
{--------------------------------------------------------------}
procedure Match (x: char);
begin
if look = x then GetChar
end;
{--------------------------------------------------------------}
function IsAlpha (c: char): boolean;
begin
IsAlpha:=upcase (c) in ["A".."W","Y","Z"]
end;
{--------------------------------------------------------------}
function IsVar(c:char):boolean;
begin
IsVar:=upcase(c) = "X"
end;
{--------------------------------------------------------------}
function IsDigit (c: char): boolean;
begin
IsDigit := c in ["0".."9","."];
end;
{--------------------------------------------------------------}
function IsAddop (c:char):boolean;
begin
IsAddop:=c in ["+","-"];
end;
{--------------------------------------------------------------}
function GetNum: real;
var Value: real;
begin
Value := 0;
while IsDigit (Look) do begin
Value := 10 * Value + Ord (Look) - Ord ("0");
GetChar;
end;
GetNum := Value;
end;
{---------------------------------------------------------------}
function Func:real;
var name:string[3];
begin
name:="";
while look <> "(" do
begin
name:=name+look;
getchar;
end;
Match("(");
{FUCKEN CASE!!!!!!!}
if name = "sin" then func:=sin(expression*pi/180);
if name = "cos" then func:=cos(expression*pi/180);
if name = "tan" then func:=sin(expression*pi/180)/cos(expression*pi/180);
if name = "cot" then func:=cos(expression*pi/180)/sin(expression*pi/180);
if name = "ln" then func:=ln(expression);
if name = "exp" then func:=exp(expression);
{to be continued...}
match(")");
end;
{---------------------------------------------------------------}
function Factor: real;
begin
if Look = "("then
begin
Match ("(");
Factor := Expression;
Match (")");
end
else if IsAlpha(Look) then factor:=func
else if IsVar(look) then begin factor:=vrbl;getchar end
else Factor := GetNum
end;
{---------------------------------------------------------------}
function Power:real;
var value:real;
begin
value:=factor;
if look="^" then
begin Match("^"); Value := exp(factor*ln(abs(value))); end;
power:=value;
end;
{---------------------------------------------------------------}
function Term: real;
var Value: real;
begin
Value := power;
while Look in ["*", "/"] do begin
case Look of
"*": begin Match("*"); Value := Value * power; end;
"/": begin Match("/"); Value := Value / power; end;
end;
end;
Term := Value;
end;
{---------------------------------------------------------------}
function Expression: real;
var Value: real;
begin
if IsAddop (Look) then Value := 0 else Value := term;
while IsAddop (Look) do
begin
case Look of
"+": begin Match ("+"); Value := Value + term end;
"-": begin Match ("-"); Value := Value - term end
end{case}
end;
Expression := Value;
end;
{--------------------------------------------------------------}
function interp(what:string;x:real):real;
begin
i:=2;
curr:=what;
vrbl:=x;
look:=curr[1];
interp:=Expression;
end;
{--------------------------------------------------------------}
{End of interpretator}



Miwa   (2002-04-16 13:02) [10]

Упс.... Не лезет.... Поднажмем...

{--------------------------------------------------------------}
procedure InputData;
begin
ClrScr;TextColor(7);
Write("F(X)="); Readln(funk);
Write("F""(X)="); ReadLn(fdef);
Write("F""""(X)=");ReadLn(sdef);
Write("Start from: "); ReadLn(a);
Write("Stop in: "); ReadLn(b);
Write("Capasity "); ReadLn(eps);
end;
{--------------------------------------------------------------}
procedure OutputRes;
var i:byte;
begin
i:=0;
GoToXY(5,wherey+1); Write("No");
GoToXY(15, wherey); Write("X");
GoToXY(30, wherey); Write("Y");
GoToXY(50, wherey); Write("Y""");
GoToXY(70, wherey); Write("|X-X|");
repeat
GoToXY(4,wherey+1); Write(i);
GoToXY(10, wherey); Write(x[i]:9:5);
GoToXY(24, wherey); Write(y[i]:9:5);
GoToXY(45, wherey); Write(d[i]:9:5);
GoToXY(65, wherey); Write(r[i]:9:5);
inc(i);
until r[i] < abs(eps);
end;
{--------------------------------------------------------------}
procedure Release(start:real);
var i:byte;
begin
i:=0;
x[i]:=start;
repeat
y[i]:=interp(funk,x[i]);
d[i]:=interp(fdef,x[i]);
x[i+1]:=x[i]-y[i]/d[i];
r[i]:=abs(x[i+1]-x[i]);
inc(i);
until r[i-1] < eps;
OutputRes;
end;
{--------------------------------------------------------------}
var t:real;k:byte;
begin
InputData;
c:=a;k:=0;
repeat
if interp(funk,c)*interp(funk,c+1) <= 0 then
begin
t:=interp(funk,c)*interp(sdef,c);
if t > 0 then release(c) else
if t < 0 then release(c+1) else
if t = 0 then if interp(funk,c)=0 then write("y=",c:8:5)
else write("y=",c+1:8:5);
inc(k);
end;
c:=c+1;
until c > b;
Write("Found ",k," decisions.");
readkey
end.

Финиш...



Anatoly Podgoretsky   (2002-04-16 13:08) [11]

И чего весь этот длинный код читать?
uses crt;
begin
Write("TEST");
end.

Работает?



SB.John   (2002-04-16 13:13) [12]

Не поленился, откомпилил твой файлик на ТП7 под Win2K. Только перед readkey в конце основного блока вставил OutputRes, чтобы твое проблемное место точно вызывалось. Проблем нет, все выводит ок (могу скрнишот прислать). Правда, это если exe-шник отдельно запускать. Из под турбо-паскаля какую-то ошибку дает (W2K все-таки)



Miwa   (2002-04-16 14:14) [13]

2 Anatoly Podgoretsky © (16.04.02 13:08)
Да нет, не стоит. Просто слова
> приведенного кода недостаточно для их определения

я понял буквально ;о))).
2 All
Вообще-то программка не на каждую функцию ругается, а только на избранные. Например x-2sin(x). Тоесть, если вы зададите, например, x^3-12*x+6, например, то все ОК, прога свое отработает. И даже правильно ;о) Вот такие вот дела...



Shaman_Naydak   (2002-04-16 14:20) [14]

У меня все ок хоть под средой, хоть из виндов (тоже W2K).
У меня есть идея почему у Miwa не работает..
У тебя наверное кривая заплатка на Crt модуле стоит (чтоб он работал на P-Pro и выше)..
Если надо будет шли письмо.. я те вышлю корректный модуль turbo.tpl (сам недавно для кого-то правил :), вышлю с исходником crt.asm)



Shaman_Naydak   (2002-04-16 14:35) [15]

Если не на каждую.. то ты значит где-то пишешь некорректно (за пределами переменной).. включи Range Check Error, Overflow Error и прочие.. и проверь..
Мда.. парсер у тебя еще тот, я скажу :)



SB.John   (2002-04-16 15:45) [16]

На твою избранную функцию тоже не ругается. Правда, я вспотел вычислять для нее первую и вторую производные но результат получил.



Miwa   (2002-04-16 19:41) [17]

2 SB.John:

> я вспотел вычислять для нее первую и вторую производные

:o))))))))

> результат получил

???
Офигеть... Можно скриншот на мыло?



Ezh   (2002-04-16 20:02) [18]

u menya bila takaya zhe problema pod WinXP, but pod 98 vse ok.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.76 MB
Время: 0.03 c
1-94510           petyun                2002-04-15 14:12  2002.04.29  
HexToBin


3-94285           sany                  2002-04-08 08:57  2002.04.29  
надо базу данных написать для хранения информации о видео кассетх


14-94564          Morfey                2002-03-24 10:28  2002.04.29  
Вопрос не по теме но...


1-94514           Upendra               2002-04-13 10:16  2002.04.29  
Есть небольшая проблема с запуском формы и потока из dll


1-94428           JF                    2002-04-18 12:04  2002.04.29  
Opredelenie versii Delphi