You are on page 1of 20

TRNG I HC BCH KHOA NNG KHOA CNG NGH THNG TIN

Gio vin hng dn : Nhm : Lp : Sinh vin thc hin :

Thy Nguyn Vn Nguyn 14 11TCLC Nguyn Vn Thun

Nng Thng 12/2012

Bo co thc hnh TON RI RC

SV: NGUYN VN THUN LP: 11TCLC KHOA CNG NGH THNG TIN HBKN

BO CO THC HNH

MC LC
LI NI U . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Phn 1: BI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Phn 2: BI GII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Bi 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Bi 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Bi 1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Cu a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Cu b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Cu c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Bi 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Bi 1.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Bi 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

SV: Nguyn Vn Thun 11TCLC

Page 1

Bo co thc hnh TON RI RC

Ngy nay, Cng ngh thng tin l mt trong nhng ngnh ang pht trin rt mnh m v c nh hng su rng n mi mt i sng. N l nn tng ca nn kinh t tri thc, l thc o trnh pht trin ca mt quc gia.V vy, vic o to i ng k s cng ngh thng tin c cht lng i hi phi c ch trng v u t ng mc. i hc l mi trng c bn cung cp kin thc chuyn mn, gip sinh vin hnh thnh v pht trin nhng k nng cn thit cho cng vic. V vy, hc i i vi hnh lun l phng chm o to hng u trong cc trng i hc hin nay. Cng vi hc phn l thuyt, hc phn Thc Hnh Ton Ri Rc gip nng cao kh nng t duy ca sinh vin. Trn c s bi thc hnh c nhn, sinh vin phi bit cch phn tch v ci t gii quyt cc bi ton lit k, lp lch, nhm gii quyt nhng bi ton c tnh ng dng thc t cao. Em xin chn thnh cm n gio vin hng dn thy Nguyn Vn Nguyn gip v ch dn em hon thnh bi bo co ny. Nng, ngy 20 thng 12 nm 2012

SV: Nguyn Vn Thun 11TCLC

Page 2

Bo co thc hnh TON RI RC


Phn 1:

Bi tp 1.

Bi ton m-Bi ton lit k

1. m s xu nh phn di n: a) Bt k. b) Khng c hai bit 0 k nhau. c) C t nht hai bit 0 k nhau. 2. Vit chng trnh lit k tt c cc xu nh phn di n nh yu cu ca bi ton 1. Lit k c s th t kim tra kt qu m c. Th nhp vi nhiu gi tr khc nhau ca n. Lu cc trng hp n=1 v n=2. 3. Vit chng trnh nhp mt xu ch gm n ch ci hoa (A...Z)-trong c mt s ch ci lp. Lit k tt c cc cch sp xp n ch ci ny. C m tng s cch sp xp. 4. Xt phng trnh nguyn: x1+x2+...+xn=k vi xi0 i=1...k. Vit chng trnh nhp n, k v in ra tt c cc nghim ca phng trnh.C m tng s nghim.

Bi tp 2.

Bi ton trn th

Vit chng trnh pht sinh ngu nhin ma trn trng s Anxn= (aij) nxn ca th v hng lin thng G gm n nh (aij=aji i, j=1... n). 1. Kim tra th G c phi l th Euler hay khng. 2. Nhp hai nh x, y v dng thut ton Dijkstra tm ng i ngn nht t x n y. 3. Dng thut ton Prim tm cy ph nh nht ca th G.

SV: Nguyn Vn Thun 11TCLC

Page 3

Bo co thc hnh TON RI RC


Phn 2:

Bi tp 1. Bi ton m-Bi ton lit k Bi 1.1 S xu nh phn di n


THUT TON
a. Bt k: 2n b. Khng c hai bit 0 k nhau o Nu n = 1: c 2 xu (S1 = 2). o Nu n = 2: c 3 xu (S2 = 3). o Vi n > 2 th s xu nh phn di n bng tng s xu nh phn di n 1 v n 2 (Sn = Sn 1 + Sn 2). c. C t nht hai bit 0 k nhau: o S xu di n c t nht hai bit 0 k nhau bng s xu di n bt k tr i s xu di n c hai bit 0 k nhau.

CHNG TRNH
#include <iostream> using std::cin; using std::cout; using std::endl; double S(int n); int main() { int n,a,b; do { cout << "Nhap do dai xau bit: "; cin >> n; } while (n < 0); cout << "\nSo xau nhi phan co do dai " << n << endl; cout << "\tBat ki la: " << (a = pow(double (2), n)) << endl; cout << "\tKhong co hai bit 0 ke nhau la: " << (b = S(n)) << endl; cout << "\tIt nhat hai bit 0 ke nhau la: " << (a - b) << endl; cin.get(); cin.get(); } double S(int n) { if(1 == n) return 2; else if (2 == n) return 3; else return (S(n-1) + S(n-2));

SV: Nguyn Vn Thun 11TCLC

Page 4

Bo co thc hnh TON RI RC


}

Bi 1.2 Lit k cc xu bit di n


THUT TON
gii quyt bi ton ny, ta dng thut ton quay lui gii, thut ton m t nh sau: Khai bo bin ton cc: mng s[100] (dng cha xu), n ( di xu bit), d (s xu, d c khi to bng 0). Cn to cc hm: o void print() kim tra xu s c tha iu kin, in ra xu s v tng bin m d ln 1. o void Lke(int i) hm quy, dng gn gi tr vo mng s. Khai bo bin j (kiu nguyn), gn j = 0 lp cho ti khi j = 1 - Gn j vo mng s - Xt cu hnh th in mng s (hm print()) - Ngc li th gi hm Lke(i + 1) Hm main() o Nhn gi tr di xu bit: n o Gi hm Lke(0) o In ra s xu nh phn m c. (xut d)

a. Lit k cc xu bit di n bt k CHNG TRNH


#include <iostream> #include <conio.h> using namespace std; int s[100], n, d (0); void print(); void Lke(int i); int main()

SV: Nguyn Vn Thun 11TCLC

Page 5

Bo co thc hnh TON RI RC


{ do { cout << "Nhap gia tri n: "; cin >> n; } while (!(n > 0)); Lke(0); cout << "Vay co " << d << " xau bit do dai " << n; getch(); } void print() { for(int k = 0; k < n; k++) cout << s[k]; cout << endl; d++; } void Lke(int i) { for (int j = 0; j <= 1; j++) { s[i] = j; if(i == n - 1) print(); else Lke(i+1); } }

SV: Nguyn Vn Thun 11TCLC

Page 6

Bo co thc hnh TON RI RC


b. Lit k cc xu bit di n khng c hai bit 0 k nhau.
Thut ton cu b c k tha t cu a. Hm Lke ca cu b c thm iu kin if(!(i > 0 && s[i-1] == 0 && j == 0)) loi tr trng hp hai bit 0 k nhau

CHNG TRNH
#include <iostream> #include <conio.h> using namespace std; int s[100], n, d (0); void print(); void Lke(int i); int main() { cout << "Nhap gia tri n: "; cin >> n; Lke(0); cout << "\nVay co " << d << " xau nhi phan do dai " << n << " khong co hai bit 0 ke nhau."; getch(); } void print() { for(int k = 0; k < n; k++) cout << s[k]; cout << endl; d++; } void Lke(int i) { int j; for (j = 0; j <= 1; j++) if(!(i > 0 && s[i-1] == 0 && j == 0)) { s[i] = j; if(i == n - 1) print(); else Lke(i+1); } }

SV: Nguyn Vn Thun 11TCLC

Page 7

Bo co thc hnh TON RI RC

c. Lit k cc xu bit di n c t nht hai bit 0 k nhau.


Thut ton c pht trin t cu a. Hm print c thm iu kin xt c hai bit 0 c k nhau hay khng.
void print() { if(check()) { for(int k = 0; k < n; k++) cout << s[k]; cout << endl; d++; } } bool check () { for(int i = 0; i < n - 1;i++) if (0 == s[i] && 0 == s[i+1]) return true; return false; }

CHNG TRNH
#include <iostream> #include <conio.h> using namespace std; int s[100], n, d (0);

SV: Nguyn Vn Thun 11TCLC

Page 8

Bo co thc hnh TON RI RC


void print(); void Lke(int i); bool check(); int main() { do { cout << "Nhap gia tri n: "; cin >> n; } while (!(n > 0)); Lke(0); cout << "\nVay co " << d << " xau nhi phan do dai " << n << " co it nhat hai bit 0 ke nhau."; getch(); } void Lke(int i) { for (int j = 0; j <= 1; j++) { s[i] = j; if(i == n - 1) print(); else Lke(i+1); } } void print() { if(check()) { for(int k = 0; k < n; k++) cout << s[k]; cout << endl; d++; } } bool check () { for(int i = 0; i < n - 1;i++) if (0 == s[i] && 0 == s[i+1]) return true; return false; }

SV: Nguyn Vn Thun 11TCLC

Page 9

Bo co thc hnh TON RI RC

Bi 1.3: Vit chng trnh nhp mt xu ch gm n ch ci hoa (A...Z)-trong c mt s ch ci lp. Lit k tt c cc cch sp xp n ch ci ny. C m tng s cch sp xp. THUT TON
Da vo phng php sinh, cc bc thc hin: o Bc 1: Xy dng cu hnh u tin theo th t t in. Sp xp li xu . In ra cu hnh v s cch theo chiu gim: a[i] >= a[i+1] vi sp xp c khi to gi tr bng 1. o Bc 2: Lp cho ti khi t c cu hnh cui c dng a[i] <= a[i+1] vi . Trong qu trnh lp sinh xu k tip bng cch hon i 2 v tr phn t a*i+ a*j+ cho nhau. iu kin ca i l tt c cc phn t ca xu bn tri i c sp sp theo chiu tng tr phn t i. V cc phn t ca xu c lu vo v tr t 0 -> n-1 nn i n chnh l iu kin thot khi vng lp, iu kin ca j l 1 trong i 1 phn t bn tri ca phn t i c gi tr nh nht nhng a*j+ > a*i+. V dy bn tri ca phn t th i l dy tng, do chnh l v tr ca phn t u tin ln hn a[i] nu j = 1 -> i 1. Sau khi hon v a[i] v a[j] cho ta sp xp li tt c cc phn t bn tri i theo chiu gim, in ra cu hnh mi ca xu v tng bin m ln.

SV: Nguyn Vn Thun 11TCLC

Page 10

Bo co thc hnh TON RI RC


CHNG TRNH
#include <iostream> #include <string.h> using namespace std; void swap(char &a, char &b) { char tmp = a; a = b; b = tmp; } void sXepGiam(char* s, int n) { for(int i = 0; i < n; i++) for(int j = 0; j < i; j++) if (s[j] < s[i]) swap(s[j], s[i]); } bool ktInHoa(char* s) { for(int i = 0; i < strlen(s); i++) if(islower(s[i])) return false; return true; } int main() { char s[100]; int d (1); do { cout << "Nhap xau in hoa: "; gets(s); } while (!ktInHoa(s)); int n = strlen(s); sXepGiam(s, n); cout << d << "\t" << s << endl; int i (1), j; while (i <n) { i = 1; while (s[i - 1] <= s[i] && i < n) i++; j = 0; while (s[j] <= s[i] && j < i) j++; swap(s[i], s[j]); sXepGiam(s, i); if (i < n) { d++; cout << d << "\t"; cout << s << endl; } }

SV: Nguyn Vn Thun 11TCLC

Page 11

Bo co thc hnh TON RI RC


cout << "So xau thoa man: " << d; cin.get(); }

