[ create a new paste ] login | about

Link: http://codepad.org/EJMBlhTU    [ raw code | output | fork ]

C, pasted on May 6:
/* Bài 96 đề cương ôn tập trường CNTP : Viết chương trình con tính tổng các phần tử là số nguyên tố, có số lần xuất hiện ít nhất là 2 của mảng a[n], lưu ý mỗi phần tử chỉ tính tổng một lần.
	Ví dụ: cho mảng A như sau:
	2	-3	3	2	3	5	7	7	4	3
	Kết quả: trả về của chương trình con là: 2+3+7=12.
	Chú ý: Cho hàm kiểm tra số nguyên tố: int ktsnt(int n). 651.cpp 
*/

/* Ý Tưởng để xuất ra các giá trị phân biệt trong mảng :Ta sắp xếp mảng tăng dần (hay giảm dần),sau đó đem phần tử đầu tiên (sau khi đã thực hiện sắp xếp) làm gốc,ta in ra trước phần tử a[0].Sau đó cho vòng lặp i chạy từ 1 đến <n . Đặt điều kiện nếu a[i] khác a[i-1].Nếu thỏa => in ra a[i] và biến đếm ban đầu khởi tạo bằng 1 (tại vì đã lấy phần tử a[0] làm gốc) bây giờ tiếp tục cộng tăng thêm 1 đơn vị.Cứ thế lặp lại cho đến hết . */

/* Ý Tưởng để tính tần suất xuất hiện của các giá trị phân biệt : Ta khai báo một mảng b dùng để lưu các giá trị phân biệt vừa tìm được của mảng a ở câu trên vào.Khởi tạo biến dem1=0.Sau đó lần lượt đem so sánh từng phần tử của mảng b với mảng a .Nếu bằng nhau => biến dem1 tăng thêm 1 đơn vị. Cứ lặp lại liên tục cho đến phần tử cuối cùng của mảng b . */

/* Ý Tưởng để giải quyết bài toán : Sau khi ta đã thực hiện đc 2 bước trên thì chỉ cần đặt điều kiện những phần tử có số lần xuất hiện ít nhất là 2 lần và kiểm tra xem nó có phải là số nguyên tố hay không ? Cuối cùng đi tính yêu cầu của bài toán . */

// Các thư viện sử dụng trong chương trình .
/* 

Tác giả: Nguyễn Việt Nam Sơn
Trung tâm đào tạo tin học - Thiết kế phần mềm - Sơn Đẹp Trai: www.SonDepTrai.com

Nguồn source code này Tôi viết vào năm 2012 lúc mới bắt đầu học lập trình C/C++ nên một số cách sẽ không được tối ưu - Bạn chỉ nên dùng trên tinh thần tham khảo thôi nhé.
Mong giúp đỡ được Bạn trên con đường Học Lập Trình.
TẤT CẢ VÌ SỰ THÀNH CÔNG CỦA BẠN

*/
#include<stdio.h>
#include<conio.h>
#include<Windows.h>
#define MAX 100

// Hàm Nhập Mảng .
void NhapMang(int a[],int &n)
{
	quaylai:printf("\nNhap vao so luong phan tu cua mang:n=");
	scanf("%d",&n);
	if(n<1||n>MAX)
	{
		printf("\nSo ban nhap vao khong hop le!Xin vui long nhap lai!");
		goto quaylai;
	}
	for(int i=0;i<n;i++)
	{
		printf("\nNhap vao a[%d]=",i);
		scanf("%d",&a[i]);
	}
}

// Hàm Xuất Mảng .
void XuatMang(int a[],int n)
{
	for(int i=0;i<n;i++)
	{
		printf("%4d",a[i]);
	}
}

// Hàm Hoán Vị .
void HoanVi(int &x,int &y)
{
	int temp=x;
	x=y;
	y=temp;
}

// Hàm Sắp Xếp Mảng Tăng Dần Bằng Thuật Toán Interchange Sort .
void SapXepMangTangDan(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])
			{
				HoanVi(a[i],a[j]);
			}
		}
	}
}

