//
you're reading...
Chủ đề mảng (array), Dùng cho cấp THCS, Dùng cho cấp THPT

Bài 9: Kiểu dữ liệu mảng (array)

Pascal – Arrays

http://www.tutorialspoint.com/pascal/pascal_arrays.htm

Copyright © tutorialspoint.com

Pascal programming language provides a data structure called the array, which can store a fixed-size sequential collection of elements of the same type. An array is used to store a collection of data, but it is often more useful to think of an array as a collection of variables of the same type.

Instead of declaring individual variables, such as number1, number2, …, and number100, you declare one array variable such as numbers and use numbers[1], numbers[2], and …, numbers[100] to represent individual variables. A specific element in an array is accessed by an index.

All arrays consist of contiguous memory locations. The lowest address corresponds to the first element and the highest address to the last element.

Please note that if you want a C style array starting from index 0, you just need to start the index from 0, instead of 1.

Arrays in Pascal

Declaring Arrays

To declare an array in Pascal, a programmer may either declare the type and then create variables of that array or directly declare the array variable.

The general form of type declaration of one-dimensional array is:

type
   array-identifier = array[index-type] of element-type;

Where,

  • array-identifier indicates the name of the array type.
  • index-type specifies the subscript of the array; it can be any scalar data type except real
  • element-type specifies the types of values that are going to be stored

For example,

type
   vector = array [ 1..25] of real;
var
   velocity: vector;

Now, velocity is a variable array of vector type, which is sufficient to hold up to 25 real numbers.

To start the array from 0 index, the declaration would be:

type
   vector = array [ 0..24] of real;
var
   velocity: vector;

Types of Array Subscript

In Pascal, an array subscript could be of any scalar type like, integer, Boolean, enumerated or subrange, except real. Array subscripts could have negative values too.

For example,

type
   temperature = array [-10 .. 50] of real;
var
   day_temp, night_temp: temperature;

Let us take up another example where the subscript is of character type:

type
   ch_array = array[char] of 1..26;
var
   alphabet: ch_array;

Subscript could be of enumerated type:

type
   color = ( red, black, blue, silver, beige);
   car_color = array of [color] of boolean;
var
   car_body: car_color;

Initializing Arrays

In Pascal, arrays are initialized through assignment, either by specifying a particular subscript or using a for-do loop.

For example:

type
   ch_array = array[char] of 1..26;
var
   alphabet: ch_array;
   c: char;
begin
   ...
   for c:= 'A' to 'Z' do
   alphabet[c] := ord[m];  
   (* the ord() function returns the ordinal values *)

Accessing Array Elements

An element is accessed by indexing the array name. This is done by placing the index of the element within square brackets after the name of the array. For example:

a: integer;
a: = alphabet['A'];

The above statement will take the first element from the array named alphabet and assign the value to the variable a.

Following is an example, which will use all the above-mentioned three concepts viz. declaration, assignment and accessing arrays:

program exArrays;
var
   n: array [1..10] of integer;   (* n is an array of 10 integers *)
   i, j: integer;
