#include <stdio.h>
main(void)
{
int score1, score2;
double mean;
printf("Input the score of No.1 = ");
scanf("%d", &score1 );
printf("Input the score of No.2 = ");
scanf("%d", &score2 );
mean = (double)( score1 + score2 )/2.0;
printf("The mean score is %lf \n", mean );
}
#include <stdio.h>
#include <Rcpp.h>
using namespace Rcpp;
double sample06(int score1, int score2)
{
double mean;
mean = (double)( score1 + score2 )/2.0;
return mean;
}
#include <stdio.h>
#define N 10
main(void)
{
int score[N];
int n, sum;
double mean;
for( n=0 ; n<N ; n++ ){
printf("Input the score of No.%d = ", n );
scanf("%d", &score[n] );
}
sum = 0;
for( n=0 ; n<N ; n++ ){
sum += score[n];
}
mean = (double)sum/N;
printf("The mean score is %lf\n", mean );
}
#include <stdio.h>
#include <Rcpp.h>
using namespace Rcpp;
#define N 10
double sample06_2(NumericVector score)
{
int n, sum;
double mean;
for( n=0 ; n<N ; n++ ){
printf("Input the score of No.%d = ", n );
scanf("%d", &score[n] );
}
sum = 0;
for( n=0 ; n<N ; n++ ){
sum += score[n];
}
mean = (double)sum/N;
return mean;
}
[C++][Rcpp][RcppArmadillo]C++ -> Rcpp 写経その4『関数で計算の分担』
#include <stdio.h>
void CalcSeries( void )
{
double r, term=1.0, sum=0.0;
printf("Input a number below 1.0 =");
scanf("%lf", &r );
while( term > 0.000001 ){
sum += term;
term *= r;
}
printf("The total of this series is %lf\n", sum );
}
main( void )
{
CalcSeries();
CalcSeries();
}
#include <stdio.h>
#include <Rcpp.h>
using namespace Rcpp;
double CalcSeries(double r, double eps)
{
double term=1.0;
double sum=0.0;
while( term > eps ){
sum += term;
term *= r;
}
return sum;
}
double sample09( double r,double eps=0.000001 )
{
return CalcSeries(r,eps);
}
- その10 関数のプロトタイプ宣言。main()の後にmain()で使う関数を書きたいときは、せめてそういう関数があることを宣言(プロトタイプ宣言)しておくことが必要
#include <stdio.h>
double CalcSeries( double );
int main( void )
{
double r, sum;
printf("Input a number below 1.0 =");
scanf("%lf", &r );
sum = CalcSeries(r);
printf("The total of this series is %lf\n", sum );
printf("Input a number below 1.0 =");
scanf("%lf", &r );
sum = CalcSeries(r);
printf("The total of this series is %lf\n", sum );
return(0);
}
double CalcSeries( double r )
{
double term=1.0, sum=0.0;
while( term > 0.000001 ){
sum += term;
term *= r;
}
return( sum );
}
#include <stdio.h>
#include <Rcpp.h>
using namespace Rcpp;
double CalcSeries( double, double);
double sample10( double r,double eps=0.000001 )
{
return CalcSeries(r,eps);
}
double CalcSeries(double r, double eps)
{
double term=1.0;
double sum=0.0;
while( term > eps ){
sum += term;
term *= r;
}
return sum;
}
- その13 ベクトルごと渡す。Cppでは一仕事だけれど、Rcppがうまくやってくれる
#include <stdio.h>
void Copy1DArray( int [] , int [] );
void Print1DArray( int [] );
int main(void)
{
int a[10], b[10]={0,1,2,3,4,5,6,7,8,9};
Copy1DArray( a, b );
Print1DArray( a );
return(0);
}
void Copy1DArray( int x[] , int y[] )
{
int n;
for( n=0 ; n<10 ; n++ ){
x[n] = y[n];
}
}
void Print1DArray( int x[] )
{
int n;
for( n=0 ; n<10 ; n++ ){
printf("%d ", x[n] );
}
}
#include <stdio.h>
#include <Rcpp.h>
using namespace Rcpp;
NumericVector Copy1DArray( NumericVector );
NumericVector sample13(NumericVector x)
{
NumericVector b = Copy1DArray( x );
return(b);
}
NumericVector Copy1DArray( NumericVector x )
{
int k = x.size();
NumericVector y(k);
for(int n=0 ; n<k ; n++ ){
y[n] = x[n];
}
return y;
}
- これ以降はUNIXでできるグラフィクス、とかになるので、この先はRcpp、RcppArmadilloとの連携に進むことにする