Bi 1.4 Xt phng trnh nguyn: x1 + x2 + ... + xn = k vi xi 0, i = 1 ... k. Vit chng trnh nhp n, k v in ra tt c cc nghim ca phng trnh.C m tng s nghim.
Khai bo bin: mng a*i+ cha cc nghim ca phng trnh. Nhp n v k. Dng bi ton chnh hp lp chp n ca k + 1 phn t (0,1, k): o Khai bo bin sum. o Nu k = 0 th c nghim duy nht x1 = x2 = = xn = 0. o Ngc li th gn a[i] = 0. Thay i a*i+ c a[i] k tip theo bi ton chnh hp lp. Gn sum = a[i]. Nu sum = k th in kt qu a[i]. Thut ton chnh hp lp chp k ca n phn t (phng php kit k)
for (int c = 1; c < pow(double (k + 1), n); c++) { sum = 0; int i (n);

SV: Nguyn Vn Thun 11TCLC

Page 12

Bo co thc hnh TON RI RC


while (s[i] == k) i--; s[i]++; for(int j = i + 1;j <= n;j++) s[j] = 0; for(int i = 1; i <= n; i++) sum += s[i]; }

CHNG TRNH
#include<conio.h> #include <iostream> #include <iomanip> using namespace std; void print(int* s, int n); void main() { int n,k, s[30]; int count (0), sum (0); cout << "Nhap gia tri n, k: "; cin >> n >> k; for (int i = 1; i <= n; i++) s[i] = 0; cout << "\nNghiem cua phuong trinh:\n"; if (0 == k) { cout << ++count << '.'; print(s, n); } else { for (int c = 1; c < pow(double (k + 1), n); c++) { sum = 0; int i (n); while (s[i] == k) i--; s[i]++; for(int j = i + 1;j <= n;j++) s[j] = 0; for(int i = 1; i <= n; i++) sum += s[i]; if (k == sum) { cout << setw(3) << ++count << '.'; print(s, n); } } }

SV: Nguyn Vn Thun 11TCLC

Page 13

Bo co thc hnh TON RI RC


cout << "\nPhuong trinh co " << count << " nghiem."; getch(); } void print(int* s, int n){ for(int i = 1; i <= n; i++) cout << setw(3) << s[i]; cout << endl; }

Bi tp 2. Bi ton trn th
Vit chng trnh pht sinh ngu nhin ma trn trng s Anxn= (aij) nxn ca th v hng lin thng G gm n nh (aij=aji i, j=1... n). 1. Kim tra th G c phi l th Euler hay khng. 2. Nhp hai nh x, y v dng thut ton Dijkstra tm ng i ngn nht t x n y. 3. Dng thut ton Prim tm cy ph nh nht ca th G. Thut ton
2.1 Kim tra th Euler

Da vo nh l: th v hng lin thng l th Euler khi v ch khi khng c nh bt l.

SV: Nguyn Vn Thun 11TCLC

Page 14

Bo co thc hnh TON RI RC

2.2 Tm ng i ngn nht bng thut ton Dijkstra o Khai bo bin:


int v[30]; int d[30]; bool checked[30]; int x , y, min;

Mng v lu nh k trc nh vi, d l ng i ngn nht t v1 n vi, checked l mng boolean nh du nh vi gn nhn hay cha, min l s hiu ca nh c gi tr nh nht va xt. o Khi to cc gi tr
for(int i = 0; i < n; i++) { checked[i] = false; d[i] = INF; v[i] = x; } min = x; d[x] = 0;

o Lp cho n khi nh c ng i nh nht (min) va nhn c trng vi i: Tm nh c ng i ngn nht n vx. Gn nhn li cho cc nh khc
//Thc hin gn nhn for(int i = 0; i < n; i++) { if (!checked[i] && d[i] >= d[min] + a[min][i]) { v[i] = min; d[i] = d[min] + a[min][i]; } }

2.3 Tm cy ph nh nht bng thut ton Prim o Khai bo bin


bool complete (false); int w[30]; bool isChecked[30]; int v[30]; int edge[30][2], count (0);

Bin complete kim tra thut ton hon thnh hay cha, Mng v lu nh k trc nh vi, w l khon cch ca nh ang xt v nh trc n, checked l mng boolean nh du nh vi gn nhn hay cha. Mng edge lu cc cnh ca cy ph nh nht. Ta chn nh u tin (nh v0 v gn nhn cho cc nh cn li). Lp cho n khi s cnh bng n 1 (count = n 1) th dng:

SV: Nguyn Vn Thun 11TCLC

Page 15

Bo co thc hnh TON RI RC


