Tìm phần tử lớn nhất trong mảng C++ | Laptrinhcanban.com

Tìm phần tử lớn nhất trong mảng C++

Hướng dẫn cách tìm phần tử trong mảng C++. Bạn sẽ học được cách tìm phần tử lớn nhất trong mảng C++, cách tìm vị trí phần tử lớn nhất trong mảng C++, cách tìm phần tử lớn thứ hai trong mảng C++, cũng như cách tìm phần tử chẵn lớn nhất trong mảng sau bài học này.

Tìm phần tử lớn nhất trong mảng C++

Để tìm phần tử lớn nhất trong mảng C++, chúng ta sử dụng tới logic mà Kiyoshi đã hướng dẫn trong bài: Tìm max và min trong mảng C++

Ý tưởng ở đây là giả sử max (giá trị lớn nhất của mảng) là số đầu tiên của mảng. Chúng ta sẽ lấy lần lượt các số còn lại trong mảng đem so sánh với max, nếu số này lớn hơn max thì đổi giá trị của max thành số đó. Và làm như thế cho tới số cuối cùng trong mảng được kiểm tra thì sẽ ra phần tử lớn nhất trong mảng ban đầu.

Và chúng ta viết hàm tìm phần tử lớn nhất trong mảng C++ trong chương trình như sau:

#include <iostream>
#include <cassert>
using namespace std;

/*Hàm tìm phần tử lớn nhất trong mảng C++*/
void maxElement(const int* array, size_t size){
/*Kiểm tra và báo lỗi nếu đối số truyền vào không thoả mãn điều kiện chạy hàm*/
assert(array != NULL);
assert(size >= 1);

//Giả định giá trị lớn nhất là giá trị đầu tiên của mảng.
int max = array[0];

/*So sánh từng phần tử trong mảng với giá trị đầu tiên để tìm ra giá trị lớn nhất*/
for (size_t i = 1; i < size; ++i) {
if (max < array[i]) { //Thay đổi giá trị max nếu tìm ra số lớn hơn
max = array[i];
}
}
cout << "max= "<< max;
}

int main(){
int array[100], n;
cout << ">>Nhap so phan tu: ";
cin >> n;

cout << ">>Nhap phan tu:\n";
for (int i = 0; i < n; i++) cin >> array[i];

/*Tìm phần tử lớn nhất trong mảng C++*/
maxElement(array,n);

return 0;
}

Kết quả phép tìm phần tử lớn nhất trong mảng C++ như sau:

>>Nhap so phan tu: 6
>>Nhap phan tu:
2 4 98 23 0 7
max= 98

Tìm vị trí phần tử lớn nhất trong mảng C++

Chúng ta cũng có thể biến tấu hàm ở trên và tìm vị trí phần tử lớn nhất trong mảng C++, bằng cách thay vì trả về giá trị của phần tử lớn nhất tìm thấy thì chúng ta sẽ trả về cả index của phần tử đó.

Và chúng ta viết hàm tìm vị trí phần tử lớn nhất trong mảng C++ trong chương trình như sau:

#include <iostream>
#include <cassert>
using namespace std;
/*Hàm tìm vị trí phần tử lớn nhất trong mảng C++*/
void maxElement(const int* array, size_t size){
/*Kiểm tra và báo lỗi nếu đối số truyền vào không thoả mãn điều kiện chạy hàm*/
assert(array != NULL);
assert(size >= 1);

//Giả định vị trí phần tử lớn nhất là phần tử đầu tiên của mảng.
int max = array[0];
int max_index= 0;
/*So sánh từng phần tử trong mảng với giá trị đầu tiên để tìm ra giá trị lớn nhất*/
for (size_t i = 1; i < size; ++i) {
if (max < array[i]) { //Thay đổi giá trị lớn nhất nếu tìm ra số lớn hơn
max = array[i];
max_index =i;
}
}
cout << "Phan tu lon nhat= "<< max <<endl;
cout << "Vi tri phan tu lon nhat= "<< max_index;
}

int main(){
int array[100], n;
cout << ">>Nhap so phan tu: ";
cin >> n;

cout << ">>Nhap phan tu:\n";
for (int i = 0; i < n; i++) cin >> array[i];

/*Tìm phần tử lớn nhất trong mảng C++*/
maxElement(array,n);

return 0;
}

Kết quả phép tìm phần tử lớn nhất trong mảng C++ như sau:

>>Nhap so phan tu: 6
>>Nhap phan tu:
2 4 98 23 0 7
Phan tu lon nhat= 98
Vi tri phan tu lon nhat= 2

Tìm phần tử lớn thứ hai trong mảng C++

Để tìm phần tử lớn thứ hai trong mảng C++, chúng ta sẽ dùng tới phương pháp Tìm phần tử lớn nhất và nhỏ nhất trong mảng C++ bằng cách sắp xếp mảng mà Kiyoshi đã hướng dẫn trong bài: Tìm max và min trong mảng C++

Ý tưởng ở đây là chúng ta sẽ sắp xếp mảng theo thứ tự giảm dần. Và sau khi sắp xếp thì phần tử lớn nhất mảng là phần tử đầu tiên, và phần tử lớn thứ 2 chính là phần tử đứng thứ 2 trong mảng.