begin
   (* initialize elements of array n to 0 *)        
   for i := 1 to 10 do
       n[ i ] := i + 100;   (* set element at location i to i + 100 *)
    (* output each array element's value *)
   for j:= 1 to 10 do
      writeln('Element[', j, '] = ', n[j] );
end.

When the above code is compiled and executed, it produces the following result:

Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109
Element[10] = 110

Pascal Arrays in Detail

Arrays are important to Pascal and should need lots of more details. There are following few important concepts related to array which should be clear to a Pascal programmer:

Concept Description
Multi-dimensional arrays Pascal supports multidimensional arrays. The simplest form of the multidimensional array is the two-dimensional array.
Dynamic array In this type of arrays, the initial length is zero. The actual length of the array must be set with the standard SetLength function.
Packed array These arrays are bit-packed, i.e., each character or truth values are stored in consecutive bytes instead of using one storage unit, usually a word 4bytesormore.
Passing arrays to subprograms You can pass to a subprogram a pointer to an array by specifying the array’s name without an index.

DỮ LIỆU KIỂU MẢNG (ARRAY)

 I. KHAI BÁO MẢNG

Cú pháp:

     TYPE   <Kiểu mảng> = ARRAY [chỉ số] OF <Kiểu dữ liệu>;

     VAR     <Biến mảng>:<Kiểu mảng>;

hoặc khai báo trực tiếp:

     VAR     <Biến mảng> : ARRAY [chỉ số] OF <Kiểu dữ liệu>;

Ví dụ:

     TYPE    Mangnguyen = Array[1..100] of Integer;

                   Matrix = Array[1..10,1..10] of Integer;

                   MangKytu = Array[Byte] of Char;

     VAR      A: Mangnguyen;

                   M: Matrix;

                   C: MangKytu;

hoặc:

     VAR      A: Array[1..100] of Integer;

                   C: Array[Byte] of Char;

 II. XUẤT NHẬP TRÊN DỮ LIỆU KIỂU MẢNG

     – Để truy cập đến phần tử thứ k trong mảng một chiều A, ta sử dụng cú pháp: A[k].

     – Để truy cập đến phần tử (i,j) trong mảng hai chiều M, ta sử dụng cú pháp:  M[i,j].

     – Có thể sử dụng các thủ tục READ(LN)/WRITE(LN) đối với các phần tử của biến kiểu mảng.

 BÀI TẬP MẪU

Bài tập 5.1:    Viết chương trình tìm giá trị lớn nhất của một mảng chứa các số nguyên gồm N phần tử.

Ý tưởng:

     – Cho số lớn nhất là số đầu tiên: Max:=a[1].

     – Duyệt qua các phần tử a[i], với i chạy từ 2 tới N: Nếu a[i]>Max thì thay Max:=a[i];

 

Uses Crt;

Type Mang = ARRAY[1..50] Of Integer;

Var  A:Mang;

        N,i,Max:Integer;

Begin

    {Nhập mảng}

    Write(‘Nhap N=’);
Readln(N);

    For i:=1 To N Do

        Begin

           Write(‘A[‘,i,’]=’);

Readln(A[i]);

        End;

    {Tìm phần tử lớn nhất}

    Max:=A[1];

    For i:=2 To N Do

        If Max<A[i] Then Max:=A[i];

    {In kết quả ra màn hình}

    Writeln(‘Phan tu lon nhat cua mang: ’, Max);

    Readln;

End.

Bài tập 5.2:    Viết chương trình tính tổng bình phương của các số âm trong một mảng gồm N phần tử.

Ý tưởng:

     Duyệt qua tất cả các phần tử A[i] trong mảng: Nếu A[i]<0 thì cộng dồn (A[i])2 vào biến S.

 

Uses Crt;

Type Mang = ARRAY[1..50] Of Integer;

Var  A:Mang;

        N,i,S:Integer;

Begin

    {Nhập mảng}

    Write(‘Nhap N=’);
Readln(N);

    For i:=1 To N Do

        Begin

           Write(‘A[‘,i,’]=’);
Readln(A[i]);

        End;

    {Tính tổng}

    S:=0;

    For i:=1 To N Do

        If A[i]<0 Then S:=S+A[i]*A[i];

    {In kết quả ra màn hình}

    Writeln(‘S= ’, S);

    Readln;

End.

Bài tập 5.3: Viết chương trình nhập vào một mảng gồm N số nguyên. Sắp xếp lại mảng theo thứ tự tăng dần
và in kết quả ra màn hình.

Ý tưởng:

     Cho  biến i chạy từ 1 đến N-1, đồng thời cho biến j chạy từ i+1 đến N: Nếu A[i]>A[j] thì đổi chổ A[i], A[j].

 

Uses Crt;

Type Mang = ARRAY[1..50] Of Integer;

Var  A:Mang;

        N,i,j,Tam:Integer;

Begin

    {Nhập mảng}

    Write(‘Nhap N=’);
Readln(N);

    For i:=1 To N Do

        Begin

           Write(‘A[‘,i,’]=’);
Readln(A[i]);

        End;

    {Sắp xếp}

    For i:=1 To N-1 Do

        For j:=i+1 To N Do

           If A[i]>A[j] Then

               Begin

                   Tam:=A[i]; A[i]:=A[j]; A[j]:=Tam;

               End;

    {In kết quả ra màn hình}

    Writeln(‘Ket qua sau khi sap xep:’);

    For i:=1 To N Do Write(A[i]:5);

    Readln;

End.

Bài tập 5.4: Viết chương trình nhập vào một mảng A gồm N số nguyên và nhập thêm vào một số nguyên X. Hãy
kiểm tra xem phần tử X có trong mảng A hay không?

Ý tưởng:

     Dùng thuật toán tìm kiếm tuần tự. So sánh x với từng phần tử của mảng A. Thuật toán dừng lại khi x=A[i] hoặc i>N.  Nếu x=A[i] thì vị trí cần tìm là i, ngược lại thì kết quả tìm là 0 (không tìm thấy).

 

Uses Crt;

Type Mang = ARRAY[1..50] Of Integer;

Var  A:Mang;

        N,i,x:Integer;

 

Function
TimKiem(x, N: Integer; A:Mang):Integer;

Var
i:Integer;

    Begin

        I:=1;

        While (I <= N) and (X<>A[I]) do I:=I+1;

        If I <= N Then Timkiem:=I  Else Timkiem:=0;

    End;

 

Begin

    {Nhập mảng}

    Write(‘Nhap N=’); Readln(N);

    For i:=1 To N Do

        Begin

           Write(‘A[‘,i,’]=’); Readln(A[i]);

        End;

    Write(‘Nhap X=’); Readln(x);

    {Kết quả tìm kiếm}

    If TimKiem(X,N,A)<>0 Then   

        Writeln(‘Vi tri cua X trong mang la:’, TimKiem(X,N,A))

    Else Writeln(‘X khong co trong mang.’);

    Readln;

End.

Bài tập 5.5: Giả sử mảng A đã được sắp xếp theo thứ tự tăng dần. Viết hàm để kiểm tra xem phần tử X có
trong mảng A hay không?

Ý tưởng:

     So sánh x với phần tử ở giữa mảng A[giua]. Nếu x=A[giua] thì dừng (vị trí cần tìm là chỉ số của phần tử giữa của mảng). Ngược lại, nếu  x>A[giua] thì tìm ở đoạn sau của mảng [giua+1,cuoi], ngược lại thì tìm ở đoạn đầu của mảng [dau,giua-1].

Sau đây là hàm cài đặt cho thuật toán này:

Function
TimKiemNhiPhan(X, N: Integer; A: Mang):Integer;

Var  dau,cuoi,giua:Integer;

        Found:Boolean;

Begin

    dau:=1; {điểm mút trái của
khoảng tìm kiếm}

    cuoi:=N; {điểm mút phải của
khoảng tìm kiếm}

    Found:=False; {chưa tìm thấy}

    While (dau <=cuoi) and (Not Found) Do

        Begin

           giua:=(dau + cuoi) Div 2;

           If  X = A[giua] Then Found:=True {đã tìm thấy}

           Else

               If X > A[giua] Then dau:=giua+1

               Else
cuoi:=giua-1;

        End;

    If Found Then TimKiemNhiPhan:= giua Else TimKiemNhiPhan:=0;

End;

Bài tập 5.6: Viết chươngtrình tìm ma trận chuyển vị của ma trận A.

Ý tưởng:

     Dùng
mảng 2 chiều để lưu trữ ma trận.
Gọi B là ma trận chuyển vị của
ma trận
A, ta có: Bij = Aji.

 

Uses Crt;

Type Mang = ARRAY[1..10,1..10] Of Integer;

Var  A,B:Mang;

        m,n,i,j:Integer;

Begin

    {Nhập ma trận}

    Write(‘Nhap số
dòng m=’); Readln(m);

    Write(‘Nhap số
cột n=’); Readln(n);

    For i:=1 To m Do

        For
j:=1 To n Do

           Begin

               Write(‘A[‘,i,j,’]=’);
Readln(A[i,j]);

           End;

    {Tìm ma trận
chuyển vị}

    For i:=1 To m Do

        For
j:=1 To n Do  B[i,j]:=A[j,i];

    {In ma trận
chuyển vị ra màn hình}

    For i:=1 To m Do

        Begin

           For
j:=1 To n Do  Write(B[i,j]:5);

           Writeln;

        End;

    Readln;

End.

 

Bài tập 5.7: Cho một mảng
2 chiều A cấp mxn gồm các số nguyên và một số nguyên x. Viết chương trình thực
hiện các công việc sau:

     a/
Đếm số lần xuất hiện của x trong A và vị trí của chúng.

     b/
Tính tổng các phần tử lớn nhất của mỗi dòng.

 

Uses Crt;

Type Mang = ARRAY[1..10,1..10] Of Integer;

Var  A:Mang;

        m,n,i,j,x,dem,S,max:Integer;

Begin

    {Nhập ma trận}

    Write(‘Nhap số
dòng m=’); Readln(m);

    Write(‘Nhap số
cột n=’); Readln(n);

    For i:=1 To m Do

        For
j:=1 To n Do

           Begin

               Write(‘A[‘,i,j,’]=’);
Readln(A[i,j]);

            End;

    {Nhập x}

    Write(‘Nhap x=’);
Readln(x);

    {Đếm số lãn xuất
hiện của x và vị trí của x}

    dem:=0;

    Writeln(‘Vi tri
cua x trong mang A: ‘);

    For i:=1 To m Do

        For
j:=1 To n Do 

           If
x=A[i,j] Then

               Begin

                   Write(i,j,’
; ‘);

                   dem:=dem+1;

               End;

    Writeln(‘So lan
xuat hien cua x trong mang A la: ‘,dem);

    {Tính tổng các
phần tử lớn nhất của mỗi dòng}

    S:=0;

    For i:=1 To m Do
{duyệt qua từng dòng}

        Begin

           {Tìm
phần tử lớn nhất của dòng thứ i}

           Max:=A[i,1];

           For
j:=2 To n Do  {duyệt từng phần tử của
dòng thứ i}

               If
max<A[i,j] Then max:=A[i,j];

           {Cộng
max vào biến S}

           S:=S+max;

        End;

    Writeln(‘Tong cac
phan tu lon nhat cua moi dong la: ‘,S);

    Readln;

End.

 

Bài tập 5.8: Giải phương
trình bằng phương pháp chia nhị phân.

Ý tưởng:

     Giả
sử cần tìm nghiệm của phương trình f(x)=0 trên đoạn [a,b] với y=f(x) đồng biến
và đơn trị trên đoạn [a,b]. Ta giải như sau:

     Gọi
m là trung điểm của đoạn [a,b]. Nếu f(m)*f(a)<0 thì giới hạn đoạn tìm nghiệm
thành [a,m]. Tương tự đối với đoạn [m,b]. Quá trình này lặp lại cho đến khi
f(m)<
e, lức này ta có
1 nghiệm gần đúng là m.

     Giả
sử f(x) là một đa thức: f(x) = a0 + a1x + a2x2
+ … + anxn. Lúc này, ta có thể dùng mảng một
chiều để lưu trữ các hệ số ai của đa thức.

 

Uses Crt;

Type
HESO=Array[0..20] Of Real;

Var  a:HESO;

        n:Byte;

        Min,Max,epsilon:Real;

 

Procedure NhapDaThuc;

Var i:Byte;

Begin

  Write(‘Bac cua da thuc: n= ‘);
Readln(n);

  Writeln(‘Nhap cac he so cua da thuc:’);

  For i:=0 To n Do

   Begin

     Write(‘a[‘,i,’]=’);
Readln(a[i]);

   End;

  Writeln(‘Nhap doan tim nghiem:[a,b]’);

  Write(‘a= ‘); Readln(Min);

  Write(‘b= ‘); Readln(Max);

  Write(‘Nhap sai so cua phuong trinh: ‘);
Readln(epsilon);

End;

 

{Tính giá trị của đa
thức}

Function
f(x:Real):Real;

Var  S,tam:Real;

        i:Byte;

Begin

    S:=a[0]; tam:=1;

    For i:=1 To n Do

        Begin

           tam:=tam*x;

           S:=S+a[i]*tam;

        End;

    f:=S;

End;

 

Procedure
TimNghiem(Min,Max:real);

Var m:Real;

Begin

  If f(Min)*f(Max)>0 Then Writeln(‘Phuong
trinh vo nghiem.’)

  Else If abs(f(Min))<epsilon Then
Writeln(‘Nghiem la x=’,min:0:2)

       Else If
abs(f(Max))<epsilon Then Writeln(‘Nghiem la x=’,max:0:2)


Else


Begin


m:=(Min+Max)/2;


If
abs(f(m))<=epsilon Then Writeln(‘Nghiem la x=’,m:0:2)


Else If f(Min)*f(m)<0 Then TimNghiem(Min,m)


Else TimNghiem(m,Max);


End;

End;

 

Begin

 NhapDaThuc;

 TimNghiem(Min,Max);

 Readln;

End.

 

 Bài
tập 5.9
: Viết chương trình nhập vào số tự nhiên N (N lẻ), sau đó điền các
số từ 1 đến n2 vào trong một bảng vuông sao cho tổng các hàng ngang,
hàng dọc và 2 đường chéo đều bằng nhau (bảng này được gọi là Ma phương).

     Ví
dụ: Với N=3 và N=5 ta có

 

 

 

 

 

Bắc

 

2

7

6

 

 

3

16

9

22

15

 

9

5

1

 

 

20

8

21

14

2

 

4

3

8

 

Tây

7

25

13

1

19

Đông

 

 

 

 

 

24

12

5

18

6

 

 

 

 

 

 

11

4

17

10

23

 

 

 

 

 

 

Nam

 

Phuơng pháp:

     Xuất
phát từ ô bên phải của ô nằm giữa. Đi theo
hướng đông bắc để điền các số
1, 2, …

     Khi
điền số, cần chú ý một số nguyên tắc sau:

          –
Nếu vượt ra phía ngoài bên phải của bảng thì quay trở lại cột đầu tiên.

          –
Nếu vượt ra phía ngoài bên trên của bảng thì quay trở lại dòng cuối cùng.

          –
Nếu số đã điền k chia hết cho N thì số tiếp theo sẽ được viết trên cùng một
hàng với k nhưng cách 1 ô về phía bên phải.

 

Uses Crt;

Var
A:Array[1..20,1..20] Of Word;

      n,i,j,k:Word;

Begin

  Write(‘Nhap N= ‘); Readln(n);

  Clrscr;

 {Định vị ô xuất phát}

  i:=n DIV 2 + 1;

  j:=n DIV 2 + 2;

 

 {Điền các số k từ 1 đến n*n}

  For k:=1 To n*n Do

   Begin

     A[i,j]:=k;

     If k MOD n=0 Then
j:=j+2

     Else Begin

               {Đi
theo hướng đông bắc}


j:=j+1; i:=i-1;


End;

     If j>n Then j:=j
MOD n;

     If i=0 Then i:=n;

   End;

 

 {In kết quả ra màn hình}

  For i:=1 To n Do

   Begin

     For j:=1 To n Do
write(a[i,j]:4);

     Writeln;

   End;

  Readln;

End.

 

Bài tập 5.10: Viết chương
trình nhập vào 2 mảng số nguyên A, B đại diện cho 2 tập hợp (không thể có 2
phần tử trùng nhau trong một tập hợp). Trong quá trình nhập, phải kiểm tra: nếu
phần tử vừa nhập vào đã có trong mảng thì không bổ sung vào mảng. In ra màn
hình các phần tử là giao của 2 tập hợp A, B.

Ý tưởng:

     Duyệt
qua tất cả các phần tử ai
ÎA. Nếu aiÎB thì viết ai ra màn hình.

 

Uses Crt;

Type Mang=ARRAY[1..50]
Of Integer;

 

Var A,B:Mang;

    n,m:Byte;

 

Function
KiemTra(x:Integer; n:Byte; A:Mang):Boolean;

Var i:Byte;
Found:Boolean;

Begin

  Found:=False;

  i:=1;

  While (i<=n) AND (not Found) Do

    If x=A[i] Then Found:=True
Else i:=i+1;

  KiemTra:=Found;

End;

 

Procedure
NhapMang(Var n:Byte; Var A:Mang);

Var ch:Char;

    x:Integer;

Begin

  n:=0;

  Repeat

    Write(‘x=’); Readln(x);

    If not KiemTra(x,n,A) Then

     Begin

       n:=n+1;
A[n]:=x;

     End;

    Writeln(‘An ESC de ket thuc
nhap!’);

    ch:=Readkey;

  Until ch=#27;

End;

 

Procedure
GiaoAB(n:Byte; A:Mang;m:Byte; B:Mang);

Var i:Byte;

Begin

  For i:=1 To n Do

   If KiemTra(A[i],m,B) Then
Write(A[i]:4);

End;

 

Begin

  Clrscr;

  Writeln(‘Nhap mang A: ‘);

  NhapMang(n,A);

  Writeln(‘Nhap mang B: ‘);

  NhapMang(m,B);

  Writeln(‘Giao cua 2 mang A&B la: ‘);

  GiaoAB(n,A,m,B);

  Readln;

End.

 

Bài tập 5.11: Cho một mảng
số nguyên gồm n phần tử. Tìm dãy con gồm m phần tử  (m
£n) sao cho dãy con này có tổng lớn nhất. (Dãy con là
dãy các phần tử liên tiếp nhau trong mảng).

 

Uses Crt;

Type
Mang=ARRAY[1..50] Of Integer;

 

Var A:Mang;

    n,m,i,j,k:Byte;

    S,Max:Integer;

Begin

  Write(‘So phan tu cua mang: n= ‘);
Readln(n);

  For i:=1 To n Do

   Begin

     Write(‘a[‘,i,’]=’);
Readln(a[i]);

   End;

  Write(‘Nhap so phan tu cua day con: m=
‘); Readln(m);

 

  k:=1; {Vị trí phần tử đầu tiên của dãy
con}

 

 {Giả sử m phần tử đầu tiên của mảng A là
dãy con có tổng lớn nhất}

  Max:=0;

  For i:=1 To m Do Max:=Max+A[i];

 

 {Tìm các dãy con khác}

  For i:=2 To n-m+1 Do

   Begin

    {Tính tổng của dãy con thứ
i}

     S:=0;

     For j:=i To i+m-1 Do
S:=S+A[j];

     If S>Max Then {Nếu
dãy con tìm được có tổng lớn hơn dãy con trước}

       Begin


Max:=S; {Thay tổng mới}


k:=i;
{Thay vị trí đầu tiên của dãy con mới}

       End;

   End;

 

  Writeln(‘Day con co tong lon nhat la:’);

  For i:=k To k+m-1 Do Write(A[i]:5);

  Readln;

End.

 

Bài tập 5.12: Viết chương
trình in ra màn hình tam giác Pascal. Ví dụ, với n=4 sẽ in ra hình sau:

1

1   1

1   2   1

1   3   3   1

1   4   6   4   1

Ý tưởng:

Tam giác Pascal được tạo ra theo qui luật sau:

     +
Mỗi dòng đều bắt đầu và kết thúc bởi số 1.

     +
Phần tử thứ j ở dòng k nhận được bằng cách cộng 2 phần tử thứ j-1 và j ở dòng
thứ k-1.

 

Uses Crt;

Var Dong:Array[0..20]
Of Byte;

    n,i,j:Byte;

Begin

  Write(‘n= ‘); Readln(n);

  Clrscr;

  Dong[0]:=1;

  Writeln(Dong[0]:4);

 

  {Khoi tao gia tri cua dong}

  For i:=1 To n Do Dong[i]:=0;

 

  {Voi moi dong i}

  For i:=1 To n Do

   Begin

     For j:=i DownTo 1 Do

      Begin


Dong[j]:=Dong[j-1]+Dong[j];


Write(Dong[j]:4);

      End;

     Writeln(Dong[i]:4);

   End;

  Readln;

End.

 

BÀI TẬP TỰ GIẢI

 

Bài tập 5.13: Viết chương
trình nhập vào một dãy số thực và số thực x. Thông báo lên màn hình số lượng
các phần tử trong dãy bằng x và vị trí của chúng.

 

Bài tập 5.14: Nhập vào một
mảng các số nguyên.

     a/
Xếp lại mảng đó theo thứ tự giảm dần.

     b/
Nhập vào một số nguyên từ bàn phím. Chèn số đó vào mảng sao cho mảng vẫn có thứ
tự giảm dần. (không được xếp lại mảng)

Gợi ý:

     –
Tìm vị trí cần chèn: i.

     –
Đẩy các phần tử từ vị trí i tới n sang phải 1 vị trí.

     –
Gán: A[i]=x;

 

Bài tập 5.15: Cho 2 mảng số
nguyên: Mảng A có m phần tử, mảng B có n phần tử.

     a/
Sắp xếp lại các mảng đó theo thứ tự giảm dần.

     b/
Trộn 2 mảng đó lại thành mảng C sao cho mảng C vẫn có thứ tự giảm dần (Không
được xếp lại mảng C).

Gợi ý:

     –
Dùng 2 chỉ số i,j để duyệt qua các phần tử của 2 mảng A, B và k là chỉ số cho
mảng C.

     –
Trong khi (i<=m) và (j<=n) thì:

       {Tức là khi đồng thời cả 2 dãy A, B đều
chưa duyệt hết}

          +
Nếu A[i]>B[j] thì: C[k]:=A[i]; i:=i+1;

          +
Ngược lại: C[k]:=B[j]; j:=j+1;

     –
Nếu dãy nào hết trước thì đem phần còn lại của dãy kia bổ sung vào cuối dãy C.

 

Bài tập 5.16: Viết chương
trình tính tổng và tích 2 ma trận vuông A, B cấp n.

Gợi ý:

     Công
thức tính tổng 2 ma trận:
Cij = Aij
+ Bij

     Công
thức tính tích 2 ma trận:
Cij =

Bài tập 5.17: Viết chương
trình nhập vào 2 dãy số nguyên (a)n và (b)m, m
£n. Kiểm tra xem dãy {b} có phải là dãy con của dãy
{a} không?

 

Bài tập 5.18: Viết chương
trình nhập vào một dãy số nguyên a1, a2, …, an.
Tìm trong dãy {a} một dãy con tăng dần dài nhất (có số phần tử lớn nhất) và in
ra màn hình dãy con đó.

 

Bài tập 5.19: Cho mảng 2
chiều A cấp mxn. Viết chương trình sắp xếp lại mảng A theo yêu cầu sau:

     a/
Các phần tử trên mỗi dòng được sắp xếp theo thứ tự giảm dần.

     b/
Các dòng được sắp xếp lại theo thứ tự tăng dần của tổng các phần tử trên mỗi
dòng.

 

Bài tập 5.20: Viết chương
trình để kiểm tra một dãy các số nguyên được nhập vào từ bàn phím đã được sắp
theo thứ tự tăng dần hay chưa theo 2 cách: Đệ qui và không đệ qui.

Gợi ý:

     –
Nếu dãy có 1 phần tử thì dãy tăng dần.

     –
Ngược lại:

          +
Nếu A[n-1]>A[n] thì dãy không tăng dần.

          +
Ngược lại: Gọi đệ qui với dãy có n-1 phần tử (bỏ bớt đi phần tử cuối cùng).

 

Bài tập 5.21: Viết chương
trình nhập vào 2 mảng số nguyên A, B đại diện cho 2 tập hợp (không thể có 2
phần tử trùng nhau trong một tập hợp). Trong quá trình nhập, phải kiểm tra: nếu
phần tử vừa nhập vào đã có trong mảng thì không bổ sung vào mảng.

     a/
In ra màn hình hợp của 2 tập hợp A, B.

     b/
In ra màn hình hiệu của 2 tập hợp A, B.

Gợi ý:

     a/  – In ra màn hình tất cả các phần tử
của  tập hợp A.

          –
Duyệt qua tất cả các phần tử b­i­
ÎB. Nếu biÏA thì in bi ra màn hình.

     b/
Duyệt qua tất cả các phần tử a­i­
ÎA. Nếu aiÏB thì in ai ra màn hình.

 

Bài tập 5.22: Viết chương
trình tính tổng của 2 đa thức h(x) = f(x) + g(x). Trong đó, mỗi đa thức có
dạng: a0 + a1x + a2x2 + … + anxn.

Gợi ý:

     Dùng
các mảng A, B, C để lưu trữ các hệ số ai của các đa thức f(x), g(x)
và h(x).

 

Bài tập 5.23: Viết chương
trình để tìm các phương án đặt 8 quân hậu trên bàn cờ vua (ma trận 8×8) sao cho
các quân hậu không ăn được nhau.

Gợi ý:

     Dùng
giải thuật quay lui.

 

Bài tập 5.24: Viết chương
trình tính định thức của ma trận vuông cấp n.

Gợi ý:

     Dùng
cách tính định thức theo phương pháp GAUSE.

Bài tập

Bài tập

Viết phương trình nhập vào mảng số thực gồm N phần tử. In các phần tử theo trật tự ngược và xuôi.

Program Mang_so_thuc;
Const
Max = 100;
Type
Mang=Array[1..Max] Of Real;
Var
i,n:Integer;
A:mang;
Begin
Writeln('MANG SO THUC');
Writeln('------------');
Repeat
Write('-Cho biet so phan tu: ');
Readln(N);
Until N <= Max;
For i:=1 To N Do
Begin
Write('+Phan tu thu: ',i,' = ');
Readln(a[i]);
End;
Writeln;
Writeln('IN THEO THU TU NGUOC');
Writeln('--------------------');
Writeln;
For i:=N Downto 1 Do
Write(a[i]:4:1,' ');
Writeln;
Writeln;
Writeln('IN CAC DOI SO CUA CAC PHAN TU MANG');
Writeln('----------------------------------');
Writeln;
For i:=1 To N Do
Write(a[i]:4:1,' ');
Writeln;
Readln
End.

Bài tập

Viết phương trình in ra mã ASCII của các ký tự từ ‘A’ đến ‘Z’.

Program Mang_Ky_Tu;
Var
a:Array[Char] Of Integer;
Ch:Char;
Begin
Writeln(‘IN MA ASCII CUA CAC KY TU’);
Writeln(‘————————‘);
For Ch:=’A’ To ‘Z’ Do
Begin
a[Ch]:=Ord(Ch);
Writeln(‘-Ky tu: ‘,Ch,’ ma ASCII = ‘,a[ch]);
End;
Writeln;
Writeln(‘Bam phim de ket thuc’);
Readln
End.

Bài tập

Viết phương trình nhập mảng N phần tử (0< N <=100). Tính trung bình cộng các giá trị của mảng.

Program Tb_cong;
Var
i,so,dem,tong:Integer;
Tb:Real;
A:Array[1..100] Of Integer;
Begin
Writeln(‘TINH TRUNG BINH CONG CAC SO NGUYEN’);
Writeln(‘———————————-‘);
Writeln;
dem:=0;
Tong:=0;
Write(‘-Nhap so nguyn: ‘);
Readln(so);
While so > 0 Do
Begin
dem:=dem+1;
a[dem]:=so;
Write(‘-Nhap so nguyen (-1 de ngung): ‘);
Readln(so);
End;
For i:=1 to dem Do
Tong:=Tong+A[i];
Tb:=Tong/dem;
Writeln;
Writeln(‘+Trung binh cong cua: ‘,dem:2,’ so vua nhap = ‘,Tb:8:2);
Writeln;
Writeln(‘ Bam phim de ket thuc ‘);
Readln
End.

rogram Chen;
Var
i,spt:Integer;
so,vitri:Integer;
a:Array[1..100] Of Integer;
Begin
Writeln(‘CHEN MOT SO VAO MANG’);
Writeln(‘——————–‘);
Write(‘-Co bao nhieu phan tu: ‘);
Readln(spt);
For i:=1 To spt Do
Begin
Write(‘-Phan tu A[‘,i,’]= ‘);
Readln(a[i]);
End;
Writeln;
Writeln(‘MANG TRUOC KHI CHEN’);
For i:=1 To spt Do
Write(a[i]:6);
Writeln;
Write(‘-Can che so: ‘);
Readln(so);
Write(‘-Vao vi tri: ‘);
Readln(vitri);
For i:=spt+1 Downto Vitri+1 Do
a[i]:=a[i-1];
a[vitri]:=so;
spt:=spt+ 1;
Writeln;
Writeln(‘MANG SAU KHI CHEN’);
For i:=1 To spt Do
Write(a[i]:6);
Readln
End.

Program Xoa_Pt;
Var
i,spt,vitri:Integer;
a:Array[1..100] Of Integer;
Begin
Writeln(‘XOA PHAN TU TRONG MANG’);
Writeln(‘———————-‘);
Writeln;
Write(‘-Mang co bo nhieu phan tu: ‘);
Readln(spt);
For i:=1 To spt Do
Begin
Write(‘-Phan tu A[‘,i:2,’]= ‘);
Readln(a[i]);
End;
Writeln;
Writeln(‘ MANG TRUOC KHI XOA’);
Writeln(‘ —————–‘);
Writeln;
For i:=1 To spt Do
Write(a[i]:6);
Writeln;
Writeln;
Write(‘-Vi tri muon xoa: ‘);
Readln(vitri);
For i:=vitri to spt – 1 Do
a[i]:=a[i+1];
spt:=spt – 1;
Writeln;
Writeln(‘ MANG SAU KHI XOA’);
Writeln(‘ —————-‘);
Writeln;
For i:= 1 to spt Do
Write(a[i]:6);
Writeln;
Writeln;
Writeln(‘ Bam phim de ket thuc ‘);
Readln
End.

Program So_le;
Var
a:Array[1..255] Of Integer;
i,spt,sole:Byte;
Begin
Writeln(‘THONG KE CAC SO LE’);
Writeln(‘——————‘);
Write(‘-Can nhap bao nhieu so: ‘);
Readln(spt);
For i:=1 To spt Do
Begin
Write(‘-Phan tu A[‘,i:2,’]= ‘);
Readln(a[i]);
End;
sole:=0;
For i:=1 To spt Do
If Odd(A[i]) Then
Inc(sole);
Writeln;
Writeln(‘-Tong so cac so da nhap: ‘,spt);
For i:= 1 To spt Do
Write(a[i]:6);
Writeln;
Writeln(‘-Tong so cac so le la: ‘,sole);
Writeln;
Writeln(‘ Bam phim de ket thuc ‘);
Readln
End.

Program Da_thuc;
Var
a:Array[1..255] Of Real;
i,n:Byte;
x,p:Real;
Begin
Writeln(‘TINH GIA TRI CUA DA THUC BAC N’);
Writeln(‘——————————‘);
Writeln;
Write(‘-Cho biet bac cua da thuc: ‘);
Readln(n);
For i:= N Downto 0 Do
Begin
Write(‘-Cho biet he so A[‘,i:2,’]= ‘);
Readln(a[i]);
End;
Writeln;
Write(‘-Cho biet X= ‘);
Readln(x);
P:=a[n];
For i:= N Downto 1 Do
P:=x * p + a[i-1];
Writeln;
Writeln(‘+Tri cua da thuc P(x)= ‘,P:0:6);
Writeln;
Writeln(‘ Bam phim de ket thuc ‘);
Readln
End.

Program Doi_he_16;
Const
KyTuHe16:array[0..$F] Of Char =’0123456789ABCDEF’;
Var
SoWord:Word;
SoHex:String[4];
Begin
Writeln(‘DOI SO NGUYEN KIEU WORD RA HE THAP LUC’);
Writeln(‘————————————–‘);
Writeln;
Write(‘-Nhap so kieu Word: ‘);
Readln(SoWord);
SoHex[0]:=#4;
SoHex[1]:= KyTuHe16[Hi(SoWord) SHR 4];
SoHex[2]:= KyTuHe16[Hi(SoWord) AND $F];
SoHex[3]:= KyTuHe16[Lo(SoWord) SHR 4];
SoHex[4]:= KyTuHe16[Lo(SoWord) AND $F];
Writeln(‘+So nguyen kieu Word = ‘,soWord);
Writeln(‘+Doi ra so he thap luc = $’,SoHex);
Writeln;
Writeln(‘ Bam phim de ket thuc ‘);
Readln
End.

Program Doi_he_2;
Const
KyTuHe2:array[0..1] Of Char =’01’;
Var
SoWord:Word;
SoBinary:String[16];
i:byte;
Begin
Writeln(‘DOI SO NGUYEN KIEU WORD RA HE NHI PHAN’);
Writeln(‘————————————–‘);
Writeln;
Write(‘-Nhap so kieu Word: ‘);
Readln(SoWord);
SoBinary[0]:=#16;
For i:=15 DownTo 0 Do
If (SoWord AND (1 SHL i)) = (1 SHL i) Then
SoBinary[16-i]:= KyTuHe2[1]
Else
SoBinary[16-i]:= KyTuHe2[0];
Writeln(‘+So nguyen kieu Word = ‘,soWord);
Writeln(‘+Doi ra so he nhi phan= B ‘,SoBinary);
Writeln;
Writeln(‘ Bam phim de ket thuc ‘);
Readln
End.

Program Cong_so;
Uses Crt;
Const
spt=301;
Type
mang=Array[1..spt] Of Integer;
Var
a,b,kq:Mang;
k,na,nb,nmax,tam:Integer;
Begin
ClrScr;
Writeln(‘CONG 2 SO NGUYEN’);
Writeln(‘—————-‘);
Writeln;
Writeln(‘+SO THU NHAT (-1 de ket thuc) ‘);
na:=0;
Repeat
na:=na+1;
Write(‘-Chu so thu: ‘,na,’ = ‘);
Readln(a[na]);
Until a[na]=-1;
na:=na-1;
For k:=0 To na-1 Do
a[spt-k]:=a[na-k];
For k:=1 to spt-na Do
a[k]:=0;
ClrScr;
Writeln(‘+SO THU HAI (-1 de ket thuc) ‘);
nb:=0;
Repeat
nb:=nb+1;
Write(‘-Chu so thu: ‘,nb,’ = ‘);
Readln(b[nb]);
Until b[nb]=-1;
nb:=nb-1;
For k:=0 To nb-1 Do
b[spt-k]:=b[nb-k];
For k:=1 to spt-nb Do
b[k]:=0;
If na>nb Then
nmax:=na
Else
nmax:=nb;
tam:=0;
For k:=spt Downto spt-nmax Do
Begin
kq[k]:=(a[k]+b[k]+tam) Mod 10;
tam:=(a[k]+b[k]+tam) Div 10;
End;
ClrScr;
Writeln(‘KET QUA CONG 2 SO NGUYEN’);
Writeln(‘————————‘);
Write(‘*So thu nhat: ‘);
For k:=spt-na+1 To spt Do
Write(a[k],’ ‘);
Writeln;
Write(‘*So thu hai : ‘);
For k:=spt-nb+1 To spt Do
Write(b[k],’ ‘);
Writeln;
Write(‘*Tong = ‘);
For k:=Spt-nmax To spt Do
Write(kq[k],’ ‘);
Writeln;
Writeln(‘ Bam phim de ket thuc ‘);
Readln
End.

Program Nhan_so;
Uses Crt;
Const
spt=900;
Type
mang=Array[1..spt] Of Integer;
Var
a,b,c,kq:Mang;
i,j,k,na,nb,tam:Integer;
{—————————}
Procedure Nhap(Var a:mang; Var na:Integer);
Var
k:Integer;
Begin
na:=0;
Repeat
na:=na+1;
Write(‘-Chu so thu: ‘,na,’ = ‘);
Readln(a[na]);
Until a[na]=-1;
na:=na-1;
For k:=0 To na-1 Do
a[spt-k]:=a[na-k];
For k:=1 to spt-na Do
a[k]:=0;
End;
{—————————}
Procedure Cong(a:mang; Var b:mang);
Var
tam1,tam2,k:Integer;
Begin
tam1:=0;
For k:= spt Downto 1 Do
Begin
tam2:=(a[k]+b[k]+tam1) Div 10;
b[k]:=(a[k]+b[k]+tam1) Mod 10;
tam1:=tam2;
End;
End;
{—————————}
BEGIN
ClrScr;
Writeln(‘NHAN 2 SO NGUYEN’);
Writeln(‘—————-‘);
Writeln;
Writeln(‘+SO THU NHAT (-1 de ket thuc) ‘);
Nhap(a,na);
ClrScr;
Writeln(‘+SO THU HAI (-1 de ket thuc) ‘);
Nhap(b,nb);
For k:=1 To spt Do
kq[k]:=0;
For j:=spt Downto spt-nb Do
Begin
For k:=1 to spt Do
c[k]:=0;
tam:=0;
For i:=spt Downto spt-na Do
Begin
c[j+i-spt]:=(b[j]*a[i]+tam) Mod 10;
tam:=(b[j]*a[i]+tam) Div 10;
End;
Cong(c,kq)
End;
ClrScr;
Writeln(‘KET QUA NHAN 2 SO NGUYEN’);
Writeln(‘———————–‘);
Writeln;
Write(‘*So thu nhat: ‘);
For k:=spt-na+1 To spt Do
Write(a[k],’ ‘);
Writeln;
Write(‘*So thu hai : ‘);
For k:=spt-nb+1 To spt Do
Write(b[k],’ ‘);
Writeln;
Write(‘*Tich = ‘);
For k:=Spt-(na+nb)+1 To spt Do
Write(kq[k],’ ‘);
Writeln;
Writeln(‘   Bam phim <Enter> de ket thuc ‘);
Readln
END.

Program Ma_tran_vuong;
Uses Crt;
Var
a:Array[1..10, 1..10] Of Integer;
i,j:Integer;
Begin
Writeln(‘MA TRAN VUONG 10 x 10 PHAN TU’);
Writeln(‘—————————–‘);
ClrScr;
Window(10,5,60,25);
For i:= 1 To 10 Do
Begin
For j:=1 To 10 Do
Begin
If i=j Then
a[i,j]:=i
Else
a[i,j]:=0;
Write(a[i,j]:5);
End;
Writeln(#10)
End;
Writeln;
Writeln(‘   Bam phim <Enter> de ket thuc ‘);
Readln
End.

Program Tim_so;
Var
a:Array[1..4,1..6] Of Integer;
i,j,so,solan:Integer;
Begin
Writeln(‘TIM MOT SO TRONG MANG’);
Writeln(‘———————‘);
Writeln;
For i:=1 To 4 Do
For j:=1 to 6 Do
Begin
Write(‘-Phan tu A[‘,i,’,’,j,’]= ‘);
Readln(a[i,j]);
End;
Writeln;
Write(‘-So muon tim: ‘);
Readln(so);
solan:=0;
For i:=1 To 4 Do
For j:=1 To 6 Do
If so=a[i,j] Then
Begin
solan:=solan+1;
Writeln(‘+Lan: ‘,solan,’ tai hang: ‘,i,’ cot: ‘,j);
End;
Writeln;
Writeln(‘+Tong so lan xuat hien la: ‘,solan);
For i:=1 To 4 Do
Begin
For j:=1 To 6 Do
Write(a[i,j]:8);
Writeln;
End;
Readln
End.

Program Giai_he_PT_tuyen_tinh;
Var
A:Array[1..2, 1..2] Of Real;
C:Array[1..2] Of Real;
x,y,dt,dtx,dty:Real;
i,j:Integer;
Begin
Writeln(‘GIAI HE PT TUYEN TINH 2 AN’);
Writeln(‘————————–‘);
Writeln;
Writeln(‘-Nhap cac he so A cua he phuong trinh: ‘);
For i:=1 to 2 Do
For j:=1 To 2 Do
Begin
Write(‘+Phan tu A[‘,i,’,’,j,’]= ‘);
Readln(a[i,j]);
End;
Writeln;
Writeln(‘-Nhap cac he so C cua he phuong trinh: ‘);
For i:=1 to 2 Do
Begin
Write(‘+Phan tu C[‘,i,’]= ‘);
Readln(c[i]);
End;
Writeln;
{Giai he phuong trinh}
Dt:= a[1,1]*a[2,2]-a[1,2]*a[2,1]; {Dt: Dinh thuc}
Dtx:=c[1]*a[2,2]-c[2]*a[2,1];
Dty:=a[1,1]*c[2]-a[1,2]*c[1];
If Dt <> 0 Then
Begin
x:=Dtx / Dt;
y:=Dty / Dt;
Writeln(‘X= ‘,x);
Writeln(‘Y= ‘,y);
End
Else
Begin
If (Dtx=0) And (Dty=0) Then
Writeln(#7,#7,#7,’ Co vo so nghiem’)
Else
Writeln(#7,#7,#7,’Vo nghiem’);
End;
Writeln;
Writeln(‘  Bam phim <Enter> de ket thuc ‘);
Readln
End.

Program Nhan_ma_tran;
Const
Max=10;
Type
Matran=Array[1..Max,1..Max] Of Integer;
Var
A,B,C:Matran;
hang1,cot1,i,j,m,n,q:Integer;
Begin
Writeln(‘NHAN MA TRAN’);
Writeln(‘————‘);
Writeln;
Writeln(‘MA TRAN A:’);
Write(‘-So hang = ‘);
Readln(m);
Write(‘-So cot  = ‘);
Readln(n);
For i:=1 To m Do
For j:=1 To n Do
Begin
Write(‘+Phan tu A[‘,i,’,’,j,’ = ‘);
Readln(a[i,j]);
End;
Cot1:=m;
Hang1:=m;
Writeln;
Writeln(‘MA TRAN B:’);
Write(‘-So hang = ‘);
Readln(m);
Write(‘-So cot  = ‘);
Readln(n);
For i:=1 To m Do
For j:=1 To n Do
Begin
Write(‘+Phan tu B[‘,i,’,’,j,’ = ‘);
Readln(b[i,j]);
End;
For i:=1 To Hang1 Do
For j:=1 To n Do
Begin
c[i,j]:=0;
For q:=1 To Cot1 Do
c[i,j]:= c[i,j] + a[i,q] * b[q,j];
End;
For i:=1 to hang1 Do
Begin
For j:= 1 To n Do
Write((c[i,j]):8);
Writeln;
End;
Readln
End.

Program Tong_Tich_Ma_tran;
Uses Crt;
Type
Matran=array[1..3,1..3] Of Integer;
Var
a,b,c,d:Matran;
i,j,k:Byte;
Ch:Char;
{*****************************}
Procedure Nhap(Var m:Matran; Ten:Char);
Begin
ClrScr;
GotoXY(26,6);
Write(‘-Nhap ma tran: ‘,Ten);
For i:=1 To 3 Do
For j:=1 to 3 Do
Begin
GotoXY(20*i-8,10+2*j);
Write(Ten,'[‘,i,’,’,j,’]= ‘);
Readln(m[i,j]);
End;
End;
{*****************************}
Procedure Xuat(m:Matran; Ten:Char);
Begin
ClrScr;
GotoXY(26,6);
Write(‘CAC PHAN TU CUA MA TRAN: ‘,Ten);
For i:=1 To 3 Do
For j:=1 To 3 Do
Begin
GotoXY(20*i-8,10+2*j);
Write(Ten,'[‘,i,’,’,’]= ‘,m[i,j]);
End;
End;
{*****************************}
BEGIN
Nhap(a,’A’);
Nhap(b,’B’);
For i:=1 To 3 Do
For j:=1 To 3 Do
c[i,j]:=a[i,j]+b[i,j];
Writeln;
Writeln(‘MA TRAN TONG’);
Writeln;
Xuat(c,’C’);
GotoXY(10,25);
Write(‘Bam phim <Esc> de xem ma tran tich’);
For i:=1 to 3 Do
For j:=1 To 3 Do
Begin
d[i,j]:=0;
For k:=1 To 3 Do
d[i,j]:=a[i,k]*b[k,j]+d[i,j];
End;
Repeat
Ch:=Readkey;
If Ch=#0 then
Ch:=Readkey;
Until Ch=#27;
Writeln(‘MA TRAN TICH= ‘);
Xuat(d,’D’);
Repeat
Until KeyPressed;
END.

Program Mang_tang;
Const
Max=10;
Var
a:Array[1..Max] Of Integer;
i,j,tam:Integer;
Begin
Writeln(‘SAP XEP MANG TANG DAN’);
Writeln(‘———————‘);
Writeln;
For i:= 1 To Max Do
Begin
Write(‘-Phan tu A[‘,i,’]= ‘);
Readln(a[i]);
End;
For i:=1 to Max-1 Do
For j:= i+1 To Max Do
Begin
If a[i] > a[j] Then
Begin
tam:=a[i];
a[i]:=a[j];
a[j]:=tam;
End;
End;
Writeln;
Writeln(‘+Mang sau khi sap xep:’);
Writeln;
For i:=1 To Max Do
Write(a[i],’ ‘);
Writeln;
Readln
End.

Program Giai_thuat_Chen;
Const
spt=10;
Var
a:array[1..spt] Of Integer;
i,j,k,tam:Integer;
Begin
Writeln(‘SAP XEP MANG BANG GIAI THUAT CHEN’);
Writeln(‘———————————‘);
Writeln;
For i:=1 To spt Do
Begin
Write(‘-Phan tu A[‘,i,’]= ‘);
Readln(a[i]);
End;
For i:=2 To spt Do
If a[i] < a[i-1] Then
Begin
j:=1;
While a[j] < a[i] Do
j:=j+1;
tam:=a[i];
For k:=i Downto j+1 Do
a[k]:=a[k-1];
a[j]:=tam;
End;
Writeln;
Writeln(‘Mang sau khi sap xep:’);
For i:=1 To spt Do
Write(a[i]:6);
Writeln;
Writeln(‘  Bam phim <Enter> de ket thuc ‘);
Readln
End.

Program Gt_Chon;
Const
spt=10;
Var
a:array[1..spt] Of Integer;
min,vitri,i,j:Integer;
Begin
Writeln(‘SAP XEP MANG BANG GIAI THUAT CHON’);
Writeln(‘———————————‘);
Writeln;
For i:=1 To spt Do
Begin
Write(‘-Phan tu A[‘,i,’]= ‘);
Readln(a[i]);
End;
For i:=1 To spt Do
Begin
min:=a[spt];
vitri:=spt;
For j:=i To spt Do
If a[j] < min Then
Begin
min:=a[j];
vitri:=j;
End;
a[vitri]:=a[i];
a[i]:=min;
End;
Writeln;
Writeln(‘Mang sau khi sap xep:’);
For i:=1 To spt Do
Write(a[i]:6);
Writeln;
Writeln(‘  Bam phim <Enter> de ket thuc ‘);
Readln
End.

Program Gt_Noi_bot;
Const
spt=10;
Var
a:array[1..spt] Of Integer;
i,j,tam:Integer;
Begin
Writeln(‘SAP XEP MANG BANG GIAI THUAT NOI BOT’);
Writeln(‘———————————–‘);
Writeln;
For i:=1 To spt Do
Begin
Write(‘-Phan tu A[‘,i,’]= ‘);
Readln(a[i]);
End;
For i:=1 To spt-1 Do
For j:= spt Downto i+1 Do
If a[j] < a[j-1] Then
Begin
tam:=a[j];
a[j]:=a[j-1];
a[j-1]:=tam;
End;
Writeln;
Writeln(‘Mang sau khi sap xep:’);
For i:=1 To spt Do
Write(a[i]:6);
Writeln;
Writeln(‘  Bam phim <Enter> de ket thuc ‘);
Readln
End.

Program Tim_Tuyen_Tinh;
Const
N=10;
Var
a:array[1..N] Of Integer;
so,i:Integer;
Begin
Writeln(‘GIAI THUAT TIM KIEM TUYEN TINH’);
Writeln(‘——————————‘);
Writeln;
For i:=1 To N Do
Begin
Write(‘-Phan tu A[‘,i,’]= ‘);
Readln(a[i]);
End;
Writeln;
Write(‘-So can tim: ‘);
Readln(so);
i:=1;
While (i <=N) And (a[i] <> so) Do
i:=i+1;
If i <= N Then
Writeln(‘+Tim thay o vi tri thu: ‘,i)
Else
Writeln(‘+Khong tim thay’);
Writeln;
Writeln(‘  Bam phim <Enter> de ket thuc ‘);
Readln
End.

Program Tim_Nhi_Phan;
Const
N=10;
Var
a:array[1..N] Of Integer;
so,vt1,vt2,i:Integer;
Begin
Writeln(‘GIAI THUAT TIM KIEM NHI PHAN’);
Writeln(‘—————————-‘);
Writeln;
For i:=1 To N Do
Begin
Write(‘-Phan tu A[‘,i,’]= ‘);
Readln(a[i]);
End;
Writeln;
Write(‘-So can tim: ‘);
Readln(so);
vt1:=1;
vt2:=n;
While vt2 >= vt1 Do
Begin
i:=Trunc((vt1+vt2) Div 2);
If so > a[i] Then
vt1:=i+1
Else
If so < a[i] Then
vt2:=i-1
Else
vt2:=-1;
End;
If vt2 = -1 Then
Writeln(‘+Tim thay o vi tri thu: ‘,i)
Else
Writeln(‘+Khong tim thay’);
Writeln;
Writeln(‘  Bam phim <Enter> de ket thuc ‘);
Readln
End.

Program Bo_so_trung;
Const
Max=100;
Var
a:Array[1..Max] Of Integer;
i,j,k,n:Integer;
Begin
Writeln(‘XOA BO CAC SO TRUNG NHAU’);
Writeln(‘————————‘);
Writeln;
Write(‘-Nhap so phan tu mang: ‘);
Readln(n);
For i:=1 To N Do
Begin
Write(‘-Phan tu A[‘,i,’]= ‘);
Readln(a[i]);
End;
i:=2;
While i <= N Do
Begin
j:=1;
While a[j] <> a[i] Do
j:=j+1;
If j < i Then
Begin
For k:=i to n-1 Do
a[k]:= a[k+1];
n:=n-1;
End
Else
i:=i+1;
End;
Writeln;
Write(‘-Mang con lai: ‘);
For i:=1 to n Do
Write(a[i]:8);
Writeln;
Writeln(‘   Bam phim <Enter> de ket thuc ‘);
Readln
End.

Program Day_con;
Const
k=10;
a:Array[1..k] Of Integer=(1,3,2,8,10,12,7,29,6,3);
Var
i:Integer;
vt,max:Integer;
n,tong:Integer;
Begin
Vt:=1;
max:=a[1];
n:=1;
tong:=a[1];
For i:=2 To k Do
Begin
If (a[i] > a[i-1]) Then
tong:=tong+a[i];
If (a[i] < a[i-1]) Or (i=k) Then
Begin
If tong > max Then
Begin
max:=tong;
vt:=n;
End;
n:=i;
tong:=a[i];
End;
End;
Writeln(‘-Day con la: ‘);
i:=vt;
Repeat
Write(a[i]:6);
max:=max-a[i];
i:=i+1;
Until max=0;
Writeln;
Writeln(‘  Bam phim <Enter> de ket thuc ‘);
Readln
End.

Program Chu_hoa;
Uses Crt;
Const
a:Array[1..10] Of String[24]=(‘nguyen trung truc’,’dinh tien hoang’,
‘nguyen cong tru’,’le thanh ton’,’le loi’,’le lai’,’tran hung dao’,
‘nguyen hue’,’chu van an’,’mac dinh chi’);
Var
k,j:Byte;
{————————-}
Procedure ChuHoa(x,y:Byte; a:String);
Var
k:Byte;
Begin
For k:=1 To length(a) Do
If (k=1) Or ((a[k-1]=’ ‘) And (a[k]<>’ ‘)) Then
Begin
GotoXY(x+k-1,y);
Write(UpCase(a[k]));
End;
End;
Begin
ClrScr;
For k:=1 To 10 Do
Begin
GotoXY(5,k);
Write(a[k]:-24);
ChuHoa(5,k,a[k])
End;
Writeln;
Writeln(‘  Bam phim <Enter> de ket thuc ‘);
Readln
End.

Program Tg_Pascal;
Const
n=10;
Var
a:Array[1..n, 1..n] Of Integer;
i,j:Integer;
Begin
Writeln(‘TAM GIAC PASCAL’);
Writeln(‘—————‘);
Writeln;
For i:=1 To n Do
a[i,1]:=1;
For j:=1 To n Do
a[1,j]:=0;
For i:=2 To n Do
For j:=2 To n Do
a[i,j]:=a[i-1,j-1]+a[i-1,j];
For i:=1 To n Do
Begin
For j:=1 To i Do
Write(a[i,j]:4);
Writeln;
End;
Writeln;
Writeln(‘  Bam phim <Enter> de ket thuc ‘);
Readln
End.

Program Phan_tich;
Const
n=15;
Var
a:Array[1..n, 1..n] Of Longint;
i,j,i1,j1:Integer;
Begin
Writeln(‘PHAN TICH SO NGUYEN DUONG NHO NHAT’);
Writeln(‘———————————-‘);
Writeln;
For i:=1 To n Do
For j:=1 To n Do
a[i,j]:=i*i*i + j*j*j;
Writeln;
Writeln(‘IN KET QUA’);
Writeln(‘———-‘);
For i:=1 To n Do
For j:=1 To i Do
Begin
For i1:= i+1 To n Do
For j1:=1 To j-1 Do
If a[i,j]=a[i1,j1] Then
Writeln(a[i,j],’ = ‘,i,’ ^3 ‘,’ + ‘,j,’ ^3 ‘,’ = ‘,
i1,’ ^3 ‘,’ + ‘,j1,’ ^3′);
End;
Writeln;
Writeln(‘  Bam phim <Enter> de ket thuc ‘);
Readln
End.

Program Cuu_Chuong;
Uses Crt;
Type
cc1=Array[1..5, 1..10] Of Byte;
cc2=Array[6..10, 1..10] Of Byte;
Var
i,j:Byte;
Procedure In1;
Var
a:cc1;
cot,hang:Byte;
Begin
cot:=1;
hang:=3;
For i:=1 To 5 Do
For j:=1 To 10 Do
Begin
GotoXY(cot,hang);
a[i,j]:=i * j;
TextColor(Yellow);
Writeln(i:2,’ lan ‘,j:2,’ =’,a[i,j]:3,’|’);
hang:=hang+1;
If hang > 12 Then
Begin
hang:=3;
cot:=cot+15;
End;
End;
End;
Procedure In2;
Var
a:cc2;
cot,hang:Byte;
Begin
cot:=1;
hang:=14;
For i:=6 To 10 Do
For j:=1 To 10 Do
Begin
GotoXY(cot,hang);
a[i,j]:=i * j;
Textcolor(LightMagenta);
Writeln(i:2,’ lan ‘,j:2,’ =’,a[i,j]:3,’|’);
hang:=hang+1;
If hang > 23 Then
Begin
hang:=14;
cot:=cot+15;
End;
End;
End;

BEGIN
ClrScr;
Textcolor(Cyan);
Writeln(‘                          BANG CUU CHUONG’);
Writeln(‘                          —————‘);
In1;
Textcolor(LightBlue);
Writeln(‘               ——————————————-‘);
In2;
Textcolor(LightGreen);
Writeln(‘                     Bam phim <Enter> de ket thuc’);
Readln
END.

Program Tim_PT_Mang;
Uses Crt;
Var
a:Array[1..1000] Of Integer;
{—————————-}
Procedure Tao;
Var
k:Integer;
Begin
Randomize;
For k:=1 To 100 Do
a[k]:=Random(100);
End;
{—————————-}
Procedure Tim;
Var
k,x:Integer;
Begin
Write(‘-Nhap gia tri X= ‘);
Readln(x);
For k:=1 To 999 Do
Begin
If a[k] +a[k+1] = X Then
Writeln(‘a[‘,K,’] + a[‘,K+1,’]= ‘,X)
Else
Writeln(‘Khong co 2 phan tu nao bang: ‘,X);
End;
End;
BEGIN
Writeln(‘TIM 2 PHAN TU LIEN TIEP BANG GIA TRI X’);
Writeln(‘————————————-‘);
Writeln;
Tao;
Tim;
Writeln;
Writeln(‘  Bam phim <Enter> de ket thuc ‘);
Readln;
END.

Program SX_Nhi_Phan;
Uses Crt;
Const
Pt=240;
Type
Mang=Array[1..Pt] Of Integer;
Var
a:Mang;
n:Integer;
{———————————}
Procedure Sort(Var a: Mang; n:Integer);
Var
k,j,dau,cuoi,giua,tam:Integer;
Begin
For k:=2 To n Do
Begin
tam:=a[k];
cuoi:=1;
dau:=k-1;
While cuoi <= dau Do
Begin
giua:=(dau+cuoi) Div 2;
If tam < a[giua] Then
dau:=giua-1
Else
cuoi:=giua+1;
End;
For j:=k-1 Downto cuoi Do
a[j+1]:=a[j];
a[cuoi]:=tam
End
End;
{———————————}
BEGIN
ClrScr;
Randomize;
For n:=1 To Pt Do
a[n]:=Random(1000);
Sort(a,Pt);
For n:=1 To Pt Do
Write(‘ ‘,a[n]:6,’ ‘);
Readln
END.

Advertisements

About pascalteacher

Trang thông tin Toán học và Tin học

Thảo luận

Không có bình luận

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

Các tác giả

Chuyên mục

Tháng Mười 2014
H B T N S B C
« Th11   Th11 »
 12345
6789101112
13141516171819
20212223242526
2728293031  

NCT Computer

Flickr Photos

lost

Lookkk deeeply into my eyes....

Cimitero San Michele

More Photos

Thống kê

  • 115,518 lượt xem

pascalteacher.nct@gmail.com


Trang huấn luyện học sinh giỏi Tin học

%d bloggers like this: