[ create a new paste ] login | about

Link: http://codepad.org/RdJD9mPI    [ raw code | output | fork | 1 comment ]

C, pasted on May 5:
/*Bài 166/63/SBT Thầy NTTMK:Cho mảng một chiều các số nguyên.Hãy viết hàm tìm giá trị đầu tiên trong mảng có dạng 2^k.Nếu mảng không tồn tại giá trị có dạng 2^k thì hàm sẽ trả về giá trị 0. 112.cpp */

/* Ở đây ngoài tìm ra giá trị đầu tiên thỏa mãn chương trình còn cho phép liệt kê ra tất cả các giá trị thỏa mãn và đếm số lượng các giá trị thỏa mãn đó. */

/* Ý tưởng:Đối với tất cả những dạng bài giống như thế này thì ta có 1 cách để giải quyết vấn đề.Ví dụ đối với bài này ta đi tính log cơ số 2 của (a[i]) rồi cho kết quả so với 1 hàm làm tròn số (floor hay ceil),nếu 2 giá trị bằng nhau thì đó chính là số thỏa mãn bởi vì chỉ khi kết quả ra là số nguyên (tức là nó có dạng 2^k) thì làm tròn nó vẫn là số nguyên,còn nếu kết quả ra giá trị lẻ (tức là nó không có dạng 2^k) thì khi làm tròn nó sẽ biến thành giá trị nguyên và lúc này 2 giá trị ban đầu và sau khi làm tròn sẽ không bằng nhau nữa =>không thỏa.Dĩ nhiên trong thư viện toán không có hàm logarit của tất cả các cơ số cho nên ta phải chế lại tùy theo yêu cầu của bài bằng phép chia 2 logarit cho nhau . */
/* 

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<math.h>
#include<conio.h>
#define MAX 100
#define bool

void nhapmang(int a[MAX],int &n)
{
	do{
	printf("Nhap vao so phan tu cua mang:n=");
	scanf("%d",&n);
	if(n<1||n>MAX)
	printf("So ban nhap vao khong hop le!Xin ban vui long nhap lai!\n");
	else
	break;
	}while(n<1||n>MAX);
	for(int i=0;i<n;i++)
	{
		printf("Nhap vao a[%d]=",i);
		scanf("%d",&a[i]);
	}
}

void xuatmang(int a[MAX],int n)
{
	printf("\n>>>>>>>>>>>>>>>MANG VUA NHAP LA:<<<<<<<<<<<<<<<<<<<\n");
	for(int i=0;i<n;i++)
	{
		printf("%4d",a[i]);
	}
	printf("\n");
}

void lietketatca(int a[MAX],int n)
{
    int Co,dem=0;
	bool Co=false;
	printf("\nCac gia tri thoa man yeu cau de bai la:");
    for(int i=0;i<n;i++)
    {
        if(a[i]>0)
        {
			float log(float(x)); //Khai báo trước hàm log thì mới dùng được và ta gán đại cho nó 1 biến bất kỳ.ví dụ :biến x. Điều này khác với C (chuẩn) không cần khai báo.
            float c= log(a[i])/log (2);
            if(c==floor(c))
            {
				printf("%4d",a[i]);
				dem++;
				Co=true;
            }
        }
    }
    if(Co==true)
    printf("\nTrong mang co %d gia tri thoa man yeu cau de bai",dem);
	else
	printf("\n0");
}

void giatridautien(int a[MAX],int n)
{
	int i,Co;
	bool Co=false;
	for(i=0;i<n;i++)
    {
        if(a[i]>0)
        {
			float log(float(x)); //Khai báo trước hàm log thì mới dùng được và ta gán đại cho nó 1 biến bất kỳ.ví dụ :biến x. Điều này khác với C (chuẩn) không cần khai báo.
            float c= log(a[i])/log (2);
            if(c==floor(c))
            {
				Co=true;
				break;
            }
        }
    }
    if(Co==true)
    printf("\nGia tri dau tien thoa dieu kien la:%d",a[i]);
}

void main()
{
	int a[MAX],n,NAMSON;
	quaylai:nhapmang(a,n);
	xuatmang(a,n);
	lietketatca(a,n);
	giatridautien(a,n);
	printf("\nBan co muon tiep tuc chay chuong trinh khong ? Neu co bam phim C,nguoc lai bam bat ky phim nao khac de ket thuc\n");
	NAMSON=getch();
	if(NAMSON=='c'||NAMSON=='C')
		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 22: error: expected ';', ',' or ')' before '&' token
In function 'xuatmang':
Line 42: error: 'for' loop initial declaration used outside C99 mode
In function 'lietketatca':
Line 52: error: 'false' undeclared (first use in this function)
Line 52: error: (Each undeclared identifier is reported only once
Line 52: error: for each function it appears in.)
Line 54: error: 'for' loop initial declaration used outside C99 mode
Line 58: error: conflicting types for 'log'
Line 64: error: 'true' undeclared (first use in this function)
In function 'giatridautien':
Line 77: error: 'false' undeclared (first use in this function)
Line 86: error: 'true' undeclared (first use in this function)
In function 'main':
Line 96: warning: return type of 'main' is not 'int'


Create a new paste based on this one


Comments:
posted by caunhocnhanong on Jul 2
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define MAX 100

void nhap (int a[], int &n)
{
do
{
printf("\nNhap so phan tu: ");
scanf("%d", &n);
if(n <= 0 || n > MAX)
{
printf("\nSo phan tu khong hop le. Xin kiem tra lai !");
}
}while(n <= 0 || n > MAX);
for(int i = 0; i < n; i++)
{
printf("\nNhap a[%d]: ", i);
scanf("%d", &a[i]);
}
}

void xuat(int a[], int n)
{
for(int i = 0; i < n; i++)
{
printf("%4d", a[i]);
}
}

int KiemTraDang2K(int n)
{
if (n <= 1)
return 1;
while(n > 1) // vòng lặp kết thúc khi n == 1
{
if(n % 2 != 0)
return 0;
n /= 2;
}
return 1;
}

int TimGiaTri2KDauTien(int a[], int n)
{
for(int i = 0; i < n; i++)
{
if(KiemTraDang2K(a[i]) == 1)
{
return a[i];
}
}
return 0;
}
int main()
{
int n;
int a[MAX];

nhap(a, n);
xuat(a, n);

int KetQua = TimGiaTri2KDauTien(a, n);
printf("\nGia tri 2k dau tien la %d", KetQua);

getch();
return 0;
}

reply