#include<stdio.h> 

//原文ママ
#include<math.h>
 
	double AttackerSuccessProbability(double q, int z) 
        { 
                double p = 1.0 - q; 
                double lambda = z * (q / p); 
                double sum = 1.0; 
                int i, k; 
                for (k = 0; k <= z; k++) 
                { 
                        double poisson = exp(-lambda); 
                        
			for (i = 1; i <= k; i++)
				poisson *= lambda / i; 
                        
		        sum -= poisson * (1 - pow(q / p, z - k)); 
			
                } 
		
                return sum; 
        } 
//ここまで原文ママ
	

	//ここから先が追加したmain関数
	void main(int argc, char **argv){
	
		double sumP;//表示されるP値
		double qValue;//表示されるq値		
		int z=0;//表示されるz値
		int num=0;//この値がz値のMAX

		FILE *fp;//ファイル書き込み用
  		char *fname = "bitdata.csv";//ファイル名

		if(argc!=3){ //エラー処理 引数が無い場合
			printf("hikisu wo tuika site\n");
			printf("./asProArgc 0.3 50\n");
			return;
		}

		//引数の値を変数へ
		//ここは数値チェックの箇所だが
		//コードが長くなるのでエラー処理せず
		sscanf(argv[1], "%lf", &qValue);
		sscanf(argv[2], "%d", &num);
		

		//ファイルへcsvにて書き込み準備
		fp = fopen( fname, "w" );
  			if( fp == NULL ){//エラー処理
    				printf( "%s not file open\n", fname );
  				return;
			}


		for(z=0; z<=num; z++){
		   sumP= AttackerSuccessProbability(qValue,z);//関数に値を渡す

		   if(z%5==0){//z値が5の倍数で表示
			printf("q=%2.2f   z=%d  Pro= %10.8f\n",qValue,z,sumP);
		   }		
		   //ファイルへ書込み z値1刻み
		   fprintf( fp, "%d,%10.8f\n", z,sumP );
		}

		fclose( fp );//ファイル閉じる

	}
	//ここまで