2011|08|
2013|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|05|06|07|08|09|10|11|12|
2016|01|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|

2018-01-04 「パワハラ」シミュレーター [長年日記]

/*
  gcc -g harassment.cpp -o harassment
*/
 
 
#include <stdio.h>
#include <stdlib.h>
 
/*
  設定
  
  上司と部下の気質のタイプを5つに設定
  上司と部下が一致していると 部下のパフォーマンスは120%
  上司と部下が1つずれていると 部下のパフォーマンスは100%  
  上司と部下が2つずれていると 部下のパフォーマンスは80%  
  上司と部下が3つ以上ずれていると 部下のパフォーマンスは60%  
  上司と部下が4つ以上ずれていると 部下のパフォーマンスは40%  
  上司と部下が5つ以上ずれていると 部下のパフォーマンスは20%  
 
  上司に度量がない場合 移動量 ±0  → 部下のパフォーマンスは?
  上司に度量がある場合 移動量 ±1
  上司に度量がない場合 移動量 ±2
 
  部下に度量がない場合 移動量 ±0
  部下に度量がある場合 移動量 ±1
  部下に度量がある場合 移動量 ±2
 
*/
 
 
#define MAX_CHARACTER 6
 
#define STAFF_GENEROUS 0 //部下の度量(唯一の変数)
 
// 乗客の変数用構造体
typedef struct person {
 
  int character; // 0,1,2,3,4,5   人格を示す(×能力の大きさではない)
  int generous; //  0,1,2,3,4,5   度量の大きさを示す
  
} PERSON;
 
int min(int a, int b)
{
  if (a < b)
	return a;
  else 
	return b;
}
 
int max(int a, int b)
{
  if (a > b)
	return a;
  else 
	return b;
}
 
 
double performance(int b_character, int s_character, int b_generous, int s_generous)
{
  /*
	0   → 120
    1   → 100
    2   →  80
    3   →  60 
    4   →  40 
    5   →  20 
 
        |--------|
      b_min     b_max
 
 |--------|
s_min     s_max
 
  */
 
  int b_max = min(b_character + b_generous, 5);
  int b_min = max(b_character - b_generous, 0);
 
  int s_max = min(s_character + s_generous, 5);
  int s_min = max(s_character - s_generous, 0);
 
  int v1 = max(b_min - s_max, 0);
  int v2 = max(s_min - b_max, 0);
  
  int v = max(v1, v2);
 
  double f = 120.0 - 40.0 * v;
 
  return f;
}
 
int main()
{
  PERSON boss; 
  PERSON staff[100];
 
  srand(10);
 
  /*
 
 
  // 上司の設定
  boss.character = 5; //rand() % MAX_CHARACTER ;
  boss.generous = 3;
 
  */
 
  for( int a = 0; a < 6; a++){
	for( int b = 0; b < 6; b++){
 
	  boss.character = a;
	  boss.generous = b;
 
  
	  // 部下の設定
	  for(int i = 0; i < 100; i++){
		staff[i].character = rand() % MAX_CHARACTER ;
		staff[i].generous = STAFF_GENEROUS;
	  }
	  
	  // 計算
	  double sum = 0.0;
	  
	  for(int i = 0; i < 100; i++){
		sum += performance(boss.character, staff[i].character, boss.generous, staff[i].generous);
	  }
	  
	  //sum = (sum / 100.0) * (0.5 + boss.character * 0.1) ;
	  sum = (sum / 100.0); 
 
#if 0	  
	  printf("boss.character:%d\t", a);
	  printf("boss.generous:%d\t", b);
 
	  printf("Average sum = %f\n", sum);
#endif 
	  printf("%d %d %f\n",a,b,sum);
 
	}
	printf("\n");
  }
}
syntax2html

_ https://dotinstall.com/lessons/basic_postgresql