Bài toán tính số PI

Đây là code của em nhưng khi chạy thì đoạn in số PI ra màn hình nó lại in ra nhiều lần ai giúp e với.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
#include <math.h>

static int counter = 0;

struct diem
{
	float x;
	float y;
}diem;

float float_rand(float min, float max)
{
	float scale = rand()/(float)RAND_MAX;
	return min + scale * (max - min);
}

void taoDiem(int sodiem)
{
	float d;
	struct diem diemnn;
	
	int i = 0;
	for(i;i < sodiem;i++)
	{
		diemnn.x = float_rand(-1,1);
		diemnn.y = float_rand(-1,1);
		d = sqrt(diemnn.x*diemnn.x + diemnn.y*diemnn.y);
		if (d <= 1.0)
		{
			counter++;
		}
	}
}


int main(int argc, char* argv[])
{
	double PI;
	int num=atoi(argv[1]);
	int pid;
	int sodiem = atoi(argv[2]);
	int i = 0;
	for(i; i<num; i++)
	{
		pid = fork();
		if(pid > 0) 
		{
			taoDiem(sodiem);
		}
		else
			break;
	}
	PI = (4 * counter)/(num * sodiem);
	printf("counter: %d\n", counter);
	printf("n: %d, m: %d\n", num, sodiem);
	printf("PI = %lf\n", PI);
}

Bạn dùng Markdown để post code đi để mọi người dễ nhìn ra chỗ sai và giúp bạn nhanh nhất nhé
Cách dùng Markdown bạn có thể xem tại đây

1 Like

Thử dùng %f thay cho `%lf.

1 Like

vẫn không được anh ơi.

Nó in đi in lại 1 số giống nhau? Có xuống dòng không?

3 Likes

có xuống dòng anh ơi.

Cả 3 dòng in đều lặp lại hay chỉ có dòng in số PI?

  • Nếu cả 3 dòng thì có lẽ là tập tin (thực thi) được gọi đi gọi lại. :thinking:
  • Nếu chỉ dòng in PI thì khó hiểu thật! :face_with_raised_eyebrow:
2 Likes

Đây ạ image
Nếu z thì sửa thế nào z ạ.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?