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

tutorial
basic
c++

(‏) #22

chèn vô giũa dòng 17 với 18 index_comP--;


(Thang Tran) #23

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


(Huy Tùng) #24

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;
	

}

(Tiến Ability Ete) #25

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;
}

(Phạm Thiện) #26
#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:


(Nguyễn Tấn Khoa) #27

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:


(Phạm Thiện) #28

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


(Nguyễn Tấn Khoa) #29

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:


(Phạm Thiện) #30

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ờ


(Nguyễn Tấn Khoa) #31

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:


(Do Ngoc Anh) #32
  • 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.


(Do Ngoc Anh) #33
#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:


(Nguyễn Xuân Phúc) #34

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.


(Nguyen Kien) #35

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


(rogp10) #37

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.


(Nguyen Kien) #38

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


(Rùa Smilé) #39

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;
}

(Rùa Smilé) #40

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;
}

(Rùa Smilé) #41
#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");
}

(Nguyen Kien) #42

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;
}

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