30/09/2018, 16:02

Tìm giúp lỗi bài toán tìm kiếm

Lab 13: Array manipulation, Sorting algorithm

Write a program with the following requirements:

Accepts a list of integer then displays the list in ascending order (lab 12).
Enter an integer an insert it in the right order of the list (the list is still in sorted order).
The program should have the interface as following:

Sorting program
Enter number of integer (n<20) n =
Item 1, i[0]=
Item 2, i[1]=

Item n, i[n-1]=
Sorted list:

Enter an integer m=
New list:

Press any key to continue.

#include <stdio.h>
#include <conio.h>
#include<string.h>

int main()
{
	while(1)
	{
		int n, i,j,b,m;
		int a[21];
		//int l = strlen(a);
		printf("Nhap so phan tu n cua day: ");
		scanf("%d",&n);
		for (i=1;i<=n;i++)
		{
	    	printf("Phan tu thu %d ",i);
			scanf("%d",&a[i]);
		}
		printf("Day duoc sap xep:
");
		for (i=1;i<=n;i++)	
			for (i=1;i<=n;i++) 
				for(j=1;j<=n-1;j++) if (a[j+1]<a[j])
					{
						b=a[j];
						a[j]=a[j+1];
						a[j+1]=b;
					}		
		for(i=1;i<=n;i++) 
			printf("%d
",a[i]);
		
		printf("Nhap phan tu m bo sung: ");
		scanf("%d",a[i+1]);
		printf("Day duoc sap xep lai:
");
		for (i=1;i<=n+1;i++)	
			for (i=1;i<=n+1;i++) 
				for(j=1;j<=n-1;j++) if (a[j+1]<a[j])
					{
						b=a[j];
						a[j]=a[j+1];
						a[j+1]=b;
					}		
		for(i=1;i<=n+1;i++) 
			printf("%d
",a[i]);
			
		printf("
Press any key to continue...
");
		getch();
	}
}
Phạm Khắc Độ viết 18:15 ngày 30/09/2018

@Is2IT vào giúp e với <3

Đỗ Trung Quân viết 18:08 ngày 30/09/2018

@Is2IT vào giúp e với <3

hihi, anh đi tắm =))))))))))

Đỗ Trung Quân viết 18:16 ngày 30/09/2018

Em nói rõ hơn em cần sửa chỗ nào được không. hihi

Phạm Khắc Độ viết 18:15 ngày 30/09/2018

làm sao cho nó đúng là được ạ
cụ thể là từ phần nhập m trở đi

Đỗ Trung Quân viết 18:13 ngày 30/09/2018
  • Chèn phân tử vào vị trí K bất kì có 2 cách:

Cách 1: Tăng phần tử của mảng
So sánh rồi dời các phần tử lớn hơn về sau 1 ô.
Thêm phần tử cần chèn vào ô trống.

Cách 2: Tăng số phần tử của mảng.
Thêm phần tử cần chèn vào cuối mảng.
Lần lượt so sánh với các phần tử nằm kề nó, nếu phần tử cần chèn nhỏ hơn thì hoán đổi vị trí của chúng.
Đến phần tử nhỏ hơn phần tử cần chèn thì dừng lại.

Đỗ Trung Quân viết 18:18 ngày 30/09/2018

Bạn @ndth hôm qua có làm 1 bài về phần này đúng không nhỉ. Vào chỉ cho bạn @dopkse03824 nào

Phạm Hoàng Tuấn viết 18:07 ngày 30/09/2018