// Hàm xử lý dữ liệu bài toán .
void XuLyDuLieu(int a[],int b[],int n)
{
	int dem=1,j=1,f;
	int tong=0;
	printf("\nCac Gia Tri Phan Biet Trong Mang La:");
	printf("%4d",a[0]); // In ra trước phần tử gốc a[0] .
	for(int i=1;i<n;i++)
	{
		b[0]=a[0]; // Gán phần tử đầu tiên của mảng b là phần tử gốc giá trị phân biệt đầu tiên .
		if(a[i]!=a[i-1])
		{
			printf("%4d",a[i]); // In ra các giá trị phân biệt trong mảng a .
			dem++; // Đếm số lượng các giá trị phân biệt .
			b[j++]=a[i]; // Đưa các giá trị phân biệt trong mảng a vào mảng b .
		}
	}
	printf("\n");
	printf("\n");
	printf("\nCac phan tu la so nguyen to va co so lan xuat hien it nhat la 2 lan la:");
	for(j=0;j<dem;j++)
	{
		int dem1=0; // Khởi tạo biến dem1=0 .
		for(int i=0;i<n;i++)
		{
			if(b[j]==a[i])
			{
				dem1++; 
			}
		}
		// Liệt kê ra những phần tử phân biệt trong mảng và có số lần xuất hiện >=2 lần .
		if(dem1>=2)
		{
			// Kiểm tra số nguyên tố .
			f=1; // Khởi tạo giá trị biến đầu tiên là 1 tượng trưng cho giá trị đúng (toán rời rạc ^^) .
			if(b[j]<2)
			{
				f=0; // Những số nguyên tố là những số >=2 => những số <2 ko phải là nguyên tố cho nên ở đây ta khởi tạo điều kiện là 0 tức ngầm hiểu là sai .
			}
			for(int k=2;k<=b[j]/2;k++)
			{
				if(b[j]%k==0)
				{
					f=0; // Nếu chia hết => không phải là số nguyên tố => khởi tạo điều kiện là 0 .
				}
			}
			if(f==1) // gọi lại điều kiện đúng . Lúc này các số trong mảng là các số nguyên tố có số lần xuất hiện >=2 lần . => thực hiện công việc tính toán mà đề bài ra .
			{
				printf("%4d",b[j]); // Liệt kê ra các phần tử thỏa điều kiện .
				tong+=b[j]; // Tính tổng các phần tử đó .
			}
		}
	}
	printf("\n");
	printf("\nTong cac phan tu thoa la:%d",tong);
}

// Hàm Chính .
void main()
{
	int a[MAX],b[MAX],n,tieptuc;
	quaylai:NhapMang(a,n);
	printf("\n>>>>>>>>>>>>Mang Vua Nhap La:<<<<<<<<<<<<<<<<<<<\n");
	XuatMang(a,n);
	printf("\n");
	SapXepMangTangDan(a,n);
	XuLyDuLieu(a,b,n);
	printf("\n");
	printf("\nBan co muon tiep tuc thuc hien chuong trinh hay khong ? Neu co bam phim C,nguoc lai bam bat ky 1 phim nao khac de ket thuc!");
	tieptuc=getch();
	if(tieptuc=='c'||tieptuc=='C')
	{
		system("cls"); 
		goto quaylai;
	}
}


Output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Line 17: error: conio.h: No such file or directory
Line 19: error: Windows.h: No such file or directory
Line 31: error: expected ';', ',' or ')' before '&' token
In function 'XuatMang':
Line 50: error: 'for' loop initial declaration used outside C99 mode
t.c: At top level:
Line 57: error: expected ';', ',' or ')' before '&' token
In function 'SapXepMangTangDan':
Line 67: error: 'for' loop initial declaration used outside C99 mode
Line 69: error: 'for' loop initial declaration used outside C99 mode
In function 'XuLyDuLieu':
Line 86: error: 'for' loop initial declaration used outside C99 mode
Line 102: error: 'for' loop initial declaration used outside C99 mode
Line 118: error: 'for' loop initial declaration used outside C99 mode
In function 'main':
Line 138: warning: return type of 'main' is not 'int'


Create a new paste based on this one


Comments: