01/10/2018, 11:10

Các anh chị cho em hỏi sao code em chạy bị như vậy với

#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 ạ

Hoang viết 13:21 ngày 01/10/2018

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.

Chu Thương viết 13:25 ngày 01/10/2018

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

Hoang viết 13:22 ngày 01/10/2018

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.

Chu Thương viết 13:16 ngày 01/10/2018

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

Hoang viết 13:22 ngày 01/10/2018

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 :((

Chu Thương viết 13:15 ngày 01/10/2018

ok cảm ơn anh nhiều ạ

Khoa NTA viết 13:21 ngày 01/10/2018

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 ) 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]
Như Hoang đã nói thì bạn cứ sửa vậy là được.

Chu Thương viết 13:12 ngày 01/10/2018

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

Chu Thương viết 13:13 ngày 01/10/2018

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 ạ

HK boy viết 13:19 ngày 01/10/2018
// nhập xong mảng a
maxa = a[0] // khởi tạo
Chu Thương viết 13:15 ngày 01/10/2018

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

HK boy viết 13:20 ngày 01/10/2018

Đậ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ự.

Chu Thương viết 13:12 ngày 01/10/2018

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

HK boy viết 13:14 ngày 01/10/2018

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.

Chu Thương viết 13:17 ngày 01/10/2018

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

Chu Thương viết 13:10 ngày 01/10/2018

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 ạ

HK boy viết 13:19 ngày 01/10/2018
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ỉ?

Bài liên quan
0