Các thao tác cơ bản với mảng một chiều

bạn quách tỉnh quá, thanks nhé :))

1 Like

code baif taapj :stuck_out_tongue:

#include<iostream>
using namespace std;
int main()
{
	double max = 0;
	double hs[30];
	int j = 0;

	for (int i = 0; i <= 29; i++)
	{
		cout << "Nhap vao phan tu thu " << i + 1 << endl;
		cin >> hs[i];
		if (max < hs[i])
		{
			max = hs[i];
			j = i;
		}
		else
			;
	}
	cout << "Phan tu lon nhat la "<<max << endl;
	cout << "Phan tu do o vi tri thu " <<j+1 << endl;
	return 0;
	

}
1 Like

Bài 3 của mình đây mong có cao kiến :D.

#include <iostream>
#define MAX 100
using namespace std;


int main()
{
	int32_t A[MAX];
	int32_t N = 7;

//Khoi tao gia tri trong mang.
	for (int32_t i = 0; i <= N - 1; i++)
	{
		cout << "A[" << i << "]: ";
		cin >> A[i];
	}
	///
	for (int32_t i = 0; i<N - 1; i++)
	{

		for (int32_t k = i + 1; k < N; k++)
		{

			if (A[k] == A[i])

			{

				for (int32_t j = k; j < N - 1; j++) {

					A[j] = A[j + 1];
				}

				N--;
				k--;			                                  
				
			}
		}

    }

//Xuat mang:
	for (int32_t i = 0; i <= N-1 ; i++)
	{
		cout << A[i] << "  ";
	}
	cout << endl;
	system("pause");
	return 0;
}
1 Like
#include <iostream>
#define MAX 100
using namespace std;
//prototype
void nhapMang(int a[], int &n);
void xuatMang(int a[], int n);
void daoNguocMang(int a[], int n);
void tongChan(int a[], int n);
void tongLe(int a[], int n);
void trungLap(int a[], int n);

//main
int main(){
	int n;
	int a[MAX];
	do
	{
		cout << "Nhap n : ";
		cin >> n;
	} while (n < 0 || n > 100);
	//nhap mang
	nhapMang(a, n);
	//xuat mang
	xuatMang(a, n);
	//dao nguoc mang
        daoNguocMang(a, n)
	//tong chan tong le
	tongChan(a, n);
	system("pause");
	return 0;
}
//build prototype
void nhapMang(int a[], int &n){
	for (int i = 0; i < n; i++)
	{
		cout << "a[" << i << "]=" << " ";
		cin >> a[i];
	}
}
void xuatMang(int a[], int n){
	for (int i = 0; i < n; i++)
	{
		cout << "  " << a[i] <<"  ";
	}
	cout << endl;
}
//Dao nguoc mang
void daoNguocMang(int a[], int n){
	for (int i = 0; i < n; i++)
	{
		int t = n - 1 - i;
		int temp = a[i];
		a[i] = a[t];
		temp = a[t];
	}
	cout << endl;
}
void tongChan(int a[], int n){
	int tongChan = 0;
	int tongLe = 0;
	for (int i = 0; i < n; i++)
	{
		if (a[i] % 2 == 0)
		{
			tongChan += a[i];
		}
		else if (a[i] % 2 != 0)
		{
			tongLe += a[i];
		}
	}
	cout << "Tong Phan Tu Chan La :" << tongChan << endl;
	cout << "Tong Phan Tu Le La :" << tongLe << endl;
	cout << endl;
}

Code của mình đây nè bạn :smiley:

1 Like

Hàm đảo ngược mảng của bạn sai rồi :slight_smile:, phải như thế này nè:

void daoNguocMang(int a[], int n)
{
    for (int i = 0; i < n / 2; i++)
    {
        int t = n - 1 - i;
        int temp = a[i];
        a[i] = a[t];
        a[t] = temp;
    }
    cout << endl;
}

Trong hàm main bạn gọi hàm daoNguocMang trước nha, sau đó mới tới xuatMang, cụ thể là:

//main
int main()
{
    int n;
    int a[MAX];
    do
    {
        cout << "Nhap n : ";
        cin >> n;
    }
    while (n < 0 || n > 100);
    //nhap mang
    nhapMang(a, n);
    //dao nguoc mang
    daoNguocMang(a, n);
    //xuat mang
    xuatMang(a, n);
    //tong chan tong le
    tongChan(a, n);
    //system("pause");
    return 0;
}

Good luck! :slight_smile:


PS: Bạn tìm hiểu cách post code vào markdown nha, để dễ nhìn hơn :wink:

2 Likes

Cảm ơn bạn nhé :dark_sunglasses:

1 Like

