Đoạn code tìm max của dãy số nguyên không ra kết quả

#include<iostream>
#include<conio.h>
using namespace std;
void nhapdn(int *a,int n);
void nhapdt(double *x,int b);
void nhapdn(int *a,int n,int i)
{
	for (int i=1;i<=n;i++)
	{
		cout<<"a["<<i<<"]= ";
		cin>>a[i];
	}
}
void nhapdt(double *x,int b,int j)
{
	for (int j=1;j<=b;j++)
	{
		cout<<"x["<<j<<"]= ";
		cin>>x[j];
	}
}
main()
{
	int a[10],n,i,j,maxa,b;
	double x[10],maxx;
	cout<<"so phan tu cua day nguyen la: ";
	cin>>n;
	cout<<"so phan tu cua day thuc la: ";
	cin>>b;
	cout<<"nhap day so nguyen: ";
	nhapdn(a,n,i);
	cout<<"nhap day so thuc: ";
	nhapdt(x,b,j);
	for(i=1;i<=n;i++)
	{
		maxa=a[0];
		if (a[i]>maxa)
		maxa=a[i];
	}
	cout<<"max cua day nguyen la: "<<maxa<<endl;
	for(j=1;j<=b;j++)
	{
		maxx=x[0];
		if (x[j]>maxx)
		maxx=x[j];
	}
	cout<<"max cua day thuc la: "<<maxx<<endl;
}

max của dãy nguyên nó lại ko ra vậy ạ

Do bạn chưa khởi tạo giá trị ban đầu cho nó đó. Nên để giá trị ban đầu là 0 nếu là số tự nhiên.

em để giá trị ban đầu của nó là bằng a[0] mà

a[0] bạn chưa khởi tạo giá trị. Nó sẽ sinh ra một giá trị không mong muốn, trong trường hợp của bạn cũng vậy.

1 Like

vậy sao cái giá trị lớn nhất ở dưới lại đúng vậy ạ

Cái này là do máy sinh ra giá trị. Nếu muốn thao tác với phần tử đó chính xác thì bạn nên khởi tạo giá trị cho nó. Mình chỉ biết có vậy :((

1 Like

ok cảm ơn anh nhiều ạ

1 Like

Lưu ý ghi nhớ nằm lòng: “Mảng bắt đầu từ 0” (còn mấy ngôn ngữ xài 1 thì thôi bỏ qua luôn đi :smiley: ) Vòng lặp for chạy từ 0 đến bé hơn n.
Lần này bạn may mắn vì đã khai báo số phần tử cố định (10 phần tử), còn nếu không sẽ gây ra tùm lum lỗi cho coi. Bạn chưa bao giờ nhập giá trị vào phần tử thứ 0 nhưng lại gán maxa = a[0] :joy:
Như Hoang đã nói thì bạn cứ sửa vậy là được.

1 Like

cảm ơn nhiều lắm ạ!!!

vậy nếu e muốn gán cho giá trị đầu tiên trong mảng a cho maxa thì câu lệnh thế nào ạ

// nhập xong mảng a
maxa = a[0] // khởi tạo
1 Like

e đã thử trên code của e nhưng có mỗi giá trị maxa là ko ra kết quả còn maxx vẫn ra bình thường

Đậu phộng, dòng maxa = a[0] là khởi tạo, ban đầu đang tạm coi số đầu tiên là số lớn nhất thì bạn phải vứt dòng đó ra ngoài for chứ.
Dòng maxx = x[0] cũng tương tự.

1 Like

nó vẫn vậy anh à!!!

maxa = a[0];
for (int i = 0; i < n; i++) // mình thích thì chạy i từ 0 thôi
    if (a[i] > maxa)
        maxa = a[i];

cout << maxa << endl;

Nếu bạn lắp đoạn code trên của mình mà vẫn không được thì mình khuyên bạn là xoá hết đi, code lại từ đầu.

1 Like

được rồi ạ cảm ơn anh nhiều

các anh cho e hỏi là muốn tính tổng các số trong dãy vừa nhập thì làm thế nào ạ

for i in 0..n-1:
    sum = sum + a[i]

Sao bạn hay hỏi nhưng câu cơ bản thế này nhỉ?

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