cuốn sách gpt4 ai đã làm

c - Câu hỏi lạ: Nhận được kết quả tính toán khác nhau về diện tích và chu vi của một đa giác (trên các máy khác nhau và vào các thời điểm khác nhau)

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 04:26:10 26 4
mua khóa gpt4 Nike

Tôi có một chương trình tính diện tích và chu vi của một đa giác. Chương trình cũng xác nhận rằng các phép tính diện tích và chu vi đúng như mong đợi.

Tôi không hiểu chuyện gì đang xảy ra, nhưng phần xác thực để xác nhận rằng diện tích và chu vi giống như mong đợi không hoạt động bình thường.

Ví dụ: tôi hiện đang kiểm tra và nhận được "Mảng giống nhau" trong mọi trường hợp, điều này đúng vì tôi đang đưa ra tọa độ chính xác trong tệp txt để khớp với mọi kết quả mong đợi. Nhưng tôi đã thử nghiệm sau hoặc trên một máy khác, tôi cũng đã thử nghiệm trên Linux và trong một số trường hợp, "Mảng khác nhau" xuất hiện. Thật kỳ lạ khi điều này xảy ra mà không thay đổi tệp hoặc mã tọa độ.

Bạn có hiểu tại sao vấn đề kỳ lạ này lại xảy ra không?

Đây là tệp văn bản có tọa độ chính xác để đạt được kết quả mong đợi:

 1,0 2,5 5,1 5,8 5,9 0,7 
1,2 4,1 5,1 5,8 6,8 1,9 2,9 0,2
1,7 4,9 5,1 5,8 7,0 2,8 4,8 0,1 1,5 1,4
2,1 5,3 5,1 5,8 7,0 3,5 5,9 0,7 2,9 0,2 1,0 2,5
2,5 5,6 5,1 5,8 6,9 3,9 6,5 1,3 4,2 0,0 1,8 1,0 1,0 3,4
2,8 5,7 5,1 5,8 6,7 4,2 6,8 1,9 5,2 0,3 2,9 0,2 1,3 1,8 1,2 4,1

chương trình:

    #include 
#include
#include
#include

liệt kê {x, y};
cấu trúc tam giác typedef {
đôi v1[2];
đôi v2[2];
đôi v3[2];
} tam giác;
diện tích gấp đôi (tam giác a);
chu vi gấp đôi (đỉnh * gấp đôi, kích thước int);
hai mặt (double *p1, double *p2);


kết quả char[256];
char dự kiến[] = "11.7715.65"; //tam giác đều
char dự kiến1[] = "18.1017.02"; // tứ giác đều
char dự kiến2[] = "21.3317.60"; //ngũ giác đều
char dự kiến3[] = "23.5518.07"; //hình lục giác đều
char dự kiến4[] = "24.8018.29"; // bảy cạnh đều
char dự kiến5[] = "25.1418.26"; // bát giác đều


