SlideShare a Scribd company logo
1 of 68
Download to read offline
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


BAØI TAÄP CHÖÔNG 1:CAÂU LEÄNH IF ….THEN…
 * Baøi 1 :
   Nhaäp 3 soá a , b , c baát kì . Haõy kieåm tra xem ba soá ñoù coù theå laø ñoä daøi ba caïnh cuûa moät tam giaùc
   hay khoâng ? Thoâng baùo leân maøn hình ‘ Thoûa maõn ‘, ‘ Khoâng thoûa maõn trong töøng tröôøng hôïp
   töông öùng .
   GIAÛI
   Var a , b , c : Real ;
     BEGIN
      Writeln (' Nhap do dai 3 canh cua tam giac : ') ;
      Write (' a = ') ; Readln ( a ) ;
      Write (' b = ') ; Readln ( b ) ;
      Write (' c = ') ; Readln ( c ) ;
     If ( a + b > c ) and ( b + c > a ) and ( c + a > b )
        and ( a > 0 ) and ( b > 0 ) and ( c > 0 ) Then
        Writeln (' Thoa man : Day la 3 canh cua mot tam giac ')
      Else
        Writeln (' Khong thoa man ! ') ;
      Readln ; END .
* Baøi 2 :
   Nhaäp N soá baát kì .
   Ñeám caùc soá lôùn hôn 10 vaø nhoû hôn 20 vaø tính toång cuûa chuùng . Sau ñoù , ñöa ra maøn hình :So
   cac so >10 vaø <20 la : ( gia tri ) ;Tong cua chung la : ( gia tri )
   GIAÛI
   Var Tong , So : Real ; I , N , Dem : Integer ;
     BEGIN
       Write (' Bao nhieu so : ') ; Readln ( N ) ;
       Tong := 0 ; Dem := 0 ;
       For I := 1 To N Do
        Begin
           Write (' So = ') ; Readln ( So ) ;
           If ( So > 10 ) and ( So < 20 ) Then
             Begin
              Tong := Tong + So ;
              Dem := Dem + 1 ;
             End ;



Bài tập Pascal có lời giải                                                                                        1
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


          End ;
        Writeln (' So cac so >10 va <20 la : ', Dem ) ;
        Writeln (' Tong cua chung la :', Tong ) ;
        Readln ; END .
* Baøi 3 :
    Nhaäp boán soá a , b , c , d . Haõy tìm giaù trò lôùn nhaát cuûa chuùng vaø gaùn giaù trò lôùn nhaát ñoù cho
    bieán Max .
    GIAÛI
    Var Max , a , b , c , d : Real ;
      BEGIN
        Writeln (' Nhap gia tri cua 4 so : ') ;
        Write (' a = ') ; Readln ( a ) ;
        Write (' b = ') ; Readln ( b ) ;
        Write (' c = ') ; Readln ( c ) ;
        Write (' d = ') ; Readln ( d ) ;
        Max := a ;
        If Max < b Then Max := b ;
        If Max < c Then Max := c ;
        If Max < d Then Max := d ;
        Writeln (' Gia tri lon nhat la : ', Max ) ;
        Readln ;
      END .
 * Baøi 4 :
    Ñoïc ngaøy thaùng naêm , sau ñoù vieát ra maøn hình ñoù laø ngaøy thöù maáy trong tuaàn .
    GIAÛI
    Var Thu , Ngay , Thang : Byte ;
                Nam : Integer ;
      BEGIN
        Write (' Doc Ngay Thang Nam : ') ;
        Readln ( Ngay , Thang , Nam ) ;
        Nam := 1900 + ( Nam mod 1900 ) ;
        If Thang < 3 Then
          Begin
            Thang := Thang + 12 ;
            Nam := Nam - 1 ;
          End ;
        Thu := Abs ( Ngay + Thang * 2 + ( Thang + 1 ) * 3
           div 5 + Nam + Nam div 4 ) mod 7 ;
        Case Thu Of
           0 : Writeln (' Chu Nhat ') ;
           1 : Writeln (' Thu Hai ') ;



Bài tập Pascal có lời giải                                                                                         2
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


         2 : Writeln (' Thu Ba ') ;
         3 : Writeln (' Thu Tu ') ;
         4 : Writeln (' Thu Nam ') ;
         5 : Writeln (' Thu Sau ') ;
         6 : Writeln (' Thu Bay ') ;
        End ;
        Readln ;
       END .

* Baøi 5 :
   Vieát chöông trình :
     Nhaâp soá baùo danh
     Nhaäp ñieåm vaên , toaùn , ngoaïi ngöõ
     In ra maøn hình döôùi daïng :
       _ Phieáu ñieåm :
       _ Soá baùo danh :
       _ Ñieåm vaên :
       _ Ñieåm toaùn :
       _ Ñieåm ngoaïi ngöõ :
       _ Toång soá ñieåm :
     Baïn ñaõ truùng tuyeån ( hoaëc Baïn ñaõ khoâng truùng tuyeån ) vôùi ñieàu kieän Toång soá ñieåm >= 15
   hay ngöôïc laïi .
   GIAÛI
   Uses Crt ; Var SBD : Integer;
        Van , Toan , Ngoaingu , Tongdiem : Real ;
     BEGIN
       Clrscr ;
       Write (' So bao danh : ') ; Readln( SBD ) ;
       Write (' Diem toan : ') ; Readln( Toan ) ;
       Write (' Diem ngoai ngu : ') ; Readln( Ngoaingu ) ;
       Write (' Diem van : ') ; Readln ( Van ) ;
       Tongdiem := Toan + Van + Ngoaingu ;
       Clrscr ;
       Writeln (' Phieu Bao Diem ') ;
       Writeln (' So bao danh        : ', SBD ) ;
       Writeln (' Diem van           : ', Van ) ;
       Writeln (' Diem toan          : ', Toan ) ;
       Writeln (' Diem ngoai ngu : ', Ngoaingu) ;
       Writeln (' Tong diem : ', Tongdiem) ;
       If Tongdiem >= 15 Then
         Writeln(' Ban da trung tuyen ')



Bài tập Pascal có lời giải                                                                                   3
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


        Else
          Writeln(' Ban khong trung tuyen ') ;
        Readln ; END .
 * Baøi 6 :
    Vieát chöông trình nhaäp hai soá thöïc . Sau ñoù hoûi pheùp tính caàn thöïc hieän vaø in keát quaû cuûa
    pheùp tính ñoù .
      Neáu laø ‚+‛ , in keát quaû cuûa toång leân maøn hình .
      Neáu laø ‚-‛ , in keát quaû cuûa hieäu leân maøn hình .
      Neáu laø ‚/‛ , in keát quaû cuûa thöông leân maøn hình .
      Neáu laø ‚*‛ , in keát quaû cuûa tích leân maøn hình . Neáu laø ‚+‛ , in keát quaû cuûa toång leân maøn hình
    .
      Neáu laø ‚+‛ , in keát quaû cuûa toång leân maøn hình .
    GIAÛI
    Uses Crt ; Var
         a , b , kq : Real ; Pt : Char ;
      BEGIN
        Clrscr ;
        Write (' a = ') ; Readln( a ) ;
        Write (' b = ') ; Readln( b ) ;
        Write (' Phep tinh thuc hien la (+ - * /) : ') ;
        Readln( Pt ) ;
        If Pt = '+’ Then kq := a + b ;
        If Pt = '-’ Then kq := a - b ;
        If Pt = '*’ Then kq := a * b ;
        If Pt = '/’ Then kq := a / b ;
        Write ( a , pt , b , ' = ', kq ) ;
        Readln ; END .
   * Baøi 7 :
    Giaûi vaø bieän luaän phöông trình :
                 x2 + ( m – 2 ) x + 1 = 0
       ôû ñaây m laø tham soá thöïc tuyø yù .
    GIAÛI
    Uses Crt; Var          m , Delta : Real ;
      BEGIN
      Clrscr;
      Write (' m = ') ; Readln( m ) ;
      Delta := sqr( m-2 ) - 4 ;
      If Delta < 0 Then
        Writeln(' Phuong trinh vo nghiem ')
      Else
          Begin



Bài tập Pascal có lời giải                                                                                      4
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


         If Delta = 0 Then
           Writeln(' Phuong trinh co nghiem kep X= ', -( m - 2 ) / 2 )
         Else
            Begin
             Writeln(' Phuong trinh co 2 nghiem : ') ;
             Writeln (' X1 = ', ( -(m-2) + sqrt(delta) ) / 2 ) ;
             Writeln (' X2 = ', ( -(m-2) - sqrt(Delta) ) / 2 ) ;
            End ;
       End ; Readln ; END .
* Baøi 8 :
   Vieát chöông trình nhaäp hai soá töï nhieân N, M vaø thoâng baùo ‘Dung‘ neáu N , M cuøng tính chaün leõ
   , trong tröôøng hôïp ngöôïc laïi thì thoâng baùo ‘Sai‘.
   GIAÛI
   Uses Crt ;
     Var
       N , M : Integer ;
     Begin
       Clrscr ;
       Write(' N , M = ') ; Readln( N , M ) ;
       If ( (N + M) mod 2 = 0 ) Then Writeln(' Dung ! ')
       Else Writeln(' Sai ! ') ;
       Readln ;
     END .
  BAØI TAÄP CHÖÔNG 2:VOØNG LAÄP XÑ VAØ KHOÂNG XAÙC
ÑÒNH
  Söû duïng leänh For
* Baøi 1 :
   Laäp trình tính tích caùc soá töï nhieân töø 1 tôùi 10 .
   GIAÛI
      Var i : Byte ; (* chæ soá chaïy *)
           p : word ; (* tích soá *)
       BEGIN
        p := 1; (* cho giaù trò ban ñaàu cuûa tích *)
        For i := 1 to 10 Do       (* cho i chaïy töø 1 tôùi 10 *)
          p := p * i ; (* laàn löôït nhaân i vôùi p *)
        Write (' 1 * 2 * ... * 10 = ', p ) ;
        Readln ; END .
        Baøi 2 :Vieát chöông trình ñeám soá laàn xuaát hieän cuûa caùc kí töï thuoäc baûng chöõ caùi trong 50 laàn
      goõ kí töï baèng baøn phím (khoâng phaân bieät a vôùi A, b vôùi B …, duøng haøm Upcase ñeå chuyeån ñoåi
      chöõ thöôøng vôùi chöõ hoa) .
      GIAÛI


Bài tập Pascal có lời giải                                                                                      5
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

Uses Crt ; Var a : Array[ 'A'..'Z' ] of integer; (* maûng boä ñeám *)

        ch : char ;              (* bieán nhaäp kí töïù *)

       i : byte ;         (* chæ soá cuûa laàn goõ phím *)

    BEGIN

    Clrscr ;

    For ch :='A' to 'Z' Do a[ch] := 0 ; (* xaû boä ñeám *)

    Writeln (' Go phim 50 lan ') ;

    For i := 1 To 50 Do           (* thöïc hieän 100 laàn *)

     Begin

      ch :=Readkey ; (* nhaäp kí töï vaøo Ch khoâng caàn goõ Enter *)

      ch := Upcase(ch) ; (* Ñoãi chöõ thöôøng thaønh chöõ hoa *)

      a[ch] := a[ch] + 1 ;

     End;

    Writeln (' So lan xuat hien cac ki tu la :') ;

    For ch :='A' to 'Z' do (* Kieåm tra boä ñeám töø 'A' tôùi 'Z' *)

     If a[ch] > 0 Then             (* Neáu Ch coù xuaát hieän *)

      Writeln (ch , a[ch] : 4 , ' lan . ') ; (* Vieát ra maøn hình kí töï vaø

                      soá laàn xuaát hieän *)

    Readln ; END .

*         Baøi 3 :Cho soá töï nhieân n , haõy laäp trình ñeå tính caùc toång sau :

          a. a. 1 + 1/22 + 1/32 + … + 1/n2
          b. b. 1 + 1/2! + 1/3! + … + 1/n!
        GIAÛI
        a)
         Var n , i : Word ;


Bài tập Pascal có lời giải                                                                   6
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


              S : Real ;
       BEGIN
         Write (' Nhap n : ') ; Readln (n) ;
         S := 0 ;
         For i := 1 To n Do
          S := S + 1 / sqr(i) ;
         Writeln (' S = ', S:0:2) ;
         Readln ;
       END .
      b)
       Var n , i , j , p : Word ;
          S : Real ;
       BEGIN
         Write (' Nhap n : ') ; Readln(n) ;
         p := 1 ;
         s := 0 ;
         For i :=1 To n Do
          Begin
             p := p * i ;    (* tính i *)
             S := S + 1 / p ;
          End ;
         Writeln (' S = ', S:0:2) ;
         Readln ; END .
*Baøi 4 :
      Tính giaù trò cuûa bieåu thöùc sau :
        ( 1 + 1/12 ) ( 1 + 1/22 ) … ( 1 + 1/n2 )
      GIAÛI
      Var i , n : Byte ;
            p : Real ;
       Begin
        Write(' Nhap n : ') ; Readln (n) ;
        p := 1 ;
        For i := 1 To n Do p := p * ( 1 + 1/sqr(i) ) ;
        Writeln(' p = ', p:10:5 ) ;
        Readln ; End
 Söû duïng leänh While
* Baøi 5 :
   Laäp trình tính toång :
      A = 1 + 1/2 + 1/3 + … + 1/n
   ôû ñaây n laø soá töï nhieân ñöôïc nhaäp vaøo töø baøn phím .
   GIAÛI
   Uses Crt ;


Bài tập Pascal có lời giải                                                                   7
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


     Var i , n : Integer ;
           tong: Real ;
     BEGIN
       Clrscr ;
       Write (' Cho so tu nhien n : ') ; Readln (n) ;
       tong :=0 ;
       i :=1 ;
       While i <= n Do
          Begin
           tong := tong + 1/i ;
           i := i + 1 ;
          End ;
       Writeln (' Tong can tim la : ', tong:12:6 ) ;
       Readln ; END .
* Baøi 6 :
   Tính haøm luõy thöøa an , ôû ñaây a thöïc vaø n töï nhieân ñöôïc nhaäp vaøo töø baøn phím .
   GIAÛI
   Uses Crt ;
     Var i , n : Integer ;
           a , giatri : Real ;
     BEGIN
        Clrscr ;
        Write (' Cho so a : ') ; Readln(a) ;
        Write (' Cho so mu n : ') ; Readln(n) ;
        i := 1 ;
        giatri := 1 ;
        While i <= n Do
          Begin
            giatri := giatri * a ;
            i:= i+1 ;
          End ;
        Writeln(' a mu n bang : ', giatri ) ;
        Readln ; END .

* Baøi 7 :
   Vieát chöông trình nhaäp moät daõy soá toái ña 100 soá , sau ñoù in ra maøn hình caùc soá khaùc nhau .
   GIAÛI
   Uses Crt;
     Var A : Array [1..100] Of Integer;
        i , j , n : Integer ;




Bài tập Pascal có lời giải                                                                                  8
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


       BEGIN
        Clrscr ;
        Write(' Do dai cua day so N = ') ; Readln (N) ;
        For I := 1 To N Do
           Begin
             Write ('A[', i , ']= ') ; Readln ( A[i] ) ;
           End ;
        Writeln (' Cac so khac nhau la : ') ; Writeln ( A[1] ) ;
        i := 2 ;
        While i <= N Do
           Begin
             j := 1 ;
             While ( j < i ) and ( A[j] <> A[i] ) Do inc(j) ;
             If j = i Then Writeln( A[i] ) ;
             i :=i + 1 ;
           End ;       Readln ; END .

* Baøi 8 :
   Vieát chöông trình nhaäp moät daõy soá toái ña 100 soá , sau ñoù saép xeáp laïi theo thöù töï taêng daàn .
   GIAÛI
      Uses Crt;
       Var A : Array [1..100] Of Integer ;
           i , j , n , T : Integer ;

       BEGIN
        Clrscr ;
        Write(' Do dai cua day so N = ') ; Readln (N) ;
        Writeln (' Nhap day so : ') ;
        For i := 1 To N Do
          Begin
           Write('A[', i ,'] = ') ; Readln ( A[i] ) ;
          End ;
        i := 1 ;
        While (i <= n-1) Do
           Begin
            j := i+1;
            While j<=n do
               Begin
                 If A[j] < A[i] then
                   Begin
                    T := A[j];
         A[j ] := A[i];
         A[i] := T ;



Bài tập Pascal có lời giải                                                                                      9
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

                   End ;
               j := j + 1;
              End ;
            i := i + 1;
          End ;
         Writeln(' Day sau khi sap xep : ') ;
         For i := 1 To N Do Write(A[i] : 4) ;
         Readln ; END .
 Söû duïng leänh Repeat
* Baøi 9 :
   Cho moät daõy soá ñöôïc nhaäp töø baøn phím . Haõy vieát chöông trình nhaäp moät soá a roài lieät keâ taát caû
   caùc phaàn töû trong daõy lôùn hôn a.
   GIAÛI
   Uses Crt ;
     Var b : Array[1..100] Of Real;
            a : Real ;
            n , i : Byte ;
     BEGIN
        Clrscr ;
        Write ('Nhap do dai cua day so : ') ; Readln(n) ;
        Writeln (' Nhap cac phan tu cua day : ') ;
        For i := 1 To n Do
          Begin
            Write (' b[', i ,'] = ') ; Readln( b[i] ) ;
          End ;
        Write (' Nhap so thuc a : ') ; Readln(a) ;
        Writeln (' Cac phan tu lon hon a cua day : ') ;
        i:=1;
        Repeat
          If ( b[i] > a ) Then Writeln (' b[', i ,'] = ', b[i]:8:2 ) ;
          inc(i) ;
        Until i > n ;
        Readln ;
     END .


        Baøi 10 :

      Vieát chöông trình nhaäp moät daõy soá toái ña 50 soá roài in ra maøn hình caùc soá truøng nhau cuûa daõy .
      GIAÛI
       Uses crt ;
       Var a , b : Array[1..50] Of Integer ;


Bài tập Pascal có lời giải                                                                                     10
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


             n , m , i , j , k : Byte ;
             trung : Boolean ;
       BEGIN
        Clrscr ;
        Write (' Nhap do dai cua day so nguyen : ') ; Readln(n) ;
        Writeln (' Nhap cac phan tu cua day : ') ;
        For i := 1 To N do
           Begin
              Write (' a[', i ,'] = ') ; Readln( a[i] ) ;
           End ;
        i := 1 ; m := 0 ;
        Repeat
          trung := false ;
          j := i + 1;
          Repeat
             If ( j <= n ) and ( a[i] = a[j] ) Then trung := true ;     inc (j) ;
          Until trung or ( j > n ) ;
          If trung Then
            Begin
               m := m + 1;
               b[m] := a[i] ; writeln ( b[m] : 4 ) ;
            End ;
            inc(i) ;
        Until i > n ;
        If m > 1 Then
            Begin
               i := 1 ;
              Repeat
                 j := i + 1 ;
                 Repeat
                    trung := false ;
                    If b[i] = b[j] Then trung := true ;
                    If trung Then
                      Begin
            If j < m Then
                            For k := j To m - 1 Do b[k] := b[k + 1] ;
            m := m - 1 ;
            dec ( j ) ;
                      End ;
                    inc ( j ) ;
                 Until j > m ;



Bài tập Pascal có lời giải                                                               11
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


              inc ( i ) ;
            Until i > m ;
           End ;
        If m > 0 Then
          For k := 1 To m Do Write ( b[k] : 4 ) ;
          Readln ; END .
* Baøi 11 :
   Baïn coù 1000 ñ ñem göûi ngaân haøng vôùi laõi suaát 8%/thaùng . Sau moãi thaùng tieàn laõi ñöôïc nhaäp
   vaøo ñeå tính laõi suaát thaùng sau . Baïn muoán ñeå daønh cho ñeán khi soá tieàn taêng leân laø x . Vaäy phaûi
   ñeå trong bao laâu
   GIAÛI
      uses crt ;
       var
        thang : Byte ;
        tien , lai , x : Real ;

       BEGIN
        clrscr ;
        writeln (' Chuong trinh tinh thoi gian rut tien lai ') ;
        write (' So tien lai muon rut ra : ') ; readln(x) ;
        tien := 1000 ;
        thang :=1 ;
        repeat
          lai := tien * 8 / 100 ;
          tien := tien + lai ;
          thang := thang + 1 ;
        until tien >= x ;
        writeln (' Ban phai gui tien trong ', thang div 12 , ' nam ',
         thang mod 12 ,' thang .') ;
        writeln (' Khi do so tien ban rut ra duoc la ', tien:12:2 ,' dong .') ;
        readln ; END .
* Baøi 12 :
   Vieát chöông trình tìm ÖSCLN cuûa N soá ñöôïc nhaäp töø baøn phím .
   GIAÛI
      Uses crt ;
      Var a : Array [1..100] Of Integer ;
          n , i : Byte ;
          d : integer ;
      BEGIN
       Clrscr ;
       Writeln (' Tim USCLN cua N so :') ;
       Write (' Nhap so N : ') ; Readln(n) ;
       Writeln ('Nhap ', N ,' so : ') ;
       For i := 1 To n Do


Bài tập Pascal có lời giải                                                                                     12
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

        Begin
          Write(' So thu ', i ,' = ') ; Readln( a[i] ) ;
        End ;
       For i := 1 To n-1 Do
        Repeat
          d := a[i] ;
          a[i] := a[ i+1 ] mod a[i] ;
          a[i+1] := d ;
        Until a[i] = 0 ;
       Writeln (' USCLN cua ', N ,' so la : ', a[n] ) ;
       Readln ; END .
BAØI TAÄP CHÖÔNG 3:CHÖÔNG TRÌNH CON
   Baøi 1 :
    Duøng thuû tuïc chuyeån moät soá töï nhieân n cho tröôùc sang heä cô soá 2 .
    GIAÛI
     Procedure Change ( n : integer ; Var St : String ) ;
      (* thuû tuïc chuyeån soá töï nhieân n cho tröôùc sang
          heä cô soá 2 vaø ñöôïc löu ôû trong xaâu St *)
      Type
       b : Array[0 .. 1] Of Char = ('0' , '1') ;
      Var
       du , So : Integer ;
       S : String ;
      Begin
       S := '' ; (* xaâu roãng *)
       So := n ;
       Repeat
         Du := So mod 2 ;
         So :=So div 2 ;
         S := b[du] + s ;
       Until So = 0 ;
       St := S ; End ;
      Baøi 2 :Duøng thuû tuïc giaûi phöông trình baäc hai ax2 + bx + c = 0
     GIAÛI
     Uses Crt ;
     Var a, b, c, x1, x2: real;
     (*================================*)
     Procedure Nhapabc(var aa,bb,cc: real);
     Begin
      Write('a='); Readln(aa);
      Write('b='); Readln(bb);
      Write('c='); Readln(cc);
     End;
     (*=================================*)



