ctdl_in
DESCRIPTION
CTDL InTRANSCRIPT
#include <stdio.h>
#include <conio.h>
//Dinh nghia mot cau truc DSLK voi cac thao tac co
ban
//Tao 1 DSLK de luu n so nguyen
//Tim kiem 1 phan tu bat ky
//Xoa 1 phan tu bat ky
struct Node{
int data;
Node *Next;
};
struct DSLK{
Node *pHead;
Node *pTail;
};
//Khoi tao danh sach
void KhoiTao(DSLK &l){
l.pHead = l.pTail = NULL;
}
//Kiem tra danh sach rong
int KiemTraRong (DSLK &l){
if (l.pHead==NULL && l.pTail==NULL)
return 1;
return 0;
}
//Tao moi 1 nut
Node* Get_Node(int x){
Node *p ;
//Cap phat bo nho
//Dinh nghia cau truc Sach
//Dinh nghia mot cau truc DSLK voi cac thao tac co
ban
//Tao 1 DSLK de luu n cuon sach
//Nhap tu ban phim 1 ten tac gia bat ky (tg), liet ke
ra man hinh tat cac cac cuon sach cua tac gia tg
//Huy danh sach sau khi su dung xong
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct Sach{
int MaSach;
char TenSach[100];
char TacGia[50];
char NhaXB[100];
int NamXB;
float Gia;
};
struct Node{
Sach data;
Node *Next;
};
struct DSLK{
Node *pHead;
Node *pTail;
};
//Khoi tao danh sach
void KhoiTao(DSLK &l){
1
p = new Node;
if (p==NULL){
printf("Khong du bo nho!");
return NULL;
}
printf("Nut duoc tao tai dia chi:%d\n", p);
p->data = x;
p->Next = NULL;
return p;
}
//Chen phan tu vao dau danh sach
void ChenDau(DSLK &l, Node *p){
//kiem tra truong hop danh sach rong
if (l.pHead==NULL){
l.pHead = l.pTail = p;
}
else{
p->Next = l.pHead;
l.pHead = p;
}
}
//Chen phan tu vao cuoi danh sach
void ChenCuoi(DSLK &l, Node *p){
if (l.pHead==NULL){
l.pHead = l.pTail = p;
}
else{
l.pTail->Next = p;
l.pTail = p;
}
}
l.pHead = l.pTail = NULL;
}
//Kiem tra danh sach rong
int KiemTraRong (DSLK &l){
if (l.pHead==NULL && l.pTail==NULL)
return 1;
return 0;
}
//Tao moi 1 nut
Node* Get_Node(Sach x){
Node *p ;
//Cap phat bo nho
p = new Node;
if (p==NULL){
printf("Khong du bo nho!");
return NULL;
}
p->data = x;
p->Next = NULL;
return p;
}
//Chen phan tu vao cuoi danh sach
void ChenCuoi(DSLK &l, Node *p){
if (l.pHead==NULL){
l.pHead = l.pTail = p;
}
else{
l.pTail->Next = p;
l.pTail = p;
}
}
2
//Duyet danh sach dung vong lap while
void DuyetDS(DSLK l){
Node *p;
if (KiemTraRong(l)==1)
printf("Danh sach da rong!");
p = l.pHead;
while (p!=NULL){
printf("%d ",p->data);
p = p->Next;
}
printf("\n");
}
// Duyet danh sach dung vong lap for
/*
void DuyetDS(DSLK l){
Node *p;
if (l.pHead==NULL && l.pTail==NULL)
printf("Danh sach da rong!");
for (p=l.pHead; p!=NULL; p = p->Next)
printf("%d ",p->data);
printf("\n");
}
*/
//Tim kiem phan tu trong danh sach
Node* TimKiem(DSLK l, int x){
Node *p;
p = l.pHead;
while (p!=NULL && p->data!=x)
p = p->Next;
return p;
}
//Hien thi sach
void HienThiSach(Sach s){
printf("%d, %s, %s, %s, %d, %f\
n",s.MaSach, s.TenSach, s.TacGia, s.NhaXB, s.NamXB,
s.Gia);
}
//Duyet danh sach
void DuyetDS(DSLK l){
Node *p;
if (KiemTraRong(l)==1)
printf("Danh sach da rong!");
p = l.pHead;
while (p!=NULL){
HienThiSach(p->data);
p = p->Next;
}
printf("\n");
}
//Tim kiem va hien thi ra man hinh tat ca cac cuon
sach cua tac gia tg
void TimKiem(DSLK l, char tg[]){
Node *p;
int d = 0;
p = l.pHead;
while (p!=NULL){
if (strcmp(p->data.TacGia,tg)==0){
d = d+1;
HienThiSach(p->data);
}
3
//Xoa phan tu dau danh sach
void XoaDau(DSLK &l){
//co lap pHead
Node *p;
p = l.pHead;
l.pHead = l.pHead->Next;
p->Next = NULL;
delete p;
if (l.pHead == NULL)
l.pTail = NULL;
}
//Xoa phan tu cuoi danh sach
void XoaCuoi(DSLK &l){
Node *p, *q;
//Tim q
p = l.pHead;
q = NULL;
while (p!=l.pTail){
q = p;
p = p->Next;
}
if (q==NULL)
l.pHead = l.pTail = NULL;
else{
l.pTail = q;
q->Next = NULL;
}
//Giai phong bo nho
delete p;
}
//Xoa phan tu co khoa k bat ky
void XoaPhanTu(DSLK &l, int k){
p = p->Next;
}
if (d==0)
printf("Khong co cuon sach nao cua tac gia
%s!",tg);
}
//Xoa phan tu dau danh sach
void XoaDau(DSLK &l){
//co lap pHead
Node *p;
p = l.pHead;
l.pHead = l.pHead->Next;
p->Next = NULL;
delete p;
if (l.pHead == NULL)
l.pTail = NULL;
}
void HuyDS(DSLK &l){
//Huy lien tiep cac pha tu o dau danh sach
while (KiemTraRong(l)==0)
XoaDau(l);
}
int main(){
int n;
Sach s;
char tg[50];
DSLK l;
KhoiTao(l);
printf("So phan tu trong danh sach: ");
scanf("%d",&n);
4
//Tim nut
Node*p, *q;
p = l.pHead;
q = NULL;
while (p!=NULL && p->data!=k){
q = p;
p = p->Next;
}
if (p==NULL){
printf("Khong co phan tu can xoa!");
}
else if (p==l.pHead){
l.pHead = l.pHead->Next;
p->Next = NULL;
delete p;
if (l.pHead==NULL)
l.pTail = NULL;
}
else{
q->Next = p->Next;
if (p==l.pTail)
l.pTail = q;
p->Next = NULL;
delete p;
}}
void HuyDS(DSLK &l){
//Huy lien tiep cac pha tu o dau danh sach
while (KiemTraRong(l)==0)
XoaDau(l);
}
int main(){
int n, x, k;
DSLK l;
//Nhap n cuon sach
for (int i=0; i<n; i++){
printf("Nhap cuon sach %d:\n",i);
printf("\tMa sach:");
scanf("%d",&s.MaSach);
fflush(stdin);
printf("\tTen sach:");
gets(s.TenSach);
printf("\tTac gia:"); gets(s.TacGia);
printf("\tNhaXB:"); gets(s.NhaXB);
printf("\tNam XB:");
scanf("%d",&s.NamXB);
printf("\tGia thanh:");
scanf("%f",&s.Gia);
Node *p = Get_Node(s);
ChenCuoi(l, p);
}
//Hien thi cac cuon sach da nhap ra man hinh
printf("Danh sach da tao:\n");
DuyetDS(l);
fflush(stdin);
//Nhap 1 ten tac gia (tg), liet ke tat ca nhung cuon
sach cua tac gia tg
printf("Nhap ten tac gia: "); gets(tg);
TimKiem(l,tg);
//Giai phong (thu hoi lai) bo nho truoc khi ket thuc
chuong trinh
HuyDS(l);
getch();
}
5
KhoiTao(l);
printf("So phan tu trong danh sach: ");
scanf("%d",&n);
for (int i=0; i<n; i++){
printf("Nhap gia tri: ");
scanf("%d",&x);
Node *p = Get_Node(x);
ChenDau (l, p);
//ChenCuoi(l, p);
}
printf("Danh sach da tao:\n");
DuyetDS(l);
//XoaDau(l);
//XoaCuoi(l);
printf("Nhap gia tri can xoa: ");
scanf("%d",&k);
XoaPhanTu(l,k);
printf("Sau khi xoa:\n");
DuyetDS(l);
//Giai phong (thu hoi lai) bo nho truoc khi ket
thuc chuong trinh
HuyDS(l);
getch();}
6
Bài 3:
Int Find_Min (int A [ ], int n);
{
Int dem = 0;
Int min;
For ( int i = 0; i<=n; i++)
{
If ( A [i] % 2 ==0)
{
Dem ++;
Min = A[i];
Break;
}}
If (dem==0)
Return -1;
For (int j=i+1; j<n; j++)
{
If (A[j]%2==0 && min > A[j])
{
Min=A[j];
}}
Return Min;
}
Thuật toán: FindMax()
Vào: Dãy số A1,…..,An
Ra: Số nguyên dương lớn nhất trong dãy
1. i1;
2. MaxA1;
3. While (i<=n)
if (Max < Ai) Max = Ai;
i = i+1;
End while
4. Return Max;
----------------------------------------------------
Vào: Dãy số A1,…..,An
Ra: Số lẻ bé nhất trong dãy
1. iChỉ số của số lẻ đầu tiên trong dãy;
2. MinAi;
3. While (i<=n)
if (Min < Ai && Min%2!=0) Min = Ai;
i = i+1;
End while
4. Return Min;
---------------------------------------------------
Viod Swap ( int &a, int&b)
{
Int t= a;
a=b;
b=t;
}
7
MAIN
Tính tổng :
int tong(int a[],int n)
{int i,s;
for(i=0,s=0;i<n;i++)
s=s+a[i];
return s;
int main()
s=tong(a,n);
printf(" tong cac phan tu trong mang la:
%5d",s);
Tổng các số của số tự nhiên n
int Tong (int n)
{
if (n==0) return 0;
else return Tong(n/10)+n%10);
return Tong;
}
void main()
{
Int n;
Printf ("Nhap n= ");
scanf ( “%d”, &n);
Printf ("Ket qua = ", n, Tong(n));
}
Vi du: Nhap N = 2564, in ra 4652.
1. int main()2. {3. int N=0;4. printf("\nNhap vao mot con so: ");5. scanf("%d",&N);6. printf("\n\nSo dao nguoc: ");7. while(N)8. {9. printf("%d",N%10);10. N/=10;11. }12. getch();13. return 0;
2/ Đếm số lượng chữ số nguyên dương n
int DemSL(int n){ if(n==0) return 0; return 1+DemSL(n/10);}
8
3/ Tìm chữ số có giá trị lớn nhất của số nguyên dương n
long ChuSoLonNhat(long n,long &max){ long m; if(n==0) return max; else { m=n%10; if(m>max) max=m; } return ChuSoLonNhat(n/10,max);}
4/ Tìm giá trị nguyên logarit cơ số 2 của n
int Logarit(int n){ if(n<0) return -1; else if(n>=2) return 1+logarit(n/2); else return 0;}
Đổi cơ số san nhị phân
long NhiPhan(int a){ long b; if(a==0) return 0; else b=a%2; return NhiPhan(a/2)*10+b;}
7/ Tìm chữ số đầu tiên của số nguyên dương n.
int ChuSoDauTien(int a){
if(a<10) return a; else return ChuSoDauTien(a/10);}
6/ Tìm ước số chung lớn nhất của 2 số nguyên a, b.
int UCLN(int a,int b){ if(a==b) return a; else { if(a>b) a=a-b; else b=b-a; } return UCLN(a,b);}
9
Bài tập 752 :Hãy đếm số lượng chữ số của số nguyên dương n
int DemSoLuongChuSo(int n)
{
if(n == 0)
{
return 0;
}
return DemSoLuongChuSo(n/10) + 1;
}
Bài tập 753 :Hãy tính tổng các chữ số của số nguyên dương n
int TongChuSo(int n)
{
if(n == 0)
{
return 0;
}
return TongChuSo(n/10) + n % 10;
}
Bài tập 754 :Hãy tính tích các chữ số của số nguyên dương n
int Tich(int n)
{
if(n == 0)
{
return 1;
}
return Tich(n/10) * (n%10);
}
Bài tập 755 :Hãy đếm số lượng chữ số lẻ của số nguyên dương n
int DemLe(int n)
{
if(n == 0)
{
return 0;
}
if(n%2 == 1)
{
return DemLe(n/10) + 1;
}
10
return DemLe(n/10);
}
Bài tập 756 :Hãy tính tổng các chữ số chẵn của số nguyên dương n
int TongChuSoChan(int n)
{
if(n == 0)
{
return 0;
}
if(n%2 == 0)
{
return TongChuSoChan(n/10) + (n%10);
}
return TongChuSoChan(n/10);
}
Bài tập 757 :Hãy tính tích các chữ số lẻ của số nguyên dương n
int TichChuSoLe(int n)
{
if(n == 0)
{
return 0;
}
if(n % 2 == 1)
{
return TichChuSoLe(n/10) * (n%10);
}
return TichChuSoLe(n/10);
}
Bài tập 758 :Cho số nguyên dương n . Hãy tìm chữ số đầu tiên của n
int ChuSoDauTien(int n)
{
if(n/10 == 0)
{
Bài tập 759 :Hãy tìm chữ số đảo ngược của số nguyên dương n
int DemSoLuongChuSo(int n)
{
if(n == 0)
{
return 0;
11
return n;
}
return ChuSoDauTien(n/10);
}
Bài tập 760 :Tìm chữ số lớn nhất của số nguyên dương n
int ChuSoLonNhat(int Max,int n) //Max bắt đầu là n%10
{
if (n%10==0)
{
}
Max=(Max>n%10)?Max:n%10;
return ChuSoLonNhat(Max,n/10);
}
return Max;
Bài tập 761 :Tìm chữ số nhỏ nhất của số nguyên dương n
int ChuSoNhoNhat(int Min,int n) //Min bắt đầu là n%10
{
if (n%10==0)
{
}
}
return DemSoLuongChuSo(n/10)+1;
}
int DoiChuSo(int H , int Dem)
{
if(Dem > 0)
{
return DoiChuSo(H*10,Dem-1);
}
return H;
}
int ChuSoDaoNguoc(int n)
{
if(n == 0)
{
return 0;
}
int Dem = DemSoLuongChuSo(n);
int H = n%10;
int T = DoiChuSo(H,Dem-1);
return ChuSoDaoNguoc(n/10) + T;
12
Min=(Min<n%10) ? Min : n%10;
return ChuSoLonNhat(Min,n/10);
}Bài tập 762 :Hãy kiểm tra số nguyên dương n có toàn chữ số lẻ hay không ?
int KTToanLe(int n)
return Min;
{
if (n%2==0 && n!= 0)
{
return 0;
}
if (n%2==1)
{
return KTToanLe(n/10);
}
return 1;
}
}Bài tập 763 : Hãy kiểm tra số nguyên dương n có toàn chữ số chẵn hay không ?
int KTToanChan(int n)
{
if(n == 0)
{
return 1;
}
if(n % 2 == 1)
{
return 0;
}
if(n % 2 == 0)
{
return KTToanChan(n/10);
}
return 1;
}
13