Форум: "Основная";
Текущий архив: 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.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.005 c