Bạn có thể dùng hàm swap để hoán đổi 2 số, nằm trong thư viện algorithm :slight_smile:

Hàm daoNguocMang có thể thế này:

void daoNguocMang(int a[], int n)
{
    for (int i = 0; i < n / 2; i++)
    {
        swap(a[i], a[n - 1 - i];
    }
    cout << endl;
}

Nhớ #include <algorithm> nha :wink:

2 Likes

cài hàm swap này mình chưa được học trên trường luôn :d . Cảm ơn bạn nhé . Mà bạn có thể nói rõ hơn về hàm swap được không !!! trước h mình chưa sử dụng hàm này bao giờ

1 Like

Hàm swap có cả trong thư viện utility nên bạn #include <utilily> cũng được :kissing_heart:


Hàm swap cần 2 tham số, cho nên khi sử dụng bạn cần truyền vào 2 tham số có kiểu dữ liệu bất kỳ (nhưng cả 2 phải cùng kiểu) :slight_smile:

Nó sẽ hoán đổi giá trị của 2 tham số được truyền. :smiley:
Ví dụ:

#include <algorithm>
#include <iostream>

int main()
{
    int a = 1, b = 2;

    swap(a, b);

    std::cout << "a = " << a << std::endl;
    std::cout << "b = " << b << std::endl;

    return 0;
}

Chương trình trên sẽ in ra a = 2b = 1 :wink:


Nó cũng có thể hoán đổi nguyên cả 1 mảng (chỉ số của 2 mảng phải giống nhau, tham số được truyền là tên của 2 mảng) :yum:

Ví dụ:

#include <algorithm>  

int main()
{
    int foo[4];                      // foo: ?  ?  ?  ?
    int bar[] = {10,20,30,40};       // bar: 10 20 30 40
    std::swap(foo,bar);    // foo: 10 20 30 40   bar: ?  ?  ?  ?

    return 0;
}

Ngoài ra còn có các hàm khác là biến thể của hàm swap như swap_rangesiter_swap :wink:


Good luck! :innocent:

5 Likes
  • Dòng 1: for (int32_t i = N - 2; i >= insert_position; i–)

Lúc này n=6 rồi bạn => i=4

  • Dòng 2:int32_t after_i = i + 1;

After i sẽ bằng 4 + 1 là 5…

  • Dòng 3: arr[after_i] = arr[i];

có nghĩa là `arr[5] = arr[4]

arr[5] chính là vị trí thứ 6 được thêm vào.

2 Likes
#define MAX_SIZE = 100;
//.........
int32_t arr[MAX_SIZE];

Ai giúp mình giải thích chỗ này với, tại sao sau 100 không phải số phần tử của mảng mà lại là N :slight_smile:

1 Like

MAX_SIZE gọi là số phần tử tối đa, hay là sức chứa của array, còn N là số phần tử thực của mảng
Cũng giống như xe, ví dụ sức chứa tối đa của xe khách là 45 chỗ nhưng không phải lúc nào cũng có 45 khách trên xe.

6 Likes

cho em hỏi cái tìm kiếm phần tử trong tên: em nhập ‘\n’ sao nó không tìm thấy ạ ?

1 Like

Lần sau hỏi ở mấy topic kiểu này thì nên quote lại đoạn code ở #1 hay post code bạn đã làm.

1 Like

vâng ạ ! em cảm ơn anh !

1 Like

Bài 1 của mình, mình mới học được 4 ngày thôi, mong mọi người cho ý kiến

#include <iostream>
using namespace std;
//dao nguoc mang
int main()
{
	int mang[] = { 2,6,5,7,9,1,3 };
	int N = sizeof(mang) / sizeof(mang[0]);
	cout << "mang co " << N << " phan tu:" << endl;
	for (int x = 0; x <= N - 1; x++)
	{
		cout << mang[x] << " ";
	}
	cout << endl;
	for (int x = 0; x <= N - 1; x++)
	{
		if (x <= N - 1 - x)
		{
			int y = mang[x];
			mang[x] = mang[N - 1 - x];
			mang[N - 1 - x] = y;
		}
	}
	cout << endl << "dao nguoc mang:" << endl;
	for (int x = 0; x <= N-1; x++)
	{
		cout << mang[x] << " ";
	}
	cout << endl;
	system("pause");
	return 0;
}
1 Like

Baì tập 2:

#include <iostream>
using namespace std;

 #define max 100
int main()
{	//khai bao
	cout << "chuong trinh so sanh tong cac so nguyen chan va tong cac so nguyen le !" << endl;
	cout << "chuong trinh chi nhan cac so nguyen lon hon 0 va be hon 100 !!" << endl;
	cout << "chuong trinh se ket thuc khi nhap so 0 !!!\n" << endl;
	int songuyen[max], x = 0;
	//nhap so nguyen
	cout << "nhap so nguyen: " << endl;
	for (x = 0; x <= max - 1; x++)
	{
		cin >> songuyen[x];
		if (songuyen[x] < 0 || songuyen[x]>=100)
		{
			do
			{
				cout << "chi dc nhap so nguyen co 2 chu so !!!" << endl;
				cout << "nhap lai so nguyen: "; cin >> songuyen[x];
			} while (songuyen[x] < 0 || songuyen[x]>=100);
		}
		if (songuyen[x] == 0)
		{
			break;
		}
	}
	system("cls");
	//thong ke
	int sochan[max], sole[max], a = 0, b = 0, tongchan = 0, tongle = 0;
	cout << "Ban da nhap " << x << " so nguyen:\n" << endl;
	for (int y = 0; y <= x - 1; y++)
	{
		cout << y + 1 << "\t" << songuyen[y];
		if (songuyen[y] % 2 == 0)
		{
			sochan[a] = songuyen[y];
			cout << "\tsochan\n" << endl;
			tongchan = sochan[a] + tongchan;
			a++;
		}
		else
		{
			sole[b] = songuyen[y];
			cout << "\tsole\n" << endl;
			tongle = sole[b] + tongle;
			b++;
		}
	}
	//tong
	cout << "tong cac so chan la: " << tongchan << endl;
	cout << "tong cac so le la: " << tongle << endl;
	//so sanh
	if (tongchan > tongle)
	{
		cout << "tong cac so chan lon hon tong cac so le." << endl;
	}
	else if (tongchan == tongle)
	{
		cout << "tong cac so chan bang tong cac so le." << endl;
	}
	else
	{
		cout << "tong cac so chan be hon tong cac so le." << endl;
	}
	system("pause");
	return 0;
}
1 Like
#include <iostream>
using namespace std;
#define max 100

int main()
{
	cout << "chuong trinh loc bo nhung so trung lap" << endl;
	cout << "chuong trinh chi nhan so nguyen co 1 chu so" << endl;
	cout << "chuong trinh se ket thuc khi nhap so 0\n" << endl;
	int songuyen[max], ktrung[max], x, a = 0;
	for (x = 0; x < max; x++)
	{
		cout << "nhap so nguyen " << x + 1 << ": "; cin >> songuyen[x];
		if (songuyen[x] < 0 || songuyen[x] >= 10)
		{
			do
			{
				cout << "chuong trinh chi nhan so nguyen co 1 chu so" << endl;
				cout << "nhap lai so nguyen " << x + 1 << ": "; cin >> songuyen[x];
			} while (songuyen[x] < 0 || songuyen[x] >= 10);
		}
		if (songuyen[x] == 0)
		{
			break;
		}
	}
	system("cls");
	//
	cout << "ban da nhap " << x << " so nguyen co 1 chu so:\n" << endl;
	for (int y = 0; y <= x - 1; y++)
	{
		bool check = true;
		cout << songuyen[y] << " ";
		for (int z = 0; z < y; z++)
		{
			if (songuyen[y] == songuyen[z])
			{
				check = false;
			}
		}
		if (check == true)
		{
			ktrung[a] = songuyen[y];
			a++;
		}
	}
	//
	cout << "\n\nloc so trung nhau:\n" << endl;
	for (x = 0; x < a; x++)
	{
		cout << ktrung[x] << " ";
	}
	cout << "\n\n";
	system("pause");
}
1 Like

fix lại cho chuẩn :slight_smile:

#include <iostream>

int main() {

	int arr[] = { 1, 3, 5, 7, 9, 2, 4, 8, 6 };
	int N = sizeof(arr) / sizeof(int);

	for (int i = 0; i < N / 2; i++)
	{
		int temp = arr[i];
		arr[i] = arr[(N - 1) - i];
		arr[(N - 1) - i] = temp;
	}

	for (int i = 0; i < N; i++)
		std::cout << arr[i] << " ";

	system("pause");
	return 0;
}
1 Like

Viết lại bài ba cho đẹp hơn :slight_smile:

#include <iostream>

int main(){

	int a[] = {4, 6, 2, 2, 1, 6, 9};
	int N = sizeof(a) / sizeof(int);

	for (int i = 0; i < N; ++i){
		for (int j = i + 1; j < N; ++j){

			if (a[j] == a[i]){
				for (int t = j + 1; t < N; ++t) {

					a[t - 1] = a[t];
				}

				--j;
				--N;
			}
		}
	}

	for (int i = 0; i < N; ++i)
		std::cout << a[i] << " ";
	
	system("pause");
	return 0;
} 
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?