ctdl_in

16
#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) //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{ 1

Upload: trung-kien

Post on 06-Feb-2016

212 views

Category:

Documents


0 download

DESCRIPTION

CTDL In

TRANSCRIPT

Page 1: CTDL_IN

#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

Page 2: CTDL_IN

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

Page 3: CTDL_IN

//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

Page 4: CTDL_IN

//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

Page 5: CTDL_IN

//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

Page 6: CTDL_IN

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

Page 7: CTDL_IN

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

Page 8: CTDL_IN

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

Page 9: CTDL_IN

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

Page 10: CTDL_IN

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

Page 11: CTDL_IN

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

Page 12: CTDL_IN

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

Page 13: CTDL_IN

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