将Turbo Pascal转换为C ++代码时出错

时间:2014-01-30 20:27:09

标签: c++ turbo-c++ turbo-pascal

这是一个有效的Turbo Pascal示例

uses graph, crt;
const xmax=600;
      ymax=400;
type vreal=array[1..xmax] of real;

var
   y:vreal;
   r,h,vmax,vmin,a,b:real;
   i,linie0:integer;
   grDriver: Integer;
   grMode: Integer;
   s:string;
   c:char;
{****************************************}
procedure regimgrafic;
begin
  grDriver := Detect;
  InitGraph(grDriver, grMode,'');
  setcolor(15);
end;
{****************************************}
function f(x:real):real;
 begin
f:=exp(cos(2*x)*ln(x))+3*sin(x);
 end;
{**************************************************************}
procedure calcul(a,b:real;var z:vreal);
begin
  h:=abs(b-a)/(xmax-1);
  for i:=1 to xmax do z[i]:=f(a+(i-1)*h);
end;
{**************************************************************}
procedure normare(var z:vreal; var l0:integer;var vmax,vmin:real);
var
 delta,deplasare:real;
begin
 vmax:=z[1];vmin:=z[1];
 for i:=2 to xmax do
  begin
     if z[i]>vmax then vmax:=z[i];
     if z[i]<vmin then vmin:=z[i];
  end;
      delta:=(vmax - vmin)/(ymax);
      deplasare:=0-vmin;
      l0:=round(ymax-deplasare/delta);
      if vmin>0 then l0:=415;
      if vmax<0 then l0:=10;
  for i:=1 to xmax do
      z[i]:=ymax-(z[i]+deplasare)/delta;
end;
{*******************************************************}
procedure axax(linie0:integer);
begin
 setcolor(11);
 outtextxy(getmaxx-15,linie0-10,'X');
 line(20,linie0, getmaxx-20,linie0);
 h:=(b-a)/2;
 for i:=0 to 2 do
   begin
    fillellipse(20+i*300,linie0,2,2);
    r:=a+i*h;
    str(r:0:2,s);
    outtextxy(20+i*290,linie0+10,s);
   end;
end;

procedure axay;
begin
 setcolor(14);
 outtextxy(10,10,'Y');
  h:=(vmax-vmin);
 for i:=0 to 1 do
   begin
    fillellipse(20,10+i*400,2,2);
    r:=vmax-i*h;
    str(r:0:2,s);
    outtextxy(20,10+i*400,s);
   end;
 line(20,10,20,getmaxy-65);
end;

procedure modeleazagrafic(y:vreal);
begin
 rectangle(1,1,getmaxx,getmaxy);
 setcolor(11);
 axay;
 axax(linie0);
 for i:=1 to xmax do putpixel(i+20,10+round(y[i]),15);
 outtextxy(20,460,'Alt interval (D)a / (N)u');
end;

begin
repeat
clrscr;
write('Introdu extremitatile intervalului: ');
readln(a,b);
calcul(a,b,y);
normare(y,linie0,vmax,vmin);
regimgrafic;
modeleazagrafic(y);
c:=readkey;
closegraph;
until upcase(c)='N';
end.

这是我的c代码

#include<graphics.h>
#include<string>
#include<math.h>
#include<iostream>

const int xmax = 600;
      int ymax = 400;

typedef float vreal[600];

using namespace std;

vreal y;
  float  r,h,vmax,vmin,a,b;
  int linie0;
  int  grDriver;
  int grMode;
  string s;
  char c;



void regimgrafic()
{
initwindow(xmax,ymax,"COOL");
setcolor(WHITE);
}


float f(float x)
{
 return exp(cos(2*x)+log(x)+3*sin(x));      
}

void calcul(float a, float b,float* z)
{
      h = fabs(b-a)/(xmax-1);
      for(int i=1;i <=  xmax;i++)
      {
              z[i] = f(a+(i-1)*h);
      }
}

void normare(float *z, int* l0, float *vmin, float *vmax)
{
 float delta, deplasare;

 *vmax = z[1];
 *vmin = z[1];    
     for(int i=2;i<= xmax;i++)
     {
     if(z[i] > *vmax) *vmax = z[i];
     if(z[i] < *vmin) *vmin = z[i];       
     }
   delta = (*vmax - *vmin)/(ymax);
   deplasare = 0-*vmin;
   *l0 = (int)(round(ymax - deplasare/delta));

   //<static_cast><int>()
   if((*vmin)>0) l0 = 415;
   if(*vmax<0) l0 = 10;
   for(int i=1;i<= xmax;i++)
    z[i]=ymax - (z[i]+deplasare)/delta; 
}     

void axax(int linie0)
{
 setcolor(11);
 outtextxy(getmaxx-15,linie0-10,'X');
 line(20,linie0,getmaxx-20,linie0)
 h=(b-a)/2;
 for(int i =0;i<2;i++)
 {
   fillellipse(20,10+i*400,2,2);
   r=vmax-i*h;      
   sprintf(s, "%d", r);
   outtextxy(20+i*290,linie0+10,s);
}     

}


void axay
{
     setcolor(14);
     outtextxy(10,10,'Y');
     h=(vmax-vmin);
     for(int i=0;i<1;i++)
     {
      fillellipse(20,10+i*400,2,2);
      r=vmax-i*h;
      sprintf(s,r);
      outtextxy(20,10+i*400,s);             
     }
}     

void modeleazagrafic(vreal y){
rectangle(1,1,getmaxx,getmaxy);
 setcolor(11);
 axay;
 axax(linie0);
 for(int i=1;i<xmax;i++)
      putpixel(i+20,10+round(y[i]),15);
     outtextxy(20,460,'Alt interval (D)a / (N)u');
}     


int main()
{
do {    
printf("Introduceti extremitatile intervalului: ");
scanf("%f %f",&a,&b);
calcul(a,b,y);
normare(y,linie0,vmax,vmin);
regimgrafic;
modeleazagrafic(y);
c=getch();
closegraph();
}while(toupper(c) == 'N');

}    

我有一堆错误,这里有一些代码

Line 60:(in normare function) invalid conversion from `int' to `int*' 
line:61 the same error;
line:69 69 pointer to a function used in arithmetic 

请帮助解决这些错误

1 个答案:

答案 0 :(得分:2)

这几乎就像你没有阅读错误信息或考虑周围的代码。

前两个涉及这些界限:

if((*vmin)>0) l0 = 415;
if(*vmax<0) l0 = 10;

在该函数中的其他任何位置,l0(类型为int*)在分配期间被正确解除引用。但在这里你忘记了。您需要使用*l0,而不是l0。该错误是因为您尝试将int分配给指针(int*),因为错误消息非常明确地说明了。

另一个错误并不那么明显,因为你的代码没有显示名为getmaxx的变量,函数或宏......但是根据错误消息判断,似乎标识符getmaxx引用了一个功能。也许你的意思是getmaxx(),假设它没有参数并返回一个值。据推测,您的代码中的getmaxy存在同样的问题。

请养成阅读错误消息并检查其引用的代码行的习惯。然后考虑它的含义,并尝试从代码的其他部分(甚至其他C程序)中获取提示。如果您不熟悉C,这是一种有用的学习方法。