Tìm giá trị xa giá trị x nhất trong mảng số thực

ví dụ
15 29 45
x=1
vậy giá trị xa x nhất là 45
nhưng khi em nhập bất cứ giá trị mảng hoặc x nào thì chương trình cũng in ra: nan
em không hiểu tại sao luôn, em mới học lập trình, có thể giúp em không ạ?
đây là code của em:

#include <iostream>
#define MAX 100
using namespace std;
void nhap(float a[] ,int &n)
{
    int x;
    do
       {
        cout<< "\nnhap so n: ";
        cin >> n;
        cout<< "\nnhap so x: ";
        cin >> x;
    if(n<0 || n> MAX)
        cout << "\nsai roi, moi nhap lai ";
        }
        while(n<0 || n >MAX);
        for(int i=0; i<n; i++)
            {
            cout << "a[" << i << "]= ";
            cin >> a[i];
            }
}
void xuat(float a[], int &n)
{
    for(int i=0; i <n; i++)
    {
    cout << a[i] << " ";
    }
}
void taomang (float a[], float b[], int &n, int x)
{
    for (int i=0; i<n; i++)
        b[i] = a[i] - x;
}
float xaxnhat(float a[], int &n)
{
    int x;
    int s = a[0]-x;
    for(int i=0; i<n; i++)
    {
        if(a[i]-x<s)
        {
            s=a[i];
        }
    }
        return s;
}
float xuatketqua (float a[], float b[], int n)
{
    for (int i=0; i<n; i++)
    {
        if (b[i] == xaxnhat(a,n))
            return a[i];
    }
}
int main()
{
int n;
float a[MAX];
float b[MAX];
nhap(a,n);
xuat(a,n);
cout << " \ngia tri xa gia tri x nhat la: ";
cout << xuatketqua(a,b,n);
return 0;
}

Lỗi NAN
if (b[i] == xaxnhat(a,n))
Em đang so sánh giá trị trong mảng b nhưng mảng b em không nhập vào, chỉ là giá trị rác nên khi so sánh sẽ không bao giờ vào trong if được. Kết quả là hàm xuatketqua trả về giá trị rác.

  • Chỗ này mục đích tạo mảng b của em là gì?
  • Trong hàm xuatketqua em đang gọi hàm xaxnhat trong vòng lặp, vậy thì nó sẽ gọi hàm xaxnhat n lần, trong khi giá trị xa x nhất ko thay đổi. em chỉ cần gọi 1 lần bên ngoài vòng lặp là được. Lỗi này nên tránh để tối ưu code.
  • trong hàm xaxnhat em có thể dùng biến cờ để xác định giá trị xa x nhất và trả về luôn, không cần phải viết thêm hàm xuatketqua làm gì.
1 Like

x là giá trị quan trọng, sao chẳng thấy chỗ nào gán (nhập). Khai báo không thì toàn rác, nghĩa lý gì nữa.
Mảng b để làm gì???

Trong bài này chỉ cần 1 mảng (với độ dài) và biến x thôi.

1 Like

mảng a là giá trị mình nhập lúc đầu còn mảng b là giá trị sau khi trừ x đó anh, tại phải in giá trị a xa x nhất

Nó là abs(a[i] - x) :smiley: mà đâu cần mảng phụ gì đâu, cứ maxIdx = i gì đó thôi.

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