Quantcast
Channel: Programming Forums
Viewing all articles
Browse latest Browse all 51036

translating Qbasic code to C++

$
0
0
hello!
i've got a code from QBasic which i need translating to C++
i've tried a somewhat code by code translation as to what i understand in C++

here is my Qbasic program

sq = 50
t1 = .1 ’
tfac = .95 
tend = .0001 
maxmc = 6
RANDOMIZE TIMER
CLS
DIM x(sq), y(sq)

FOR i = 0 TO sq - 1
x(i) = RND
y(i) = RND
NEXT i

CLS
GOSUB 1000
GOSUB 4000
l2 = lt
DO
 GOSUB 5000
 IF INKEY$ = CHR$(27) THEN END
 CLS
 GOSUB 1000
 PRINT ”"Temperature"”;
 PRINT USING ''’’##.####’’''; t1
 PRINT ''’’Energie’’'';
 PRINT USING ''’’###.#####''’’; l2
 t1 = t1 * tfac
LOOP UNTIL t1 <= tend
END ’

1000 SCREEN 2
 LINE (100, 30)-(420, 160), , B
 FOR l = 0 TO sq - 1
 CIRCLE (260 + 160 * x(l), 95 + 65 * y(l)), 3
 NEXT l
 RETURN

4000 lt = 0
 FOR i = 0 TO sq - 1
 FOR k = 0 TO i - 1
 u = 0
 r2 = (((x(i) - x(k)) ^2 + (y(i) - y(k)) ^2))
 IF r2 < .01 THEN 4020 ELSE GOTO 4010
 4010 IF r2 < .03 THEN 4030 ELSE GOTO 4100
 4020 u = 20
  GOTO 4100
 4030 u = -.001 / r2
  GOTO 4100
 4100 lt = lt + u
  NEXT k

  NEXT i
  RETURN

’'Monte Carlo
5000 FOR ntrial = 1 TO maxmc

 FOR h = 0 TO sq - 1
  a = x(h)
  B = y(h)
 x(h) = 2 * RND - 1
 y(h) = 2 * RND - 1
  GOSUB 4000
 IF lt <= l2 OR RND < EXP(-(lt - l2) / t1) THEN
 l2 = lt
 ELSE x(h) = a
 y(h) = B
 END IF
 NEXT h
 NEXT ntrial
 RETURN




here's my translation in C++ (Dev C++)

#include "QBasic.h"
#include <iostream>
#include <ctime>
using namespace std;

int main() {

int sq = 50 ; 
int t1 = .01 ;
int tfac = .95 ; 
int tend = .0001 ; 
int maxmc = 6 ; 

srand(static_cast<unsigned>(time(0))) ;
clrscr() ;
int x [ sq +1] , y [ sq +1] ;

//Start
for( int i = 0 ;i<=sq;i+=1){ - 1
x [ i ] = rand() ;
y [ i ] = rand() ;
} i

//main program
clrscr() ;
GOSUB 1000 ;
GOSUB 4000 ;
int l2 = lt ;
do {
GOSUB 5000 ;
if( inkey$() == CHR$ ( 27 ) ){ END
clrscr() ;
GOSUB 1000 ;
PRINT "TEMPERATURE" ; ;
PRINT USING " ##.#### " ; t1 ;
PRINT ; //'ENERGY'';
PRINT USING " ###.##### " ; 12 ;
t1 = t1 * tfac ;
} UNTIL t1 < = tend
END ;
//plotting
1000 //SCREEN 2
LINE ( 100 , 30 ) - ( 420 , 160 ) , , int B ;
for( int l = 0 ;l<=sq;l+=1){ - 1
CIRCLE ( 260 + 160 * x [ l ] , 95 + 65 * y [ l ] ) , 3 ;
} l
RETURN ;

//ENERGY
4000 lt = 0 ;
for( i = 0 ;i<=sq;i+=1){ - 1
for( int k = 0 ;k<=i;k+=1){ - 1
int u = 0 ;
int r2 = ( ( ( x [ i ] - x [ k ] ) ^ 2 + ( y [ i ] - y [ k ] ) ^ 2 ) ) ;
if( r2 < . int 01 ){ 4020 ELSE GOTO 4010 ;}
4010 if( r2 < . int 03 ){ 4030 ELSE GOTO 4010 ;}
4020 u = 20 ;
GOTO 4100 ;
4030 u = - . int 001 / r2 ;
GOTO 4100 ;
4100 lt = lt + u ;
} k
} i
RETURN ;

//MONTE CARLO
5000 for( int ntrial = ;ntrial<=maxmc;ntrial+=1){ maxmc

for( int h = 0 ;h<=sq;h+=1){ - 1
int a = x [ h ] ;
B = y [ h ] ;
x [ h ] = 2 * rand() - 1 ;
y [ h ] = 2 * rand() - 1 ;
GOSUB 4000 ;
if( lt < == 12 || rand() < EXP ( - ( lt - 12 ) / t1 ) ){
l2 = lt ;
ELSE x [ h ] = a ;
y [ h ] = B ;
}
} h
} ntrial
RETURN ;

return 0;
}



so someone said i should change CLS to clrscr
debugging the program tells me to
-convert int to double
-undeclared clrscr
-some identifiers
-undeclared GOSUB, inkey$, CHR$, END
should i change PRINT to cout?

Viewing all articles
Browse latest Browse all 51036

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>