第18講 マルチスレッドプログラミング 
第6話 引数を利用して関数を1つにまとめる
解答例
#include<iostream>
#include<process.h>
#include<math.h>
using namespace System;
using namespace std;
const int N=1000;
int cn1,cn2,cn3,cn4,cn5,a1[N/10],a2[N/10],a3[N/10],a4[N/10];
void f(void *a);
char sh(int a);
void f();
int main(){
  a1[0]=2;a4[0]=3;
  cn1=1;cn2=0;cn3=0;cn4=1;
  _beginthread(f, 0, (void *)1);
  _beginthread(f, 0, (void *)2);
  _beginthread(f, 0, (void *)3);
  _beginthread(f, 0, (void *)4);
  int i;
  cout<<"5で割ると余りが0のタイプ"<<endl;
  cout<<"5"<<endl;
  cout<<endl;
  cout<<"5で割ると余りが1のタイプ"<<endl;
  for(i=0;i<cn3;i++){
    if(i!=0 && i%10==0)cout<<endl;
    cout<<a3[i]<<" ";
  }
  cout<<endl;
  cout<<endl;
  cout<<"5で割ると余りが2のタイプ"<<endl;
  for(i=0;i<cn1;i++){
    if(i!=0 && i%10==0)cout<<endl;
    cout<<a1[i]<<" ";
  }
  cout<<endl;
  cout<<endl;
  cout<<"5で割ると余りが3のタイプ"<<endl;
  for(i=0;i<cn4;i++){
    if(i!=0 && i%10==0)cout<<endl;
    cout<<a4[i]<<" ";
  }
  cout<<endl;
  cout<<endl;
  cout<<"5で割ると余りが4のタイプ"<<endl;
  for(i=0;i<cn2;i++){
    if(i!=0 && i%10==0)cout<<endl;
    cout<<a2[i]<<" ";
  }
  cout<<endl;
  cout<<"素数が"<<cn1+cn2+cn3+cn4+1<<"個ありました。"<<endl;
}
void f(void *a){
  int i;
  if(a==(void *)1){
    for(i=7;i<=N;i+=10){
      if(sh(i)){
        a1[cn1]=i;
        cn1++;
      }
    }
  }
  if(a==(void *)2){
    for(i=9;i<=N;i+=10){
      if(sh(i)){
        a2[cn2]=i;
        cn2++;
      }
    }
  }
  if(a==(void *)3){
    for(i=11;i<=N;i+=10){
      if(sh(i)){
        a3[cn3]=i;
        cn3++;
      }
    }
  }
  if(a==(void *)4){
    for(i=13;i<=N;i+=10){
      if(sh(i)){
        a4[cn4]=i;
        cn4++;
      }
    }
  }
}
char sh(int a){
  int i;
  for(i=3;i<=(int)sqrt((double)a);i+=2){
    if(a%i==0)return(0);
  }
  return(1);
}

さて、次講では第17講で作った普遍版魔方陣自動生成プログラムのマルチスレッド化に挑戦しましょう。



第5話へ 第19講第1話へ

戻る

C言語 C++講義第1部へ
VB講義へ
VB講義基礎へ

vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)