M t s bài t p l p trnh Cn b n
Created by NgoHung
V n đ 2: Ch ng trnh con ươ
Bài toán s 2.1: Vi t ch ng trnh chuy n đ i s t nhiên N cho tr c sang h c s 2ế ươ ướ ơ
b ng vi c xây d ng hàm chuy n đ i.
H ng d n:ướ
- Xây d ng hàm Dec2Bin( ) chuy n đ i t s t nhiên sang s nh
phân.
oS d ng bi n S đ l u giá tr s nh phân c a N. Kh i gán b ng 0. ế ư
oTi n hành l p chuy n đ i c s : L p trong khi mà N > 0ế ơ
SoDu = s d c a N chia cho 2. ư
N = N chia cho 2.
B sung ch s SoDu vào s S thành m t ch s
oTr v k t qu cu i cùng c a S. ế
- Vi t hàm void main ( ) v i n i dung dùng đ ki m tra k t qu th cế ế
hi n c a hàm.
oKhai báo bi n N, Mế
oThông báo nh p, nh p giá tr cho bi n N ế
oGán giá tr M b ng k t qu tr v c a hàm Dec2Bin( N ) ế
oIn thông báo v k t qu s nh phân chuy n đ i đ c (giá tr c a M) ế ượ
oG i hàm getch( ) tr c khi k t thúc hàm main ( ). ướ ế
Ch ng trnh:ươ
/* thu tuc chuyen so tu nhien n cho truoc sang ket qua tra ve he co so 2 */
int Dec2Bin ( int n )
{
int S = 0 , So = n ;
while ( So > 0)
{
int Du = So % 2 ;
So = So / 2 ;
S = S * 10 + Du;
}
return S ;
}
/* chuong trinh chinh dap ung yeu cau bai toan */
void main( )
{
int N;
printf( “Nhap so N =” ); scanf( “%d”, &N );
printf( “Dang nhi phan cua N la %d”, Dec2Bin(N) );
getch( );
}
Bài toán s 2.2: Vi t các hàm USCLN(a, b) và BSCNN(a, b).ế
H ng d n:ướ Khai báo hàm USCLN có:
Tên hàm: USCLN
Ki u d li u tr v : long
Tham s : 2 tham tr là int a, int b
Giá tr tr v : chính là giá tr c s chung l n nh t c a a và b. ướ
X l tm USCLN, BSCNN: D a trên ví d đă có ph n tr c. ư ướ
N i dung hàm:
long USCLN( int a, int b)
{
for (int k = a; k >= 1; k--) // Lap voi moi i co gia tri tu a den 1
if (a%k == 0 && b%k == 0) // Kiem tra a, b co’ dong thoi chia het cho k
khong
break; // break de thoat, luu giu lai gia tri cua k.
return k;
}
T ng t đ vi t hàm long BSCNN( int a, int b )ươ ế
long BSCNN( int a, int b)
{
for (int k = a; k <= a*b; k++) // Lap voi moi i co gia tri tu a den 1
if (k%a == 0 && k%b == 0) // Kiem tra a, b co’ dong thoi chia het cho k
khong
break; // break de thoat, luu giu lai gia tri cua k.
return k;
}
Ho c s d ng hàm đă xây d ng:
long BSCNN( int a, int b)
{
return a*b/USCLN( a, b );
}
Bài toán s 2.3: Vi t hàm ki m tra s N có ph i là s nguyên t hat không?ế
H ng d n: Khai báo hàm ki m tra s nguyên t có: ướ
Tên hàm: KiemtraSNT
D li u tr v : int, ( 0 n u không ph i là s nguyên t , là 1 n u là s ế ế
nguyên t )
Tham s : tham tr là int N, s c n ki m tra.
X l ki m tra: D a trên ví d đă có ph n tr c. ư ướ
N i dung hàm:
int KiemtraSNT( int N )
{
int ktrSNT = 1; // Khoi gan gia tri dung cho ktrSNT
for ( int i = 2; i <= N-1; i++ ) // Lap voi moi i co gia tri tu 2 den N-1
if ( N % i == 0 ) // Kiem tra xem N co’ chia het cho i hay
khong
ktrSNT = 0; // Neu dung thi khong con la so nguyen to
nua
return ktrSNT;
}
C i ti n, không s d ng bi n ph : ế ế
int KiemtraSNT( int N )
{
for ( int i = 2; i <= N-1; i++ ) // Lap voi moi i co gia tri tu 2 den N-1
if ( N % i == 0 ) // Kiem tra xem N co’ chia het cho i hay
khong
return 0; // Neu dung thi khong con la so nguyen to
nua
return 1; // Khong co gia tri tu 2 den N-1 ma N chia
het
} // N la SNT
Bài toán s 2.4: Vi t ch ng trnh th c hi n l n l t các công vi c sau:ế ươ ượ
- L p th t c nh p ba s th c d ng a , b , c t bàn phím. ươ
- L p th t c ki m tra xem ba s trên có l p thành ba c nh c a tam giác hay
không ?
- Vi t hàm tính di n tích c a tam giác.ế
- Vi t hoàn thi n ch ng trnh chính.ế ươ
H ng d n:ướ
- Thao tác nh p đ n gi n: ơ
void NhapTamGiac( long &a, long &b, long &c)
{
printf( “Nhap A=” ); scanf( “%d”, &a );
printf( “Nhap B=” ); scanf( “%d”, &b );
printf( “Nhap C=” ); scanf( “%d”, &c );
}
- Ki m tra a, b, c l p thành ba c nh c a tam giác n u t ng 2 c nh luôn l n h n ế ơ
m t c nh.
int KtraTamGiac( long a, long b, long c)
{
if (a+b > c && a+c > b && b+c > a)
return 1;
else
return 0;
}
- Tính di n tích có th th c hi n thông qua chu vi c a nó
v i .
float DienTichTamGiac( long a, long b, long c)
{
float p = (a+b+c)/2.0;
return sqrt(p*(p-a)*(p-b)*(p-c));
}
- Xây d ng hàm main v i m c đích, s d ng các hàm trên đ tính di n tích tam
giác nh p vào n u thông s nh p th a măn. ế
void main()
{
long a, b, c;
NhapTamGiac( a, b, c );
if ( KtraTamGiac( a, b, c) )
printf( “Dien tich tam giac: %f \n”, DienTichTamGiac( a, b, c ));
else
printf( “Khong lap thanh duoc tam giac.\n”);
getch( );
}
Bài toán s 2.5: Vi t ch ng trnh hoàn ch nh th c hi n phân tích ra N ra thành cácế ươ
th a s nguyên t .
Ví d : N = 1260 = 2 . 2 . 3 . 3 . 5 . 7
H ng d n:ướ
- Vi t hàm nh p s N. L u , hàm nh p c n truy n tham s N theoế ư ư
d ng tham bi n đ l u l i giá tr đă nh p vào. ế ư
- Vi t hàm phân tích s N ra các th a s nguyên t và in các th a sế
đó ra màn hnh v i t ng thu t toán: ư ưở
oChia N cho s nguyên t u (nh nh t là 2).
oTrong khi N cn chia h t cho u th ti n hành phân tích N v i u là th a s . ế ế
Gi m N đi u l n.
oN u N không chia h t cho u, thi tăng u lên 1.ế ế
oQuá trnh l p l i v i
u t ng b c tăng lên 1 n u N không chia h t cho u. ướ ế ế
N t ng b c gi m xu ng u l n n u N chia h t cho u. ướ ế ế
oQuá trnh l p l i đ n m t m c u tăng lên và N gi m xu ng đ N = u, ế
khi đó giá tr m i c a N s là 1.