int main()
{
int idx;
int hình tam giác;
chỉ số int;
int xycount;
xy kép;
diện tích tam giác đôi;
vùng_đa giác kép;
giấy phép gấp đôi;
đa giác kép[50] = {0,0};
tam giác a;

dữ liệu FILE*;
dòng char[256];
mã thông báo char*;
if ((data = fopen("test.txt", "r")) == NULL) {
fprintf(stderr, "không thể mở được file dữ liệu\n");
thoát (EXIT_FAILURE);
}
while (fgets(line, sizeof (line), data)){
xycount = 0;
đa giác_area = 0;

dòng[strlen(dòng) - 1] = 0;
mã thông báo = strtok(dòng, " ");
trong khi (mã thông báo != NULL){
xy = atof(mã thông báo);
mã thông báo = strtok(NULL, " ");
đa giác_vertices[xycount++] = xy;
}
idx = 0;
tam giác = (xycount / 2) - 2;
for (index = 2, idx = 0;idx < tam giác;index += 2, ++idx){
a.v1[x] = đa giác_đỉnh[0];
a.v1[y] = đa giác_đỉnh[1];
a.v2[x] = đa giác_đỉnh[chỉ mục + 0];
a.v2[y] = đa giác_đỉnh[chỉ mục + 1];
a.v3[x] = đa giác_đỉnh[chỉ mục + 2];
a.v3[y] = đa giác_đỉnh[chỉ mục + 3];

tam giác_diện tích = diện tích(a);
vùng_đa giác += vùng_tam giác;

}

printf("area=%.2f\t", đa giác_area);
perim = chu vi(polygon_vertices, xycount);
printf("chu vi=%.2f\n", perim);

sprintf(result, "%.2f%.2f", đa giác_area, perim);

if(strcmp(result,expected) == 0) {
printf("Các mảng giống nhau\n");
}
else if(strcmp(result,expected1) == 0){
printf("Các mảng giống nhau");
}
else if(strcmp(result,expected2) == 0){
printf("Các mảng giống nhau");
}
else if(strcmp(result,expected3) == 0){
printf("Các mảng giống nhau");
}

else if(strcmp(result,expected4) == 0){
printf("Các mảng giống nhau");
}
else if(strcmp(result,expected5) == 0){
printf("Các mảng giống nhau");
}
khác {
printf("Các mảng khác nhau");
}

}
fclose(dữ liệu);
return 0;
}

/* Tính diện tích tam giác theo công thức Heron */
diện tích kép (tam giác a)
{
đôi s1, s2, s3, S, diện tích;

s1 = cạnh(a.v1, a.v2);
s2 = cạnh(a.v2, a.v3);
s3 = side(a.v3, a.v1);
S = (s1 + s2 + s3) / 2;
diện tích = sqrt(S*(S - s1)*(S - s2)*(S - s3));

khu vực trở về;
}

/* Tính chu vi đa giác */
chu vi gấp đôi (đỉnh * gấp đôi, kích thước int)
{
int idx, jdx;
đôi p1[2], p2[2], pfirst[2], plast[2];
chu vi gấp đôi;

chu vi = 0,0;
/* Đỉnh thứ 1 của đa giác */
pfirst[x] = đỉnh[0];
pfirst[y] = đỉnh[1];
/*đỉnh cuối cùng của đa giác */
plast[x] = đỉnh[size-2];
plast[y] = đỉnh[size-1];
/* tính chu vi trừ cạnh cuối */
for(idx = 0; idx <= size-3; idx += 2)
{
for(jdx = 0; jdx < 4; ++jdx)
{
p1[x] = đỉnh[idx];
p1[y] = đỉnh[idx+1];
p2[x] = đỉnh[idx+2];
p2[y] = đỉnh[idx+3];
}
chu vi += cạnh(p1, p2);
}
/* thêm cạnh cuối cùng */
chu vi += cạnh(plast, pfirst);

chu vi trở lại;
}

/* Tính độ dài cạnh */
hai mặt (double *p1, double *p2)
{
đôi s1, s2, s3;

s1 = (p1[x] - p2[x]);
s2 = (p1[y] - p2[y]);
s3 = (s1 * s1) + (s2 * s2);

trả về sqrt(s3);
}

câu trả lời hay nhất

trên một máy khác, tôi cũng đã thử nghiệm trên Linux và trong một số trường hợp, nó xuất hiện "Mảng khác nhau".

Ví dụ, hãy xem xét điều đầu tiên tam giác .Diện tích của nó là 11,775, trong hy vọng bạn có 11,77 Có thể so sánh được. Bây giờ, trong các cách triển khai khác nhau, lỗi làm tròn có thể khiến kết quả thấp hơn hoặc cao hơn 11,775 một chút, trong khi sprintf(kết quả, "%.2f ... có thể sản xuất 11,77 hoặc 11:78,Vì vậy strcmp Điều này dẫn đến "giống nhau" trong một trường hợp và "khác" trong trường hợp khác.

Về c - câu hỏi lạ: Nhận các kết quả tính toán khác nhau về diện tích và chu vi của một đa giác (trên các máy khác nhau và vào các thời điểm khác nhau), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/41154443/

26 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress