Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Anh chị tìm lỗi dùm em với!!!

  1. #1
    Ngày gia nhập
    12 2011
    Bài viết
    1

    Mặc định Anh chị tìm lỗi dùm em với!!!

    Anh chị nào giúp em với! đề là nhập 1 mảng 1 chiều co n nguyên thừa số (điều kiện) và số nguyên x tùy ý. tìm các phần tử của mảng là ước của x và dồn chúng vào cuối mảng.
    chương trình em viết khi chạy thi dồn được các phần tử không phải ước lên đầu rồi, nhưng các ước của x khi dồn về dưới thì bị biến dạng tùm lum. Em tìm hoài ma không khắc phục được. Ai giúp em với (bắt buộc dùng mảng).
    Em cảm ơn nhiều

    Code:
    #include <stdio.h>
    #include <conio.h>
    void nhapsonguyenduong (int &n, int &X)
    {
    	do
    	{
    		printf ("\nNhap so nguyen duong n: ");
    		scanf ("%d", &n);
    	}while (n < 1 || n > 10000);
    	printf ("\nNhap so nguyen X: ");
    	scanf ("%d", &X);
    }
    void nhapmang1chieu ( int Mang[], int n)
    {
    	for (int i = 0; i < n ; i++)
    	{
    		printf ("\n nhap phan tu: MangA[%d] ", i);
    		scanf ("%d", &Mang[i]);
    	}
    }
    void sapxep(int Mang[], int X, int n)
    {
    	int h, k = n, p;
    	printf ("\n\nDay sau khi don cac phan tu la uoc cua %d ve cuoi day se la:\n\n", X);
    for (int j = 0; j < k ; j++)
    	{
    		if (X % Mang[j] == 0)
    		{
    			h = j;
    			Mang[j] = p;
    			for (h ; h < k - 1 ; h++ )
    			{
    				Mang[h] = Mang[h + 1];
    			}
    		Mang[k-1] = p;
    		}
    	}
    	for (int i = 0; i < n; i++)
    	{
    		printf ("Phan tu thu %d la: %d \n", i, Mang[i]);
    	}
    }
    void main ()
    {
    	int n, X, MangA[100];
    tieptuc: nhapsonguyenduong ( n, X);
    	nhapmang1chieu (MangA, n);
    	sapxep(MangA, X, n);
    	printf ("\n\nNhan ESC de thoat hoac phim bat ki de tiep tuc!!!\n");
    	if(getch()!= 27 ) goto tieptuc;
    }

  2. #2
    Ngày gia nhập
    03 2009
    Bài viết
    22

    Code:
    void sapxep(int Mang[], int X, int n)
    {
    	int h, k = n, p;
    	printf ("\n\nDay sau khi don cac phan tu la uoc cua %d ve cuoi day se la:\n\n", X);
            for (int j = 0; j < k ; j++)
    	{
    		if (X % Mang[j] == 0)
    		{
    			h = j;
    			Mang[j] = p;    //sai cho nay
    			for (h ; h < k - 1 ; h++ )
    			{
    				Mang[h] = Mang[h + 1];
    			}
    		Mang[k-1] = p;
    		}
    	}
    	for (int i = 0; i < n; i++)
    	{
    		printf ("Phan tu thu %d la: %d \n", i, Mang[i]);
    	}
    }
    Bạn khai báo biến p nhưng chưa gán giá trị cho nó đã gán Mang[j] = p nên mới bị như vậy

  3. #3
    Ngày gia nhập
    12 2011
    Bài viết
    1

    em cảm ơn anh. em làm được rồi nhưng thứ tự các ước của X khi dồn về cưối mảng lại bị đảo ngược! anh hay ai có cách gì để thứ tự không bị đảo ngược không ạh? em cảm ơn nhiều.
    Code:
    void sapxep(int Mang[], int X, int n)
    {
    	int h, k = n, p;
    	printf ("\n\nDay sau khi don cac phan tu la uoc cua %d ve cuoi day se la:\n\n", X);
    	for (int j = 0; j < k ; j++)
    	{
    		if (X % Mang[j] == 0)
    		{
    			h = j;
    			p = Mang[j];
    			for (h ; h < k - 1 ; h++ )
    			{
    				Mang[h] = Mang[h + 1];
    			}
    			Mang[k-1] = p;
    			j--;
    			k--;
    		}
    	}
    	for (int i = 0; i < n; i++)
    	{
    		printf ("Phan tu thu %d la: %d \n", i, Mang[i]);
    	}
    }
    Attached Thumbnails Attached Thumbnails vidu.png  

  4. #4
    Ngày gia nhập
    03 2009
    Bài viết
    22

    Theo như code của bạn thì j luôn là 0 và k giảm, để đẩy các ước của x về cuối mà không làm xáo trộn vị trị bạn cho vòng lặp hoán đổi vị trí mảng chạy từ h đến n chứ không phải là k vì nếu chạy đến k thì những phần tử được xếp trước đó không còn nằm trong giới hạn của k nữa

    Code:
    void sapxep(int Mang[], int X, int n)
    {
    	int h, k = n, p;
    	printf ("\n\nDay sau khi don cac phan tu la uoc cua %d ve cuoi day se la:\n\n", X);
    	for (int j = 0; j < k ; j++)
    	{
    		if (X % Mang[j] == 0)
    		{
    			h = j;
    			p = Mang[j];
    			for (h ; h < n - 1 ; h++ )
    			{
    				Mang[h] = Mang[h + 1];
    			}
    			Mang[n-1] = p;
    			j--;
    			k--;
    		}
    	}
    	for (int i = 0; i < n; i++)
    	{
    		printf ("Phan tu thu %d la: %d \n", i, Mang[i]);
    	}
    }

  5. #5
    Ngày gia nhập
    12 2011
    Bài viết
    1

    em cảm ơn anh nhiều. em làm được rồi!!!

Các đề tài tương tự

  1. Lập trình C++ coi dùm minh bài code sai ở chỗ nào và sữa dùm mình với
    Gửi bởi hchuy94 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 02-09-2013, 10:16 AM
  2. Lập trình C tìm lỗi dùm em với
    Gửi bởi dammelaptrinh trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 20-12-2011, 12:23 AM
  3. Nhớ mấy anh đánh giá dùm CV của em
    Gửi bởi tomahutbui trong diễn đàn Thắc mắc chung
    Trả lời: 6
    Bài viết cuối: 10-06-2011, 06:01 PM
  4. Mình mới vừa học lập trình ,xin fix lỗi dùm mình và cho mình hỏi 1 vải điều .
    Gửi bởi ANHCHANG60GIAY trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 30-04-2010, 11:40 AM
  5. xem dùm bài đệ quy t=x^n??
    Gửi bởi #include# trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 10-04-2008, 11:41 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn