如何找到正弦波的极值,拐点,值为0的点,保存在一个文件中,程序如下:
function myMAX(FirstFile:string):string;
var
F: TextFile;
handle1:integer;
len1:integer;
iRead: Integer;
buffer:pchar;
i:integer;
s1,s2,s3,s4,s5:shortint;
ts:tstrings;
f1:string;
begin
Result :='';
Handle1 := FileOpen(FirstFile, fmOpenRead);
Len1:= FileSeek(Handle1,0,2);
FileSeek(Handle1,0,0);
Buffer := Pchar(AllocMem(Len1 + 1));
iRead := FileRead(Handle1, Buffer^, Len1);
FileClose(Handle1); ts:=tstrings.Create;
try
for i:=2 to iRead-4 do
begin
s1:=ord(buffer[i-2]);
s2:=ord(buffer[i-1]);
s3:=ord(buffer[i]);
s4:=ord(buffer[i+1]);
s5:=ord(buffer[i+2]);
if s1>0 then showmessage('asdf');
if (s1<s3) and (s2<s3) and (s4<s3) and (s5<s3) then
begin
showmessage('sadf');
ts.Add(inttostr(s3));
end;
end;
finally
freemem(buffer);
end; f1:=changefileext(firstfile,'.MAX');
handle1:=filecreate(f1);
if handle1<0 then
begin
showmessage('极值点文件建立不成功!');
exit;
end;
fileclose(handle1); AssignFile(F, f1);
append(F); try
for i:=0 to ts.Count-1 do
writeln(f,ts.Names[i]);
Flush(f);
finally
CloseFile(F);
Result := f1;
end;end;在那个很长的判断处老是报错
function myMAX(FirstFile:string):string;
var
F: TextFile;
handle1:integer;
len1:integer;
iRead: Integer;
buffer:pchar;
i:integer;
s1,s2,s3,s4,s5:shortint;
ts:tstrings;
f1:string;
begin
Result :='';
Handle1 := FileOpen(FirstFile, fmOpenRead);
Len1:= FileSeek(Handle1,0,2);
FileSeek(Handle1,0,0);
Buffer := Pchar(AllocMem(Len1 + 1));
iRead := FileRead(Handle1, Buffer^, Len1);
FileClose(Handle1); ts:=tstrings.Create;
try
for i:=2 to iRead-4 do
begin
s1:=ord(buffer[i-2]);
s2:=ord(buffer[i-1]);
s3:=ord(buffer[i]);
s4:=ord(buffer[i+1]);
s5:=ord(buffer[i+2]);
if s1>0 then showmessage('asdf');
if (s1<s3) and (s2<s3) and (s4<s3) and (s5<s3) then
begin
showmessage('sadf');
ts.Add(inttostr(s3));
end;
end;
finally
freemem(buffer);
end; f1:=changefileext(firstfile,'.MAX');
handle1:=filecreate(f1);
if handle1<0 then
begin
showmessage('极值点文件建立不成功!');
exit;
end;
fileclose(handle1); AssignFile(F, f1);
append(F); try
for i:=0 to ts.Count-1 do
writeln(f,ts.Names[i]);
Flush(f);
finally
CloseFile(F);
Result := f1;
end;end;在那个很长的判断处老是报错
应该从判断角度入手例如:
sin(k*PI) = 0;
那么为0值的点的角度必须符合 k*PI 的条件
然后逼近