Viết chương trình sử dụng con trỏ và cấp phát động cho mảng một chiều

a) Viết một đoạn chương trình nhập một mảng nguyên có n phần tử, n nhập từ bàn phím.
b) Viết một hàm trả về giá trị lớn nhất trong một mảng số nguyên n phần tử.
c) Gọi hàm vừa viết trong hàm main() với đối số là mảng ở câu (a) và đưa kết quả ra màn hình
Yêu cầu: sử dụng con trỏ nguyên và cấp phát động cho mảng một chiều (chú ý thu hồi bộ nhớ) *

em bị mắc chỗ dùng hàm với mảng ạ! e cảm ơn!

Ở dạy nhau học ko giúp bạn làm bài tập thì phải. Chỉ giúp sửa lỗi thôi :smiley:

1 Like

bạn ném code của bạn làm lên đi :smiley: được bao nhiêu sửa bấy nhiêu :blush:

1 Like

Bạn phải đem code mình đã viết ra đây, mọi người sửa cho chứ k ai code hết cho bạn được đâu. :smile:
Ví dụ hàm nhập:

void nhapMang(int a[], int n) {
	for (int i = 0; i < n; i++) {
		cout << "Nhap vao a[" << i << "] = ";
		cin >> a[i];
	}
}
1 Like

Đây ạ e chạy nó toàn báo lỗi @@

#include<iostream>
using namespace std;
int max(int*B,int j);
int main()
{
	int i,n;
	int *A= new int[n];
	cout <<"nhap so phan tu cua mang:";
	cin >>n;
	for (i=0;i<n;i++)
{
    cout <<"A["<<i<<"]= ";
	cin>> A[i];
}
int k;
k=max(A,n);
cout<<"max="<<k<<endl;
return 0;
}
int max(int *B,int j)
{
	int i,max1=B[0];
	for (i=0;i<j;i++)
	if (B[i]>max1)
	max1=B[i];
	return max1;
}

bài của bạn có khai báo thư viện <iostream> chưa vậy

anh chị đợi e 1 lát. e copy code bị lỗi

Bạn ấy khai báo rồi.

Sai ở vòng for, code này của bạn thực sự rất tối nghĩa. :confused:

chắc do copy code bị lỗi í

1 Like

không phải ạ. tại lỗi copy. e có khai báo đầy đủ và vòng lặp for rõ ràng ạ. để e lấy code lại

E copy code tại dev C++ mà toàn bị lỗi chữ thôi ạ :frowning:

Bạn chụp ảnh post lên đây cũng được mà. :wink:

đây ạ anh chị giúp e với

Bạn thử đảo vị trí cho hàm int max(int *B, int j) lên trên hàm int main() xem thử có sai không. :smile:

mình thay như bạn bảo nhưng khi kiểm tra lỗi ko báo lỗi. khi chạy thử thì bị ntn :disappointed_relieved:

Cái cmd che hết code r, hay bạn copy paste bị nhầm đâu đó ? :smile:
Code mình đảo 2 hàm của bạn đây, bạn xem có gì khác nhau không nhé :

#include <iostream>
using namespace std;

int max(int *B, int j) {
	int i, max1 = B[0];
	for (i = 0; i < j; i++)
		if (B[i] > max1)
			max1 = B[i];
	return max1;
		
}

int main() {
	int i, n;
	int *A = new int[n];
	cout << "Nhap so phan tu cua mang : ";
	cin >> n;
	for (int i = 0; i < n; i++) {
		cout << "A[" << i << "] = ";
		cin >> A[i];
	}
	int lonnhat;
	lonnhat = max(A, n);
	cout << "max = " << lonnhat << endl;
	return 0;
}

vẫn thông báo y hệt ạ :joy: bạn xem dùm mình phần khai báo và sử dụng hàm *int max(int B, int j) cho mảng có đúng không ạ! mình bị lơ mơ chỗ này :joy:

Thế lạ nhỉ, mình cũng dùng Dev C đây mà thấy có lỗi gì đâu, hàm tính max dùng con trỏ đúng rồi, hay do của bạn có vấn đề. :smile: :confused:

Còn lỗi ban đầu là vì cái Dev C này khá là củ chuối, nó chỉ chạy tới hết hàm main() là dừng, bất kể sau nó còn bao nhiêu hàm đi chăng nữa. :smile: nên phải cho các hàm con lên trên main().

1 Like

vậy chắc do máy mình có vấn đề rồi, để mình xem lại :grinning: cám ơn bạn và mọi người nhiều nha :smiley:

1 Like
#include <iostream>
using namespace std;

int max(int *B, int j) {
	int i, max1 = B[0];
	for (i = 0; i < j; i++)
		if (B[i] > max1)
			max1 = B[i];
	return max1;
		
}

int main() {
	int i, n;
	
	cout << "Nhap so phan tu cua mang : ";
	cin >> n;
        int *A = new int[n];
	for (int i = 0; i < n; i++) {
		cout << "A[" << i << "] = ";
		cin >> A[i];
	}

	int lonnhat;
	lonnhat = max(A, n);
	cout << "max = " << lonnhat << endl;
        delete A;
	return 0;
}

Khi ta khai báo một con trỏ có n phân tử thì ta nên khai báo như này…!! ( Cấp phát sau khi nhập n )

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