Announcement

Collapse
No announcement yet.

Cách chèn 1 phần tử vào mảng động

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [Ansi C] Cách chèn 1 phần tử vào mảng động

    như tiêu đề ạ
    em có 1 bài tập, yêu cầu đề bài là:
    _Nhập mảng, xuất mảng vừa nhập
    _Sắp xếp mảng tăng dần, xuất mảng vừa sắp xếp
    _Xoá 1 phần tử và hiển thị mảng
    _Chèn 1 phần tử sao cho mảng vẫn tăng dần, xuất mảng đó

    em đã viết 1 bài như sau:

    Code:
    void nhapmang(int *&a, int n);
    void xuatmang(int *&a, int n);
    void hoanvi(int &a, int &b);
    void xoa(int *&a, int &n, int i);
    void chen(int *&a, int &n, int y, int i);
    
    void main()
    {
    	int *a, n, x, y;
    	printf("Nhap so luong phan tu: ");
    	scanf_s("%d", &n);
    	a = new int(n);
    	nhapmang(a, n);
    	xuatmang(a, n);
    	for (int i = 0; i < n-1; i++)
    		for (int j = i + 1; j < n; j++)
    			if (a[i]>a[j])
    				hoanvi(a[i], a[j]);
    	printf("Mang sau khi sap xep tang:\n");
    	xuatmang(a, n);
    	printf("Nhap phan tu muon xoa: ");
    	scanf_s("%d", &x);
    	int kt = 0;
    	for (int i = 0; i < n; i++)
    		if (a[i] == x)
    		{
    			xoa(a, n, i);
    			kt = 1;
    		}
    	if (kt == 0)
    		printf("Phan tu ban nhap khong co trong mang\n");
    	else
    	{
    		printf("Mang sau khi xoa:\n");
    		xuatmang(a, n);
    	}
    	printf("Nhap phan tu muon chen: ");
    	scanf_s("%d", &y);
    	for (int i = 0; i < n; i++)
    		if (a[i] > y)
    			chen(a, n, y, i);
    	printf("Mang sau khi chen:\n");
    	xuatmang(a, n);
    }
    void nhapmang(int *&a, int n)
    {
    	for (int i = 0; i < n; i++)
    	{
    		printf("Nhap phan tu thu %d: ", i + 1);
    		scanf_s("%d", &a[i]);
    	}
    }
    void xuatmang(int *&a, int n)
    {
    	for (int i = 0; i < n; i++)
    		printf("%-2d", a[i]);
    	printf("\n");
    }
    void hoanvi(int &a, int &b)
    {
    	int tam = a;
    	a = b;
    	b = tam;
    }
    void xoa(int *&a, int &n, int i)
    {
    	for (int j = i; j < n; j++)
    		a[j] = a[j + 1];
    	n--;
    }
    void chen(int *&a, int &n, int y, int i)
    {
    	for (int j = n; j > i; j--)
    		a[j] = a[j - 1];
    	a[i] = y;
    	n++;
    }
    máy không báo lỗi nhưng khi chạy tới đoạn chèn 1 số thì bị máy báo "... stop working"
    sau khi debug, mày mò cả buổi sáng, e đã phát hiện là khi khai báo mảng động thì số phần tử đã sử dụng của mảng được khởi tạo là tối đa rồi, nên không thể chèn theo cách thông thường được (tăng số phần tử lên và dịch các phần tử sang phải 1 ô)
    vậy cho em hỏi có cách nào để chèn 1 phần tử vào mảng động không?
    em sử dụng Visual Studio 2013 Professional.
    Last edited by 13520747; 30-11-2013, 14:28.
    Đừng bán rẻ mình...
    Mà phải BÁN ĐÚNG GIÁ!!!

  • #2
    Originally posted by 13520747 View Post
    như tiêu đề ạ
    em có 1 bài tập, yêu cầu đề bài là:
    _Nhập mảng, xuất mảng vừa nhập
    _Sắp xếp mảng tăng dần, xuất mảng vừa sắp xếp
    _Xoá 1 phần tử và hiển thị mảng
    _Chèn 1 phần tử sao cho mảng vẫn tăng dần, xuất mảng đó

    em đã viết 1 bài như sau:

    Code:
    void nhapmang(int *&a, int n);
    void xuatmang(int *&a, int n);
    void hoanvi(int &a, int &b);
    void xoa(int *&a, int &n, int i);
    void chen(int *&a, int &n, int y, int i);
    
    void main()
    {
    	int *a, n, x, y;
    	printf("Nhap so luong phan tu: ");
    	scanf_s("%d", &n);
    	a = new int(n);
    	nhapmang(a, n);
    	xuatmang(a, n);
    	for (int i = 0; i < n-1; i++)
    		for (int j = i + 1; j < n; j++)
    			if (a[i]>a[j])
    				hoanvi(a[i], a[j]);
    	printf("Mang sau khi sap xep tang:\n");
    	xuatmang(a, n);
    	printf("Nhap phan tu muon xoa: ");
    	scanf_s("%d", &x);
    	int kt = 0;
    	for (int i = 0; i < n; i++)
    		if (a[i] == x)
    		{
    			xoa(a, n, i);
    			kt = 1;
    		}
    	if (kt == 0)
    		printf("Phan tu ban nhap khong co trong mang\n");
    	else
    	{
    		printf("Mang sau khi xoa:\n");
    		xuatmang(a, n);
    	}
    	printf("Nhap phan tu muon chen: ");
    	scanf_s("%d", &y);
    	for (int i = 0; i < n; i++)
    		if (a[i] > y)
    			chen(a, n, y, i);
    	printf("Mang sau khi chen:\n");
    	xuatmang(a, n);
    }
    void nhapmang(int *&a, int n)
    {
    	for (int i = 0; i < n; i++)
    	{
    		printf("Nhap phan tu thu %d: ", i + 1);
    		scanf_s("%d", &a[i]);
    	}
    }
    void xuatmang(int *&a, int n)
    {
    	for (int i = 0; i < n; i++)
    		printf("%-2d", a[i]);
    	printf("\n");
    }
    void hoanvi(int &a, int &b)
    {
    	int tam = a;
    	a = b;
    	b = tam;
    }
    void xoa(int *&a, int &n, int i)
    {
    	for (int j = i; j < n; j++)
    		a[j] = a[j + 1];
    	n--;
    }
    void chen(int *&a, int &n, int y, int i)
    {
    	for (int j = n; j > i; j--)
    		a[j] = a[j - 1];
    	a[i] = y;
    	n++;
    }
    máy không báo lỗi nhưng khi chạy tới đoạn chèn 1 số thì bị máy báo "... stop working"
    sau khi debug, mày mò cả buổi sáng, e đã phát hiện là khi khai báo mảng động thì số phần tử đã sử dụng của mảng được khởi tạo là tối đa rồi, nên không thể chèn theo cách thông thường được (tăng số phần tử lên và dịch các phần tử sang phải 1 ô)
    vậy cho em hỏi có cách nào để chèn 1 phần tử vào mảng động không?
    em sử dụng Visual Studio 2013 Professional.
    Cấp lại cái mảng khác.

    Comment


    • #3
      Originally posted by 11520563
      Anh có thắc mắc: Ansi C sao lại có new ?
      trên lớp e đang học về Visual C, phần mảng động này cô dạy lý thuyết của e chỉ nói sơ qua chứ không hướng dẫn cụ thể và rõ ràng
      khi tạo box thì e chỉ thấy cái Ansi C này là có liên quan nhất
      còn cái lỗi a đưa ra thì e công nhận, nhưng vì e chưa chạy dc đoạn code này nên chưa phát hiện ra nó ạ :boss:
      với lại a chưa trả lời câu hỏi của e: có cách nào thêm 1 phần tử vào mảng động không ạ??
      Đừng bán rẻ mình...
      Mà phải BÁN ĐÚNG GIÁ!!!

      Comment


      • #4
        Cấp lại cái mảng khác.
        có cách nào khác không ạ?
        trưa nay e cũng đã nghĩ đến việc cấp lại 1 mảng khác
        nhưng e thấy như vậy thì tốn bộ nhớ quá
        theo e được biết thì khai báo động có ý nghĩa là tiết kiệm bộ nhớ mà :funny:
        Đừng bán rẻ mình...
        Mà phải BÁN ĐÚNG GIÁ!!!

        Comment


        • #5
          Originally posted by 13520747 View Post
          có cách nào khác không ạ?
          trưa nay e cũng đã nghĩ đến việc cấp lại 1 mảng khác
          nhưng e thấy như vậy thì tốn bộ nhớ quá
          theo e được biết thì khai báo động có ý nghĩa là tiết kiệm bộ nhớ mà :funny:
          Sợ tốn thì xóa cái mảng cũ đi.

          Comment


          • #6
            Sợ tốn thì xóa cái mảng cũ đi.
            vấn đề ở đây không phải là "sợ", mà là "cảm thấy" :3
            a có thể hướng dẫn e cách xoá 1 mảng ko ạ?
            Đừng bán rẻ mình...
            Mà phải BÁN ĐÚNG GIÁ!!!

            Comment


            • #7
              Originally posted by 11520563
              Thử thay code kia xem chạy được không?
              hình như được rồi anh ạ :">
              cơ mà e vẫn chưa hiểu lắm
              e nghĩ mảng này chỉ có tối đa là n phần tử
              nếu như nhập 1 số không có trong mảng thì mảng sẽ không xoá, vẫn còn n phần tử
              vậy sao e lại có thể tăng thêm 1 phần tử được
              Đừng bán rẻ mình...
              Mà phải BÁN ĐÚNG GIÁ!!!

              Comment


              • #8
                Originally posted by 13520747 View Post
                vấn đề ở đây không phải là "sợ", mà là "cảm thấy" :3
                a có thể hướng dẫn e cách xoá 1 mảng ko ạ?
                :|
                Đã học cấp phát động thì phải biết giải phóng vùng nhớ. Nếu không biết cách giải phóng vùng nhớ đừng dùng cấp phát động.

                Em nên đọc tài liệu cho kỹ lưỡng hơn hoặc hỏi lại giáo viên

                Comment


                • #9
                  :|
                  Đã học cấp phát động thì phải biết giải phóng vùng nhớ. Nếu không biết cách giải phóng vùng nhớ đừng dùng cấp phát động.

                  Em nên đọc tài liệu cho kỹ lưỡng hơn hoặc hỏi lại giáo viên
                  dạ thực sự là cái này giáo viên chưa có dạy
                  em chỉ muốn biết thêm thôi :3
                  mà thôi, vấn đề của e đã được giải quyết
                  dù sao cũng cảm ơn a ^^
                  Đừng bán rẻ mình...
                  Mà phải BÁN ĐÚNG GIÁ!!!

                  Comment


                  • #10
                    Originally posted by 11520563
                    Nếu thật sự chưa hiểu lắm thì có thể anh sẽ hỗ trợ em 1 buổi tại trường
                    e sợ phiền a thôi ^^
                    khi nào có dịp cần nhất định e sẽ tìm đến a
                    Đừng bán rẻ mình...
                    Mà phải BÁN ĐÚNG GIÁ!!!

                    Comment


                    • #11
                      Originally posted by 11520563
                      Support các bạn khác cũng là 1 các học mà
                      Khi nào cần thì liên hệ anh: 01693862360
                      Hoặc fb: https://www.facebook.com/xxvicon
                      A sẽ support nhiệt tình nhất là phần debug
                      dạ cảm ơn a ^^
                      nhân tiện nói về debug
                      ko hiểu sao lâu lâu e debug không được :3
                      khi chạy tới câu lệnh "printf" thì máy tự động mở 1 loạt trang làm e hoảng :3
                      lâu lâu thì lại chạy được
                      Đừng bán rẻ mình...
                      Mà phải BÁN ĐÚNG GIÁ!!!

                      Comment

                      LHQC

                      Collapse
                      Working...
                      X