Bài tập Pascal có lời giải                                                               13
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

     Procedure GPTB2;
     Var Delta: real;
     Begin
       Delta:=sqr(b)-4*a*c;
       If Delta<0 then Writeln('Phuong trinh vo nghiem.')
       Else
         If Delta=0 then
             Begin
               Write('Phuong trinh co nghiem kep : ');
             Write('x1,2=',-b/(2*a):8:2);
           End
         Else
           Begin
             x1:=(-b+sqrt(Delta))/(2*a);
             x2:=(-b-sqrt(Delta))/(2*a);
            Writeln('Phuong trinh co 2 nghiem phan biet la :');
             Writeln('X1=',x1:8:2, 'X2=',x2:8:2);
           End;
     End;
     (*================================*)
     BEGIN (* CT chính *)
       Clrscr;
       Writeln(' Giai Phuong Trinh Bac Hai Voi Cac He So :');
       Nhapabc(a,b,c);
       If a<>0 then GPTB2
       Else Writeln(' Khong phai phuong trinh bac hai ');
       Readln ; END .
       Baøi 3 :
     Haõy vieát laïi thuû tuïc Insert ñoái vôùi moät chuoãi kí töï cho tröôùc tuøy yù .
     GIAÛI
     Procedure Insert ( St1 : String ; Var St2 : String ;Vt : Byte ) ;
      (* cheøn xaâu St1 vaøo St2 baét ñaàu töø vò trí Vt *)
      Var i : Byte ;
           S : String ;
      Begin
       If ( Vt > length(St2) Or ( Vt < 1 ) Then
         Write(' Khong the chen ra ngoai xau ') ;
       Else
         Begin
           S := '' ; (* xaâu roãng *)
           For i := 1 To (Vt - 1) Do S := S + St2[i] ;
           S := S + St1 ;
           For i := Vt To length(St2) Do S := S + St2[i] ;
           St2 := S ;


Bài tập Pascal có lời giải                                                                14
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


         End ;
      End ;
   Baøi 4 :
    Vieát chöông trình thöïc hieän laàn löôït caùc coâng vieäc sau :
        _ Laäp thuû tuïc nhaäp ba soá thöïc döông a , b , c töø baøn phím .
        _ Laäp thuû tuïc kieåm tra xem ba soá treân coù laäp thaønh ba caïnh cuûa tam giaùc hay khoâng ?
        _ Vieát thuû tuïc tính dieän tích cuûa tam giaùc .
        _ Vieát thuû tuïc tính caùc trung tuyeán cuûa tam giaùc .
        _ Vieát hoaøn thieän chöông trình chính .
    GIAÛI
        Uses Crt;
         Var a, b, c: real ;
         (*================================*)
         Procedure Nhap(Var a, b, c: real);
           Procedure input (Var a: real; tenbien: Char);
           Begin
             Repeat
                Write('Nhap ' + tenbien+' = '); Readln(a);
             Until (a>=0);
           End;
         Begin (* baét ñaàu thuû tuïc nhaäp *)
           Input(a, 'a');
           Input(b, 'b');
           Input(c, 'c');
         End; (* keát thuùc thuû tuïc nhaäp *)
         (*================================*)
         Procedure Kiemtra(a, b, c: Real);
         Begin
           If (a<b+c) and (b<a+c) and (c<a+b) then
             Writeln(a:0:2, ', ', b:0:2, ' va ', c:0:2,
                       ' lap thanh ba canh cua tam giac ')
                Else Writeln('Khong lap thanh ba canh cua tam giac') ;
         End;
         (*===============================*)
         Procedure Trung_tuyen (a, b, c: Real);
         Var ma, mb, mc: real;
         Begin
           ma:=sqrt((2*sqr(b)+2*sqr(c)-sqr(a))/4);
           mb:=sqrt((2*sqr(a)+2*sqr(c)-sqr(b))/4);
           mc:=sqrt((2*sqr(a)+2*sqr(b)-sqr(c))/4);
           Writeln('Cac trung tuyen cua tam giac la : ') ;
           Writeln('ma=', ma:0:2, ' mb=', mb:0:2, ' mc=', mc:0:2);
         End;
         (*================================*)



Bài tập Pascal có lời giải                                                                                 15
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

               Procedure Dientich (a, b, c: real); Var p, S: real;
               Begin
                 p:=(a+b+c)/2;
                 S:=sqrt(p*(p-a)*(p-b)*(p-c));
                Writeln('Dien tich =', S:0:2);
               End;
               (*================================*)
               BEGIN (* Chöông trình chính *)
                 Clrscr;
                 Nhap(a, b, c);
                 Kiemtra(a, b, c);
                 Dientich(a, b, c);
                 Trung_tuyen(a, b, c);
                 Readln;
               END .

           Baøi 5 :Giaûi phöông trình x + y + z = 12 trong phaïm vi soá nguyeân khoâng aâm vôùi ñieàu kieän x < 4
.

           GIAÛI

Uses Crt;

    Var X, Y, Z: byte;

    Begin

     Clrscr;

     Writeln('Giai phuong trinh X+Y+Z=12 trong pham vi '

                   + 'so nguyen khong am voi dieu kien x<4');

     For X:=0 to 3 do

       For Y:=0 to 12 do

           For Z:=0 to 12 do

             If (X+Y+Z=12) then Writeln(' x=',X,' y=',Y, 'z=',Z);

     Readln;

    End.




Bài tập Pascal có lời giải                                                                                     16
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


       Baøi 6 :

     Cho tröôùc caùc soá N , a , b , c töï nhieân . Giaûi phöông trình sau trong phaïm vi soá nguyeân khoâng
     aâm x + y + z = N vôùi ñieàu kieän x < a , y < b , z < c .
     GIAÛI
     Uses Crt;
      Var N, a, b, c, X, Y, Z, i: Integer;
      Begin
        Clrscr;
        Write(' N, a, b, c = '); Readln(N, a, b,c);
        If (a+b+c-3<N) then
          Begin
             Writeln('Phuong trinh vo nghiem'); Readln;
             Exit;
          End
        Else
          Begin
             Writeln('Phuong trinh co nghiem la:');
             Writeln('x': 10, 'y': 10, 'z':10);
             i:=4;
             For X:=0 to (a-1) do
               For Y:=0 to (b-1) do
                 For Z:=0 to (c-1) do
                   If (X+Y+Z=N) then
                    Begin
                     Writeln(x: 10, y: 10, z: 10);
                     inc(i);
                     If i=24 then
                       Begin
                        Write('Nhan Enter de tiep tuc...'); Readln;
                         i :=0;
                       End;
                    End ;
          End ;
        Write('Nhan Enter de ket thuc...');
        Readln;
      End.


       Baøi 7 :




Bài tập Pascal có lời giải                                                                                 17
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


        Vieát thuû tuïc Compare ( S1 , S2 : String ; Var Kq : String ) thöïc hieän coâng vieäc sau : so saùnh
        hai xaâu S1 vaø S2 , tìm taát caû caùc kí töï coù trong caû hai xaâu treân . Xaâu Kq seõ chöùa taát caû caùc kí
        töï ñoù , moãi kí töï chæ ñöôïc nhôù moät laàn .
        GIAÛI
      Uses Crt;
       Var xau1,xau2,xau: string;
       (*==================================*)
       Procedure compare(s1, s2: string; Var kq: string);
       Var i: byte;
       (*===============================*)
       Function kt(ch: char; st: string): boolean;
       (* Kieåm tra xem kí töï Ch coù trong xaâu St khoâng . Neáu coù thì
       haøm traû veà giaù trò True . Neáu khoâng thì haøm traû veà giaù trò False *)
        Begin
          kt:=pos(ch,st)<>0;
        End;
       (*================================*)
       Begin (* Thaân cuûa thuû tuïc Compare*)
         kq:=''; (* Xaâu roãng *)
         For i:=1 to length(s1) do
            If (not kt(s1[i],kq)) and (kt(s1[i],s2)) then
              kq:=concat(kq,s1[i]);
       End;
       (*==============================*)
       BEGIN
         Clrscr;
         Writeln('Nhap 2 xau S1 va S2 :');
         Write('S1: '); Readln(xau1);
         Write('S2: '); Readln(xau2);
         Compare(xau1, xau2, xau);
         If xau<>'' then Writeln('Xau chung la: ',xau)
         Else Writeln('Khong co ki tu nao trong ca hai xau ');
         Write('Nhan ENTER de ket thuc...');
         Readln;
       END .



Baøi 8 :




Bài tập Pascal có lời giải                                                                                          18
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


     Vieát haøm tính D (St1 , St2) , vôùi U, V laø hai xaâu kí töï baát kì , laø toång soá caùc kí töï khoâng gioáng
     nhau trong hai xaâu treân , moãi loaïi kí töï chæ ñöôïc nhôù moät laàn . Ví duï D (‘aabba’ , ‘bcdd’) = 2 vì
     chæ coù hai kí töï a vaø d laø khoâng gioáng nhau trong caùc xaâu treân .
     GIAÛI
     Uses Crt;
      Const M=100;
      Var S: array[1..M] of string;
        max, min, i, j, n: byte;
      (*===============================*)
      Function D(U,V: string): byte;
      (*Traû veà toång soá loaïi kí töï khoâng gioáng nhau
      trong 2 xaâu U vaø V *)
      Var k, id: byte;
        s, luu: string;
      Begin
        luu:=''; (* Xaâu roãng *)
        For id:=1 to length(U) do
        If (pos(U[id],V)=0) and (pos(U[id],luu)=0) then
             luu:=concat(luu,U[id]);
        For id:=1 to length(V) do
          If(pos(V[id],U) = 0) and (pos(V[id],luu)=0) then
               luu:= concat(luu,V[id]);
        d:=length(luu);
      End;
      (*=================================*)
      Procedure nhap;
      Begin
        Repeat
          Write('So xau ki tu (>=2):') ; Readln(n);
          If n<2 then
              Writeln(#7,'Co ',n,' xau ki tu nen khong the '
                        + 'so sanh duoc');
        Until n>=2;
        Writeln('Nhap ',n,' xau ki tu :');
        For i:=1 to n do
          Begin
             Write('S',i,'='); Readln(S[i]);
          End;
      End ;
      (*===============================*)
      BEGIN (* Chöông trình chính *)
        Clrscr;
        nhap;
        max:=0;
        min:=255;


Bài tập Pascal có lời giải                                                                                       19
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

        For i:=1 to n-1 do
         For j:=i+1 to n do
           Begin
              If max<d(S[i],S[j]) then max:=d(S[i],S[j]);
              If min>d(S[i],S[j]) then min:=d(S[i],S[j]);
           End;
         Write('Max(d(Si,Sj)=',max,' Min(d(Si,Sj)=',min);
        Readln;
       END .

       Baøi 9 :

     Vieát chöông trình hoaøn chænh thöïc hieän caùc coâng vieäc cuûa thöïc ñôn sau :
        1. 1. Nhaäp döõ lieäu ( nhaäp soá töï nhieân n ) .
        2. 2. Phaân tích ra thöøa soá nguyeân toá ( phaân tích n thaønh tích caùc soá nguyeân toá ) .
        3. 3. Thoaùt khoûi chöông trình .
     GIAÛI
         Uses Crt;
          Type uoc_nguyen_to=array[1..50] of longint;
          Var
              u, N: longint;
              i, dem: integer;
              a: uoc_nguyen_to;
          (*================================*)
          Procedure nhap(Var NN:longint);
          Begin
            Repeat
              Write('Nhap N='); Readln(NN);
            Until NN>=0;
          End;
          (*=================================*)
          Procedure viet;
          Begin
            If dem=0 then
              Writeln('So ',N,' khong the phan tich thanh '
                      + 'tich cua cac so nguyen to')
            Else
              If dem=1 then Writeln(N, '=', a[dem])
              Else
                 Begin
                  Write(N,'=');
                   For i:=1 to dem-1 do Write(a[i],'*');
                  Writeln(a[dem]);
                 End;
          End;


Bài tập Pascal có lời giải                                                                              20
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

          (*================================*)
          Procedure phantich(N1:longint);
          Begin
            If N1>1 then
               Begin
                u:=2;
                dem:=0;
                Repeat
                  If (N1 mod u=0) then
                    Begin
                      inc(dem);
                      a[dem]:=u;
                      N1:=N1 div u;
                    End
                  Else inc(u);
                Until N1=1;
              End
            Else dem:=0;
            Viet;
          End;
          (*==============================*)
          BEGIN (* Main Program *)
            Clrscr;
            Writeln('Phan tich so N thanh tich cua cac so nguyen to :');
            nhap(N);
            phantich(N);
            Write('Nhan Enter de ket thuc ...');
            Readln;
          END .




 BAØI TAÄP CHÖÔNG 4: CAÁU TRUÙC DÖÕ LIEÄU MAÛNG

   Baøi 1 :
    Giaûi heä phöông trình tuyeán tính hai aån duøng ma traän :
                a11x + a12y = c1
                a21x + a22y = c2
    GIAÛI
    Uses Crt;
      Var a: array[1..2, 1..2] of real;
         c: array[1..2] of real;
         d, dx, dy, x, y: real;


Bài tập Pascal có lời giải                                                               21
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)



       BEGIN
        Clrscr;
        Writeln('Giai he phuong tring tuyen tinh hai an:');
        Writeln('    a11x+a12y=c1');
        Writeln('    a21x+a22y=c2');
        Writeln('Nhap cac he so cua he phuong trinh');
        Write('a11='); Readln(a[1,1]);
        Write('a12='); Readln(a[1,2]);
        Write('c1='); Readln(c[1]);
        Write('a21='); Readln(a[2,1]);
        Write('a22='); Readln(a[2,2]);
        Write('c2='); Readln(c[2]);
        d:=a[1,1]*a[2,2] - a[2,1] * a[1,2];
        dx:=c[1]*a[2,2] - c[2] * a[1,2];
        dy:=a[1,1]*c[2] - a[2,1] * c[1];
        If d=0 then Writeln(' He vo nghiem hoac vo so nghiem')
        Else
          Begin
             x:=dx/d; y:=dy/d;
            Writeln('He co nghiem duy nhat :');
            Writeln('x=', x:0:2, ' ; y=', y:0:2);
          End ;
        Readln;
       END .

       Baøi 2 :

     Laäp phöông trình taïo ra moät maûng chöùa baûng cöûu chöông .
     Uses Crt ;
      Var a : Array[1..10, 2..9] Of Byte ;
          i, j : Byte ;
      BEGIN
        Clrscr ;
        For i := 1 To 10 Do
          For j := 2 To 9 Do a[i, j] := i*j ;
        Writeln(' Bang cuu chuong : ') ; Writeln ;
        For i := 1 To 10 Do
          For j := 2 to 9 do Write ( j:4 , 'x' , i:2 , '=' , a[i , j]:2) ;
             (* heát 80 coät töï ñoäng xuoáng haøng *)
        Readln ;
      END .


Bài tập Pascal có lời giải                                                               22
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


       Baøi 3 :

     Vieát chöông trình nhaäp hai soá nguyeân döông m , n . Sau ñoù tính trung bình coäng bình phöông
     caùc soá nguyeân töø m ñeán n .
     Var m , n , k , s : Word ;
         tb : real ;

      BEGIN
         Writeln('Nhap 2 so nguyen duong m, n :') ;
         Write (' m = ') ; Readln(m) ;
         Write (' n = ') ; Readln(n);
         If m > n Then         (* ñoãi choã ñeå m <= n *)
           Begin
             k := m ; m := n ; n := k ;
           End ;
         s := 0 ;
         For k := m To n do s := s + sqr(k) ;
         tb := s / (n - m + 1) ;
         Writeln ('Trung binh cong bimh phuong cac so '
                    + 'nguyen tu m den n la: ', tb:12:2);
         Readln ;
      END .
   Baøi 4 :
   Vieát chöông trình nhaäp töø baøn phím caùc phaàn töû cuûa moät maûng hai chieàu . Kích thöôùc cuûa maûng
   ñöôïc nhaäp tröôùc töø baøn phím .
   Var m , n , i , j : Byte ;
         a : Array[1..100, 1..100] Of Real;


     BEGIN
       Write ('Nhap cac kich thuoc cua mang hai chieu : ') ;
       Write (' So hang m = ') ; Readln(m) ;
       Write (' So cot n = ') ; Readln(n) ;
       Writeln (' Nhap cac phan tu cua mang : ') ;
       For i := 1 To m Do
         For j := 1 To n Do
           Begin
            Write ('a[', i:2, ', ' , j:2 ,']=') ; Readln(a[i, j]) ;


Bài tập Pascal có lời giải                                                                                23
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


           End ;
       Readln ;
     END .

       Baøi 5 :

     Daõy soá sau ñöôïc goïi laø daõy Fibonaci :
               a1 = 1
               a2 = 1
               a3 = 2
               a4 = 3
               ...
               an = an-1 + an-2
     Vieát chöông trình tính 20 soá Fibonaci ñaàu tieân vaø ñöa ra keát quaû vaøo moät maûng 20 phaàn töû .
     Var
        a : Array[1..20] Of Byte ;
        i : Byte ;

       BEGIN
         a[1] :=1;
         a[2] :=1;
         For i:=3 to 20 do a[i]:=a[i-1]+a[i-2] ;
       END .

       Baøi 6 :

     Daõy soá an ñöôïc ñònh nghóa nhö sau :
               a1 = 1
               a2 = 2
               ...
               an = 2an-1 + an-2 ( n > 2 )
     Haõy laäp chöông trình tính vaø gaùn giaù trò cuûa daõy vaøo bieán maûng .
     Var a : Array [1..100] Of Word ;
           i, N : Byte ;
           S : Real ;

       BEGIN
        Write (' Nhap so N>=2 : ') ; Readln(n) ;
        a[1] := 1 ;
        a[2] := 2 ;
        For i := 3 To N Do a[i] := 2*a[i-1]+a[i-2] ;


Bài tập Pascal có lời giải                                                                                    24
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


        S := 0 ;
        For i := 1 to N do S := S+1/sqr(a[i]) ;
        Writeln (' S = ', S:12:6) ;
        Readln ;
       END .

       Baøi 7 :

   Nhaäp soá töï nhieân N vaø vieát chöông trình taïo maûng bao goàm N soá nguyeân toá ñaàu tieân .

     var

  a:array[1..100,1..100]of byte;

  n,i,j,k,l,ba:byte;

  d:boolean;



 BEGIN

  write(' Nhap kich thuoc cua mang hai chieu NxN. N = ');readln(n);

  for i:=1 to n do

   for j:=1 to n do

     begin

      ba:=0;

      repeat

       d:=FALSE;

       if j>1 then for k:=1 to j-1 do

         if a[i,k]=ba then d:=true;

       if i>1 then for k:=1 to i-1 do

         if a[k,j]=ba then d:=true;


Bài tập Pascal có lời giải                                                                            25
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


       ba:=ba+1;

      until not d;

      a[i,j]:=ba-1;

     end;

  for i:=1 to n do

   for j:=1 to n do write(a[i,j]:8);

  readln;

 END .

   Baøi 8 :
    Vieát chöông trình nhaäp moät baûng soá 3 x 3 vôùi ñieàu kieän caùc soá ñöôïc nhaäp seõ hieän treân maøn
    hình ñuùng taïi vò trí cuûa mình treân baûng soá .
    Uses Crt;
      Var
         a : array[1..3, 1..3] of integer ;
         i, j: byte ;

       BEGIN
        Clrscr;
        Writeln('Nhap mot bang so nguyen kich thuoc 3x3:');
        Gotoxy(10, 4); Write(1);
        Gotoxy(19, 4); Write(2);
        Gotoxy(28, 4); Write(3);
        Gotoxy(5, 6); Write(1);
        Gotoxy(5, 8); Write(2);
        Gotoxy(5,10); Write(3);
        For i:=1 to 3 do
         For j:=1 to 3 do
            Begin
             Gotoxy(9*j-1, 2*i+4); Read(a[i, j]);
             Gotoxy(9*j-1, 2*i+4); ClrEol; Write(a[i, j]:6);
           End;
        Readln;
       END .




Bài tập Pascal có lời giải                                                                                     26
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


         Baøi 9 :

       a. a. Vieát chöông trình nhaäp döõ lieäu töø daõy ñoái xöùng vaøo maûng moät chieàu .
       b. b. Vieát chöông trình nhaäp döõ lieäu laø ma traän ñoái xöùng vaøo maûng hai chieàu .

       a)

 Var a: array [1..100] of integer;

     n, i: byte;

 Begin

     Write('Nhap so phan tu cua day doi xung:');

     Readln(n);

     Writeln('Nhap cac phan tu cua day:');

     For i:=1 to (n+1) div 2 do

       Begin

         Write('a[', i:2, ']='); Readln(a[i]);

         a[n-i+1] := a[i];

       End;

     Readln ;

 END ;



b)

 Var a: array [1..100, 1..100] of integer;

     n, i, j: integer;

 BEGIN




Bài tập Pascal có lời giải                                                                        27
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


   Write('Nhap kich thuoc cua mang doi xung: ');

   Readln(n);

   Write('Nhap cac phan tu cua mang:');

     For i:=1 to n do

      For j:=1 to i do

        Begin

          Write('a[', i:2, ',', j:2, ']='); Readln(a[i, j]);

          a[j,i]:=a[i,j];

        End;

   Readln ;

 END ;

 BAØI TAÄP CHÖÔNG 5: XAÂU KYÙ TÖÏ
    Baøi 1 :
     Laäp trình ñeám soá laàn xuaát hieän ôû moãi loaïi kí töï thuoäc baûng chöõ caùi tieáng Anh trong moät xaâu kí
     töï Str .

Var A: array [ 'A'..'Z'] of integer;
   S: string;
   ch: char;
   i: integer;
 BEGIN
  Write(' Cho mot xau ki tu : '); Readln(s);
  For ch:= 'A' to 'Z' do A[ch]:=0;
  For i:=1 to length(s) do
  Begin
     If Upcase(S[i]) in (['A'..'Z']) then
       Begin
         S[i]:= Upcase(S[i]);
         A[S[i]]:= A[S[i]]+1;
       End;
  End;
  For ch:= 'A' to 'Z' do



Bài tập Pascal có lời giải                                                                                      28
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

   Writeln('So lan xuat hien cua ',ch,' trong xau la: ', A[ch]:4) ;
  Readln ;
 END .
      Baøi 2 :
       Cho soá töï nhieân n vaø xaâu coù ñoä daøi n . Haõy bieán ñoåi xaâu ñaõ cho baèng caùch thay ñoåi trong ñoù :
       a. a. Taát caû caùc daáu ! baèng daáu chaám .
       b. b. Moãi moät nhoùm caùc daáu chaám lieàn nhau baèng moät daáu chaám .
       c. c. Moät nhoùm caùc daáu chaám ñöùng lieàn nhau baèng daáu ba chaám .

        a)

 Var S: string;

  i: byte;




 BEGIN

  Write(' Cho mot xau ki tu S = '); Readln(S);

  For i:=1 to length(S) do

      If S[i] = '!' then S[i]:= '.';

  Write( ' Chuoi sau khi da bien doi la : ', S);

  Readln;

 END .




 b)

 Uses crt;

 Var S : string;

       i : byte;




 BEGIN




Bài tập Pascal có lời giải                                                                                        29
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

  Clrscr;

  Write(' Cho mot xau ki tu S = '); Readln(S);

  i:=1;

  While i< length(S) do

      If (S[i]='.')and(S[i+1]='.') then Delete(S,i,1)

      Else inc(i);

  Write('Chuoi sau khi da bien doi la: ' ,S);

  Readln;

 END .




 c)

 Uses crt;

 Var S: string;

   i, j: byte;




 BEGIN

   Clrscr;

   Write('Nhap xau S='); Readln(S);

   i:=1;

   While i<=Length(S) do

      Begin

        If S[i]='.' then

        Begin



Bài tập Pascal có lời giải                                                               30
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

         j:=i;

         While (S[i]='.')and(i<=length(S)) do inc(i);

         dec(i);

         If (i-j)=1 then insert('.',S,i)

         Else

      If (i-j)>2 then

         Begin

            Delete(S,j+2,i-j-2); i:=j+1;

         End;

      End ;

      Inc(i);

    End;

   Write('Chuoi sau khi bien doi la: ',S);

   Readln;

 END .

   Baøi 3 :
    Cho soá töï nhieân n vaø moät daõy caùc kí töï S1 , S2 , … , Sn . Haõy tìm soá töï nhieân I ñaàu tieân sao cho
    caùc kí töï Si , Si+1 ñeàu laø chöõ caùi a . Neáu trong daõy khoâng coù nhöõng caëp nhö vaäy thì thoâng baùo .

     Var S: string;

     i: integer;




 BEGIN

  Write(' Cho mot xau ki tu : '); Readln(S);

  i:= pos('aa', S); {tìm vò trí xaâu con 'aa' trong S}



Bài tập Pascal có lời giải                                                                                      31
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

  If i<>0 then Writeln(' Ton tai "aa" tai vi tri ', i)

  Else Writeln(' Khong ton tai .') ;

  Readln;

 END .

   Baøi 4 :
    Cho soá töï nhieân n vaø daõy caùc kí töï S1 , S2 , … , Sn . Bieát raèng trong daõy coù ít nhaát moät daáu
    phaåy . Haõy tìm soá töï nhieân i sao cho :
    a. a. Si laø daáu phaåy ñaàu tieân .
    b. b. Si laø daáu phaày cuoái cuøng .
     a)
      Var S: string;
         i: integer;

       BEGIN
        Write('Cho mot xau S co dau ",": '); Readln(S);
        i:= pos(',', S);  (* vò trí cuûa daáu ',' trong S *)
        If i<> 0 then Write(' Vi tri thoa man la: ', i);
        Readln;
       END .

     b)
      Var S: string;
         i: integer;

       BEGIN
        Write('Cho mot xau S co dau ",": '); Readln(S);
        i:= length(S);
        While (i>=1)and(S[i] <> ',' ) do i:=i -1;
        If i>=1 then Write('So thu tu thoa man la: ', i)
        Else Write('Khong ton tai.');
        Readln;
       END .

   Baøi 5 :
    Vieát chöông trình nhaäp moät xaâu kí töï , sau ñoù chæ ra xem xaâu ñoù coù phaûi laø xaâu ñoái xöùng
    khoâng ( xaâu ñoái xöùng laø xaâu coù caùc kí töï gioáng nhau vaø ñoái xöùng nhau qua ñieåm giöõa xaâu , ví
    duï ‘ABBA’ hoaëc ‘ABCBA’ ) .
     Uses Crt;
      Var St : string;
           dx : Boolean;



Bài tập Pascal có lời giải                                                                                       32
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

            i, len: byte;

       BEGIN
        Clrscr;
        Write(' Nhap xau St = '); Readln(St);
        dx:= True;
        i:=1;
        len:= Length(St);
        While dx and (i<=(len div 2)) do
          Begin
            dx:=(St[i] = St[len - i+1]);
            inc(i);
          End;
        If dx then Write(' St la xau doi xung ')
        Else Write(' St khong phai la xau doi xung ') ;
        Readln;
       END .

   Baøi 6 :
    Cho moät xaâu kí töï S . Haõy vieát chöông trình tính xem trong S coù bao nhieâu loaïi kí töï khaùc nhau
    ( phaân bieät chöõ in hoa vôùi chöõ in thöôøng ) . Ví duï vôùi S laø ‚Pascal‛ ta coù ñaùp soá laø 5 .
     Var S: string;
      i, j, dem: integer;
      t: boolean;

       BEGIN
        Write('Cho mot xau ki tu S: '); Readln(S);
        dem:=0;
        For i:=1 to length(S) do
         Begin
           t:=false;
           For j:=1 to i-1 do if (S[j]=S[i]) then t:=true;
           If not t then dem:= dem+1;
         End;
        Write('So ki tu khac nhau cua xau S la: ', Dem);
        Readln;
       END .

     Baøi 7 :

     Vieát chöông trình nhaäp moät xaâu kí töï vaø bieán ñoåi chuùng thaønh toaøn chöõ in hoa .
     Var S : string;
           i : integer;

       BEGIN