Bạn có thể tham khảo bài mình, mình có 1 số góp y, khi dùng các vòng lặp bạn nên dùng dấu {} dù trong đó có 1 câu lệnh,có chỗ bạn dùng 2 vòng lặp liên tiếp giống nhau???..

    // Poll.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include "iostream"
    
     void Sort(int *a, int n);
     void Swap(int &a, int &b);
     void PrintArray(int *a, int n);
     void Insert(int *a, int &n, int m);
    int _tmain(int argc, _TCHAR* argv[])
    {
    	
    	int n, *a,m;
    	a = new int(20); //Khai bao so luong phan tu cho n.Vi n luon nho hoon 20 nen khai bao nhu vay
    	printf_s("Sorting program\n");
    	printf_s("Enter number of integer (n<20) n =");
    	scanf_s("%d", &n);
    	if (n < 20)
    	{
    		
    		for (int i = 0; i < n; i++)
    		{
    			printf_s("item %d, i[%d] =", i + 1, i);
    			scanf_s("%d", a + i);
    		}
    
    		printf_s("Sorted list:\n");
    		Sort(a, n);
    		PrintArray(a,n);
    		printf_s("Enter an integer m=");
    		scanf_s("%d", &m);
    		Insert(a, n, m);
    		printf_s("New list::\n");
    		PrintArray(a, n);
    	}
    	
    	system("pause");
    }
    
    
    void Sort(int *a, int n)
    {
    	for (int i = 0; i < n - 1; i++)
    	{
    		for (int j = i + 1; j < n; j++)
    		{
    			if (a[i]>a[j])
    			{
    				Swap(a[i], a[j]);
    			}
    		}
    	}
    }
    void Swap(int &a, int &b)
    {
    	int temp = a;
    	a = b;
    	b = temp;
    }
    void PrintArray(int *a, int n)
    {
    	for (int i = 0; i < n; i++)
    	{
    		printf_s("%d\t", a[i]);
    	}
    	printf_s("\n");
    }
    void Insert(int *a, int &n, int m)
    {
    	int i = 0;
    	
    	while (a[i]<m && i<n)
    	{
    		i++;
    	}
    
    	n++;
    
    	for (int j = n-1; j >i; j--)
    	{
    		a[j ] = a[j-1];
    	}
    	a[i] = m;
    	

}

Đỗ Trung Quân viết 18:08 ngày 30/09/2018

Bạn ý muốn sửa code của bạn ý nhé.

Phạm Hoàng Tuấn viết 18:06 ngày 30/09/2018

Ẹc @dopkse03824 nên lưu ý 1 số chỗ như mảng bắt đầu từ vị trí 0->n-1.Bạn test kỹ lại nhé.

    #include <stdio.h>
    #include <conio.h>
    #include<string.h>
    #include "stdafx.h"
    #include "iostream"
    
    int main()
    {
    
    	int n, i, j, m;
    	int a[20]; //n<20 ->n <= 19 chỉ cần khai báo a[20] là đủ
    	//int l = strlen(a);
    	printf("Nhap so phan tu n cua day: ");
    	scanf_s("%d", &n);
    
    	for (i = 0; i < n; i++) //phân tu dau tien cua mang bat dau tu 0
    	{
    		printf_s("Phan tu thu %d :", i + 1);
    		scanf_s("%d", &a[i]);
    	}
    	printf_s("Day duoc sap xep:\n");
    	for (i = 0; i < n - 1; i++)
    	{
    		for (j = i + 1; j < n; j++)
    		{
    			if (a[i] > a[j])
    			{
    				int b = a[i]; // biến b chỉ dùng ở đây, nên ta nên khai báo biến cục bộ
    				a[i] = a[j];
    				a[j] = b;
    			}
    
    		}
    	}
    
    	for (i = 0; i < n; i++)
    		printf_s("%d\n", a[i]);
    
    	printf_s("Nhap phan tu m bo sung: ");
    	scanf_s("%d", &a[n]);
    	n++; //tăng số lượng phần tử của mảng
    	printf_s("Day duoc sap xep lai:\n");
    	for (i = 0; i < n - 1; i++) //Chỗ này bị lặp lại ở trên. Sao ta k tách riêng ra 1 hàm ????
    	{
    		for (j = i + 1; j <= n - 1; j++)
    		{
    			if (a[i] > a[j])
    			{
    				int b = a[i]; // biến b chỉ dùng ở đây, nên ta nên khai báo biến cục bộ
    				a[i] = a[j];
    				a[j] = b;
    			}
    
    		}
    	}
    
    	for (i = 0; i < n; i++)
    		printf_s("%d\n", a[i]);
    
    	printf_s("\nPress any key to continue...\n");
    	system("pause");
    
    }
Bài liên quan
0