Một cách tổng quát thì chúng ta cũng có thể tìm phần tử lớn thứ n trong mảng bằng phương pháp sắp xếp này.

Về sắp xếp mảng trong C++ thì chúng ta sẽ dùng tới phương pháp mà Kiyoshi đã hướng dẫn trong bài: Sắp xếp mảng trong C++

Sau đây là ví dụ về cách tìm phần tử lớn thứ hai trong mảng C++ bằng cách sắp xếp mảng giảm dần.

#include <iostream>
#include <cstdlib>
using namespace std;

/*Định nghĩa macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) trong mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))


/*Tạo hàm so sánh giảm dần sử dụng trong hàm qsort*/
int compareIntDesc(const void* a, const void* b){
int aNum = *(int*)a;
int bNum = *(int*)b;

return bNum - aNum;
}

int main(){
int array[] = {5, 4, 7, 2, 8, 7, 3};
int length= SIZE_OF_ARRAY(array);

/*Sử dụng hàm qsort để sắp xếp mảng giảm dần*/
qsort(array, length, sizeof(int), compareIntDesc);


/*Phần tử lớn thứ 2 chính là phần tử đứng thứ 2 trong mảng sau sắp xếp*/
cout << "Phan tu lon nhat trong mang= "<< array[0] <<endl;
cout << "Phan tu lon thu 2 trong mang= "<< array[1];

return 0;
}

Kết quả phép tìm phần tử lớn thứ hai trong mảng C++ như sau:

Phan tu lon nhat trong mang= 8
Phan tu lon thu 2 trong mang= 7

Tìm phần tử chẵn lớn nhất trong mảng

Chúng ta cũng có thể áp dụng phương pháp tìm phần tử lớn nhất và nhỏ nhất trong mảng C++ bằng cách sắp xếp mảng ở trên để tìm phần tử chẵn lớn nhất trong mảng

Ý tưởng ở đây là chúng ta sẽ sắp xếp mảng theo thứ tự giảm dần. Và sau khi sắp xếp thì các phần tử sẽ được sắp xếp theo thứ tự từ lớn nhất đến nhỏ nhất, tính từ đầu mảng. Khi đó, chỉ cần chúng ta tìm ra phần tử chẵn đầu tiên tính từ đầu mảng, thì đó chính là phần tử chẵn lớn nhất trong mảng cần tìm.

Một cách tương tự thì chúng ta cũng có thể tìm phần tử lẻ lớn nhất trong mảng theo cách này.

Để kiểm tra một phần tử trong mảng là chẵn hay lẻ, chúng ta sẽ dùng tới một trong hai phương pháp mà Kiyoshi đã hướng dẫn trong bài: Kiểm tra số chẵn lẻ trong C++

Và để sắp xếp mảng trong C++ thì chúng ta sẽ dùng tới phương pháp mà Kiyoshi đã hướng dẫn trong bài: Sắp xếp mảng trong C++

Sau đây là ví dụ về cách tìm phần tử phần tử chẵn lớn nhất và phần tử lẻ lớn nhất trong mảng bằng cách sắp xếp mảng giảm dần.

#include <iostream>
#include <cstdlib>
using namespace std;

/*Định nghĩa macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) trong mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))

/*Tạo hàm kiểm tra số chẵn lẻ trong C++*/
int check_odd_even(int n){
//flag = 1 => số lẻ
//flag = 0 => số chẵn

int flag = 1;
if( n % 2 == 0 ) flag= 0;
return flag;
}


/*Tạo hàm so sánh giảm dần sử dụng trong hàm qsort*/
int compareIntDesc(const void* a, const void* b){
int aNum = *(int*)a;
int bNum = *(int*)b;

return bNum - aNum;
}

int main(){
int array[] = {5, 4, 7, 2, 8, 7, 3};
int length= SIZE_OF_ARRAY(array);

/*Sử dụng hàm qsort để sắp xếp mảng giảm dần*/
qsort(array, length, sizeof(int), compareIntDesc);

/*Phần tử phần tử chẵn lớn nhất trong mảng chính là phần tử chẵn đầu tiên*/
for (size_t i = 0; i < length; ++i) {
int x = array[i];
int check = check_odd_even(x);
if (check == 0) { //Tìm thấy phần tử phần tử chẵn lớn nhất
cout << "Phan tu chan lon nhat trong mang= "<< array[i]<<endl;
break;
}
}

/*Phần tử phần tử lẻ lớn nhất trong mảng chính là phần tử lẻ đầu tiên*/
for (size_t i = 0; i < length; ++i) {
int x = array[i];
int check = check_odd_even(x);
if (check == 1) { //Tìm thấy phần tử phần tử lẻ lớn nhất
cout << "Phan tu le lon nhat trong mang= "<< array[i]<<endl;
break;
}
}

return 0;
}

Kết quả chương trình tìm phần tử phần tử chẵn lớn nhất và phần tử lẻ lớn nhất trong mảng như sau:

Phan tu chan lon nhat trong mang= 8
Phan tu le lon nhat trong mang= 7

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn cách tìm phần tử lớn nhất trong mảng C++ rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C++ trong các bài học tiếp theo.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.