Bài tập Pascal có lời giải                                                                               33
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

        Write('Cho mot xau ky tu: '); Readln(S);
        For i:=1 to length(S) do
         If S[i] in ['a' ..'z'] then S[i]:= Upcase(S[i]);
        Write('Chuoi sau khi da bien doi la: ', S);
        Readln;
       END .
   Baøi 8 :
    Hoï teân moät hoïc sinh ñöôïc nhaäp töø baøn phím . Baïn haõy vieát chöông trình ñieàu chænh laïi caùc kí
    töï ñaàu cuûa caùc töø ñôn trong teân cuûa hoïc sinh aáy trôû thaønh chöõ in hoa .
     Uses crt;
      Const Chu=['a'..'z'];
      Var Hoten: string;
           i,len: byte;

       BEGIN
        Clrscr;
        Write('Ho ten='); Readln(Hoten);
        Len:=length(Hoten);
        If Hoten[1] in Chu then Hoten[1]:=Upcase(Hoten[1]);
        For i:=2 to len do
          If (Hoten[i-1]=#32)and(Hoten[i] in Chu) then
            Hoten[i]:=Upcase(Hoten[i]);
        Write('Ho ten sau khi dieu chinh la: ', Hoten);
        Readln;
       END .
   Baøi 9 :
    Vieát chöông trình nhaäp xaõu kí töï töø baøn phím , sau ñoù goït xaâu laïi baèng caùch caùch xoaù ñi caùc kí
    töï troáng ôû hai ñaàu cuûa xaâu . Ví duï neáu nhaäp xaâu ‚ Ha noi ‚ , thì keát quaû seõ laø ‚Ha Noi‛ .
     ar S: String;

       BEGIN
        Write('Cho mot xau ky tu: '); Readln(S);
        While S[1] = #32 do Delete(S,1,1);
        While (S[length(S)] = #32) do Delete(S,length(S),1);
        Write('Chuoi sau khi da bien doi la: ', S);
        Readln;
       END .
BAØI TAÄP CHÖÔNG 6: DÖÕ LIEÄU KIEÅU TAÄP

   Baøi 1 :
    Baïn haõy vieát haøm Card(A) ñeám soá phaàn töû cuûa taäp hôïp A cho tröôùc coù kieåu Set Of 0 .. 99 .
    (* haøm ñeám soá phaàn töû cuûa taäp hôïp *)
      Uses Crt;


Bài tập Pascal có lời giải                                                                                    34
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


       Type Tap=set of 0..99;
       Const inp='Number.dat';
       Var S : Tap;
             i : byte;

       Procedure Nhap;
       Var a: byte; f: text;
       Begin
       S:=[];
       Assign(f,inp); Reset(f);
       While not SeekEoF(f) do
         begin
          Readln(f,a); If (a>=0)and(a<=99) then S:=S+[a];
         End;
       Close(f);
       End;

       Function Card(S: Tap): byte;
       Var i,n: byte;
       Begin
       n:=0;
       For i:=0 to 99 do If i in S then Inc(n);
       Card:=n;
       End;

       BEGIN
       Nhap;
       Clrscr;
       Write('Tap S co ',Card(S),' phan tu.');
       Readln;
       END.

   Baøi 2 :
    Baïn haõy laäp chöông trình taïo moät taäp hôïp caùc soá nguyeân chaün kieåu Byte vaø loaïi khoûi noù caùc
    soá chia heát cho 3 . Keát quaû theå hieän treân maøn hình .
     Uses Crt;
      Const n=5;
      Type
        Danhsach=record
           holot: string[25];
           ten: string[10];
           tuoi: 0..99;



Bài tập Pascal có lời giải                                                                                   35
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

             lop: string[3];
          End ;
       Var ds: array [1..20] of Danhsach;
          i,j: byte;
          f: file of Danhsach;

       Procedure Doi(i,j: byte);
       Var tg: Danhsach;
        Begin
         tg:=ds[i];
         ds[i]:=ds[j];
         ds[j]:=tg;
        End;

       BEGIN
        ClrScr;
        Writeln('Nhap danh sach hoc sinh tu file data.dat : ');
        Writeln;
        Assign(f,'data.dat'); Reset(f);
        For i:=1 to n do Read(f,ds[i]);
        Close(f);
        For i:=1 to n-1 do
         For j:=i+1 to n do
         begin
          If (ds[i].ten>ds[j].ten) then Doi(i,j)
          Else
            If (ds[i].ten=ds[j].ten)and(ds[i].holot>ds[j].holot) then Doi(i,j);
         end;
        Writeln('Danh sach hoc sinh:');
        For i:=1 to n do
         With ds[i] do Writeln(holot:20,ten:11,tuoi:4,lop:5);
        Writeln;
        Write('Bam Enter de ket thuc...');
        Readln;
       END.
   Baøi 3 :
    Xeùt chöông trình sau :
            Program B4 ;
            Var
              Thoat : Set Of Char = [‘e’ , ’E’] ;

            BEGIN
             Write (‘ Hay go E de ket thuc : ‘) ;
             Repeat



Bài tập Pascal có lời giải                                                               36
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


              Ch := Readkey ;
             Until Ch in thoat ;
           END .
     Haõy tìm vaø söûa loãi trong chöông trình ñoù .
     Uses Crt;
      Const
       thoat: set of char=['e','E'];
      Var
       ch: char;

       BEGIN
       Write('Hay go E de thoat khoi chuong trinh: ');
       Repeat
        ch:=readkey;
       Until ch in thoat;
       END .

   Baøi 4 :
    Baïn haõy laäp chöông trình hieån thò moät menu daïng sau treân maøn hình

            1. Xem
            2. 2. Sua chua
            3. 3. Loai bo
            4. 4. Nhap them
            5. 5. Thoat
            Lua chon cua ban : _
     Sau ñoù ñôïi goõ phím . Chöông trình phaûi ñôïi cho tôùi khi phím goõ vaøo laø moät trong caùc chöõ soá 1
     .. 5 hoaëc caùc chöõ caùi ñaàu cuûa caùc tuyø choïn thì thoâng baùo phím goõ vaøo hôïp leä vaø keát thuùc
     chöông trình . Trong chöông trình phaûi duøng moät taäp hôïp ñeå kieåm tra vieäc nhaäp giaù trò cho
     bieán töø baøn phím .
     (* Hieån thò menu *)
      Uses Crt;
      Const
        menu: set of char = ['1'..'5','X','S','L','N','T'];
      Var
        ch: char;

       BEGIN
       Clrscr;
       Writeln('   1. Xem ');
       Writeln('   2. Sua chua ');
       Writeln('   3. Loai bo ');
       Writeln('   4. Nhap them');
       Writeln('   5. Thoat ');


Bài tập Pascal có lời giải                                                                                  37
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

       Write('Lua chon cua ban: ');
       Repeat
        ch:=readkey; ch:=Upcase(ch);
       Until ch in menu;
       Writeln;
       Write('Ban da chon:');
       Case ch of
         '1','X': Writeln(' 1. Xem ');
         '2','S': Writeln(' 2. Sua chua ');
         '3','L': Writeln(' 3. Loai bo ');
         '4','N': Writeln(' 4. Nhap them');
         '5','T': Writeln(' 5. Thoat ');
        End;
       Readln;
       END.
   Baøi 5 :
    Haõy laäp chöông trình nhaäp vaøo moät xaâu nhò phaân . Caùc kí töï nhaäp vaøo khoâng hôïp leä bò boû qua
    .
     (* nhaäp moät xaâu nhò phaân *)
      Uses Crt;
      Const bit : set of char= ['0','1'];
      Var ch: char;
           st: string;

       BEGIN
       Clrscr;
       st:='';
       Write('Nhap vao mot xau nhi phan : ');
       Repeat
        ch:= Readkey;
        If ch in bit then
          begin
           st:=st+ch; Write(ch);
          end
        Else If ch<>#13 then Write(#7);
       Until ch=#13;
       Readln;
       END.
   Baøi 6 :
    Haõy laäp chöông trình nhaäp vaøo moät xaâu kí töï töø baøn phím . Yeâu caàu caùc kí töï nhaäp vaøo phaûi laø
    caùc chöõ caùi thuoäc baûng chöõ caùi tieáng Anh , boû qua caùc phím khaùc .
     (* Nhaäp moät xaâu toaøn caùc chöõ caùi *)
      Uses Crt;
      Const A:set of char=['a'..'z','A'..'Z'];
      Var ch: char;


Bài tập Pascal có lời giải                                                                                    38
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

          st: string;

       BEGIN
       Clrscr;
       st:='';
       Writeln('Nhap vao mot xau toan cac chu cai:');
       Repeat
        ch:=Readkey;
        If ch in A then
          begin
           st:=st+ch; write(ch);
          End
        Else if ch<>#13 then Write(#7);
        If ch=#0 then ch:=Readkey;
       Until ch = #13;
       END .

   Baøi 7 :
    Vieát chöông trình coù chöùc naêng theâm phaàn töû vaøo taäp hôïp tröïc tieáp töø baøn phím vaø loaïi bôùt
    phaàn töû khoûi taäp hôïp cuõng tröïc tieáp töø baøn phím .
     (* loai bo cac phan tu khoi tap hop *)
      Uses Crt;
      Var tap: set of char;
            ch: char;

       BEGIN
       tap:=[];
       Writeln('Nhap cac phan tu cho mot tap hop cac ki tu: ');
       Repeat
        ch:=ReadKey;
        tap:=tap+[ch];
        Writeln(ch);
       Until not(ch in ['a'..'z']);
       Writeln('Cac phan tu cua tap hop la:');
       For ch:='a' to 'z' do
        If ch in tap then Write(ch,' ');
       Writeln;
       Writeln('Ban muon bo cac phan tu nao khoi tap hop:');
       Repeat
        ch:=ReadKey;
        tap:=tap-[ch];
        Writeln(ch);
       Until not(ch in ['a'..'z']);
       Writeln('Cac phan tu con lai cua tap hop la:');
       For ch:='a' to 'z' do


Bài tập Pascal có lời giải                                                                                       39
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

        If ch in tap then Write(ch,' ');
       Readln;
       END .
BAØI TAÄP CHÖÔNG 7: KIEÅU RECORD

   Baøi 1 :
    Thoâng tin veà moãi hoïc sinh goàm :
                    Hoï ñeäm : moät xaâu 25 kí töï .
                    Teân : moät xaâu 10 kí töï .
                    Tuoåi : moät soá nguyeân hai chöõ soá .
                    Lôùp : moät xaâu hai chöõ soá vaø moät chöõ caùi vieát hoa
    Haõy laäp chöông trình nhaäp töø baøn phím danh saùch moät lôùp 15 hoïc sinh vaøo moät maûng baûn ghi .
    Sau ñoù hieån thò danh saùch leân maøn hình , moãi ngöôøi moät doøng .

       (* Nhaäp danh saùch hoïc sinh töø baøn phím *)
       Uses Crt;
       Const n=15;
       Type Danhsach=record
         holot: string[25];
         ten: string[10];
         tuoi: 0..99;
         lop: string[3];
                  End;
       Var ds: array [1..n] of Danhsach;
             i : byte;

       BEGIN
       ClrScr;
       Writeln('Hay nhap danh sach hoc sinh : ');
       Writeln;
       For i:=1 to n do
        Begin
         Writeln('Thong tin hoc sinh thu ',i);
         Write('Cho ho lot : '); Readln(ds[i].holot);
         Write('Cho ten : '); Readln(ds[i].ten);
         Write('Cho tuoi : '); Readln(ds[i].tuoi);
         Write('Cho lop : '); Readln(ds[i].lop);
         Writeln;
        End;
       Writeln('Danh sach hoc sinh :');
       For i:=1 to n do
        With ds[i] do Writeln(holot:20,ten:10,tuoi:4,lop:5);
       Writeln;


Bài tập Pascal có lời giải                                                                              40
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

       Write('Bam Enter de ket thuc...');
       Readln;
       END.
   Baøi 2 :
    Thoâng tin veà moãi hoïc sinh laø moät baûn ghi goàm caùc tröôøng :
                    Hoïñeäm : moät xaâu 25 kí töï .
                    Teân : moät xaâu 10 kí töï .
                    Tuoåi : moät soá nguyeân hai chöõ soá .
                    Lôùp : moät xaâu hai chöõ soá vaø moät chöõ caùi vieát hoa
    Moät file baûn ghi chöùa moät danh saùch moät lôùp goàm 20 hoïc sinh . Haõy laäp chöông trình hieån thò
    danh saùch leân maøn hình , moãi ngöôøi moät doøng .

     (* Doc tu mot file ban ghi *)
      Uses Crt;
      Const n=5;
      Type Danhsach=record
                holot: string[25];
                ten: string[10];
                tuoi: 0..99;
                lop: string[3];
               end;
      Var ds: Danhsach;
         i: byte;
         f: file of Danhsach;

       BEGIN
       ClrScr;
       Writeln('Danh sach hoc sinh tu file bai2.dat');
       Writeln;
       Assign(f,'bai2.dat'); Reset(f);
       For i:=1 to n do
        Begin
         Read(f,ds);
         With ds do Writeln(holot:20,ten:11,tuoi:4,lop:5);
        End;
       Close(f);
       Writeln;
       Write('Bam Enter de ket thuc...');
       Readln;
       END .
   Baøi 3 :
    Moät file baûn ghi chöùa moät danh saùch hoïc sinh , thoâng tin veà moãi hoïc sinh gioáng nhö baøi treân .
    Haõy laäp chöông trình taïo moät file baûn ghi khaùc chöùa danh saùch ñoù , moãi baûn ghi goàm caùc
    tröôøng :


Bài tập Pascal có lời giải                                                                                   41
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


                         Hoïteân : moät xaâu 35 kí töï .
                         Tuoåi : moät soá nguyeân hai chöõ soá .
                         Khoái : moät soá nguyeân hai chöõ soá .
                         Lôùp : moät chöõ caùi vieát hoa

     (* Doi kieu ban ghi *)

 Uses Crt;

 Type Danhsach1=record

           holot: string[25];

           ten: string[10];

           tuoi: 0..99;

           lop: string[3];

          End;

       Danhsach2=record

           hoten: string[35];

           tuoi: byte;

           khoi: byte;

           lop: char;

          End;




 Var ds1 : Danhsach1;

     ds2 : Danhsach2;

     f1 : file of Danhsach1;

     f2 : file of Danhsach2;

     c : integer;




Bài tập Pascal có lời giải                                                               42
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)




 BEGIN

  ClrScr;

  Writeln('Ghi tu file bai3.dat sang bai3n.dat:');

  Writeln;

  Assign(f1,'bai3.dat'); Reset(f1);

  Assign(f2,'bai3n.dat'); Rewrite(f2);

  While not Eof(f1) do

   Begin

    Read(f1,ds1);

    With ds1 do

     Begin

       ds2.hoten:=holot+ten;

       val(copy(lop,1,2),ds2.khoi,c);

       ds2.tuoi:=tuoi;

       ds2.lop:=UpCase(lop[3]);

       Write(f2,ds2);

     End;

   End;

  Close(f1); Close(f2);

  Writeln;

  Writeln('Bam Enter de ket thuc!');

  Readln;



Bài tập Pascal có lời giải                                                               43
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

 END .


   Baøi 4 :
    Moät file baûn ghi chöùa moät danh saùch hoïc sinh PTTH , thoâng tin veà moãi hoïc sinh ngoaøi caùc
    tröôøng Hoïñeäm , Teân , Tuoåi , Lôùp gioáng nhö caùc baøi treân coøn coù theâm tröôøng Ñieåm chöùa ñieåm
    trung bình cuûa hoïc sinh trong naêm hoïc . Haõy laäp chöông trình :
    a. a. Hieån thò leân maøn hình danh saùch nhöõng hoïc sinh gioûi nhaát cuûa tröôøng laø nhöõng baïn coù
         ñieåm trung bình töø 8.0 trôû leân vaø cao nhaát trong khoái .
    b. b. Laäp danh saùch hoïc sinh trong naêm hoïc môùi , bieát moät hoïc sinh coù ñieåm trung bình töø 5.0
         trôû leân thì ñöôïc leân lôùp . Chuù yù : lôùp 10A leân lôùp 11A , lôùp 11A leân 12A ... Keát quaû chöùa
         trong file .
     (* Khen thuong va len lop *)
      Uses Crt;
      Type Danhsach=record
              holot: string[25];
              ten: string[10];
              tuoi: 0..99;
              lop: string[3];
              diem: real;
            End;

       Var ds: array [1..100] of Danhsach;
            f: file of Danhsach;
           n: integer;

       Procedure Nhap;
       Begin
       Assign(f,'bai4.dat'); Reset(f);
       n:=0;
       While not Eof(f) do
         Begin
          n:=n+1; Read(f,ds[n]);
         End;
        Close(f);
       End;

       Procedure Timgioi;
       Var i: integer;
           max10,max11,max12: real;
           l: string;
       Begin
        max10:=0; max11:=0; max12:=0;
        For i:=1 to n do With ds[i] do



Bài tập Pascal có lời giải                                                                                     44
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

         Begin
          l:=copy(lop,1,2);
          If (l='10')and(diem>max10)and(diem>8.0) then max10:=diem
          Else If (l='11')and(diem>max11)and(diem>8.0) then max11:=diem
               Else If (l='12')and(diem>max12)and(diem>8.0) then max12:=diem;
         End;
        Writeln('Hoc sinh gioi nhat khoi 10 : ');
        For i:=1 to n do With ds[i] do
         If (copy(lop,1,2)='10')and(diem>=max10) then
            Writeln(holot:20,ten:10,tuoi:4,lop:5,diem:5:1);
        Writeln('Hoc sinh gioi nhat khoi 11 : ');
        For i:=1 to n do With ds[i] do
         If (copy(lop,1,2)='11')and(diem>=max11) then
            Writeln(holot:20,ten:10,tuoi:4,lop:5,diem:5:1);
        Writeln('Hoc sinh gioi nhat khoi 12 : ');
        For i:=1 to n do With ds[i] do
         If (copy(lop,1,2)='12')and(diem>=max12) then
            Writeln(holot:20,ten:10,tuoi:4,lop:5,diem:5:1);
       End;

       Procedure Lenlop;
       Var i: integer;
           l: string;
           f: file of Danhsach;
       Begin
       For i:=1 to n do With ds[i] do
         Begin
          l:=copy(lop,1,2);
          If (l='10')and(diem>=5.0) then lop:='11'+lop[3]
          Else If (l='11')and(diem>=5.0) then lop:='12'+lop[3]
             Else If (l='12')and(diem>=5.0) then lop:='DTN';
         End;
       Assign(f,'bai4n.dat'); Rewrite(f);
       For i:=1 to n do With ds[i] do
         If lop<>'DTN' then Write(f,ds[i]);
       Close(f);
       End;

       BEGIN
        ClrScr;
        Nhap;
        Timgioi;
        Lenlop;
        Write('Bam ENTER de ket thuc...');
        Readln;



Bài tập Pascal có lời giải                                                               45
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

       END .
   Baøi 5 :
    Cho file baûn ghi f chöùa döõ lieäu veà kho saùch , döõ lieäu veà moãi cuoán saùch ñöôïc chöùa trong moät
    baûn ghi goàm 3 tröôøng mang thoâng tin veà :
                     Hoï teân taùc giaû : moät xaâu 26 kí töï .
                     Teân saùch : moät xaâu 40 kí töï .
                     Naêm xuaát baûn : moät soá nguyeân 4 chöõ soá .
    Haêy laäp chöông trình nhaäp döõ lieäu vaøo kho saùch , sau ñoù tìm ra :
                     Nhöõng cuoán saùch cuûa moät taùc giaû cho tröôùc xuaát baûn vaøo moät naêm cho tröôùc .
                     Nhöõng cuoán saùch coù teân cho tröôùc .
    Keát quaû hieän treân maøn hình.

   (* Tim kiem tren ban ghi *)
    Uses Crt;
    Type Danhsach=record
             Tacgia: string[26];
             Tensach: string[40];
             NamXB: integer;
            End;
    Var ds: array [1..100] of Danhsach;
         n : integer;
         f : file of Danhsach;
        M: Danhsach;

     Procedure Nhap;
      Begin
       n:=0;
       Assign(f,'bai5.dat'); Reset(f);
       While not Eof(f) do
        Begin
         Inc(n); Read(f,ds[n]);
        End;
       Close(f);
      End;

     Procedure TheoTG;
     Var tacgia: string;
          namXB: integer;
          i: integer;
     Begin
      Write('Cho ten tac gia : '); Readln(M.tacgia);
      Write('Cho nam xuat ban : '); Readln(M.NamXB);
       i:=1;
      While (i<=n)and((ds[i].tacgia<>tacgia)or(ds[i].namXB<>namXB)) do i:=i+1;



Bài tập Pascal có lời giải                                                                                   46
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

       If (i>n) then Writeln('Khong tim duoc')
         Else Writeln(ds[i].tacgia:28,ds[i].tensach:42,ds[i].namXB:6);
     End;

     Procedure TheoTS;
     Var ten: string;
        i: integer;
     Begin
      Write('Cho ten sach : '); Readln(ten);
      i:=1;
      While (i<=n)and(ds[i].tensach<>ten) do i:=i+1;
        If (i>n) then Writeln('Khong tim duoc')
           Else Writeln(ds[i].tacgia:28,ds[i].tensach:42,ds[i].namXB:6);
     End;

     Procedure Timkiem;
     Var c:char;
     Begin
      Writeln('1. Tim kiem theo tac gia va nam xuat ban.');
      Writeln('2. Tim kiem theo ten sach');
      Writeln;
      Write('Ban chon [1/2] : ');
      Repeat
        c:=Readkey;
      Until pos(c,'12')>0;
      Writeln(c);
      If c='1' then TheoTG Else TheoTS;
     End;

     BEGIN
      ClrScr;
      Nhap;
      Timkiem;
      Write('Ban Enter de ket thuc...');
      Readln;
     END.
   Baøi 6 :
    File baûn ghi F chöùa danh saùch caùc ngaøy leã trong moät naêm , moãi baûn ghi goàm ngaøy thaùng , teân
    ngaøy leã vaø soá ngaøy ñöôïc nghæ . Haõy laäp chöông trình nhaäp danh saùch caùc ngaøy leã vaø tính :
                      Toång soá caùc ngaøy leã vaø toång soá caùc ngaøy nghæ leã trong naêm .
                      Toång soá caùc ngaøy leã vaø toång soá caùc ngaøy nghæ leã trong quí 1 , quí 2 , …
    Keát quaû theå hieän treân maøn hình .

       (* Tinh so ngay le va ngay nghi trong nam ,qui *)
       Uses Crt;


Bài tập Pascal có lời giải                                                                                 47
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

       Type Danhsach=record
              ngay: byte;
              thang: byte;
              ten: string[15];
              songay: integer;
              end;
       Var ds: array [1..100] of Danhsach;
        n: integer;
        f: file of Danhsach;
        snn,snnq1,snnq2,snnq3,snnq4: integer;
        tsq1,tsq2,tsq3,tsq4: integer;

       Procedure Nhap;
       Begin
       n:=0;
       Assign(f,'bai6.dat'); Reset(f);
       While not Eof(f) do
       Begin
         Inc(n); Read(f,ds[n]);
       End;
       Close(f);
       End;

       Procedure Tinh_ngay_nghi;
       Var i: integer;
       Begin
       snn:=0;
       snnq1:=0; tsq1:=0;
       snnq2:=0; tsq2:=0;
       snnq3:=0; tsq3:=0;
       snnq4:=0; tsq4:=0;
       For i:=1 to n do With ds[i] do
       Begin
         Inc(snn,songay);
         If (thang<3) then
          Begin
            Inc(snnq1,songay); Inc(tsq1);
          End
         Else If (thang<6) then
          Begin
            Inc(snnq2,songay); Inc(tsq2);
          End;
         If (thang<9) then
          Begin
            Inc(snnq3,songay); Inc(tsq3);



Bài tập Pascal có lời giải                                                               48
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

         End ;
        If (thang<12) then
        Begin
         Inc(snnq4,songay); Inc(tsq4);
        End;
       End;
       End;

       Procedure Inkq;
       Var i: integer;
       Begin
       Writeln('So ngay le trong nam : ',n);
       Writeln('Tong so ngay nghi le trong nam : ',snn);
       Writeln;
       Writeln('So ngay le trong qui 1 : ',tsq1);
       Writeln('Tong so ngay nghi le trong qui 1 : ',snnq1);
       Writeln('So ngay le trong qui 2 : ',tsq2);
       Writeln('Tong so ngay nghi le trong qui 2 : ',snnq2);
       Writeln('So ngay le trong qui 3 : ',tsq3);
       Writeln('Tong so ngay nghi le trong qui 3 : ',snnq3);
       Writeln('So ngay le trong qui 4 : ',tsq4);
       Writeln('Tong so ngay nghi le trong qui 4 : ',snnq4);
       Writeln;
       End;
       BEGIN
       Clrscr;
       Nhap;
       Tinh_ngay_nghi;
       Inkq;
       Write('Ban Enter de ket thuc...');
       Readln;
       END.
BAØI TAÄP CHÖÔNG 8: KIEÅU FILE

   Baøi 1 :
    Haõy laäp chöông trình taïo moät teäp soá nguyeân chöùa caùc soá nguyeân toá nhoû hôn 10000 theo thöù töï
    taêng daàn .
     (* Taïo file soá nguyeân toá nhoû hôn 10000 *)
      Uses Crt;
      Const N=10000;
      Var i , j : Integer;
            f: File of Integer;
            a: Array[2..N] of boolean;



Bài tập Pascal có lời giải                                                                                 49
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)



       BEGIN
        For i:=2 to N do a[i]:=true;
        i:=2;
        Repeat
          For j:=2 to (N div i) do a[i*j]:=false;
          Repeat Inc(i) Until a[i] or (i>N);
        Until i>N;
        Assign(F,'C:SoNT.dat'); Rewrite(F);
           For i:=1 to N do If a[i] then Write(F,i);
        Close(F);
        clrscr;
        Write(' Viet ra file "C:SoNT" cac so nguyen to nho hon 10000 ');
        Readln;
       END .
   Baøi 2 :
    Cho f laø teäp vaên baûn chöùa caùc xaâu 10 kí töï . Haõy laäp chöông trình nhaäp vaø hieån thò noäi dung
    file ñoù leân maøn hình , moãi xaâu moät doøng , ñaày trang maøn hình thì döøng laïi ñôïi goõ Enter môùi
    hieån thò trang tieáp theo cho tôùi heát.
     (* Ghi vaø ñoïc file of String *)
      Uses Crt;
      Const INP='FoString.dat';
      Type String10 = String[10];

       Procedure Ghi;
       Var f: file of String10; S: String10;
       Begin
        Assign(f,INP); Rewrite(f);
        Writeln('Nhap vao f. Thoi nhap khi S='''' (go Enter)!');
        Readln(S);
        While (S<>'') do
        Begin
         Write(f,S);
         Readln(S);
        End;
        Close(f);
       End;

       Procedure Doc;
       Var f: file of String10; S: String10;
       Begin
        Clrscr;
        Assign(f,INP); Reset(f);
        While Not Eof(f) Do
        Begin


Bài tập Pascal có lời giải                                                                                      50
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

         Read(f,S);
         Writeln(S);
         If WhereY=25 then
         Begin
          Write('Press Enter to continue..');
          Readln; Clrscr;
         End;
        End;
        Close(f);
        Readln;
       End;

       BEGIN
        Ghi;
        Doc;
       END.
   Baøi 3 :
    Baïn haõy vieát chöông trình cho pheùp ñoïc döõ lieäu töø baøn phím vaø ghi theâm vaøo cuoái moät teäp caùc
    baûn ghi .

       (* Doc vaø ghi vaøo cuoái teäp caùc baûn ghi *)
       Uses Crt;
       Const inp='Hocsinh.dat';
       Type Hocsinh=Record
              Ten : String[30];
              Tuoi: Byte;
              End;
       Var F : file of Hocsinh;
           Hs: Hocsinh;

       BEGIN
        Assign(f,inp); Reset(f);
        Write('Ho va ten: '); Readln(Hs.Ten);
        Write('Tuoi : '); Readln(Hs.Tuoi);
        Seek(f,Filesize(F));
        Write(f,Hs);
        Close(f);
       END .
   Baøi 4 :
    Cho moät vaên baûn chöùa trong moät text file f . Trong vaên baûn , tính töø traùi sang phaûi , töø treân
    xuoáng döôùi , kí töï # laø kí hieäu xoaù ñi moät töø ñöùng ngay tröôùc noù neáu coù . Ví duï ‘#Ta#oi di
    ngu#h###hoc’ coù nghóa laø ‘Toi di hoc’ . Baïn haõy vieát chöông trình söûa laïi file f theo quy öôùc
    treân .
     (* Söûa vaên baûn *)



Bài tập Pascal có lời giải                                                                                      51
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

       Uses Crt;
       Const fi='vanban.txt';
       Var f: text;
           s: string;
           ch: char;

       Procedure docfile ( fi : String );
       Var f : text ;
        Begin
         Assign(f,fi); Reset(f);
         while not eof(f) do
         Begin
          Read(f,ch);
          Write(ch);
         End;
         close(f) ;
         writeln ;
        End ;

       BEGIN
        Writeln(' Van ban ban dau doc tu file "vanban.txt" :') ;
        docfile(fi) ;

        assign(f,fi) ; reset(f) ;
        s:='';
        Repeat
         Read(f,ch);
         If (ch='#')then Delete(s,length(s),1) Else s:=s+ch;
        Until Eof(f);
        Close(f);
        Assign(f,fi); Rewrite(f);
        Writeln(f,s);
        Close(f);

        Writeln(' Van ban sau khi sua chua :') ;
        docfile(fi) ;
        Readln;
       END .

     Baøi 5 :

     Cho 2 file f vaø g cuøng kieåu ( nhöng khoâng roõ kieåu naøo ) . Baïn haõy laäp thuû tuïc gaùn noäi dung cuûa
     file g cho file f.
     (* Gan hai file *)
      Uses Crt;


Bài tập Pascal có lời giải                                                                                     52
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

       Const
         f1='calc.ex';
         f2='C:calc.exe';

       Procedure Copyfile(fi1,fi2: string);
       Var nread,nbuf: word;
          buf: array [1..1024] of byte;
          f1,f2: file;
       Begin
        Assign(f1,fi1); Reset(f1,1);
        Assign(f2,fi2); Rewrite(f2,1);
        nbuf:=1024;
        Repeat
         Blockread(f1,buf,nbuf,nread);
         Blockwrite(f2,buf,nread);
        Until nread<>nbuf;
        Close(f1); Close(f2);
       End;

       BEGIN
        Copyfile(f1,f2);
       END.
   Baøi 6 :
    Cho moät file text ghi laïi moät chöông trình Pascal cuûa moät hoïc sinh . Haõy vieát chöông trình
    kieåm tra loãi cuûa chöông trình Pascal treân theo caùc caùch sau ñaây :
    Caùch 1 : Kieåm tra xem soá löôïng caùc daáu ‘ ( daáu môû vaø daáu ñoùng ) coù baèng nhau khoâng ?
    Caùch 2 : Kieåm tra xem soá löôïng caùc töø Begin vaø End coù baèng nhau khoâng ?

       (* Dem (') vaø 'Begin' , 'End' *)
       Uses Crt;
       Const fi='C8_6.txt';

       Function Dem(c: string): integer;
       Var n,l: integer; f: text; S: string;
       Begin
        l:=Length(c); n:=0;
        Assign(f,fi); Reset(f);
        While not Eof(f) do
        Begin
          Readln(f,S);
          While pos(c,s)<>0 do
          Begin
            Inc(n); Delete(s,pos(c,s),l);
          End;
        End;


Bài tập Pascal có lời giải                                                                               53
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

        Close(f);
        Dem:=n;
       End;

       BEGIN
        Clrscr;
        Write(' So luong cac dau ( va ) ');
        If Dem('(')<>Dem(')') then Writeln('khong bang nhau.')
        Else Writeln('bang nhau.');
        Write(' So luong cac tu Begin va End ');
        If Dem('End')<>Dem('Begin') then Writeln('khong bang nhau.')
        Else Writeln('bang nhau.');
        Readln;
       END .
   Baøi 7 :
    Cho moät file text . Haõy vieát chöông trình ñeám xem file text treân chöùa bao nhieâu töø .
    ( Chuù yù : theo quy ñònh , caùc töø caùch nhau bôûi moät hay nhieàu daáu caùch ) .
     (* Ñeám töø *)
      Uses Crt;
      Const fi = 'hoten.txt';
      Var f: text;
           s: string;
           dem: word;

       BEGIN
        Clrscr;
        dem:=0;
        Assign(f,fi); Reset(f);
        While not Eof(f) do
        Begin
         Readln(f,s);
         While s[1]=' ' do Delete(s,1,1);
         While length(s)>0 do
         Begin
          Case s[1] of
            ' ': While (s[1]=' ')and(length(s)>0) do Delete(s,1,1);
            Else
                 Begin
                  inc(dem);
                  While (s[1]<>' ')and(length(s)>0) do Delete(s,1,1);
                 End;
          End;
         End;
        End;
        Close(f);


Bài tập Pascal có lời giải                                                                         54
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

        Write(' So tu co trong file hoten.txt la: ',dem);
        Readln;
       END.
   Baøi 8 :
    Cho moät file text . Vieát chöông trình loaïi boû caùc khoaûng troáng thöøa beân trong file text naøy .

     (* Cat khoang trong thua *)
      Uses Crt;
      Const fi = 'file.inp';
             fo = 'C:file.out';
      Var inp,out: text;
            s: string;

       BEGIN
        Assign(inp,fi); Reset(inp);
        Assign(out,fo); Rewrite(out);
        While not Eof(inp) do
        Begin
         Readln(inp,s);
         While (s[1]=' ')and(Length(s)>0) do Delete(s,1,1);
         While (s[Length(s)]=' ')and(Length(s)>0) do Delete(s,Length(s),1);
         While (Length(s)>0)and(pos(' ',s)<>0) do Delete(s,pos(' ',s),1);
         Writeln(out,s);
        End;
        Close(out); Close(inp);
       END.
BAØI TAÄP CHÖÔNG 9: CON TROÛ

   Baøi 1 :
    Baïn haõy laäp chöông trình cho pheùp ta nhaäp töø baøn phím moät danh saùch ñöôïc gheùp noái . Sau ñoù
    gôõ boû moät record khoûi danh saùch .
     (* Gôõ boû baûn ghi khoûi danh saùch *)
      Uses Crt;
      Type ptr=^rec;
          rec=record
             name: string[20];
             next: ptr;
            End;
      Var k : integer;
          p,l : ptr;

       Procedure Nhap;
       Begin



Bài tập Pascal có lời giải                                                                                    55
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

        ClrScr;
        New(p); l:=p;
        Write('Ten: '); Readln(p^.name);
        Repeat
         New(p^.next);
         p:=p^.next;
         Write('Ten: '); Readln(p^.name);
        Until p^.name='';
        p^.next:=nil;
        Write('Vi tri ban ghi can go bo: '); Readln(k);
       End;

       Procedure Gobo;
       Var i: integer; q: Ptr;
       Begin
        p:=l; For i:=1 to k do p:=p^.next;   (* Tìm vò trí cuoái *)
        q:=p;
        p:=l; For i:=3 to k do p:=p^.next;   (* Tìm vò trí ñaàu *)
        If k=1 then l:=q Else p^.next:=q;
       End;

       Procedure In_kq;
       Begin
        While (l^.next<>nil) do
        Begin
         Writeln(l^.name);
         l:=l^.next;
        End;
        Readln;
       End;

       BEGIN
        Nhap;
        Gobo;
        In_kq;
       END.

   Baøi 2 :
    Baïn haõy laäp chöông trình cho pheùp nhaäp moät danh saùch ñöôïc gheùp noái . Sau ñoù cheøn theâm
    moät record vaøo danh saùch .
    (* Cheøn theâm baûn ghi vaøo danh saùch *)
      Uses Crt;
      Const inp='C9_2.inp';
      Type ptr=^rec;



Bài tập Pascal có lời giải                                                                               56
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


          rec=record
               name: string[20];
               next: ptr;
             End;
       Var f: text;
           k: integer;
           p,s,l: ptr;

       Procedure Nhap;
       Begin
        Assign(f,inp); Reset(f);
        New(p); l:=p;
        While not EoF(f) do
        Begin
         Readln(f,p^.name);
         New(p^.next);
         p:=p^.next;
        End;
        p^.next:=nil;
        Close(f);

        New(s);
        Clrscr;
        Writeln('Nhap ban ghi can chen: ');
        Write('Ten: '); Readln(s^.name);
        Write('Vi tri can chen: '); Readln(k);
       End;

       Procedure Chen_rec;
       Var i: integer;
        Procedure Cat(Var L: ptr);
        Begin s^.next:=l; l:=s; End;
       Begin
        p:=l; For i:=3 to k do p:=p^.next; (* Tim vi tri *)
        If k>1 then Cat(p^.next) Else Cat(l); {Cat - Noi}
       End;

       Procedure In_kq;
       Begin
        While (l^.next<>nil) do
        Begin



Bài tập Pascal có lời giải                                                               57
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


         Writeln(l^.name);
         l:=l^.next;
        End;
        Readln;
       End;

       BEGIN
        Nhap;
        Chen_rec;
        In_kq;
       END.

   Baøi 3 :
    Baïn haõy laäp chöông trình cho pheùp nhaäp moät danh saùch ñöôïc gheùp noái . Sau ñoù ñoåi choã hai
    record trong danh saùch .
     (* Ñoåi choã 2 baûn ghi trong danh saùch *)
      Uses Crt;
      Const inp='C9_3.txt';
      Type ptr=^rec;
         rec=record
              name: string[20];
              next: ptr;
             End;
      Var f: text;
          j,k: integer;
          p,l: ptr;
          tenj,tenk: string;

       Procedure Nhap;
       Begin
        Assign(f,inp); Reset(f);
        New(p); l:=p;
        While not EoF(f) do
        Begin
          Readln(f,p^.name);
          New(p^.next);
          p:=p^.next;
        End;
        p^.next:=nil;
        Close(f);
        Clrscr;
        Write('Nhap vi tri 2 ban ghi can doi cho: '); Readln(j,k);
       End;




Bài tập Pascal có lời giải                                                                                 58
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)

       Procedure Doicho;
       Var i: integer;
       Begin
        p:=l; For i:=2 to k do p:=p^.next; tenk:=p^.name;
        p:=l; For i:=2 to j do p:=p^.next; tenj:=p^.name;
        p:=l; For i:=2 to k do p:=p^.next; p^.name:=tenj;
        p:=l; For i:=2 to j do p:=p^.next; p^.name:=tenk;
       End;

       Procedure In_kq;
       Begin
         While (l^.next<>nil) do
         Begin
          Writeln(l^.name);
          l:=l^.next;
         End;
         Readln;
       End;

       BEGIN
        Nhap;
        Doicho;
        In_kq;
       END.
BAØI TAÄP CHÖÔNG 10: ÑOÀ HOÏA

   Baøi 1 :
    Veõ hình chöõ nhaät coù taâm truøng vôùi taâm maøn hình , caùc caïnh song song vaø tæ leâ vôùi caùc caïnh
    maøn hình , kích thöôùc lôùn daàn theo thôøi gian .

      (* Hình chöõ nhaät thay ñoåi kích thöôùc *)
       Uses Crt,Graph;
       Var Gd,Gm,x,y: Integer;
           tl: real;

       BEGIN
        Gd:=Detect;
        InitGraph(Gd,Gm,'');
        If GraphResult <> GrOk Then Halt ;
        tl:=GetMaxY/GetMaxX;
        SetFillStyle(1,4);
        For x:=1 to GetMaxX do


Bài tập Pascal có lời giải                                                                                      59
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


        Begin
         y:=round(x*tl);
         Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,
            (GetMaxX+x) div 2,(GetMaxY+y) div 2);
         Delay(10);
        End;
        CloseGraph;
      END.
   Baøi 2 :
    Veõ hình chöõ nhaät nhö treân , kích thöôùc ñieàu khieån ñöôïc . Neáu goõ phím + thì hình lôùn leân , goõ
    phím – thì nhoû ñi , goõ Enter thì döøng chöông trình .

       (* Hình chöõ nhaät kích thöôùc ñieàu khieån ñöôïc *)
       Uses Crt, Graph;
       Var Gd,Gm,x,y: Integer;
            tl: real;
            c: char;

       BEGIN
        Gd:=Detect;
        InitGraph(Gd,Gm,'');
        tl:=GetMaxY/GetMaxX;
        x:=GetMaxX div 2;
        y:=round(x*tl);
        SetFillStyle(1,4);
        Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,
            (GetMaxX+x) div 2,(GetMaxY+y) div 2);
        Repeat
          OutTextXY(0,0,'Press Esc to Exit...');
          Repeat
             c:=ReadKey;
          Until c in [#27,'+','-'];
          SetFillStyle(1,0);
          Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,
              (GetMaxX+x) div 2,(GetMaxY+y) div 2);
          If (c='+')and(x<GetMaxX) then Inc(x)
          Else If (c='-')and(y>0) then Dec(x);
          y:=round(x*tl);
          SetFillStyle(1,4);
          Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,
              (GetMaxX+x) div 2,(GetMaxY+y) div 2);



Bài tập Pascal có lời giải                                                                                      60
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


        Until c=#27;
        CloseGraph;
      END.
    Baøi 3 :
     Moät baøn côø vua hieån thò treân maøn hình . Neáu ñaët moät con haäu ( hình troøn maøu ñoû ) vaøo moät oâ
     baèng caùch nhaäp teân oâ , chaúng haïn a5 , thì caùc oâ bò con haâu khoáng cheá seõ ñöôïc toâ maøu xanh .
     Baïn haõy laäp chöông trình thöïc hieän caùc yeâu caàu treân .

     (* Phaïm vi kieåm soaùt cuûa Con haäu *)
     Uses Crt,Graph;
     Const N=8; W=40; X=150; Y=400;
     Var Gd,Gm,i,Hi: Integer;
         j,Hj,H: char;
         S: String;
         Pattern : FillPatternType;

     BEGIN
     Gd:=Detect;
      InitGraph(Gd,Gm,'');
      OutTextXY(270,430,'Ban co vua');
      For i:=1 to N do
        For j:='a' to chr(Ord('a')+N-1) do
        Begin
           If Odd(i+Ord(j)) then SetFillStyle(SolidFill,14)
           Else SetFillStyle(SolidFill,15);
           Bar(X+(i-1)*W,Y-(Ord(j)-Ord('a'))*W,X+i*W,Y-(Ord(j)-Ord('a')+1)*W);
        End;
      OutTextXY(200,20,'Nhap vi tri con hau:');
      Hj:=ReadKey; OutTextXY(370,20,Hj);
      H:=ReadKey; Hi:=Ord(H)-Ord('0'); OutTextXY(380,20,H);
      SetColor(4);
      Circle(X+(Hi-1)*W+W div 2,Y-(Ord(Hj)-Ord('a'))*W-W div 2,W div 2-5);
      GetFillPattern(Pattern);
      SetFillPattern(Pattern,4);
      FloodFill(X+(Hi-1)*W+W div 2,Y-(Ord(Hj)-Ord('a'))*W-W div 2,4);
      SetFillStyle(SolidFill,13);
      For i:=1 to N do
       For j:='a' to chr(Ord('a')+N-1) do
         If ((i<>Hi)or(j<>Hj))
          and((Abs(i-Hi)=Abs(Ord(j)-Ord(Hj)))or(i=Hi)or(j=Hj)) then
            Bar(X+(i-1)*W,Y-(Ord(j)-Ord('a'))*W,X+i*W,Y-(Ord(j)-Ord('a')+1)*W);



Bài tập Pascal có lời giải                                                                                    61
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


       Readln;
       CloseGraph;
       END.

   Baøi 4 :
    Veõ ñoàng hoà ñieän töû hoaït ñoäng treân maøn hình .

       (* Ñoàng hoà ñieän töû *)
       Uses Crt,Dos,Graph;
       Var h,m,s,hund: Word;
           GD,GM: Integer;
           St: String;

       Function LeadingZero(w: Word): String;
       Var s: String;
       Begin
        Str(w:0,s);
        if Length(s)=1 then s:='0'+s;
        LeadingZero:=s;
       End;

       BEGIN
        GD:=Detect;
        InitGraph(GD,GM,' ');
        SetTextStyle(DefaultFont,HorizDir,5);
        Repeat
          GetTime(h,m,s,hund);
          St:=LeadingZero(h)+':'+LeadingZero(m)+':'+LeadingZero(s);
          SetColor(15);
          OutTextXY(150,200,St);
          Delay(1000);
          SetColor(0);
          OutTextXY(150,200,St);
        Until KeyPressed;
        CloseGraph;
       END.

   Baøi 5 :
    Hieån thò moät ñieåm chuyeån ñoäng ñeàu theo chieàu kim ñoàng hoà treân quyõ ñaïo troøn , taâm laø taâm
    maøn hình , baùn kính r = 150 .




Bài tập Pascal có lời giải                                                                                    62
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


       (* Ñieåm chuyeån ñoäng troøn ñeàu *)
       Uses Crt, Graph;
       Const
         r=150; v=5;
       Var
         Gd,Gm,x0,y0,x,y: Integer;
          a: real;   (* goùc *)

       BEGIN
        Gd:=Detect;
        InitGraph(Gd,Gm,' ');
        x0:=GetMaxX div 2; y0:=GetMaxY div 2;
        PutPixel(x0,y0,4);
        a:=0;
        Repeat
          x:=x0+Round(r*cos(a)); y:=y0+Round(r*sin(a));
          PutPixel(x,y,15);
          Delay(v);
          PutPixel(x,y,0);
          a:=a+0.01;
        Until KeyPressed;
        CloseGraph;
       END.

     Baøi 6 :

     Hieån thò moät hình chöõ nhaät treân maøn hình , vò trí coù theå ñieàu khieån ñöôïc baèng baøn phím . Goõ
     caùc phím muõi teân ñeå dòch chuyeån hình ñoù theo caùc höôùng töông öùng .

       (* dieu khien vi tri cua hinh vuong *)
       Uses Crt, Graph;
       Var Gd,Gm,x,y,v: Integer;
            Pa,Pb: Pointer;
            Size: Word;
            c: char;

       BEGIN
        Gd:=Detect;
        InitGraph(Gd,Gm,' ');
        Size:=ImageSize(0,0,20,20);
        GetMem(Pb,Size);
        GetImage(0,0,20,20,Pb^);


Bài tập Pascal có lời giải                                                                                   63
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


        GetMem(Pa,Size);
        Bar(0,0,20,20);
        GetImage(0,0,20,20,Pa^);
        ClearDevice;
        x:=300; y:=200; v:=10; c:=#77;
        Repeat
         PutImage(x,y,Pa^,NormalPut);
         Repeat Until KeyPressed;
         c:=ReadKey; If c=#0 then c:=ReadKey;
         PutImage(x,y,Pb^,NormalPut);
         Case c of
           #72: Dec(y);
           #75: Dec(x);
           #77: Inc(x);
           #80: Inc(y);
         End;
         If x>600 then x:=0;
         If x<0 then x:=600;
         If y>440 then y:=0;
         If y<0 then y:=440;
        Until (c=#27)or(c=#13);
        CloseGraph;
      END.
   Baøi 7 :
    Veõ hình sau vôùi caùc phoâng chöõ , caùc maøu khaùc nhau :

                       Size 8

               Size 16


               Size 24

               Size 32


               Size 40

       (* Caùc daïng phoâng chöõ *)



Bài tập Pascal có lời giải                                                               64
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


       Uses Graph;
       Const K=3;
       Var Gd,Gm,Font,Color,Size,i: Integer;
            S: String;

      BEGIN
        Gd:=Detect;
        InitGraph(Gd,Gm,' ');
        Color:=0;
        For Font:=0 to 11 do
        Begin
         ClearDevice;
         For i:=1 to 4 do
         Begin
           Size:=(i-1)*K+1;
           Inc(Color); Color:=Color mod 15+1;
           SetColor(Color);
           SetTextStyle(Font,HorizDir,Size);
           Str(Size,S); S:='Size '+S;
           OutTextXY(100,i*80,S) ;
         End;
         Readln;
        End;
        CloseGraph;
      END.
   Baøi 8 :
    Veõ heä truïc toaï ñoä vaø ñoà thò haøm soá y = x2 vôùi ñaày ñuû chuù thích .

       (* Ñoà thò cuûa haøm soá y = Sqr(x) *)
       Uses Graph;
       Const X0=320;Y0=300;E=50;
       Var Gd,Gm,i,j,k: Integer;
           x,y: real;
           S: String;

       BEGIN
        Gd:=Detect;
        InitGraph(Gd,Gm,' ');
        Line(100,Y0,550,Y0);      {Truc Ox}
        OutTextXY(540,Y0+10,'x');
        For k:=-3 to 3 do



Bài tập Pascal có lời giải                                                               65
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


        Begin
         i:=k*E+X0; j:=Y0;
         Str(k,S);
         OutTextXY(i-10,j+8,S);
         Bar(i-1,j-1,i+1,j+1);
        End;
        Line(X0,50,X0,370);            {Truc Oy}
        OutTextXY(X0-20,50,'y');
        For k:=-1 to 4 do
        Begin
         i:=X0; j:=-k*E+Y0;
         Str(k,S);
         If k<>0 then OutTextXY(i-20,j,S);
         Bar(i-1,j-1,i+1,j+1);
        End;
        For i:=X0-2*E to X0+2*E do {Do thi}
        Begin
         x:=(i-X0)/E; y:=Sqr(x); j:=Round(-y*E+Y0);
         PutPixel(i,j,10);
        End;
        SetTextStyle(1,0,2);
        OutTextXY(100,400,'Do thi ham so y = Sqr(x):');
        Readln;
        CloseGraph;
      END.
   Baøi 9 :
    Veõ vaø toâ maøu cho ngoâi nhaø sau . Ñaûm baûo khaû naêng baät taét ñieän cho ngoâi nhaø . Neáu goõ phím
    + thì ñeøn saùng ( cöûa soå coù maøu traéng ) , goõ phím – thì ñeøn taét ( cöûa soá coù maøu ñen )




                                                               .

       (* To mau Ngoi nha *)
       Uses Crt,Graph;
       Var Gd,Gm: Integer;
            Pattern : FillPatternType;
            c: Char;




Bài tập Pascal có lời giải                                                                                  66
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)


       BEGIN
        Gd:=Detect;
        InitGraph(Gd,Gm,' ');
        GetFillPattern(Pattern);
        OutTextXY(120,50,'To mau Ngoi nha:');
        Rectangle(220,200,420,330);
        Rectangle(250,230,300,330);
        Rectangle(330,230,390,280);
        MoveTo(220,200);
        Lineto(180,200);
        Lineto(220,140);
        Lineto(420,140);
        Lineto(460,200);
        Lineto(420,200);
        SetFillPattern(Pattern,Blue);
        Floodfill(0,0,White);
        SetFillPattern(Pattern,4);
        Floodfill(320,190,White);
        SetFillPattern(Pattern,8);
        Floodfill(320,220,White);
        Repeat
          Repeat c:=ReadKey; Until c in [#27,'+','-'];
          If (c='+') then SetFillPattern(Pattern,14)
          Else If (c='-') then SetFillPattern(Pattern,0);;
          Floodfill(270,300,White);
          Floodfill(370,270,White);
        Until c=#27;
        CloseGraph; END.

                                                       MUÏC LUÏC


     Chöông 1:IF ……..Then …………Else.




Bài tập Pascal có lời giải                                                               67
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)




Bài tập Pascal có lời giải                                                               68

More Related Content

What's hot

QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO TRẺ 5-6 TUỔI Ở CÁC TRƯỜNG MẦM NON...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO TRẺ 5-6 TUỔI Ở CÁC TRƯỜNG MẦM NON...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO TRẺ 5-6 TUỔI Ở CÁC TRƯỜNG MẦM NON...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO TRẺ 5-6 TUỔI Ở CÁC TRƯỜNG MẦM NON...KhoTi1
 
ĐÁNH GIÁ TRẺ KHUYẾT TẬT TRONG GIÁO DỤC ĐẶC BIỆT_10212012052019
ĐÁNH GIÁ TRẺ KHUYẾT TẬT TRONG GIÁO DỤC ĐẶC BIỆT_10212012052019ĐÁNH GIÁ TRẺ KHUYẾT TẬT TRONG GIÁO DỤC ĐẶC BIỆT_10212012052019
ĐÁNH GIÁ TRẺ KHUYẾT TẬT TRONG GIÁO DỤC ĐẶC BIỆT_10212012052019hanhha12
 
1511 1405994021 tai_lieu_tap_huan__khoa_hoc
1511 1405994021 tai_lieu_tap_huan__khoa_hoc1511 1405994021 tai_lieu_tap_huan__khoa_hoc
1511 1405994021 tai_lieu_tap_huan__khoa_hocLienminh Tran
 
Qcvn 16 2014 bxd qcqg ve hang hoa vat lieu xay dung
Qcvn 16 2014 bxd qcqg ve hang hoa vat lieu xay dungQcvn 16 2014 bxd qcqg ve hang hoa vat lieu xay dung
Qcvn 16 2014 bxd qcqg ve hang hoa vat lieu xay dunghopchuanhopquy
 
Luận Văn Thạc Sĩ Giáo Dục Học về giáo dục phẩm chất cho học sinh
Luận Văn Thạc Sĩ Giáo Dục Học về giáo dục phẩm chất cho học sinhLuận Văn Thạc Sĩ Giáo Dục Học về giáo dục phẩm chất cho học sinh
Luận Văn Thạc Sĩ Giáo Dục Học về giáo dục phẩm chất cho học sinhDịch vụ Làm Luận Văn 0936885877
 
Phiếu tự đánh giá của học sinh
Phiếu tự đánh giá của học sinhPhiếu tự đánh giá của học sinh
Phiếu tự đánh giá của học sinhVo Hong Yen Phung
 
Financial Statement Analysis Bình Minh Plastic (BMP)
Financial Statement Analysis Bình Minh Plastic (BMP)Financial Statement Analysis Bình Minh Plastic (BMP)
Financial Statement Analysis Bình Minh Plastic (BMP)Cổ Vạn Tấn
 
Một số biện pháp giáo dục kỹ năng sống trong môn Đạo đức lớp 3
Một số biện pháp giáo dục kỹ năng sống trong môn Đạo đức lớp 3 Một số biện pháp giáo dục kỹ năng sống trong môn Đạo đức lớp 3
Một số biện pháp giáo dục kỹ năng sống trong môn Đạo đức lớp 3 luanvantrust
 
GNU Octave: esempi di Digital Signal Processing
GNU Octave: esempi di Digital Signal ProcessingGNU Octave: esempi di Digital Signal Processing
GNU Octave: esempi di Digital Signal ProcessingAndrea Spadaccini
 
200 Đề Tài Khóa Luận Tốt Nghiệp Giáo Dục Tiểu Học, Từ Sinh Viên Khá Giỏi
200 Đề Tài Khóa Luận Tốt Nghiệp Giáo Dục Tiểu Học, Từ Sinh Viên Khá Giỏi200 Đề Tài Khóa Luận Tốt Nghiệp Giáo Dục Tiểu Học, Từ Sinh Viên Khá Giỏi
200 Đề Tài Khóa Luận Tốt Nghiệp Giáo Dục Tiểu Học, Từ Sinh Viên Khá GiỏiDịch Vụ Viết Bài Trọn Gói ZALO 0917193864
 
Tìm hiểu thực trạng giáo dục kỹ năng sống cho học sinh tiểu học thông qua môn...
Tìm hiểu thực trạng giáo dục kỹ năng sống cho học sinh tiểu học thông qua môn...Tìm hiểu thực trạng giáo dục kỹ năng sống cho học sinh tiểu học thông qua môn...
Tìm hiểu thực trạng giáo dục kỹ năng sống cho học sinh tiểu học thông qua môn...jackjohn45
 
Thiết kế trò chơi khám phá khoa học về thế giới động vật cho trẻ em mẫu giáo
Thiết kế trò chơi khám phá khoa học về thế giới động vật cho trẻ em mẫu giáoThiết kế trò chơi khám phá khoa học về thế giới động vật cho trẻ em mẫu giáo
Thiết kế trò chơi khám phá khoa học về thế giới động vật cho trẻ em mẫu giáoDịch vụ Làm Luận Văn 0936885877
 
Tổ chức hoạt động giáo dục STEM “Hệ thống điều khiển tự động” với công cụ Coa...
Tổ chức hoạt động giáo dục STEM “Hệ thống điều khiển tự động” với công cụ Coa...Tổ chức hoạt động giáo dục STEM “Hệ thống điều khiển tự động” với công cụ Coa...
Tổ chức hoạt động giáo dục STEM “Hệ thống điều khiển tự động” với công cụ Coa...Nguyen Thanh Tu Collection
 
Quy trình tổ chức thực hiện hợp đồng xuất khẩu mặt hàng hạt điều của Công ty ...
Quy trình tổ chức thực hiện hợp đồng xuất khẩu mặt hàng hạt điều của Công ty ...Quy trình tổ chức thực hiện hợp đồng xuất khẩu mặt hàng hạt điều của Công ty ...
Quy trình tổ chức thực hiện hợp đồng xuất khẩu mặt hàng hạt điều của Công ty ...anh hieu
 
Luận văn: Thực trạng quản lý hoạt động dạy học môn tiếng Anh theo chương trìn...
Luận văn: Thực trạng quản lý hoạt động dạy học môn tiếng Anh theo chương trìn...Luận văn: Thực trạng quản lý hoạt động dạy học môn tiếng Anh theo chương trìn...
Luận văn: Thực trạng quản lý hoạt động dạy học môn tiếng Anh theo chương trìn...Viết thuê trọn gói ZALO 0934573149
 

What's hot (20)

Luận văn: Hình thành năng lực giao tiếp và hợp tác cho học sinh bằng phương ...
Luận văn: Hình thành năng lực giao tiếp và hợp tác cho học sinh bằng phương ...Luận văn: Hình thành năng lực giao tiếp và hợp tác cho học sinh bằng phương ...
Luận văn: Hình thành năng lực giao tiếp và hợp tác cho học sinh bằng phương ...
 
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO TRẺ 5-6 TUỔI Ở CÁC TRƯỜNG MẦM NON...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO TRẺ 5-6 TUỔI Ở CÁC TRƯỜNG MẦM NON...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO TRẺ 5-6 TUỔI Ở CÁC TRƯỜNG MẦM NON...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO TRẺ 5-6 TUỔI Ở CÁC TRƯỜNG MẦM NON...
 
ĐÁNH GIÁ TRẺ KHUYẾT TẬT TRONG GIÁO DỤC ĐẶC BIỆT_10212012052019
ĐÁNH GIÁ TRẺ KHUYẾT TẬT TRONG GIÁO DỤC ĐẶC BIỆT_10212012052019ĐÁNH GIÁ TRẺ KHUYẾT TẬT TRONG GIÁO DỤC ĐẶC BIỆT_10212012052019
ĐÁNH GIÁ TRẺ KHUYẾT TẬT TRONG GIÁO DỤC ĐẶC BIỆT_10212012052019
 
1511 1405994021 tai_lieu_tap_huan__khoa_hoc
1511 1405994021 tai_lieu_tap_huan__khoa_hoc1511 1405994021 tai_lieu_tap_huan__khoa_hoc
1511 1405994021 tai_lieu_tap_huan__khoa_hoc
 
Qcvn 16 2014 bxd qcqg ve hang hoa vat lieu xay dung
Qcvn 16 2014 bxd qcqg ve hang hoa vat lieu xay dungQcvn 16 2014 bxd qcqg ve hang hoa vat lieu xay dung
Qcvn 16 2014 bxd qcqg ve hang hoa vat lieu xay dung
 
Luận Văn Thạc Sĩ Giáo Dục Học về giáo dục phẩm chất cho học sinh
Luận Văn Thạc Sĩ Giáo Dục Học về giáo dục phẩm chất cho học sinhLuận Văn Thạc Sĩ Giáo Dục Học về giáo dục phẩm chất cho học sinh
Luận Văn Thạc Sĩ Giáo Dục Học về giáo dục phẩm chất cho học sinh
 
Phiếu tự đánh giá của học sinh
Phiếu tự đánh giá của học sinhPhiếu tự đánh giá của học sinh
Phiếu tự đánh giá của học sinh
 
Đề tài: Phát triển kỹ năng giao tiếp cho học sinh dân tộc thiểu số
Đề tài: Phát triển kỹ năng giao tiếp cho học sinh dân tộc thiểu sốĐề tài: Phát triển kỹ năng giao tiếp cho học sinh dân tộc thiểu số
Đề tài: Phát triển kỹ năng giao tiếp cho học sinh dân tộc thiểu số
 
Financial Statement Analysis Bình Minh Plastic (BMP)
Financial Statement Analysis Bình Minh Plastic (BMP)Financial Statement Analysis Bình Minh Plastic (BMP)
Financial Statement Analysis Bình Minh Plastic (BMP)
 
Một số biện pháp giáo dục kỹ năng sống trong môn Đạo đức lớp 3
Một số biện pháp giáo dục kỹ năng sống trong môn Đạo đức lớp 3 Một số biện pháp giáo dục kỹ năng sống trong môn Đạo đức lớp 3
Một số biện pháp giáo dục kỹ năng sống trong môn Đạo đức lớp 3
 
GNU Octave: esempi di Digital Signal Processing
GNU Octave: esempi di Digital Signal ProcessingGNU Octave: esempi di Digital Signal Processing
GNU Octave: esempi di Digital Signal Processing
 
200 Đề Tài Khóa Luận Tốt Nghiệp Giáo Dục Tiểu Học, Từ Sinh Viên Khá Giỏi
200 Đề Tài Khóa Luận Tốt Nghiệp Giáo Dục Tiểu Học, Từ Sinh Viên Khá Giỏi200 Đề Tài Khóa Luận Tốt Nghiệp Giáo Dục Tiểu Học, Từ Sinh Viên Khá Giỏi
200 Đề Tài Khóa Luận Tốt Nghiệp Giáo Dục Tiểu Học, Từ Sinh Viên Khá Giỏi
 
Phát triển năng lực vận dụng kiến thức vào thực tiễn trong dạy sinh học
Phát triển năng lực vận dụng kiến thức vào thực tiễn trong dạy sinh họcPhát triển năng lực vận dụng kiến thức vào thực tiễn trong dạy sinh học
Phát triển năng lực vận dụng kiến thức vào thực tiễn trong dạy sinh học
 
Tìm hiểu thực trạng giáo dục kỹ năng sống cho học sinh tiểu học thông qua môn...
Tìm hiểu thực trạng giáo dục kỹ năng sống cho học sinh tiểu học thông qua môn...Tìm hiểu thực trạng giáo dục kỹ năng sống cho học sinh tiểu học thông qua môn...
Tìm hiểu thực trạng giáo dục kỹ năng sống cho học sinh tiểu học thông qua môn...
 
Luận văn: Phát triển năng lực tự học cho học sinh thông qua dạy học theo chủ ...
Luận văn: Phát triển năng lực tự học cho học sinh thông qua dạy học theo chủ ...Luận văn: Phát triển năng lực tự học cho học sinh thông qua dạy học theo chủ ...
Luận văn: Phát triển năng lực tự học cho học sinh thông qua dạy học theo chủ ...
 
Trọn Bộ 200 Đề Tài Báo Cáo Thực Tập Ngành Sư Phạm, Điểm Cao Mới Nhất.docx
Trọn Bộ 200 Đề Tài Báo Cáo Thực Tập Ngành Sư Phạm, Điểm Cao Mới Nhất.docxTrọn Bộ 200 Đề Tài Báo Cáo Thực Tập Ngành Sư Phạm, Điểm Cao Mới Nhất.docx
Trọn Bộ 200 Đề Tài Báo Cáo Thực Tập Ngành Sư Phạm, Điểm Cao Mới Nhất.docx
 
Thiết kế trò chơi khám phá khoa học về thế giới động vật cho trẻ em mẫu giáo
Thiết kế trò chơi khám phá khoa học về thế giới động vật cho trẻ em mẫu giáoThiết kế trò chơi khám phá khoa học về thế giới động vật cho trẻ em mẫu giáo
Thiết kế trò chơi khám phá khoa học về thế giới động vật cho trẻ em mẫu giáo
 
Tổ chức hoạt động giáo dục STEM “Hệ thống điều khiển tự động” với công cụ Coa...
Tổ chức hoạt động giáo dục STEM “Hệ thống điều khiển tự động” với công cụ Coa...Tổ chức hoạt động giáo dục STEM “Hệ thống điều khiển tự động” với công cụ Coa...
Tổ chức hoạt động giáo dục STEM “Hệ thống điều khiển tự động” với công cụ Coa...
 
Quy trình tổ chức thực hiện hợp đồng xuất khẩu mặt hàng hạt điều của Công ty ...
Quy trình tổ chức thực hiện hợp đồng xuất khẩu mặt hàng hạt điều của Công ty ...Quy trình tổ chức thực hiện hợp đồng xuất khẩu mặt hàng hạt điều của Công ty ...
Quy trình tổ chức thực hiện hợp đồng xuất khẩu mặt hàng hạt điều của Công ty ...
 
Luận văn: Thực trạng quản lý hoạt động dạy học môn tiếng Anh theo chương trìn...
Luận văn: Thực trạng quản lý hoạt động dạy học môn tiếng Anh theo chương trìn...Luận văn: Thực trạng quản lý hoạt động dạy học môn tiếng Anh theo chương trìn...
Luận văn: Thực trạng quản lý hoạt động dạy học môn tiếng Anh theo chương trìn...
 

Similar to Bai tap pascal co giai

Similar to Bai tap pascal co giai (19)

Bài tập pascal
Bài tập pascalBài tập pascal
Bài tập pascal
 
Tuyen chon-bai-tap-pascal-lop
Tuyen chon-bai-tap-pascal-lopTuyen chon-bai-tap-pascal-lop
Tuyen chon-bai-tap-pascal-lop
 
Bai tap-pascal-lop-11
Bai tap-pascal-lop-11Bai tap-pascal-lop-11
Bai tap-pascal-lop-11
 
Khao sat
Khao satKhao sat
Khao sat
 
Khao sat
Khao satKhao sat
Khao sat
 
Bai 11 kieu mang
Bai 11 kieu mangBai 11 kieu mang
Bai 11 kieu mang
 
Bai tap mau pascal
Bai tap mau pascalBai tap mau pascal
Bai tap mau pascal
 
Cac bai tap hay ve mang 1 chieu
Cac bai tap hay ve mang 1 chieuCac bai tap hay ve mang 1 chieu
Cac bai tap hay ve mang 1 chieu
 
Bai9
Bai9Bai9
Bai9
 
Bai9
Bai9Bai9
Bai9
 
Bai9
Bai9Bai9
Bai9
 
Bai12 kieuxau
Bai12 kieuxauBai12 kieuxau
Bai12 kieuxau
 
Bao cao chia se bd hsg
Bao cao chia se bd hsgBao cao chia se bd hsg
Bao cao chia se bd hsg
 
Bai 17 chuong trinh con va phan loai
Bai 17 chuong trinh con va phan loaiBai 17 chuong trinh con va phan loai
Bai 17 chuong trinh con va phan loai
 
Bai 12 kx
Bai 12 kxBai 12 kx
Bai 12 kx
 
Bài tập xâu cơ bản-nâng cao
Bài tập xâu cơ bản-nâng caoBài tập xâu cơ bản-nâng cao
Bài tập xâu cơ bản-nâng cao
 
Bai tap pascal tong hop
Bai tap pascal tong hopBai tap pascal tong hop
Bai tap pascal tong hop
 
Bai12 kieuxau 2
Bai12 kieuxau 2Bai12 kieuxau 2
Bai12 kieuxau 2
 
Bai12 kieuxau 2
Bai12 kieuxau 2Bai12 kieuxau 2
Bai12 kieuxau 2
 

Bai tap pascal co giai

  • 1. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) BAØI TAÄP CHÖÔNG 1:CAÂU LEÄNH IF ….THEN… * Baøi 1 : Nhaäp 3 soá a , b , c baát kì . Haõy kieåm tra xem ba soá ñoù coù theå laø ñoä daøi ba caïnh cuûa moät tam giaùc hay khoâng ? Thoâng baùo leân maøn hình ‘ Thoûa maõn ‘, ‘ Khoâng thoûa maõn trong töøng tröôøng hôïp töông öùng . GIAÛI Var a , b , c : Real ; BEGIN Writeln (' Nhap do dai 3 canh cua tam giac : ') ; Write (' a = ') ; Readln ( a ) ; Write (' b = ') ; Readln ( b ) ; Write (' c = ') ; Readln ( c ) ; If ( a + b > c ) and ( b + c > a ) and ( c + a > b ) and ( a > 0 ) and ( b > 0 ) and ( c > 0 ) Then Writeln (' Thoa man : Day la 3 canh cua mot tam giac ') Else Writeln (' Khong thoa man ! ') ; Readln ; END . * Baøi 2 : Nhaäp N soá baát kì . Ñeám caùc soá lôùn hôn 10 vaø nhoû hôn 20 vaø tính toång cuûa chuùng . Sau ñoù , ñöa ra maøn hình :So cac so >10 vaø <20 la : ( gia tri ) ;Tong cua chung la : ( gia tri ) GIAÛI Var Tong , So : Real ; I , N , Dem : Integer ; BEGIN Write (' Bao nhieu so : ') ; Readln ( N ) ; Tong := 0 ; Dem := 0 ; For I := 1 To N Do Begin Write (' So = ') ; Readln ( So ) ; If ( So > 10 ) and ( So < 20 ) Then Begin Tong := Tong + So ; Dem := Dem + 1 ; End ; Bài tập Pascal có lời giải 1
  • 2. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) End ; Writeln (' So cac so >10 va <20 la : ', Dem ) ; Writeln (' Tong cua chung la :', Tong ) ; Readln ; END . * Baøi 3 : Nhaäp boán soá a , b , c , d . Haõy tìm giaù trò lôùn nhaát cuûa chuùng vaø gaùn giaù trò lôùn nhaát ñoù cho bieán Max . GIAÛI Var Max , a , b , c , d : Real ; BEGIN Writeln (' Nhap gia tri cua 4 so : ') ; Write (' a = ') ; Readln ( a ) ; Write (' b = ') ; Readln ( b ) ; Write (' c = ') ; Readln ( c ) ; Write (' d = ') ; Readln ( d ) ; Max := a ; If Max < b Then Max := b ; If Max < c Then Max := c ; If Max < d Then Max := d ; Writeln (' Gia tri lon nhat la : ', Max ) ; Readln ; END . * Baøi 4 : Ñoïc ngaøy thaùng naêm , sau ñoù vieát ra maøn hình ñoù laø ngaøy thöù maáy trong tuaàn . GIAÛI Var Thu , Ngay , Thang : Byte ; Nam : Integer ; BEGIN Write (' Doc Ngay Thang Nam : ') ; Readln ( Ngay , Thang , Nam ) ; Nam := 1900 + ( Nam mod 1900 ) ; If Thang < 3 Then Begin Thang := Thang + 12 ; Nam := Nam - 1 ; End ; Thu := Abs ( Ngay + Thang * 2 + ( Thang + 1 ) * 3 div 5 + Nam + Nam div 4 ) mod 7 ; Case Thu Of 0 : Writeln (' Chu Nhat ') ; 1 : Writeln (' Thu Hai ') ; Bài tập Pascal có lời giải 2
  • 3. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) 2 : Writeln (' Thu Ba ') ; 3 : Writeln (' Thu Tu ') ; 4 : Writeln (' Thu Nam ') ; 5 : Writeln (' Thu Sau ') ; 6 : Writeln (' Thu Bay ') ; End ; Readln ; END . * Baøi 5 : Vieát chöông trình : Nhaâp soá baùo danh Nhaäp ñieåm vaên , toaùn , ngoaïi ngöõ In ra maøn hình döôùi daïng : _ Phieáu ñieåm : _ Soá baùo danh : _ Ñieåm vaên : _ Ñieåm toaùn : _ Ñieåm ngoaïi ngöõ : _ Toång soá ñieåm : Baïn ñaõ truùng tuyeån ( hoaëc Baïn ñaõ khoâng truùng tuyeån ) vôùi ñieàu kieän Toång soá ñieåm >= 15 hay ngöôïc laïi . GIAÛI Uses Crt ; Var SBD : Integer; Van , Toan , Ngoaingu , Tongdiem : Real ; BEGIN Clrscr ; Write (' So bao danh : ') ; Readln( SBD ) ; Write (' Diem toan : ') ; Readln( Toan ) ; Write (' Diem ngoai ngu : ') ; Readln( Ngoaingu ) ; Write (' Diem van : ') ; Readln ( Van ) ; Tongdiem := Toan + Van + Ngoaingu ; Clrscr ; Writeln (' Phieu Bao Diem ') ; Writeln (' So bao danh : ', SBD ) ; Writeln (' Diem van : ', Van ) ; Writeln (' Diem toan : ', Toan ) ; Writeln (' Diem ngoai ngu : ', Ngoaingu) ; Writeln (' Tong diem : ', Tongdiem) ; If Tongdiem >= 15 Then Writeln(' Ban da trung tuyen ') Bài tập Pascal có lời giải 3
  • 4. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Else Writeln(' Ban khong trung tuyen ') ; Readln ; END . * Baøi 6 : Vieát chöông trình nhaäp hai soá thöïc . Sau ñoù hoûi pheùp tính caàn thöïc hieän vaø in keát quaû cuûa pheùp tính ñoù . Neáu laø ‚+‛ , in keát quaû cuûa toång leân maøn hình . Neáu laø ‚-‛ , in keát quaû cuûa hieäu leân maøn hình . Neáu laø ‚/‛ , in keát quaû cuûa thöông leân maøn hình . Neáu laø ‚*‛ , in keát quaû cuûa tích leân maøn hình . Neáu laø ‚+‛ , in keát quaû cuûa toång leân maøn hình . Neáu laø ‚+‛ , in keát quaû cuûa toång leân maøn hình . GIAÛI Uses Crt ; Var a , b , kq : Real ; Pt : Char ; BEGIN Clrscr ; Write (' a = ') ; Readln( a ) ; Write (' b = ') ; Readln( b ) ; Write (' Phep tinh thuc hien la (+ - * /) : ') ; Readln( Pt ) ; If Pt = '+’ Then kq := a + b ; If Pt = '-’ Then kq := a - b ; If Pt = '*’ Then kq := a * b ; If Pt = '/’ Then kq := a / b ; Write ( a , pt , b , ' = ', kq ) ; Readln ; END . * Baøi 7 : Giaûi vaø bieän luaän phöông trình : x2 + ( m – 2 ) x + 1 = 0 ôû ñaây m laø tham soá thöïc tuyø yù . GIAÛI Uses Crt; Var m , Delta : Real ; BEGIN Clrscr; Write (' m = ') ; Readln( m ) ; Delta := sqr( m-2 ) - 4 ; If Delta < 0 Then Writeln(' Phuong trinh vo nghiem ') Else Begin Bài tập Pascal có lời giải 4
  • 5. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) If Delta = 0 Then Writeln(' Phuong trinh co nghiem kep X= ', -( m - 2 ) / 2 ) Else Begin Writeln(' Phuong trinh co 2 nghiem : ') ; Writeln (' X1 = ', ( -(m-2) + sqrt(delta) ) / 2 ) ; Writeln (' X2 = ', ( -(m-2) - sqrt(Delta) ) / 2 ) ; End ; End ; Readln ; END . * Baøi 8 : Vieát chöông trình nhaäp hai soá töï nhieân N, M vaø thoâng baùo ‘Dung‘ neáu N , M cuøng tính chaün leõ , trong tröôøng hôïp ngöôïc laïi thì thoâng baùo ‘Sai‘. GIAÛI Uses Crt ; Var N , M : Integer ; Begin Clrscr ; Write(' N , M = ') ; Readln( N , M ) ; If ( (N + M) mod 2 = 0 ) Then Writeln(' Dung ! ') Else Writeln(' Sai ! ') ; Readln ; END . BAØI TAÄP CHÖÔNG 2:VOØNG LAÄP XÑ VAØ KHOÂNG XAÙC ÑÒNH Söû duïng leänh For * Baøi 1 : Laäp trình tính tích caùc soá töï nhieân töø 1 tôùi 10 . GIAÛI Var i : Byte ; (* chæ soá chaïy *) p : word ; (* tích soá *) BEGIN p := 1; (* cho giaù trò ban ñaàu cuûa tích *) For i := 1 to 10 Do (* cho i chaïy töø 1 tôùi 10 *) p := p * i ; (* laàn löôït nhaân i vôùi p *) Write (' 1 * 2 * ... * 10 = ', p ) ; Readln ; END . Baøi 2 :Vieát chöông trình ñeám soá laàn xuaát hieän cuûa caùc kí töï thuoäc baûng chöõ caùi trong 50 laàn goõ kí töï baèng baøn phím (khoâng phaân bieät a vôùi A, b vôùi B …, duøng haøm Upcase ñeå chuyeån ñoåi chöõ thöôøng vôùi chöõ hoa) . GIAÛI Bài tập Pascal có lời giải 5
  • 6. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Uses Crt ; Var a : Array[ 'A'..'Z' ] of integer; (* maûng boä ñeám *) ch : char ; (* bieán nhaäp kí töïù *) i : byte ; (* chæ soá cuûa laàn goõ phím *) BEGIN Clrscr ; For ch :='A' to 'Z' Do a[ch] := 0 ; (* xaû boä ñeám *) Writeln (' Go phim 50 lan ') ; For i := 1 To 50 Do (* thöïc hieän 100 laàn *) Begin ch :=Readkey ; (* nhaäp kí töï vaøo Ch khoâng caàn goõ Enter *) ch := Upcase(ch) ; (* Ñoãi chöõ thöôøng thaønh chöõ hoa *) a[ch] := a[ch] + 1 ; End; Writeln (' So lan xuat hien cac ki tu la :') ; For ch :='A' to 'Z' do (* Kieåm tra boä ñeám töø 'A' tôùi 'Z' *) If a[ch] > 0 Then (* Neáu Ch coù xuaát hieän *) Writeln (ch , a[ch] : 4 , ' lan . ') ; (* Vieát ra maøn hình kí töï vaø soá laàn xuaát hieän *) Readln ; END . * Baøi 3 :Cho soá töï nhieân n , haõy laäp trình ñeå tính caùc toång sau : a. a. 1 + 1/22 + 1/32 + … + 1/n2 b. b. 1 + 1/2! + 1/3! + … + 1/n! GIAÛI a) Var n , i : Word ; Bài tập Pascal có lời giải 6
  • 7. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) S : Real ; BEGIN Write (' Nhap n : ') ; Readln (n) ; S := 0 ; For i := 1 To n Do S := S + 1 / sqr(i) ; Writeln (' S = ', S:0:2) ; Readln ; END . b) Var n , i , j , p : Word ; S : Real ; BEGIN Write (' Nhap n : ') ; Readln(n) ; p := 1 ; s := 0 ; For i :=1 To n Do Begin p := p * i ; (* tính i *) S := S + 1 / p ; End ; Writeln (' S = ', S:0:2) ; Readln ; END . *Baøi 4 : Tính giaù trò cuûa bieåu thöùc sau : ( 1 + 1/12 ) ( 1 + 1/22 ) … ( 1 + 1/n2 ) GIAÛI Var i , n : Byte ; p : Real ; Begin Write(' Nhap n : ') ; Readln (n) ; p := 1 ; For i := 1 To n Do p := p * ( 1 + 1/sqr(i) ) ; Writeln(' p = ', p:10:5 ) ; Readln ; End Söû duïng leänh While * Baøi 5 : Laäp trình tính toång : A = 1 + 1/2 + 1/3 + … + 1/n ôû ñaây n laø soá töï nhieân ñöôïc nhaäp vaøo töø baøn phím . GIAÛI Uses Crt ; Bài tập Pascal có lời giải 7
  • 8. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Var i , n : Integer ; tong: Real ; BEGIN Clrscr ; Write (' Cho so tu nhien n : ') ; Readln (n) ; tong :=0 ; i :=1 ; While i <= n Do Begin tong := tong + 1/i ; i := i + 1 ; End ; Writeln (' Tong can tim la : ', tong:12:6 ) ; Readln ; END . * Baøi 6 : Tính haøm luõy thöøa an , ôû ñaây a thöïc vaø n töï nhieân ñöôïc nhaäp vaøo töø baøn phím . GIAÛI Uses Crt ; Var i , n : Integer ; a , giatri : Real ; BEGIN Clrscr ; Write (' Cho so a : ') ; Readln(a) ; Write (' Cho so mu n : ') ; Readln(n) ; i := 1 ; giatri := 1 ; While i <= n Do Begin giatri := giatri * a ; i:= i+1 ; End ; Writeln(' a mu n bang : ', giatri ) ; Readln ; END . * Baøi 7 : Vieát chöông trình nhaäp moät daõy soá toái ña 100 soá , sau ñoù in ra maøn hình caùc soá khaùc nhau . GIAÛI Uses Crt; Var A : Array [1..100] Of Integer; i , j , n : Integer ; Bài tập Pascal có lời giải 8
  • 9. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) BEGIN Clrscr ; Write(' Do dai cua day so N = ') ; Readln (N) ; For I := 1 To N Do Begin Write ('A[', i , ']= ') ; Readln ( A[i] ) ; End ; Writeln (' Cac so khac nhau la : ') ; Writeln ( A[1] ) ; i := 2 ; While i <= N Do Begin j := 1 ; While ( j < i ) and ( A[j] <> A[i] ) Do inc(j) ; If j = i Then Writeln( A[i] ) ; i :=i + 1 ; End ; Readln ; END . * Baøi 8 : Vieát chöông trình nhaäp moät daõy soá toái ña 100 soá , sau ñoù saép xeáp laïi theo thöù töï taêng daàn . GIAÛI Uses Crt; Var A : Array [1..100] Of Integer ; i , j , n , T : Integer ; BEGIN Clrscr ; Write(' Do dai cua day so N = ') ; Readln (N) ; Writeln (' Nhap day so : ') ; For i := 1 To N Do Begin Write('A[', i ,'] = ') ; Readln ( A[i] ) ; End ; i := 1 ; While (i <= n-1) Do Begin j := i+1; While j<=n do Begin If A[j] < A[i] then Begin T := A[j]; A[j ] := A[i]; A[i] := T ; Bài tập Pascal có lời giải 9
  • 10. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) End ; j := j + 1; End ; i := i + 1; End ; Writeln(' Day sau khi sap xep : ') ; For i := 1 To N Do Write(A[i] : 4) ; Readln ; END . Söû duïng leänh Repeat * Baøi 9 : Cho moät daõy soá ñöôïc nhaäp töø baøn phím . Haõy vieát chöông trình nhaäp moät soá a roài lieät keâ taát caû caùc phaàn töû trong daõy lôùn hôn a. GIAÛI Uses Crt ; Var b : Array[1..100] Of Real; a : Real ; n , i : Byte ; BEGIN Clrscr ; Write ('Nhap do dai cua day so : ') ; Readln(n) ; Writeln (' Nhap cac phan tu cua day : ') ; For i := 1 To n Do Begin Write (' b[', i ,'] = ') ; Readln( b[i] ) ; End ; Write (' Nhap so thuc a : ') ; Readln(a) ; Writeln (' Cac phan tu lon hon a cua day : ') ; i:=1; Repeat If ( b[i] > a ) Then Writeln (' b[', i ,'] = ', b[i]:8:2 ) ; inc(i) ; Until i > n ; Readln ; END . Baøi 10 : Vieát chöông trình nhaäp moät daõy soá toái ña 50 soá roài in ra maøn hình caùc soá truøng nhau cuûa daõy . GIAÛI Uses crt ; Var a , b : Array[1..50] Of Integer ; Bài tập Pascal có lời giải 10
  • 11. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) n , m , i , j , k : Byte ; trung : Boolean ; BEGIN Clrscr ; Write (' Nhap do dai cua day so nguyen : ') ; Readln(n) ; Writeln (' Nhap cac phan tu cua day : ') ; For i := 1 To N do Begin Write (' a[', i ,'] = ') ; Readln( a[i] ) ; End ; i := 1 ; m := 0 ; Repeat trung := false ; j := i + 1; Repeat If ( j <= n ) and ( a[i] = a[j] ) Then trung := true ; inc (j) ; Until trung or ( j > n ) ; If trung Then Begin m := m + 1; b[m] := a[i] ; writeln ( b[m] : 4 ) ; End ; inc(i) ; Until i > n ; If m > 1 Then Begin i := 1 ; Repeat j := i + 1 ; Repeat trung := false ; If b[i] = b[j] Then trung := true ; If trung Then Begin If j < m Then For k := j To m - 1 Do b[k] := b[k + 1] ; m := m - 1 ; dec ( j ) ; End ; inc ( j ) ; Until j > m ; Bài tập Pascal có lời giải 11
  • 12. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) inc ( i ) ; Until i > m ; End ; If m > 0 Then For k := 1 To m Do Write ( b[k] : 4 ) ; Readln ; END . * Baøi 11 : Baïn coù 1000 ñ ñem göûi ngaân haøng vôùi laõi suaát 8%/thaùng . Sau moãi thaùng tieàn laõi ñöôïc nhaäp vaøo ñeå tính laõi suaát thaùng sau . Baïn muoán ñeå daønh cho ñeán khi soá tieàn taêng leân laø x . Vaäy phaûi ñeå trong bao laâu GIAÛI uses crt ; var thang : Byte ; tien , lai , x : Real ; BEGIN clrscr ; writeln (' Chuong trinh tinh thoi gian rut tien lai ') ; write (' So tien lai muon rut ra : ') ; readln(x) ; tien := 1000 ; thang :=1 ; repeat lai := tien * 8 / 100 ; tien := tien + lai ; thang := thang + 1 ; until tien >= x ; writeln (' Ban phai gui tien trong ', thang div 12 , ' nam ', thang mod 12 ,' thang .') ; writeln (' Khi do so tien ban rut ra duoc la ', tien:12:2 ,' dong .') ; readln ; END . * Baøi 12 : Vieát chöông trình tìm ÖSCLN cuûa N soá ñöôïc nhaäp töø baøn phím . GIAÛI Uses crt ; Var a : Array [1..100] Of Integer ; n , i : Byte ; d : integer ; BEGIN Clrscr ; Writeln (' Tim USCLN cua N so :') ; Write (' Nhap so N : ') ; Readln(n) ; Writeln ('Nhap ', N ,' so : ') ; For i := 1 To n Do Bài tập Pascal có lời giải 12
  • 13. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Begin Write(' So thu ', i ,' = ') ; Readln( a[i] ) ; End ; For i := 1 To n-1 Do Repeat d := a[i] ; a[i] := a[ i+1 ] mod a[i] ; a[i+1] := d ; Until a[i] = 0 ; Writeln (' USCLN cua ', N ,' so la : ', a[n] ) ; Readln ; END . BAØI TAÄP CHÖÔNG 3:CHÖÔNG TRÌNH CON Baøi 1 : Duøng thuû tuïc chuyeån moät soá töï nhieân n cho tröôùc sang heä cô soá 2 . GIAÛI Procedure Change ( n : integer ; Var St : String ) ; (* thuû tuïc chuyeån soá töï nhieân n cho tröôùc sang heä cô soá 2 vaø ñöôïc löu ôû trong xaâu St *) Type b : Array[0 .. 1] Of Char = ('0' , '1') ; Var du , So : Integer ; S : String ; Begin S := '' ; (* xaâu roãng *) So := n ; Repeat Du := So mod 2 ; So :=So div 2 ; S := b[du] + s ; Until So = 0 ; St := S ; End ; Baøi 2 :Duøng thuû tuïc giaûi phöông trình baäc hai ax2 + bx + c = 0 GIAÛI Uses Crt ; Var a, b, c, x1, x2: real; (*================================*) Procedure Nhapabc(var aa,bb,cc: real); Begin Write('a='); Readln(aa); Write('b='); Readln(bb); Write('c='); Readln(cc); End; (*=================================*) Bài tập Pascal có lời giải 13
  • 14. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Procedure GPTB2; Var Delta: real; Begin Delta:=sqr(b)-4*a*c; If Delta<0 then Writeln('Phuong trinh vo nghiem.') Else If Delta=0 then Begin Write('Phuong trinh co nghiem kep : '); Write('x1,2=',-b/(2*a):8:2); End Else Begin x1:=(-b+sqrt(Delta))/(2*a); x2:=(-b-sqrt(Delta))/(2*a); Writeln('Phuong trinh co 2 nghiem phan biet la :'); Writeln('X1=',x1:8:2, 'X2=',x2:8:2); End; End; (*================================*) BEGIN (* CT chính *) Clrscr; Writeln(' Giai Phuong Trinh Bac Hai Voi Cac He So :'); Nhapabc(a,b,c); If a<>0 then GPTB2 Else Writeln(' Khong phai phuong trinh bac hai '); Readln ; END . Baøi 3 : Haõy vieát laïi thuû tuïc Insert ñoái vôùi moät chuoãi kí töï cho tröôùc tuøy yù . GIAÛI Procedure Insert ( St1 : String ; Var St2 : String ;Vt : Byte ) ; (* cheøn xaâu St1 vaøo St2 baét ñaàu töø vò trí Vt *) Var i : Byte ; S : String ; Begin If ( Vt > length(St2) Or ( Vt < 1 ) Then Write(' Khong the chen ra ngoai xau ') ; Else Begin S := '' ; (* xaâu roãng *) For i := 1 To (Vt - 1) Do S := S + St2[i] ; S := S + St1 ; For i := Vt To length(St2) Do S := S + St2[i] ; St2 := S ; Bài tập Pascal có lời giải 14
  • 15. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) End ; End ; Baøi 4 : Vieát chöông trình thöïc hieän laàn löôït caùc coâng vieäc sau : _ Laäp thuû tuïc nhaäp ba soá thöïc döông a , b , c töø baøn phím . _ Laäp thuû tuïc kieåm tra xem ba soá treân coù laäp thaønh ba caïnh cuûa tam giaùc hay khoâng ? _ Vieát thuû tuïc tính dieän tích cuûa tam giaùc . _ Vieát thuû tuïc tính caùc trung tuyeán cuûa tam giaùc . _ Vieát hoaøn thieän chöông trình chính . GIAÛI Uses Crt; Var a, b, c: real ; (*================================*) Procedure Nhap(Var a, b, c: real); Procedure input (Var a: real; tenbien: Char); Begin Repeat Write('Nhap ' + tenbien+' = '); Readln(a); Until (a>=0); End; Begin (* baét ñaàu thuû tuïc nhaäp *) Input(a, 'a'); Input(b, 'b'); Input(c, 'c'); End; (* keát thuùc thuû tuïc nhaäp *) (*================================*) Procedure Kiemtra(a, b, c: Real); Begin If (a<b+c) and (b<a+c) and (c<a+b) then Writeln(a:0:2, ', ', b:0:2, ' va ', c:0:2, ' lap thanh ba canh cua tam giac ') Else Writeln('Khong lap thanh ba canh cua tam giac') ; End; (*===============================*) Procedure Trung_tuyen (a, b, c: Real); Var ma, mb, mc: real; Begin ma:=sqrt((2*sqr(b)+2*sqr(c)-sqr(a))/4); mb:=sqrt((2*sqr(a)+2*sqr(c)-sqr(b))/4); mc:=sqrt((2*sqr(a)+2*sqr(b)-sqr(c))/4); Writeln('Cac trung tuyen cua tam giac la : ') ; Writeln('ma=', ma:0:2, ' mb=', mb:0:2, ' mc=', mc:0:2); End; (*================================*) Bài tập Pascal có lời giải 15
  • 16. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Procedure Dientich (a, b, c: real); Var p, S: real; Begin p:=(a+b+c)/2; S:=sqrt(p*(p-a)*(p-b)*(p-c)); Writeln('Dien tich =', S:0:2); End; (*================================*) BEGIN (* Chöông trình chính *) Clrscr; Nhap(a, b, c); Kiemtra(a, b, c); Dientich(a, b, c); Trung_tuyen(a, b, c); Readln; END . Baøi 5 :Giaûi phöông trình x + y + z = 12 trong phaïm vi soá nguyeân khoâng aâm vôùi ñieàu kieän x < 4 . GIAÛI Uses Crt; Var X, Y, Z: byte; Begin Clrscr; Writeln('Giai phuong trinh X+Y+Z=12 trong pham vi ' + 'so nguyen khong am voi dieu kien x<4'); For X:=0 to 3 do For Y:=0 to 12 do For Z:=0 to 12 do If (X+Y+Z=12) then Writeln(' x=',X,' y=',Y, 'z=',Z); Readln; End. Bài tập Pascal có lời giải 16
  • 17. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Baøi 6 : Cho tröôùc caùc soá N , a , b , c töï nhieân . Giaûi phöông trình sau trong phaïm vi soá nguyeân khoâng aâm x + y + z = N vôùi ñieàu kieän x < a , y < b , z < c . GIAÛI Uses Crt; Var N, a, b, c, X, Y, Z, i: Integer; Begin Clrscr; Write(' N, a, b, c = '); Readln(N, a, b,c); If (a+b+c-3<N) then Begin Writeln('Phuong trinh vo nghiem'); Readln; Exit; End Else Begin Writeln('Phuong trinh co nghiem la:'); Writeln('x': 10, 'y': 10, 'z':10); i:=4; For X:=0 to (a-1) do For Y:=0 to (b-1) do For Z:=0 to (c-1) do If (X+Y+Z=N) then Begin Writeln(x: 10, y: 10, z: 10); inc(i); If i=24 then Begin Write('Nhan Enter de tiep tuc...'); Readln; i :=0; End; End ; End ; Write('Nhan Enter de ket thuc...'); Readln; End. Baøi 7 : Bài tập Pascal có lời giải 17
  • 18. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Vieát thuû tuïc Compare ( S1 , S2 : String ; Var Kq : String ) thöïc hieän coâng vieäc sau : so saùnh hai xaâu S1 vaø S2 , tìm taát caû caùc kí töï coù trong caû hai xaâu treân . Xaâu Kq seõ chöùa taát caû caùc kí töï ñoù , moãi kí töï chæ ñöôïc nhôù moät laàn . GIAÛI Uses Crt; Var xau1,xau2,xau: string; (*==================================*) Procedure compare(s1, s2: string; Var kq: string); Var i: byte; (*===============================*) Function kt(ch: char; st: string): boolean; (* Kieåm tra xem kí töï Ch coù trong xaâu St khoâng . Neáu coù thì haøm traû veà giaù trò True . Neáu khoâng thì haøm traû veà giaù trò False *) Begin kt:=pos(ch,st)<>0; End; (*================================*) Begin (* Thaân cuûa thuû tuïc Compare*) kq:=''; (* Xaâu roãng *) For i:=1 to length(s1) do If (not kt(s1[i],kq)) and (kt(s1[i],s2)) then kq:=concat(kq,s1[i]); End; (*==============================*) BEGIN Clrscr; Writeln('Nhap 2 xau S1 va S2 :'); Write('S1: '); Readln(xau1); Write('S2: '); Readln(xau2); Compare(xau1, xau2, xau); If xau<>'' then Writeln('Xau chung la: ',xau) Else Writeln('Khong co ki tu nao trong ca hai xau '); Write('Nhan ENTER de ket thuc...'); Readln; END . Baøi 8 : Bài tập Pascal có lời giải 18
  • 19. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Vieát haøm tính D (St1 , St2) , vôùi U, V laø hai xaâu kí töï baát kì , laø toång soá caùc kí töï khoâng gioáng nhau trong hai xaâu treân , moãi loaïi kí töï chæ ñöôïc nhôù moät laàn . Ví duï D (‘aabba’ , ‘bcdd’) = 2 vì chæ coù hai kí töï a vaø d laø khoâng gioáng nhau trong caùc xaâu treân . GIAÛI Uses Crt; Const M=100; Var S: array[1..M] of string; max, min, i, j, n: byte; (*===============================*) Function D(U,V: string): byte; (*Traû veà toång soá loaïi kí töï khoâng gioáng nhau trong 2 xaâu U vaø V *) Var k, id: byte; s, luu: string; Begin luu:=''; (* Xaâu roãng *) For id:=1 to length(U) do If (pos(U[id],V)=0) and (pos(U[id],luu)=0) then luu:=concat(luu,U[id]); For id:=1 to length(V) do If(pos(V[id],U) = 0) and (pos(V[id],luu)=0) then luu:= concat(luu,V[id]); d:=length(luu); End; (*=================================*) Procedure nhap; Begin Repeat Write('So xau ki tu (>=2):') ; Readln(n); If n<2 then Writeln(#7,'Co ',n,' xau ki tu nen khong the ' + 'so sanh duoc'); Until n>=2; Writeln('Nhap ',n,' xau ki tu :'); For i:=1 to n do Begin Write('S',i,'='); Readln(S[i]); End; End ; (*===============================*) BEGIN (* Chöông trình chính *) Clrscr; nhap; max:=0; min:=255; Bài tập Pascal có lời giải 19
  • 20. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) For i:=1 to n-1 do For j:=i+1 to n do Begin If max<d(S[i],S[j]) then max:=d(S[i],S[j]); If min>d(S[i],S[j]) then min:=d(S[i],S[j]); End; Write('Max(d(Si,Sj)=',max,' Min(d(Si,Sj)=',min); Readln; END . Baøi 9 : Vieát chöông trình hoaøn chænh thöïc hieän caùc coâng vieäc cuûa thöïc ñôn sau : 1. 1. Nhaäp döõ lieäu ( nhaäp soá töï nhieân n ) . 2. 2. Phaân tích ra thöøa soá nguyeân toá ( phaân tích n thaønh tích caùc soá nguyeân toá ) . 3. 3. Thoaùt khoûi chöông trình . GIAÛI Uses Crt; Type uoc_nguyen_to=array[1..50] of longint; Var u, N: longint; i, dem: integer; a: uoc_nguyen_to; (*================================*) Procedure nhap(Var NN:longint); Begin Repeat Write('Nhap N='); Readln(NN); Until NN>=0; End; (*=================================*) Procedure viet; Begin If dem=0 then Writeln('So ',N,' khong the phan tich thanh ' + 'tich cua cac so nguyen to') Else If dem=1 then Writeln(N, '=', a[dem]) Else Begin Write(N,'='); For i:=1 to dem-1 do Write(a[i],'*'); Writeln(a[dem]); End; End; Bài tập Pascal có lời giải 20
  • 21. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) (*================================*) Procedure phantich(N1:longint); Begin If N1>1 then Begin u:=2; dem:=0; Repeat If (N1 mod u=0) then Begin inc(dem); a[dem]:=u; N1:=N1 div u; End Else inc(u); Until N1=1; End Else dem:=0; Viet; End; (*==============================*) BEGIN (* Main Program *) Clrscr; Writeln('Phan tich so N thanh tich cua cac so nguyen to :'); nhap(N); phantich(N); Write('Nhan Enter de ket thuc ...'); Readln; END . BAØI TAÄP CHÖÔNG 4: CAÁU TRUÙC DÖÕ LIEÄU MAÛNG Baøi 1 : Giaûi heä phöông trình tuyeán tính hai aån duøng ma traän : a11x + a12y = c1 a21x + a22y = c2 GIAÛI Uses Crt; Var a: array[1..2, 1..2] of real; c: array[1..2] of real; d, dx, dy, x, y: real; Bài tập Pascal có lời giải 21
  • 22. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) BEGIN Clrscr; Writeln('Giai he phuong tring tuyen tinh hai an:'); Writeln(' a11x+a12y=c1'); Writeln(' a21x+a22y=c2'); Writeln('Nhap cac he so cua he phuong trinh'); Write('a11='); Readln(a[1,1]); Write('a12='); Readln(a[1,2]); Write('c1='); Readln(c[1]); Write('a21='); Readln(a[2,1]); Write('a22='); Readln(a[2,2]); Write('c2='); Readln(c[2]); d:=a[1,1]*a[2,2] - a[2,1] * a[1,2]; dx:=c[1]*a[2,2] - c[2] * a[1,2]; dy:=a[1,1]*c[2] - a[2,1] * c[1]; If d=0 then Writeln(' He vo nghiem hoac vo so nghiem') Else Begin x:=dx/d; y:=dy/d; Writeln('He co nghiem duy nhat :'); Writeln('x=', x:0:2, ' ; y=', y:0:2); End ; Readln; END . Baøi 2 : Laäp phöông trình taïo ra moät maûng chöùa baûng cöûu chöông . Uses Crt ; Var a : Array[1..10, 2..9] Of Byte ; i, j : Byte ; BEGIN Clrscr ; For i := 1 To 10 Do For j := 2 To 9 Do a[i, j] := i*j ; Writeln(' Bang cuu chuong : ') ; Writeln ; For i := 1 To 10 Do For j := 2 to 9 do Write ( j:4 , 'x' , i:2 , '=' , a[i , j]:2) ; (* heát 80 coät töï ñoäng xuoáng haøng *) Readln ; END . Bài tập Pascal có lời giải 22
  • 23. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Baøi 3 : Vieát chöông trình nhaäp hai soá nguyeân döông m , n . Sau ñoù tính trung bình coäng bình phöông caùc soá nguyeân töø m ñeán n . Var m , n , k , s : Word ; tb : real ; BEGIN Writeln('Nhap 2 so nguyen duong m, n :') ; Write (' m = ') ; Readln(m) ; Write (' n = ') ; Readln(n); If m > n Then (* ñoãi choã ñeå m <= n *) Begin k := m ; m := n ; n := k ; End ; s := 0 ; For k := m To n do s := s + sqr(k) ; tb := s / (n - m + 1) ; Writeln ('Trung binh cong bimh phuong cac so ' + 'nguyen tu m den n la: ', tb:12:2); Readln ; END . Baøi 4 : Vieát chöông trình nhaäp töø baøn phím caùc phaàn töû cuûa moät maûng hai chieàu . Kích thöôùc cuûa maûng ñöôïc nhaäp tröôùc töø baøn phím . Var m , n , i , j : Byte ; a : Array[1..100, 1..100] Of Real; BEGIN Write ('Nhap cac kich thuoc cua mang hai chieu : ') ; Write (' So hang m = ') ; Readln(m) ; Write (' So cot n = ') ; Readln(n) ; Writeln (' Nhap cac phan tu cua mang : ') ; For i := 1 To m Do For j := 1 To n Do Begin Write ('a[', i:2, ', ' , j:2 ,']=') ; Readln(a[i, j]) ; Bài tập Pascal có lời giải 23
  • 24. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) End ; Readln ; END . Baøi 5 : Daõy soá sau ñöôïc goïi laø daõy Fibonaci : a1 = 1 a2 = 1 a3 = 2 a4 = 3 ... an = an-1 + an-2 Vieát chöông trình tính 20 soá Fibonaci ñaàu tieân vaø ñöa ra keát quaû vaøo moät maûng 20 phaàn töû . Var a : Array[1..20] Of Byte ; i : Byte ; BEGIN a[1] :=1; a[2] :=1; For i:=3 to 20 do a[i]:=a[i-1]+a[i-2] ; END . Baøi 6 : Daõy soá an ñöôïc ñònh nghóa nhö sau : a1 = 1 a2 = 2 ... an = 2an-1 + an-2 ( n > 2 ) Haõy laäp chöông trình tính vaø gaùn giaù trò cuûa daõy vaøo bieán maûng . Var a : Array [1..100] Of Word ; i, N : Byte ; S : Real ; BEGIN Write (' Nhap so N>=2 : ') ; Readln(n) ; a[1] := 1 ; a[2] := 2 ; For i := 3 To N Do a[i] := 2*a[i-1]+a[i-2] ; Bài tập Pascal có lời giải 24
  • 25. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) S := 0 ; For i := 1 to N do S := S+1/sqr(a[i]) ; Writeln (' S = ', S:12:6) ; Readln ; END . Baøi 7 : Nhaäp soá töï nhieân N vaø vieát chöông trình taïo maûng bao goàm N soá nguyeân toá ñaàu tieân . var a:array[1..100,1..100]of byte; n,i,j,k,l,ba:byte; d:boolean; BEGIN write(' Nhap kich thuoc cua mang hai chieu NxN. N = ');readln(n); for i:=1 to n do for j:=1 to n do begin ba:=0; repeat d:=FALSE; if j>1 then for k:=1 to j-1 do if a[i,k]=ba then d:=true; if i>1 then for k:=1 to i-1 do if a[k,j]=ba then d:=true; Bài tập Pascal có lời giải 25
  • 26. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) ba:=ba+1; until not d; a[i,j]:=ba-1; end; for i:=1 to n do for j:=1 to n do write(a[i,j]:8); readln; END . Baøi 8 : Vieát chöông trình nhaäp moät baûng soá 3 x 3 vôùi ñieàu kieän caùc soá ñöôïc nhaäp seõ hieän treân maøn hình ñuùng taïi vò trí cuûa mình treân baûng soá . Uses Crt; Var a : array[1..3, 1..3] of integer ; i, j: byte ; BEGIN Clrscr; Writeln('Nhap mot bang so nguyen kich thuoc 3x3:'); Gotoxy(10, 4); Write(1); Gotoxy(19, 4); Write(2); Gotoxy(28, 4); Write(3); Gotoxy(5, 6); Write(1); Gotoxy(5, 8); Write(2); Gotoxy(5,10); Write(3); For i:=1 to 3 do For j:=1 to 3 do Begin Gotoxy(9*j-1, 2*i+4); Read(a[i, j]); Gotoxy(9*j-1, 2*i+4); ClrEol; Write(a[i, j]:6); End; Readln; END . Bài tập Pascal có lời giải 26
  • 27. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Baøi 9 : a. a. Vieát chöông trình nhaäp döõ lieäu töø daõy ñoái xöùng vaøo maûng moät chieàu . b. b. Vieát chöông trình nhaäp döõ lieäu laø ma traän ñoái xöùng vaøo maûng hai chieàu . a) Var a: array [1..100] of integer; n, i: byte; Begin Write('Nhap so phan tu cua day doi xung:'); Readln(n); Writeln('Nhap cac phan tu cua day:'); For i:=1 to (n+1) div 2 do Begin Write('a[', i:2, ']='); Readln(a[i]); a[n-i+1] := a[i]; End; Readln ; END ; b) Var a: array [1..100, 1..100] of integer; n, i, j: integer; BEGIN Bài tập Pascal có lời giải 27
  • 28. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Write('Nhap kich thuoc cua mang doi xung: '); Readln(n); Write('Nhap cac phan tu cua mang:'); For i:=1 to n do For j:=1 to i do Begin Write('a[', i:2, ',', j:2, ']='); Readln(a[i, j]); a[j,i]:=a[i,j]; End; Readln ; END ; BAØI TAÄP CHÖÔNG 5: XAÂU KYÙ TÖÏ Baøi 1 : Laäp trình ñeám soá laàn xuaát hieän ôû moãi loaïi kí töï thuoäc baûng chöõ caùi tieáng Anh trong moät xaâu kí töï Str . Var A: array [ 'A'..'Z'] of integer; S: string; ch: char; i: integer; BEGIN Write(' Cho mot xau ki tu : '); Readln(s); For ch:= 'A' to 'Z' do A[ch]:=0; For i:=1 to length(s) do Begin If Upcase(S[i]) in (['A'..'Z']) then Begin S[i]:= Upcase(S[i]); A[S[i]]:= A[S[i]]+1; End; End; For ch:= 'A' to 'Z' do Bài tập Pascal có lời giải 28
  • 29. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Writeln('So lan xuat hien cua ',ch,' trong xau la: ', A[ch]:4) ; Readln ; END . Baøi 2 : Cho soá töï nhieân n vaø xaâu coù ñoä daøi n . Haõy bieán ñoåi xaâu ñaõ cho baèng caùch thay ñoåi trong ñoù : a. a. Taát caû caùc daáu ! baèng daáu chaám . b. b. Moãi moät nhoùm caùc daáu chaám lieàn nhau baèng moät daáu chaám . c. c. Moät nhoùm caùc daáu chaám ñöùng lieàn nhau baèng daáu ba chaám . a) Var S: string; i: byte; BEGIN Write(' Cho mot xau ki tu S = '); Readln(S); For i:=1 to length(S) do If S[i] = '!' then S[i]:= '.'; Write( ' Chuoi sau khi da bien doi la : ', S); Readln; END . b) Uses crt; Var S : string; i : byte; BEGIN Bài tập Pascal có lời giải 29
  • 30. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Clrscr; Write(' Cho mot xau ki tu S = '); Readln(S); i:=1; While i< length(S) do If (S[i]='.')and(S[i+1]='.') then Delete(S,i,1) Else inc(i); Write('Chuoi sau khi da bien doi la: ' ,S); Readln; END . c) Uses crt; Var S: string; i, j: byte; BEGIN Clrscr; Write('Nhap xau S='); Readln(S); i:=1; While i<=Length(S) do Begin If S[i]='.' then Begin Bài tập Pascal có lời giải 30
  • 31. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) j:=i; While (S[i]='.')and(i<=length(S)) do inc(i); dec(i); If (i-j)=1 then insert('.',S,i) Else If (i-j)>2 then Begin Delete(S,j+2,i-j-2); i:=j+1; End; End ; Inc(i); End; Write('Chuoi sau khi bien doi la: ',S); Readln; END . Baøi 3 : Cho soá töï nhieân n vaø moät daõy caùc kí töï S1 , S2 , … , Sn . Haõy tìm soá töï nhieân I ñaàu tieân sao cho caùc kí töï Si , Si+1 ñeàu laø chöõ caùi a . Neáu trong daõy khoâng coù nhöõng caëp nhö vaäy thì thoâng baùo . Var S: string; i: integer; BEGIN Write(' Cho mot xau ki tu : '); Readln(S); i:= pos('aa', S); {tìm vò trí xaâu con 'aa' trong S} Bài tập Pascal có lời giải 31
  • 32. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) If i<>0 then Writeln(' Ton tai "aa" tai vi tri ', i) Else Writeln(' Khong ton tai .') ; Readln; END . Baøi 4 : Cho soá töï nhieân n vaø daõy caùc kí töï S1 , S2 , … , Sn . Bieát raèng trong daõy coù ít nhaát moät daáu phaåy . Haõy tìm soá töï nhieân i sao cho : a. a. Si laø daáu phaåy ñaàu tieân . b. b. Si laø daáu phaày cuoái cuøng . a) Var S: string; i: integer; BEGIN Write('Cho mot xau S co dau ",": '); Readln(S); i:= pos(',', S); (* vò trí cuûa daáu ',' trong S *) If i<> 0 then Write(' Vi tri thoa man la: ', i); Readln; END . b) Var S: string; i: integer; BEGIN Write('Cho mot xau S co dau ",": '); Readln(S); i:= length(S); While (i>=1)and(S[i] <> ',' ) do i:=i -1; If i>=1 then Write('So thu tu thoa man la: ', i) Else Write('Khong ton tai.'); Readln; END . Baøi 5 : Vieát chöông trình nhaäp moät xaâu kí töï , sau ñoù chæ ra xem xaâu ñoù coù phaûi laø xaâu ñoái xöùng khoâng ( xaâu ñoái xöùng laø xaâu coù caùc kí töï gioáng nhau vaø ñoái xöùng nhau qua ñieåm giöõa xaâu , ví duï ‘ABBA’ hoaëc ‘ABCBA’ ) . Uses Crt; Var St : string; dx : Boolean; Bài tập Pascal có lời giải 32
  • 33. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) i, len: byte; BEGIN Clrscr; Write(' Nhap xau St = '); Readln(St); dx:= True; i:=1; len:= Length(St); While dx and (i<=(len div 2)) do Begin dx:=(St[i] = St[len - i+1]); inc(i); End; If dx then Write(' St la xau doi xung ') Else Write(' St khong phai la xau doi xung ') ; Readln; END . Baøi 6 : Cho moät xaâu kí töï S . Haõy vieát chöông trình tính xem trong S coù bao nhieâu loaïi kí töï khaùc nhau ( phaân bieät chöõ in hoa vôùi chöõ in thöôøng ) . Ví duï vôùi S laø ‚Pascal‛ ta coù ñaùp soá laø 5 . Var S: string; i, j, dem: integer; t: boolean; BEGIN Write('Cho mot xau ki tu S: '); Readln(S); dem:=0; For i:=1 to length(S) do Begin t:=false; For j:=1 to i-1 do if (S[j]=S[i]) then t:=true; If not t then dem:= dem+1; End; Write('So ki tu khac nhau cua xau S la: ', Dem); Readln; END . Baøi 7 : Vieát chöông trình nhaäp moät xaâu kí töï vaø bieán ñoåi chuùng thaønh toaøn chöõ in hoa . Var S : string; i : integer; BEGIN Bài tập Pascal có lời giải 33
  • 34. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Write('Cho mot xau ky tu: '); Readln(S); For i:=1 to length(S) do If S[i] in ['a' ..'z'] then S[i]:= Upcase(S[i]); Write('Chuoi sau khi da bien doi la: ', S); Readln; END . Baøi 8 : Hoï teân moät hoïc sinh ñöôïc nhaäp töø baøn phím . Baïn haõy vieát chöông trình ñieàu chænh laïi caùc kí töï ñaàu cuûa caùc töø ñôn trong teân cuûa hoïc sinh aáy trôû thaønh chöõ in hoa . Uses crt; Const Chu=['a'..'z']; Var Hoten: string; i,len: byte; BEGIN Clrscr; Write('Ho ten='); Readln(Hoten); Len:=length(Hoten); If Hoten[1] in Chu then Hoten[1]:=Upcase(Hoten[1]); For i:=2 to len do If (Hoten[i-1]=#32)and(Hoten[i] in Chu) then Hoten[i]:=Upcase(Hoten[i]); Write('Ho ten sau khi dieu chinh la: ', Hoten); Readln; END . Baøi 9 : Vieát chöông trình nhaäp xaõu kí töï töø baøn phím , sau ñoù goït xaâu laïi baèng caùch caùch xoaù ñi caùc kí töï troáng ôû hai ñaàu cuûa xaâu . Ví duï neáu nhaäp xaâu ‚ Ha noi ‚ , thì keát quaû seõ laø ‚Ha Noi‛ . ar S: String; BEGIN Write('Cho mot xau ky tu: '); Readln(S); While S[1] = #32 do Delete(S,1,1); While (S[length(S)] = #32) do Delete(S,length(S),1); Write('Chuoi sau khi da bien doi la: ', S); Readln; END . BAØI TAÄP CHÖÔNG 6: DÖÕ LIEÄU KIEÅU TAÄP Baøi 1 : Baïn haõy vieát haøm Card(A) ñeám soá phaàn töû cuûa taäp hôïp A cho tröôùc coù kieåu Set Of 0 .. 99 . (* haøm ñeám soá phaàn töû cuûa taäp hôïp *) Uses Crt; Bài tập Pascal có lời giải 34
  • 35. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Type Tap=set of 0..99; Const inp='Number.dat'; Var S : Tap; i : byte; Procedure Nhap; Var a: byte; f: text; Begin S:=[]; Assign(f,inp); Reset(f); While not SeekEoF(f) do begin Readln(f,a); If (a>=0)and(a<=99) then S:=S+[a]; End; Close(f); End; Function Card(S: Tap): byte; Var i,n: byte; Begin n:=0; For i:=0 to 99 do If i in S then Inc(n); Card:=n; End; BEGIN Nhap; Clrscr; Write('Tap S co ',Card(S),' phan tu.'); Readln; END. Baøi 2 : Baïn haõy laäp chöông trình taïo moät taäp hôïp caùc soá nguyeân chaün kieåu Byte vaø loaïi khoûi noù caùc soá chia heát cho 3 . Keát quaû theå hieän treân maøn hình . Uses Crt; Const n=5; Type Danhsach=record holot: string[25]; ten: string[10]; tuoi: 0..99; Bài tập Pascal có lời giải 35
  • 36. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) lop: string[3]; End ; Var ds: array [1..20] of Danhsach; i,j: byte; f: file of Danhsach; Procedure Doi(i,j: byte); Var tg: Danhsach; Begin tg:=ds[i]; ds[i]:=ds[j]; ds[j]:=tg; End; BEGIN ClrScr; Writeln('Nhap danh sach hoc sinh tu file data.dat : '); Writeln; Assign(f,'data.dat'); Reset(f); For i:=1 to n do Read(f,ds[i]); Close(f); For i:=1 to n-1 do For j:=i+1 to n do begin If (ds[i].ten>ds[j].ten) then Doi(i,j) Else If (ds[i].ten=ds[j].ten)and(ds[i].holot>ds[j].holot) then Doi(i,j); end; Writeln('Danh sach hoc sinh:'); For i:=1 to n do With ds[i] do Writeln(holot:20,ten:11,tuoi:4,lop:5); Writeln; Write('Bam Enter de ket thuc...'); Readln; END. Baøi 3 : Xeùt chöông trình sau : Program B4 ; Var Thoat : Set Of Char = [‘e’ , ’E’] ; BEGIN Write (‘ Hay go E de ket thuc : ‘) ; Repeat Bài tập Pascal có lời giải 36
  • 37. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Ch := Readkey ; Until Ch in thoat ; END . Haõy tìm vaø söûa loãi trong chöông trình ñoù . Uses Crt; Const thoat: set of char=['e','E']; Var ch: char; BEGIN Write('Hay go E de thoat khoi chuong trinh: '); Repeat ch:=readkey; Until ch in thoat; END . Baøi 4 : Baïn haõy laäp chöông trình hieån thò moät menu daïng sau treân maøn hình 1. Xem 2. 2. Sua chua 3. 3. Loai bo 4. 4. Nhap them 5. 5. Thoat Lua chon cua ban : _ Sau ñoù ñôïi goõ phím . Chöông trình phaûi ñôïi cho tôùi khi phím goõ vaøo laø moät trong caùc chöõ soá 1 .. 5 hoaëc caùc chöõ caùi ñaàu cuûa caùc tuyø choïn thì thoâng baùo phím goõ vaøo hôïp leä vaø keát thuùc chöông trình . Trong chöông trình phaûi duøng moät taäp hôïp ñeå kieåm tra vieäc nhaäp giaù trò cho bieán töø baøn phím . (* Hieån thò menu *) Uses Crt; Const menu: set of char = ['1'..'5','X','S','L','N','T']; Var ch: char; BEGIN Clrscr; Writeln(' 1. Xem '); Writeln(' 2. Sua chua '); Writeln(' 3. Loai bo '); Writeln(' 4. Nhap them'); Writeln(' 5. Thoat '); Bài tập Pascal có lời giải 37
  • 38. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Write('Lua chon cua ban: '); Repeat ch:=readkey; ch:=Upcase(ch); Until ch in menu; Writeln; Write('Ban da chon:'); Case ch of '1','X': Writeln(' 1. Xem '); '2','S': Writeln(' 2. Sua chua '); '3','L': Writeln(' 3. Loai bo '); '4','N': Writeln(' 4. Nhap them'); '5','T': Writeln(' 5. Thoat '); End; Readln; END. Baøi 5 : Haõy laäp chöông trình nhaäp vaøo moät xaâu nhò phaân . Caùc kí töï nhaäp vaøo khoâng hôïp leä bò boû qua . (* nhaäp moät xaâu nhò phaân *) Uses Crt; Const bit : set of char= ['0','1']; Var ch: char; st: string; BEGIN Clrscr; st:=''; Write('Nhap vao mot xau nhi phan : '); Repeat ch:= Readkey; If ch in bit then begin st:=st+ch; Write(ch); end Else If ch<>#13 then Write(#7); Until ch=#13; Readln; END. Baøi 6 : Haõy laäp chöông trình nhaäp vaøo moät xaâu kí töï töø baøn phím . Yeâu caàu caùc kí töï nhaäp vaøo phaûi laø caùc chöõ caùi thuoäc baûng chöõ caùi tieáng Anh , boû qua caùc phím khaùc . (* Nhaäp moät xaâu toaøn caùc chöõ caùi *) Uses Crt; Const A:set of char=['a'..'z','A'..'Z']; Var ch: char; Bài tập Pascal có lời giải 38
  • 39. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) st: string; BEGIN Clrscr; st:=''; Writeln('Nhap vao mot xau toan cac chu cai:'); Repeat ch:=Readkey; If ch in A then begin st:=st+ch; write(ch); End Else if ch<>#13 then Write(#7); If ch=#0 then ch:=Readkey; Until ch = #13; END . Baøi 7 : Vieát chöông trình coù chöùc naêng theâm phaàn töû vaøo taäp hôïp tröïc tieáp töø baøn phím vaø loaïi bôùt phaàn töû khoûi taäp hôïp cuõng tröïc tieáp töø baøn phím . (* loai bo cac phan tu khoi tap hop *) Uses Crt; Var tap: set of char; ch: char; BEGIN tap:=[]; Writeln('Nhap cac phan tu cho mot tap hop cac ki tu: '); Repeat ch:=ReadKey; tap:=tap+[ch]; Writeln(ch); Until not(ch in ['a'..'z']); Writeln('Cac phan tu cua tap hop la:'); For ch:='a' to 'z' do If ch in tap then Write(ch,' '); Writeln; Writeln('Ban muon bo cac phan tu nao khoi tap hop:'); Repeat ch:=ReadKey; tap:=tap-[ch]; Writeln(ch); Until not(ch in ['a'..'z']); Writeln('Cac phan tu con lai cua tap hop la:'); For ch:='a' to 'z' do Bài tập Pascal có lời giải 39
  • 40. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) If ch in tap then Write(ch,' '); Readln; END . BAØI TAÄP CHÖÔNG 7: KIEÅU RECORD Baøi 1 : Thoâng tin veà moãi hoïc sinh goàm :  Hoï ñeäm : moät xaâu 25 kí töï .  Teân : moät xaâu 10 kí töï .  Tuoåi : moät soá nguyeân hai chöõ soá .  Lôùp : moät xaâu hai chöõ soá vaø moät chöõ caùi vieát hoa Haõy laäp chöông trình nhaäp töø baøn phím danh saùch moät lôùp 15 hoïc sinh vaøo moät maûng baûn ghi . Sau ñoù hieån thò danh saùch leân maøn hình , moãi ngöôøi moät doøng . (* Nhaäp danh saùch hoïc sinh töø baøn phím *) Uses Crt; Const n=15; Type Danhsach=record holot: string[25]; ten: string[10]; tuoi: 0..99; lop: string[3]; End; Var ds: array [1..n] of Danhsach; i : byte; BEGIN ClrScr; Writeln('Hay nhap danh sach hoc sinh : '); Writeln; For i:=1 to n do Begin Writeln('Thong tin hoc sinh thu ',i); Write('Cho ho lot : '); Readln(ds[i].holot); Write('Cho ten : '); Readln(ds[i].ten); Write('Cho tuoi : '); Readln(ds[i].tuoi); Write('Cho lop : '); Readln(ds[i].lop); Writeln; End; Writeln('Danh sach hoc sinh :'); For i:=1 to n do With ds[i] do Writeln(holot:20,ten:10,tuoi:4,lop:5); Writeln; Bài tập Pascal có lời giải 40
  • 41. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Write('Bam Enter de ket thuc...'); Readln; END. Baøi 2 : Thoâng tin veà moãi hoïc sinh laø moät baûn ghi goàm caùc tröôøng :  Hoïñeäm : moät xaâu 25 kí töï .  Teân : moät xaâu 10 kí töï .  Tuoåi : moät soá nguyeân hai chöõ soá .  Lôùp : moät xaâu hai chöõ soá vaø moät chöõ caùi vieát hoa Moät file baûn ghi chöùa moät danh saùch moät lôùp goàm 20 hoïc sinh . Haõy laäp chöông trình hieån thò danh saùch leân maøn hình , moãi ngöôøi moät doøng . (* Doc tu mot file ban ghi *) Uses Crt; Const n=5; Type Danhsach=record holot: string[25]; ten: string[10]; tuoi: 0..99; lop: string[3]; end; Var ds: Danhsach; i: byte; f: file of Danhsach; BEGIN ClrScr; Writeln('Danh sach hoc sinh tu file bai2.dat'); Writeln; Assign(f,'bai2.dat'); Reset(f); For i:=1 to n do Begin Read(f,ds); With ds do Writeln(holot:20,ten:11,tuoi:4,lop:5); End; Close(f); Writeln; Write('Bam Enter de ket thuc...'); Readln; END . Baøi 3 : Moät file baûn ghi chöùa moät danh saùch hoïc sinh , thoâng tin veà moãi hoïc sinh gioáng nhö baøi treân . Haõy laäp chöông trình taïo moät file baûn ghi khaùc chöùa danh saùch ñoù , moãi baûn ghi goàm caùc tröôøng : Bài tập Pascal có lời giải 41
  • 42. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com)  Hoïteân : moät xaâu 35 kí töï .  Tuoåi : moät soá nguyeân hai chöõ soá .  Khoái : moät soá nguyeân hai chöõ soá .  Lôùp : moät chöõ caùi vieát hoa (* Doi kieu ban ghi *) Uses Crt; Type Danhsach1=record holot: string[25]; ten: string[10]; tuoi: 0..99; lop: string[3]; End; Danhsach2=record hoten: string[35]; tuoi: byte; khoi: byte; lop: char; End; Var ds1 : Danhsach1; ds2 : Danhsach2; f1 : file of Danhsach1; f2 : file of Danhsach2; c : integer; Bài tập Pascal có lời giải 42
  • 43. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) BEGIN ClrScr; Writeln('Ghi tu file bai3.dat sang bai3n.dat:'); Writeln; Assign(f1,'bai3.dat'); Reset(f1); Assign(f2,'bai3n.dat'); Rewrite(f2); While not Eof(f1) do Begin Read(f1,ds1); With ds1 do Begin ds2.hoten:=holot+ten; val(copy(lop,1,2),ds2.khoi,c); ds2.tuoi:=tuoi; ds2.lop:=UpCase(lop[3]); Write(f2,ds2); End; End; Close(f1); Close(f2); Writeln; Writeln('Bam Enter de ket thuc!'); Readln; Bài tập Pascal có lời giải 43
  • 44. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) END . Baøi 4 : Moät file baûn ghi chöùa moät danh saùch hoïc sinh PTTH , thoâng tin veà moãi hoïc sinh ngoaøi caùc tröôøng Hoïñeäm , Teân , Tuoåi , Lôùp gioáng nhö caùc baøi treân coøn coù theâm tröôøng Ñieåm chöùa ñieåm trung bình cuûa hoïc sinh trong naêm hoïc . Haõy laäp chöông trình : a. a. Hieån thò leân maøn hình danh saùch nhöõng hoïc sinh gioûi nhaát cuûa tröôøng laø nhöõng baïn coù ñieåm trung bình töø 8.0 trôû leân vaø cao nhaát trong khoái . b. b. Laäp danh saùch hoïc sinh trong naêm hoïc môùi , bieát moät hoïc sinh coù ñieåm trung bình töø 5.0 trôû leân thì ñöôïc leân lôùp . Chuù yù : lôùp 10A leân lôùp 11A , lôùp 11A leân 12A ... Keát quaû chöùa trong file . (* Khen thuong va len lop *) Uses Crt; Type Danhsach=record holot: string[25]; ten: string[10]; tuoi: 0..99; lop: string[3]; diem: real; End; Var ds: array [1..100] of Danhsach; f: file of Danhsach; n: integer; Procedure Nhap; Begin Assign(f,'bai4.dat'); Reset(f); n:=0; While not Eof(f) do Begin n:=n+1; Read(f,ds[n]); End; Close(f); End; Procedure Timgioi; Var i: integer; max10,max11,max12: real; l: string; Begin max10:=0; max11:=0; max12:=0; For i:=1 to n do With ds[i] do Bài tập Pascal có lời giải 44
  • 45. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Begin l:=copy(lop,1,2); If (l='10')and(diem>max10)and(diem>8.0) then max10:=diem Else If (l='11')and(diem>max11)and(diem>8.0) then max11:=diem Else If (l='12')and(diem>max12)and(diem>8.0) then max12:=diem; End; Writeln('Hoc sinh gioi nhat khoi 10 : '); For i:=1 to n do With ds[i] do If (copy(lop,1,2)='10')and(diem>=max10) then Writeln(holot:20,ten:10,tuoi:4,lop:5,diem:5:1); Writeln('Hoc sinh gioi nhat khoi 11 : '); For i:=1 to n do With ds[i] do If (copy(lop,1,2)='11')and(diem>=max11) then Writeln(holot:20,ten:10,tuoi:4,lop:5,diem:5:1); Writeln('Hoc sinh gioi nhat khoi 12 : '); For i:=1 to n do With ds[i] do If (copy(lop,1,2)='12')and(diem>=max12) then Writeln(holot:20,ten:10,tuoi:4,lop:5,diem:5:1); End; Procedure Lenlop; Var i: integer; l: string; f: file of Danhsach; Begin For i:=1 to n do With ds[i] do Begin l:=copy(lop,1,2); If (l='10')and(diem>=5.0) then lop:='11'+lop[3] Else If (l='11')and(diem>=5.0) then lop:='12'+lop[3] Else If (l='12')and(diem>=5.0) then lop:='DTN'; End; Assign(f,'bai4n.dat'); Rewrite(f); For i:=1 to n do With ds[i] do If lop<>'DTN' then Write(f,ds[i]); Close(f); End; BEGIN ClrScr; Nhap; Timgioi; Lenlop; Write('Bam ENTER de ket thuc...'); Readln; Bài tập Pascal có lời giải 45
  • 46. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) END . Baøi 5 : Cho file baûn ghi f chöùa döõ lieäu veà kho saùch , döõ lieäu veà moãi cuoán saùch ñöôïc chöùa trong moät baûn ghi goàm 3 tröôøng mang thoâng tin veà :  Hoï teân taùc giaû : moät xaâu 26 kí töï .  Teân saùch : moät xaâu 40 kí töï .  Naêm xuaát baûn : moät soá nguyeân 4 chöõ soá . Haêy laäp chöông trình nhaäp döõ lieäu vaøo kho saùch , sau ñoù tìm ra :  Nhöõng cuoán saùch cuûa moät taùc giaû cho tröôùc xuaát baûn vaøo moät naêm cho tröôùc .  Nhöõng cuoán saùch coù teân cho tröôùc . Keát quaû hieän treân maøn hình. (* Tim kiem tren ban ghi *) Uses Crt; Type Danhsach=record Tacgia: string[26]; Tensach: string[40]; NamXB: integer; End; Var ds: array [1..100] of Danhsach; n : integer; f : file of Danhsach; M: Danhsach; Procedure Nhap; Begin n:=0; Assign(f,'bai5.dat'); Reset(f); While not Eof(f) do Begin Inc(n); Read(f,ds[n]); End; Close(f); End; Procedure TheoTG; Var tacgia: string; namXB: integer; i: integer; Begin Write('Cho ten tac gia : '); Readln(M.tacgia); Write('Cho nam xuat ban : '); Readln(M.NamXB); i:=1; While (i<=n)and((ds[i].tacgia<>tacgia)or(ds[i].namXB<>namXB)) do i:=i+1; Bài tập Pascal có lời giải 46
  • 47. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) If (i>n) then Writeln('Khong tim duoc') Else Writeln(ds[i].tacgia:28,ds[i].tensach:42,ds[i].namXB:6); End; Procedure TheoTS; Var ten: string; i: integer; Begin Write('Cho ten sach : '); Readln(ten); i:=1; While (i<=n)and(ds[i].tensach<>ten) do i:=i+1; If (i>n) then Writeln('Khong tim duoc') Else Writeln(ds[i].tacgia:28,ds[i].tensach:42,ds[i].namXB:6); End; Procedure Timkiem; Var c:char; Begin Writeln('1. Tim kiem theo tac gia va nam xuat ban.'); Writeln('2. Tim kiem theo ten sach'); Writeln; Write('Ban chon [1/2] : '); Repeat c:=Readkey; Until pos(c,'12')>0; Writeln(c); If c='1' then TheoTG Else TheoTS; End; BEGIN ClrScr; Nhap; Timkiem; Write('Ban Enter de ket thuc...'); Readln; END. Baøi 6 : File baûn ghi F chöùa danh saùch caùc ngaøy leã trong moät naêm , moãi baûn ghi goàm ngaøy thaùng , teân ngaøy leã vaø soá ngaøy ñöôïc nghæ . Haõy laäp chöông trình nhaäp danh saùch caùc ngaøy leã vaø tính :  Toång soá caùc ngaøy leã vaø toång soá caùc ngaøy nghæ leã trong naêm .  Toång soá caùc ngaøy leã vaø toång soá caùc ngaøy nghæ leã trong quí 1 , quí 2 , … Keát quaû theå hieän treân maøn hình . (* Tinh so ngay le va ngay nghi trong nam ,qui *) Uses Crt; Bài tập Pascal có lời giải 47
  • 48. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Type Danhsach=record ngay: byte; thang: byte; ten: string[15]; songay: integer; end; Var ds: array [1..100] of Danhsach; n: integer; f: file of Danhsach; snn,snnq1,snnq2,snnq3,snnq4: integer; tsq1,tsq2,tsq3,tsq4: integer; Procedure Nhap; Begin n:=0; Assign(f,'bai6.dat'); Reset(f); While not Eof(f) do Begin Inc(n); Read(f,ds[n]); End; Close(f); End; Procedure Tinh_ngay_nghi; Var i: integer; Begin snn:=0; snnq1:=0; tsq1:=0; snnq2:=0; tsq2:=0; snnq3:=0; tsq3:=0; snnq4:=0; tsq4:=0; For i:=1 to n do With ds[i] do Begin Inc(snn,songay); If (thang<3) then Begin Inc(snnq1,songay); Inc(tsq1); End Else If (thang<6) then Begin Inc(snnq2,songay); Inc(tsq2); End; If (thang<9) then Begin Inc(snnq3,songay); Inc(tsq3); Bài tập Pascal có lời giải 48
  • 49. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) End ; If (thang<12) then Begin Inc(snnq4,songay); Inc(tsq4); End; End; End; Procedure Inkq; Var i: integer; Begin Writeln('So ngay le trong nam : ',n); Writeln('Tong so ngay nghi le trong nam : ',snn); Writeln; Writeln('So ngay le trong qui 1 : ',tsq1); Writeln('Tong so ngay nghi le trong qui 1 : ',snnq1); Writeln('So ngay le trong qui 2 : ',tsq2); Writeln('Tong so ngay nghi le trong qui 2 : ',snnq2); Writeln('So ngay le trong qui 3 : ',tsq3); Writeln('Tong so ngay nghi le trong qui 3 : ',snnq3); Writeln('So ngay le trong qui 4 : ',tsq4); Writeln('Tong so ngay nghi le trong qui 4 : ',snnq4); Writeln; End; BEGIN Clrscr; Nhap; Tinh_ngay_nghi; Inkq; Write('Ban Enter de ket thuc...'); Readln; END. BAØI TAÄP CHÖÔNG 8: KIEÅU FILE Baøi 1 : Haõy laäp chöông trình taïo moät teäp soá nguyeân chöùa caùc soá nguyeân toá nhoû hôn 10000 theo thöù töï taêng daàn . (* Taïo file soá nguyeân toá nhoû hôn 10000 *) Uses Crt; Const N=10000; Var i , j : Integer; f: File of Integer; a: Array[2..N] of boolean; Bài tập Pascal có lời giải 49
  • 50. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) BEGIN For i:=2 to N do a[i]:=true; i:=2; Repeat For j:=2 to (N div i) do a[i*j]:=false; Repeat Inc(i) Until a[i] or (i>N); Until i>N; Assign(F,'C:SoNT.dat'); Rewrite(F); For i:=1 to N do If a[i] then Write(F,i); Close(F); clrscr; Write(' Viet ra file "C:SoNT" cac so nguyen to nho hon 10000 '); Readln; END . Baøi 2 : Cho f laø teäp vaên baûn chöùa caùc xaâu 10 kí töï . Haõy laäp chöông trình nhaäp vaø hieån thò noäi dung file ñoù leân maøn hình , moãi xaâu moät doøng , ñaày trang maøn hình thì döøng laïi ñôïi goõ Enter môùi hieån thò trang tieáp theo cho tôùi heát. (* Ghi vaø ñoïc file of String *) Uses Crt; Const INP='FoString.dat'; Type String10 = String[10]; Procedure Ghi; Var f: file of String10; S: String10; Begin Assign(f,INP); Rewrite(f); Writeln('Nhap vao f. Thoi nhap khi S='''' (go Enter)!'); Readln(S); While (S<>'') do Begin Write(f,S); Readln(S); End; Close(f); End; Procedure Doc; Var f: file of String10; S: String10; Begin Clrscr; Assign(f,INP); Reset(f); While Not Eof(f) Do Begin Bài tập Pascal có lời giải 50
  • 51. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Read(f,S); Writeln(S); If WhereY=25 then Begin Write('Press Enter to continue..'); Readln; Clrscr; End; End; Close(f); Readln; End; BEGIN Ghi; Doc; END. Baøi 3 : Baïn haõy vieát chöông trình cho pheùp ñoïc döõ lieäu töø baøn phím vaø ghi theâm vaøo cuoái moät teäp caùc baûn ghi . (* Doc vaø ghi vaøo cuoái teäp caùc baûn ghi *) Uses Crt; Const inp='Hocsinh.dat'; Type Hocsinh=Record Ten : String[30]; Tuoi: Byte; End; Var F : file of Hocsinh; Hs: Hocsinh; BEGIN Assign(f,inp); Reset(f); Write('Ho va ten: '); Readln(Hs.Ten); Write('Tuoi : '); Readln(Hs.Tuoi); Seek(f,Filesize(F)); Write(f,Hs); Close(f); END . Baøi 4 : Cho moät vaên baûn chöùa trong moät text file f . Trong vaên baûn , tính töø traùi sang phaûi , töø treân xuoáng döôùi , kí töï # laø kí hieäu xoaù ñi moät töø ñöùng ngay tröôùc noù neáu coù . Ví duï ‘#Ta#oi di ngu#h###hoc’ coù nghóa laø ‘Toi di hoc’ . Baïn haõy vieát chöông trình söûa laïi file f theo quy öôùc treân . (* Söûa vaên baûn *) Bài tập Pascal có lời giải 51
  • 52. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Uses Crt; Const fi='vanban.txt'; Var f: text; s: string; ch: char; Procedure docfile ( fi : String ); Var f : text ; Begin Assign(f,fi); Reset(f); while not eof(f) do Begin Read(f,ch); Write(ch); End; close(f) ; writeln ; End ; BEGIN Writeln(' Van ban ban dau doc tu file "vanban.txt" :') ; docfile(fi) ; assign(f,fi) ; reset(f) ; s:=''; Repeat Read(f,ch); If (ch='#')then Delete(s,length(s),1) Else s:=s+ch; Until Eof(f); Close(f); Assign(f,fi); Rewrite(f); Writeln(f,s); Close(f); Writeln(' Van ban sau khi sua chua :') ; docfile(fi) ; Readln; END . Baøi 5 : Cho 2 file f vaø g cuøng kieåu ( nhöng khoâng roõ kieåu naøo ) . Baïn haõy laäp thuû tuïc gaùn noäi dung cuûa file g cho file f. (* Gan hai file *) Uses Crt; Bài tập Pascal có lời giải 52
  • 53. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Const f1='calc.ex'; f2='C:calc.exe'; Procedure Copyfile(fi1,fi2: string); Var nread,nbuf: word; buf: array [1..1024] of byte; f1,f2: file; Begin Assign(f1,fi1); Reset(f1,1); Assign(f2,fi2); Rewrite(f2,1); nbuf:=1024; Repeat Blockread(f1,buf,nbuf,nread); Blockwrite(f2,buf,nread); Until nread<>nbuf; Close(f1); Close(f2); End; BEGIN Copyfile(f1,f2); END. Baøi 6 : Cho moät file text ghi laïi moät chöông trình Pascal cuûa moät hoïc sinh . Haõy vieát chöông trình kieåm tra loãi cuûa chöông trình Pascal treân theo caùc caùch sau ñaây : Caùch 1 : Kieåm tra xem soá löôïng caùc daáu ‘ ( daáu môû vaø daáu ñoùng ) coù baèng nhau khoâng ? Caùch 2 : Kieåm tra xem soá löôïng caùc töø Begin vaø End coù baèng nhau khoâng ? (* Dem (') vaø 'Begin' , 'End' *) Uses Crt; Const fi='C8_6.txt'; Function Dem(c: string): integer; Var n,l: integer; f: text; S: string; Begin l:=Length(c); n:=0; Assign(f,fi); Reset(f); While not Eof(f) do Begin Readln(f,S); While pos(c,s)<>0 do Begin Inc(n); Delete(s,pos(c,s),l); End; End; Bài tập Pascal có lời giải 53
  • 54. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Close(f); Dem:=n; End; BEGIN Clrscr; Write(' So luong cac dau ( va ) '); If Dem('(')<>Dem(')') then Writeln('khong bang nhau.') Else Writeln('bang nhau.'); Write(' So luong cac tu Begin va End '); If Dem('End')<>Dem('Begin') then Writeln('khong bang nhau.') Else Writeln('bang nhau.'); Readln; END . Baøi 7 : Cho moät file text . Haõy vieát chöông trình ñeám xem file text treân chöùa bao nhieâu töø . ( Chuù yù : theo quy ñònh , caùc töø caùch nhau bôûi moät hay nhieàu daáu caùch ) . (* Ñeám töø *) Uses Crt; Const fi = 'hoten.txt'; Var f: text; s: string; dem: word; BEGIN Clrscr; dem:=0; Assign(f,fi); Reset(f); While not Eof(f) do Begin Readln(f,s); While s[1]=' ' do Delete(s,1,1); While length(s)>0 do Begin Case s[1] of ' ': While (s[1]=' ')and(length(s)>0) do Delete(s,1,1); Else Begin inc(dem); While (s[1]<>' ')and(length(s)>0) do Delete(s,1,1); End; End; End; End; Close(f); Bài tập Pascal có lời giải 54
  • 55. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Write(' So tu co trong file hoten.txt la: ',dem); Readln; END. Baøi 8 : Cho moät file text . Vieát chöông trình loaïi boû caùc khoaûng troáng thöøa beân trong file text naøy . (* Cat khoang trong thua *) Uses Crt; Const fi = 'file.inp'; fo = 'C:file.out'; Var inp,out: text; s: string; BEGIN Assign(inp,fi); Reset(inp); Assign(out,fo); Rewrite(out); While not Eof(inp) do Begin Readln(inp,s); While (s[1]=' ')and(Length(s)>0) do Delete(s,1,1); While (s[Length(s)]=' ')and(Length(s)>0) do Delete(s,Length(s),1); While (Length(s)>0)and(pos(' ',s)<>0) do Delete(s,pos(' ',s),1); Writeln(out,s); End; Close(out); Close(inp); END. BAØI TAÄP CHÖÔNG 9: CON TROÛ Baøi 1 : Baïn haõy laäp chöông trình cho pheùp ta nhaäp töø baøn phím moät danh saùch ñöôïc gheùp noái . Sau ñoù gôõ boû moät record khoûi danh saùch . (* Gôõ boû baûn ghi khoûi danh saùch *) Uses Crt; Type ptr=^rec; rec=record name: string[20]; next: ptr; End; Var k : integer; p,l : ptr; Procedure Nhap; Begin Bài tập Pascal có lời giải 55
  • 56. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) ClrScr; New(p); l:=p; Write('Ten: '); Readln(p^.name); Repeat New(p^.next); p:=p^.next; Write('Ten: '); Readln(p^.name); Until p^.name=''; p^.next:=nil; Write('Vi tri ban ghi can go bo: '); Readln(k); End; Procedure Gobo; Var i: integer; q: Ptr; Begin p:=l; For i:=1 to k do p:=p^.next; (* Tìm vò trí cuoái *) q:=p; p:=l; For i:=3 to k do p:=p^.next; (* Tìm vò trí ñaàu *) If k=1 then l:=q Else p^.next:=q; End; Procedure In_kq; Begin While (l^.next<>nil) do Begin Writeln(l^.name); l:=l^.next; End; Readln; End; BEGIN Nhap; Gobo; In_kq; END. Baøi 2 : Baïn haõy laäp chöông trình cho pheùp nhaäp moät danh saùch ñöôïc gheùp noái . Sau ñoù cheøn theâm moät record vaøo danh saùch . (* Cheøn theâm baûn ghi vaøo danh saùch *) Uses Crt; Const inp='C9_2.inp'; Type ptr=^rec; Bài tập Pascal có lời giải 56
  • 57. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) rec=record name: string[20]; next: ptr; End; Var f: text; k: integer; p,s,l: ptr; Procedure Nhap; Begin Assign(f,inp); Reset(f); New(p); l:=p; While not EoF(f) do Begin Readln(f,p^.name); New(p^.next); p:=p^.next; End; p^.next:=nil; Close(f); New(s); Clrscr; Writeln('Nhap ban ghi can chen: '); Write('Ten: '); Readln(s^.name); Write('Vi tri can chen: '); Readln(k); End; Procedure Chen_rec; Var i: integer; Procedure Cat(Var L: ptr); Begin s^.next:=l; l:=s; End; Begin p:=l; For i:=3 to k do p:=p^.next; (* Tim vi tri *) If k>1 then Cat(p^.next) Else Cat(l); {Cat - Noi} End; Procedure In_kq; Begin While (l^.next<>nil) do Begin Bài tập Pascal có lời giải 57
  • 58. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Writeln(l^.name); l:=l^.next; End; Readln; End; BEGIN Nhap; Chen_rec; In_kq; END. Baøi 3 : Baïn haõy laäp chöông trình cho pheùp nhaäp moät danh saùch ñöôïc gheùp noái . Sau ñoù ñoåi choã hai record trong danh saùch . (* Ñoåi choã 2 baûn ghi trong danh saùch *) Uses Crt; Const inp='C9_3.txt'; Type ptr=^rec; rec=record name: string[20]; next: ptr; End; Var f: text; j,k: integer; p,l: ptr; tenj,tenk: string; Procedure Nhap; Begin Assign(f,inp); Reset(f); New(p); l:=p; While not EoF(f) do Begin Readln(f,p^.name); New(p^.next); p:=p^.next; End; p^.next:=nil; Close(f); Clrscr; Write('Nhap vi tri 2 ban ghi can doi cho: '); Readln(j,k); End; Bài tập Pascal có lời giải 58
  • 59. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Procedure Doicho; Var i: integer; Begin p:=l; For i:=2 to k do p:=p^.next; tenk:=p^.name; p:=l; For i:=2 to j do p:=p^.next; tenj:=p^.name; p:=l; For i:=2 to k do p:=p^.next; p^.name:=tenj; p:=l; For i:=2 to j do p:=p^.next; p^.name:=tenk; End; Procedure In_kq; Begin While (l^.next<>nil) do Begin Writeln(l^.name); l:=l^.next; End; Readln; End; BEGIN Nhap; Doicho; In_kq; END. BAØI TAÄP CHÖÔNG 10: ÑOÀ HOÏA Baøi 1 : Veõ hình chöõ nhaät coù taâm truøng vôùi taâm maøn hình , caùc caïnh song song vaø tæ leâ vôùi caùc caïnh maøn hình , kích thöôùc lôùn daàn theo thôøi gian . (* Hình chöõ nhaät thay ñoåi kích thöôùc *) Uses Crt,Graph; Var Gd,Gm,x,y: Integer; tl: real; BEGIN Gd:=Detect; InitGraph(Gd,Gm,''); If GraphResult <> GrOk Then Halt ; tl:=GetMaxY/GetMaxX; SetFillStyle(1,4); For x:=1 to GetMaxX do Bài tập Pascal có lời giải 59
  • 60. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Begin y:=round(x*tl); Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2, (GetMaxX+x) div 2,(GetMaxY+y) div 2); Delay(10); End; CloseGraph; END. Baøi 2 : Veõ hình chöõ nhaät nhö treân , kích thöôùc ñieàu khieån ñöôïc . Neáu goõ phím + thì hình lôùn leân , goõ phím – thì nhoû ñi , goõ Enter thì döøng chöông trình . (* Hình chöõ nhaät kích thöôùc ñieàu khieån ñöôïc *) Uses Crt, Graph; Var Gd,Gm,x,y: Integer; tl: real; c: char; BEGIN Gd:=Detect; InitGraph(Gd,Gm,''); tl:=GetMaxY/GetMaxX; x:=GetMaxX div 2; y:=round(x*tl); SetFillStyle(1,4); Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2, (GetMaxX+x) div 2,(GetMaxY+y) div 2); Repeat OutTextXY(0,0,'Press Esc to Exit...'); Repeat c:=ReadKey; Until c in [#27,'+','-']; SetFillStyle(1,0); Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2, (GetMaxX+x) div 2,(GetMaxY+y) div 2); If (c='+')and(x<GetMaxX) then Inc(x) Else If (c='-')and(y>0) then Dec(x); y:=round(x*tl); SetFillStyle(1,4); Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2, (GetMaxX+x) div 2,(GetMaxY+y) div 2); Bài tập Pascal có lời giải 60
  • 61. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Until c=#27; CloseGraph; END. Baøi 3 : Moät baøn côø vua hieån thò treân maøn hình . Neáu ñaët moät con haäu ( hình troøn maøu ñoû ) vaøo moät oâ baèng caùch nhaäp teân oâ , chaúng haïn a5 , thì caùc oâ bò con haâu khoáng cheá seõ ñöôïc toâ maøu xanh . Baïn haõy laäp chöông trình thöïc hieän caùc yeâu caàu treân . (* Phaïm vi kieåm soaùt cuûa Con haäu *) Uses Crt,Graph; Const N=8; W=40; X=150; Y=400; Var Gd,Gm,i,Hi: Integer; j,Hj,H: char; S: String; Pattern : FillPatternType; BEGIN Gd:=Detect; InitGraph(Gd,Gm,''); OutTextXY(270,430,'Ban co vua'); For i:=1 to N do For j:='a' to chr(Ord('a')+N-1) do Begin If Odd(i+Ord(j)) then SetFillStyle(SolidFill,14) Else SetFillStyle(SolidFill,15); Bar(X+(i-1)*W,Y-(Ord(j)-Ord('a'))*W,X+i*W,Y-(Ord(j)-Ord('a')+1)*W); End; OutTextXY(200,20,'Nhap vi tri con hau:'); Hj:=ReadKey; OutTextXY(370,20,Hj); H:=ReadKey; Hi:=Ord(H)-Ord('0'); OutTextXY(380,20,H); SetColor(4); Circle(X+(Hi-1)*W+W div 2,Y-(Ord(Hj)-Ord('a'))*W-W div 2,W div 2-5); GetFillPattern(Pattern); SetFillPattern(Pattern,4); FloodFill(X+(Hi-1)*W+W div 2,Y-(Ord(Hj)-Ord('a'))*W-W div 2,4); SetFillStyle(SolidFill,13); For i:=1 to N do For j:='a' to chr(Ord('a')+N-1) do If ((i<>Hi)or(j<>Hj)) and((Abs(i-Hi)=Abs(Ord(j)-Ord(Hj)))or(i=Hi)or(j=Hj)) then Bar(X+(i-1)*W,Y-(Ord(j)-Ord('a'))*W,X+i*W,Y-(Ord(j)-Ord('a')+1)*W); Bài tập Pascal có lời giải 61
  • 62. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Readln; CloseGraph; END. Baøi 4 : Veõ ñoàng hoà ñieän töû hoaït ñoäng treân maøn hình . (* Ñoàng hoà ñieän töû *) Uses Crt,Dos,Graph; Var h,m,s,hund: Word; GD,GM: Integer; St: String; Function LeadingZero(w: Word): String; Var s: String; Begin Str(w:0,s); if Length(s)=1 then s:='0'+s; LeadingZero:=s; End; BEGIN GD:=Detect; InitGraph(GD,GM,' '); SetTextStyle(DefaultFont,HorizDir,5); Repeat GetTime(h,m,s,hund); St:=LeadingZero(h)+':'+LeadingZero(m)+':'+LeadingZero(s); SetColor(15); OutTextXY(150,200,St); Delay(1000); SetColor(0); OutTextXY(150,200,St); Until KeyPressed; CloseGraph; END. Baøi 5 : Hieån thò moät ñieåm chuyeån ñoäng ñeàu theo chieàu kim ñoàng hoà treân quyõ ñaïo troøn , taâm laø taâm maøn hình , baùn kính r = 150 . Bài tập Pascal có lời giải 62
  • 63. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) (* Ñieåm chuyeån ñoäng troøn ñeàu *) Uses Crt, Graph; Const r=150; v=5; Var Gd,Gm,x0,y0,x,y: Integer; a: real; (* goùc *) BEGIN Gd:=Detect; InitGraph(Gd,Gm,' '); x0:=GetMaxX div 2; y0:=GetMaxY div 2; PutPixel(x0,y0,4); a:=0; Repeat x:=x0+Round(r*cos(a)); y:=y0+Round(r*sin(a)); PutPixel(x,y,15); Delay(v); PutPixel(x,y,0); a:=a+0.01; Until KeyPressed; CloseGraph; END. Baøi 6 : Hieån thò moät hình chöõ nhaät treân maøn hình , vò trí coù theå ñieàu khieån ñöôïc baèng baøn phím . Goõ caùc phím muõi teân ñeå dòch chuyeån hình ñoù theo caùc höôùng töông öùng . (* dieu khien vi tri cua hinh vuong *) Uses Crt, Graph; Var Gd,Gm,x,y,v: Integer; Pa,Pb: Pointer; Size: Word; c: char; BEGIN Gd:=Detect; InitGraph(Gd,Gm,' '); Size:=ImageSize(0,0,20,20); GetMem(Pb,Size); GetImage(0,0,20,20,Pb^); Bài tập Pascal có lời giải 63
  • 64. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) GetMem(Pa,Size); Bar(0,0,20,20); GetImage(0,0,20,20,Pa^); ClearDevice; x:=300; y:=200; v:=10; c:=#77; Repeat PutImage(x,y,Pa^,NormalPut); Repeat Until KeyPressed; c:=ReadKey; If c=#0 then c:=ReadKey; PutImage(x,y,Pb^,NormalPut); Case c of #72: Dec(y); #75: Dec(x); #77: Inc(x); #80: Inc(y); End; If x>600 then x:=0; If x<0 then x:=600; If y>440 then y:=0; If y<0 then y:=440; Until (c=#27)or(c=#13); CloseGraph; END. Baøi 7 : Veõ hình sau vôùi caùc phoâng chöõ , caùc maøu khaùc nhau : Size 8 Size 16 Size 24 Size 32 Size 40 (* Caùc daïng phoâng chöõ *) Bài tập Pascal có lời giải 64
  • 65. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Uses Graph; Const K=3; Var Gd,Gm,Font,Color,Size,i: Integer; S: String; BEGIN Gd:=Detect; InitGraph(Gd,Gm,' '); Color:=0; For Font:=0 to 11 do Begin ClearDevice; For i:=1 to 4 do Begin Size:=(i-1)*K+1; Inc(Color); Color:=Color mod 15+1; SetColor(Color); SetTextStyle(Font,HorizDir,Size); Str(Size,S); S:='Size '+S; OutTextXY(100,i*80,S) ; End; Readln; End; CloseGraph; END. Baøi 8 : Veõ heä truïc toaï ñoä vaø ñoà thò haøm soá y = x2 vôùi ñaày ñuû chuù thích . (* Ñoà thò cuûa haøm soá y = Sqr(x) *) Uses Graph; Const X0=320;Y0=300;E=50; Var Gd,Gm,i,j,k: Integer; x,y: real; S: String; BEGIN Gd:=Detect; InitGraph(Gd,Gm,' '); Line(100,Y0,550,Y0); {Truc Ox} OutTextXY(540,Y0+10,'x'); For k:=-3 to 3 do Bài tập Pascal có lời giải 65
  • 66. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Begin i:=k*E+X0; j:=Y0; Str(k,S); OutTextXY(i-10,j+8,S); Bar(i-1,j-1,i+1,j+1); End; Line(X0,50,X0,370); {Truc Oy} OutTextXY(X0-20,50,'y'); For k:=-1 to 4 do Begin i:=X0; j:=-k*E+Y0; Str(k,S); If k<>0 then OutTextXY(i-20,j,S); Bar(i-1,j-1,i+1,j+1); End; For i:=X0-2*E to X0+2*E do {Do thi} Begin x:=(i-X0)/E; y:=Sqr(x); j:=Round(-y*E+Y0); PutPixel(i,j,10); End; SetTextStyle(1,0,2); OutTextXY(100,400,'Do thi ham so y = Sqr(x):'); Readln; CloseGraph; END. Baøi 9 : Veõ vaø toâ maøu cho ngoâi nhaø sau . Ñaûm baûo khaû naêng baät taét ñieän cho ngoâi nhaø . Neáu goõ phím + thì ñeøn saùng ( cöûa soå coù maøu traéng ) , goõ phím – thì ñeøn taét ( cöûa soá coù maøu ñen ) . (* To mau Ngoi nha *) Uses Crt,Graph; Var Gd,Gm: Integer; Pattern : FillPatternType; c: Char; Bài tập Pascal có lời giải 66
  • 67. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) BEGIN Gd:=Detect; InitGraph(Gd,Gm,' '); GetFillPattern(Pattern); OutTextXY(120,50,'To mau Ngoi nha:'); Rectangle(220,200,420,330); Rectangle(250,230,300,330); Rectangle(330,230,390,280); MoveTo(220,200); Lineto(180,200); Lineto(220,140); Lineto(420,140); Lineto(460,200); Lineto(420,200); SetFillPattern(Pattern,Blue); Floodfill(0,0,White); SetFillPattern(Pattern,4); Floodfill(320,190,White); SetFillPattern(Pattern,8); Floodfill(320,220,White); Repeat Repeat c:=ReadKey; Until c in [#27,'+','-']; If (c='+') then SetFillPattern(Pattern,14) Else If (c='-') then SetFillPattern(Pattern,0);; Floodfill(270,300,White); Floodfill(370,270,White); Until c=#27; CloseGraph; END. MUÏC LUÏC Chöông 1:IF ……..Then …………Else. Bài tập Pascal có lời giải 67
  • 68. Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam Trung-mientrung19@gmail.com) Bài tập Pascal có lời giải 68