a. Tm cnh nh nht ca th vi iu kin cnh tm c phi c 1 nh cha nh du v 1 nh nh du. b. Tng s cnh tm c ln 1 (count++). c. Gn nhn mi cho cc nh cn li. CHNG TRNH
#include <iostream> using namespace std; const int INF = 5; //cc gi tr >= INF u c xem l v cng. int a[30][30]; int n; bool is_Euler (void); void khoiTaoMang(); void Dijkstra(void); void Prim (void); int main() { khoiTaoMang(); Dijkstra(); Prim(); fflush(stdin); cin.get(); } void khoiTaoMang() { cout << "Nhap so dinh: "; cin >> n; //Khi to gi tr cho ma trn. khoiTao: for (int j = 0; j < n; j++) for (int i = j; i < n; i++) if(i == j) a[i][j] = 0; else a[i][j] = a[j][i] = rand() % INF + 1; //Kim tra tnh lin thng for (int j = 0; j < n - 1; j++) { bool lienThong (false); for (int i = j + 1; i < n; i++) if(a[i][j] < INF) lienThong = true; if(!lienThong) goto khoiTao; } //In bng cout << endl;

SV: Nguyn Vn Thun 11TCLC

Page 16

Bo co thc hnh TON RI RC


for (int j = 0; j < n; j++) { for (int i = 0; i < n; i++) if(a[i][j] >= INF) cout << "_\t"; else cout << a[i][j] << "\t"; cout << endl << endl; } //Kim tra c phi th Euler if(!is_Euler()) cout << "Do thi vua khoi tao la do thi Euler!" << endl; else cout << "Do thi vua khoi tao khong phai do thi Euler!" << endl; } void Dijkstra(void) { //Tm ng i ngn nht int v[30]; int d[30]; bool checked[30]; int x , y, min; do { cout << "Nhap hai dinh: "; cin >> x >> y; } while (!(x < n && y < n)); for(int i = 0; i < n; i++) { checked[i] = false; d[i] = INF; v[i] = x; } min = x; d[x] = 0; while (min != y) { //tm gi tr nh nht min = y; for(int i = 0; i < n; i++) if (!checked[i] && d[i] < d[min]) min = i; checked[min] = true; //thc hin gn nhn for(int i = 0; i < n; i++) { if (!checked[i] && d[i] >= d[min] + a[min][i]) { v[i] = min; d[i] = d[min] + a[min][i];

SV: Nguyn Vn Thun 11TCLC

Page 17

Bo co thc hnh TON RI RC


} } } //In ra ng i. cout << endl << "Duong di ngan nhat tu " << x << " den " << y << " : "; int i (y); cout << y; while (i != x) { cout << " <- "; i = v[i]; cout << i; } } bool is_Euler (void) { for (int j = 0; j < n; j++) { int deg (0); //bt ca mt nh for (int i = 0; i < n; i++) if(i != j && a[i][j] < INF) deg++; if(deg % 2) return false; } return true; } void Prim (void) { bool complete (false); int w[30]; bool isChecked[30]; int v[30]; int edge[30][2], count (0); for(int i = 0; i < n; i++) { w[i] = a[0][i]; isChecked[i] = false; v[i] = 0; } isChecked[0] = true; w[0] = INF; while (count < n) { //tim gia tri nho nhat int min (0); for(int i = 0; i < n; i++) if (!isChecked[i] && w[i] < w[min]) min = i; isChecked[min] = true; edge[count][1] = min; edge[count][0] = v[min]; count++;

SV: Nguyn Vn Thun 11TCLC

Page 18

Bo co thc hnh TON RI RC


//thuc hien gan nhan for(int i = 0; i < n; i++) { if (!isChecked[i] && w[i] > a[min][i]) { v[i] = min; w[i] = a[min][i]; } } } count--; //xut kt qu cout << "\n\nCay phu nho nhat, voi cac canh:\n"; for (int i = 0; i < count; i++) cout << edge[i][0] << " <--> " << edge[i][1] << endl; }

_ _ _ -- HT -- _ _ _

SV: Nguyn Vn Thun 11TCLC

Page 19

You might also like