Upload
anh-hoi
View
8
Download
3
Embed Size (px)
DESCRIPTION
Báo cáo bài tập lớn
Citation preview
CC THNH VIN NHM 61. Ngc Anh (C)2. Lm Vn n3. Nguyn Hu Hi5. Trn Vn Minh6. Nguyn Minh Quang7. Trn nh Nam4. Nguyn Minh HngNhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
*
BINhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Static typing and Dynamic typing
Basic type
NonBasic type/Programer - defined
Reference Counting
NGUYN L CC NGN NG LP TRNH
Garbage Collection
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
TYPE (KIU)- Trong gii hn mn hc, nhc n kiu ta hiu l kiu ca d liu.
-Ngi ta s dng thut ng i tng d liu (TDL) ch mt nhm ca mt hoc nhiu mu d liu trong my tnh o.
- Kiu d liu l mt tp hp cc TDL v tp hp cc php ton thao tc trn cc TDL .Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
*
Static typing and Dynamic typing (Kim tra kiu tnh v kim tra kiu ng)Kim tra kiu l kim tra xem kiu thc nhn c ca cc i s trong mt php ton c ng vi kiu d liu m cc i s cn c hay khng.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Static typing(Kim tra kiu tnh) - Kim tra kiu tnh l s kim tra kiu c thc hin trong qu trnh dch chng trnh.
- Theo nguyn tc kim tra kiu tnh, thng tin v kiu ca TDL phi c cung cp cho b dch.
- Thng tin ny mt phn c cung cp bi php khai bo ca ngi lp trnh v mt phn bi ngn ng. Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Static typing(Kim tra kiu tnh)u im: Do php kim tra kiu tnh kim tra tt c cc php ton c th xut hin trong bt k mt lnh no ca chng trnh, tt c cc nhnh ca chng trnh u c kim tra nn khng th c s st li v kiu. Mt khc thng tin v kiu khng gn vi TDL ti thi im thc hin chng trnh nn tit kim c b nh v tng tc thc hin chng trnh. Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Static typing(Kim tra kiu tnh)Nhc im:
Yu im ch yu ca kim tra kiu tnh l chng trnh khng mm do, ngi lp trnh lun phi lo lng v vic s dng bin khng ng kiu.Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Dynamic typing(Kim tra kiu ng) Kim tra kiu ng l kim tra kiu c thc hin trong khi thc hin chng trnh. Thng thng kim tra kiu ng c thc hin mt cch tc th trc khi thc hin mt php ton. Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Dynamic typing(Kim tra kiu ng)Phng php thc hin: - kim tra kiu ng ngi ta phi lu tr thng tin v kiu ca mi mt TDL cng vi TDL .
- Trc khi thc hin mt php ton thng tin v kiu ca mi mt i s c kim tra. Nu kiu ca cc i s l ng th php ton s c thc hin v kiu ca kt qu s c ghi li dng kim tra cho cc php ton sau, ngc li s c mt thng bo li v kiu . Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Dynamic typing(Kim tra kiu ng)u im: u im ch yu ca kim tra kiu ng l tnh mm do trong khi vit chng trnh: khng yu cu khai bo kiu v kiu ca TDL c th thay i trong qu trnh thc hin chng trnh. Ngi lp trnh khng phi lo lng v kiu d liu. Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Dynamic typing(Kim tra kiu ng)Nhc im: C th b st li v kiu. Bi v vic kim tra ng ch kim tra ti thi im thc hin php ton do cc php ton nm trong nhnh chng trnh khng c thc hin th s khng c kim tra. Bt k mt nhnh cha c kim tra no u c th cha cc i s c li v kiu v do cc li ny c th xut hin ti thi im sau . Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
import java.util.Scanner;public class StaticTyping {public StaticTyping() {constructor stub}public static void main(String[] args) {stubint a,b;String x;Scanner sc = new Scanner(System.in);System.out.println("Nhp s a : "); a = sc.nextInt(); System.out.println("Nhp s b : "); b = sc.nextInt();
Nhm 6 - Lp K13M CNTT if(a>b) { //x = a + b; //System.out.println("x = "+x); } else { x = a + "titi"; //System.out.println("x = "+a+"titi"); }}}
Nhm 6 - Lp K13M CNTT
Basic Type(Kiu d liu c bn)
Nhm 6 - Lp K13M CNTTS nguynS thc
Nhm 6 - Lp K13M CNTT
Kiu d liu s
Nhm 6 - Lp K13M CNTTHu ht cc ngn ng lp trnh u c cc kiu d liu s, nhng cc chi tit ca s c t v php ci t cc kiu ny c nhiu im khc nhau. Kiu s nguyn v kiu s thc l ph bin nht bi v chng da mt cch trc tip vo phn cng ca my tnh.
Nhm 6 - Lp K13M CNTT
Kiu d liu s nguyn
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Kiu d liu s nguyn
Nhm 6 - Lp K13M CNTTS ci t:
Kiu d liu nguyn hu ht c ci t mt cch trc tip bng cch dng s biu din b nh c xc nh bi phn cng v tp hp cc php tnh s hc, cc php ton quan h nguyn thu trong phn cng cho cc s nguyn. Thng thng s biu din ny s dng mt t trong b nh hoc mt dy cc bytes lu tr mt s nguyn.
Nhm 6 - Lp K13M CNTT
Kiu d liu s thc
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Kiu d liu s thc
Nhm 6 - Lp K13M CNTTS ci t:
S biu din b nh cho kiu d liu thc du chm ng da trn c s biu din phn cng trong mt nh c chia thnh mt phn nh tr (mantissa) v mt s m (exponent).
Cc php tnh s hc v cc php ton quan h trn kiu s thc c h tr bi phn cng. Cc php ton khc phi c ngn ng ci t nh l cc chng trnh con.
Nhm 6 - Lp K13M CNTT
Kiu d liu s thc
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Kiu d liu logic
Nhm 6 - Lp K13M CNTTKiu d liu logic gm cc TDL c mt trong hai gi tr ng hoc sai.
Cc php ton ph bin trn kiu logic gm c:
Nhm 6 - Lp K13M CNTT
Kiu d liu K t (Char)
Nhm 6 - Lp K13M CNTTKiu k t l mt lit k c nh ngha bi ngn ng tng ng vi mt tp hp k t chun c cho bi phn cng v h iu hnh nh tp cc k t ASCII (8-bits) chng hn.
Bng m Unicode (16 bit) c a vo Java, C#
Cc php ton trn d liu k t bao gm: cc php ton quan h, php gn, v i khi c php kim tra xem mt k t c thuc mt lp c bit "ch ci", "ch s" hoc lp k t xc nh no .
Nhm 6 - Lp K13M CNTT
NonBasic type/Programer - defined (Kiu d liu khng c bnDo ngi lp trnh nh ngha)
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Enumerations (D liu kiu lit k)
Nhm 6 - Lp K13M CNTTNgi lp trnh nh ngha kiu lit k bng cch lit k ra mt danh sch cc tn trc kin thng qua s khai bo. Cc tn trc kin trong danh sch l cc gi tr ca kiu v th t ca chng cng c xc nh nh th t chng xut hin trong danh sch.
V d trong Java:public enum Day {hai, ba, bon, nam, sau, bay, cn}
Nhm 6 - Lp K13M CNTT
Enumerations (D liu kiu lit k)
Nhm 6 - Lp K13M CNTTswitch (day) { case hai: return "Th 2"; case ba: return "Th 3"; case bon: return "Th 4"; case nam: return "Th 5"; case sau: return "Th 6"; case bay: return "Th 7"; case cn: return "Ch nht"; default: return null; }
Nhm 6 - Lp K13M CNTT
Enumerations (D liu kiu lit k)
Nhm 6 - Lp K13M CNTTLi ch ca vic s dng kiu lit k:
Vic s dng kiu lit k lm cho chng trnh sng sa, trc quan, ngi lp trnh khng cn phi nh ngha ca gi tr s v do vy chng trnh s c chnh xc cao hn. Ni cch khc, kiu lit k lm tng tnh d c, tnh d vit v tin cy ca ngn ng.
Nhm 6 - Lp K13M CNTT
Pointer (D liu kiu con tr)
Nhm 6 - Lp K13M CNTTD liu kiu con tr l mt TDL s cp cha a ch ca khi nh c cp pht. Ngi lp trnh s dng nh c cp pht thng qua bin con tr.
Nhm 6 - Lp K13M CNTT
Pointer (D liu kiu con tr)
Nhm 6 - Lp K13M CNTTCc php ton:
Php ton cp pht nh ng: Php ton ny dng cp pht nh cho i tng d liu mi v tr a ch ca nh v trong bin con tr. Trong Pascal th php ton ny c tn l NEW. V d: NEW(p).
Php ton truy xut nh c cp pht ng: truy xut n gi tr d liu lu trong khi nh cp pht ng ta phi s dng a ch ca khi nh thng qua tn con tr (v khi nh ny khng c tn). V d q^[5] l phn t th 5 ca vct Vect c tr bi q.
Php ton thu hi nh c cp pht ng: Php ton ny cho php gii phng nh cp pht. Trong Pascal, dng php ton DISPOSE.
Nhm 6 - Lp K13M CNTT
Pointer (D liu kiu con tr)
Nhm 6 - Lp K13M CNTTType Vect = ARRAY[1..10] of Integer; {Lc ny b nh cho Vect cha c cp pht} VAR p: ^Vect; {Khai bo p l mt bin con tr cha a ch ca khi nh lu tr TDL thuc kiu vct Vect. Khi dch n y th nh cho p s c cp pht} Begin NEW(p); {Cp pht nh cho vct v tr a ch ca nh ny cho bin con tr p (hay cn ni p tr ti khi nh ny)} p^[5] := 20; {Truy xut n phn t th 5 ca vct} writeln(p^[5]); Dispose(p); {Gii phng nh cp cho vct} End.
Nhm 6 - Lp K13M CNTT
Array (Mng)Mng 1 chiu (cn gi l vc t)Mng mt chiu l mt CTDL bao gm mt s c nh cc phn t c kiu ging nhau c t chc thnh mt dy tun t cc phn t. Nh vy mng mt chiu l mt CTDL c kch thc c nh v ng nht.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Mng 1 chiu (cn gi l vc t)Cc thuc tnh ca mng mt chiu l: - S lng cc phn t, lun c ch r bng cch cho tp ch s. Tp ch s ny thng thng c cho bi mt min con cc s nguyn.- Kiu d liu ca mi mt phn t, thng c vit r trong khai bo. - Ch s c s dng la chn mi mt phn t. Nu tp ch s c cho bi mt min con ca tp cc s nguyn th s nguyn u tin ch nh phn t u tin s nguyn th 2 ch nh phn t th 2 ...Nu tp ch s l mt lit k th gi tr u tin trong lit k l ch s ca phn t u tin. Nu ngn ng ch nh r s lng cc phn t th 0 l ch s ca phn t u tin.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Mng 1 chiu (cn gi l vc t)V d: char s[] = new char[100];Khai bo mng mt chiu s c 100 phn t l cc k t.Cc thnh phn ca mng: s[0] n s[99].
truy xut ti phn t th i ca s, ta s dng c php: s[i]Ly s phn t ca s ta dng c php: s.lengthKhi to gi tr ban u ca mng:Char s[] = {a,b,c,d,e,f}
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
String(Chui k t) Chui k t l cu trc d liu bao gm mt dy cc k t. Nh vy, kiu chui k t l mt kiu ng nht, cn v kch thc th c th c nh hoc thay i ty theo ngn ng. Kiu d liu chui k t l mt kiu quan trng m hu ht cc ngn ng u c.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
String(Chui k t) Cc cch khai bo trong Java:
public static void main(String a[]){
String objStr_01 = "This is a string object"; String objStr_02 = new String("This is also string object"); char[] arrChar = {'V','N','L','I','V','E','S'}; String objStr_03 = new String(arrChar); String objStr_04 = objStr_03 + " This is another String object"; System.out.println("objStr_01: " + objStr_01); System.out.println("objStr_02: " + objStr_02); System.out.println("objStr_03: " + objStr_03); System.out.println("objStr_04: " + objStr_04); }
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
String (Chui k t) c t cc thuc tnh:
a/ di c khai bo c nh: Chui k t c th c di (kch thc) c nh c khai bo trong chng trnh.y l k thut c bn c dng trong COBOL
b/ di thay i trong mt gii hn c khai bo: Chui k t c th c di cc i c khai bo trc trong chng trnh nhng gi tr thc ca i tng d liu c lu tr c th l chui c di ngn hn, thm ch c th l chui rng. y l k thut c dng trong PL/1 (v c trong Turbo Pascal).
c/ di khng gii hn: Chui k t c th c di bt k v di c th thay i mt cch ng thng qua qu trnh thc hin. y l k thut c dng trong SNOBOL4.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
String (Chui k t) Cc php ton:
a/ Vit hoa mt chui
public class StringUpperCase { public static void main(String[] args) { String objStr = "vnlives.net"; System.out.println("objStr: " + objStr.toUpperCase());
}}
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
String (Chui k t) Cc php ton:
b/ Vit thng mt chui
public class StringLowerCase { public static void main(String[] args) { String objStr = "VNLIVES.NET"; System.out.println("objStr: " + objStr.toUpperCase());
}}
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
String (Chui k t) Cc php ton:
c/ m tng s k t ca chui
public class StringLength { public static void main(String[] args) { String objStr = "VNLIVES.NET"; System.out.println("objStr length: " + objStr.length());
}}
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Record (Bn ghi)
Bn ghi l mt CTDL bao gm mt s c nh cc phn t c kiu khc nhau. Nh vy, bn ghi l mt CTDL c kch thc c nh v khng ng nht. Cc phn t ca bn ghi c gi l cc trng. Khai bo bn ghi trong Java:
class Recorder {String Ma;String hoten;int tuoi;float luong;}
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Record (Bn ghi)
Cc thuc tnh ca mt bn ghi phi c ch r trong php khai bo, chng bao gm: 1. S lng cc phn t. 2. Kiu d liu ca cc phn t (Cc phn t c th c kiu khc nhau). 3. Mi phn t c cho bi tn phn t (tn trng).
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Record (Bn ghi)Cc php ton thc hin trn bn ghi:
1. Php la chn mt phn t l php ton c bn cu bn ghi. Php ton ny c thc hin bng cch ch ra tn trc kin ca phn t. V d: Nhan_vien.Ma; (Ly ra gi tr ca trng Ma trong bn ghi hay ly m ca nhn vin)
2. Php gn V d:Nhan_vien.hoten = "Nguyen van A";Gn gi tr ca trng hoten trong bn ghi bng Nguyen van A
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Record (Bn ghi)Cc php ton thc hin trn bn ghi:
1. Php la chn mt phn t l php ton c bn cu bn ghi. Php ton ny c thc hin bng cch ch ra tn trc kin ca phn t. V d: Nhan_vien.Ma; (Ly ra gi tr ca trng Ma trong bn ghi hay ly m ca nhn vin)
2. Php gn V d:Nhan_vien.hoten = "Nguyen van A";Gn gi tr ca trng hoten trong bn ghi bng Nguyen van A
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Qun l b nh v dn rcJava qun l b nh trong 1 vng nh gi l vng HEAP. qun l Heap, b nh c theo di qua 2 danh sch l : Danh sch cc vng nh cha s dng. Danh sch cc vng cp.Java s dng hai heap ring bit cho cp pht vng nh : heap tnh.heap ng.Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
*
Quy trnh dn rc chia ra nh sau :Khi c yu cu v b nh, trnh qun l heap trc tin kim tra danh sch b nh cha cp pht. Nu khng tm thy khi b nh no ph hp (v kch c) th trnh dn rc s c kch hot khi h thng ri. Nhng khi i hi b nh cp bch th trnh dn rc s c kch hot ngay.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Cc bc thc hin trong c ch cp b nh :Nhn yu cu cp b nh.if (Free-Block list ) cp b nh cho yu cu (First-fit) else if (my rnh) thc thi gom rc else ng dng phi gi tng minh tc v gom rc. Trnh gom rc c n nh u tin rt thp nu JVM rnh th mi gi n n. Gi tng minh c ngha chp nhn ng dng ny tm dng ch gom rc.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
C ch gom rc (ch gom rc Dynamic heap)Xem i tng no khng cn dng. Trnh dn rc gi phng thc finalize thu ti nguyn ca i tng trc khi dn dp i tng. Hm ny s dn dp cc ti nguyn bn ngoi nh cc file ang m.Cng vic ny khng c trnh dn rc thc thiGi trnh dn rc th gom rc.Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Gii thiu v Reference CountingGarbage CollectionNhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Ging nhauu qun l b nh, u c c ch m cc tham chiu tr ti i tng trong b nh.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
*
C ch hot ngGarbage Collection (GC) l c ch t ng chy ngm tm nhng i tng d liu khng cn s dng na v gii phng chng bi chng trnh ang chy.Reference Counting (RC) l c ch t ng m tham chiu n i tng trong b nh.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
*
GC hotng nhth no ?S dng cchm?mii tng c mt sm cc tham chiu tr ti.gii phngi tng khi sm = 0. Gii phng cci tngchtkim tra tt c cc tham chiu.nh du cci tng cnc tham chiugii phng cci tng khngc tham chiu
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
*
GC hotng nhth no ?Trong java, cc object c to ra v lu vo mt vng nh gi lHEAP v s c Garbage Collection qun l theo mt cu trc hnh cy. Garbage Collection s thc hin cng vic ca n khi vng nh Heap ny full.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
RC hotng nhth no ?S dng cchm?mii tng c mt sm cc tham chiu tr ti.Khi bin m tham chiu bng 0, vng nh dnh cho i tng c th c gii phng.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Quan h gia RC v GCTrong vic thu thp rc ca GC th n s gp vn l tm kim rc u ?. Mt i tng c coi l rc khi khng c tham chiu ti i tng . Nhng lm th no chng ta bit l khng c tham chiu ti n ?JVM a ra cch gii quyt l theo di tng i tng trong tng s cc tham chiu n i tng . C ngha l n s phi thm mt reference count cho tng i tng v JVM s cp nht cc reference count .
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
V d 1:V d: Khi khai bo: Object p = new Integer (57);Ta to mt th hin mi ca lp Integer v ch c bin p l i tng. Nh vy s tham chiu ca n s l mt.Tip theo ta s vit thm l Object p = new Integer (57);Object q = p;Th trong trng hp ny c p,q u tham chiu n cng 1 i tng vy nn tham chiu ca n l 2.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
C ch chy ca JVM v d 1Khi ta tin hnh gn p=q; th my o JVM s thc hin nh sau :
if (p != q){ if (p != null)--p.refCount; p = q; if (p != null)++p.refCount;} Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
V d 2V d ta khai bo p v q nh sau : Object p = new Integer (57);Object q = new Integer (99);Nh vy ta to ra 2 i tng kiu integer v chng u c chung 1 th hin.Gi s chng ta gn q=p, s dng on code pha trn th cho thy rng sau khi gn th C p v q u tham chiu n cng 1 i tng nn reference count ca q s l 2. V s lng tham chiu trn p ch ra l m tham chiu ca n bng 0 v n l rc.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Li th ca vic s dng reference countD dng xc nh i tng no cn s dng v i tng no l rc.Chng ta c th tit kim b nh nu nh chng ta kim tra i tng c reference count ca n = 0 ch ng gi qu trnh thu gom rc tn dng ti a b nh v gim thiu b nh b b trng xung mc thp nht.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
C ch chy ca JVM khi c rc v ta ch ng dn rcTrong v d 2 nu ch ng gi c ch dn rc th Khi gn p=q th my o JVM s thc hin nh sau :
if (p != q){ if (p != null)if (--p.refCount == 0) heap.release (p); p = q; if (p != null)++p.refCount;}Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
u im ca GC lGip lp trnh vin khng phi x l gii phng b nh khi lp trnh (vn gy ra li trn cc ngn ng khng s dng Garbage Collector), gim thiu Memory leaks.Bo m tnh ton vn ca chng trnh java, GC cng l mt phn quan trng trong kh nng bo mt v tnh an ton ca JVM.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Nhc im ca GC lKhng cho php ngi lp trnh xc nh c chnh xc thi im object b hy khi b nh.nh hng ti hiu nng chng trnh Trong phng thc finalize() th ngi lp trnh nn ch ng ci t mt s thao tc gii phng, dn dp vng nh cp pht cho cc i tng d liu s gip cho kim sot tt qu trnh hy i tng.
Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
Chn thnh cm n Thy v cc bn lng nghe!Nhm 6 - Lp K13M CNTT
Nhm 6 - Lp K13M CNTT
*
*
*
*
*
*