Thứ Sáu, 18 tháng 1, 2013

BÀI TẬP PASCAL


1. Viết chương trình nhập n số, xoá số thứ k trong n số vừa nhập.In ra n-1 số còn lại.
n= 10 (Nhập 10 phần tử)
Ví dụ: Nhập 2, 3, 4, 5, 6, 8, 7, 6, 5, 4.
k= 8 (Xoá phần tử thứ 8).
In ra: 2, 3, 4, 5, 6, 8, 7,  5, 4.
a. Hướng dẫn:
            Xoá phần tử k bằng cách ghi đè phần tử thứ k+1 lên nó.
b. Mã chương trình:
Program Xoa_mang;
uses crt;
var m:array[1..100] of integer;
    n,i,k:byte;
Begin
     Write('So phan tu cua day: ');readln(n);
     for i:=1 to n do
     Begin
          Write('M[',i,']=');Readln(M[i]);
     End;
     Write('Nhap vi tri cua phan tu can xoa: ');Readln(k);
     For i:=k to n-1 do m[i]:=m[i+1];
     For i:=1 to n-1 do Write(m[i],', ');
     Readln
End.

c. Nhận xét: Với yêu cầu của bài tập trên chỉ cần kiểm tra chỉ số khi in (VD nếu i = 8 thì không in). Tuy nhiên trong khi sử dụng mảng để lưu dữ liệu giải toán, nhiều khi ta có nhu cầu xóa bớt hoặc chèn thêm phần tử vào dãy.
Bài tập 5.4
            Viết chương trình cho phép nhập một dãy gồm n số nguyên. Nhập thêm một số và chèn thêm vào dãy sau phần tử k.
a. Hướng dẫn:
- Dời các phần tử từ vị trí k về sau một bước.
- Nhập giá trị cần chèn vào vị trí k.
b. Mã chương trình:
Program Mang_chen;
uses crt;
var M: array[1..100] of integer;
    i,n,k:integer;
begin
     clrscr;
     write('Nhap : ');readln(n);
     for i:=1 to n do
     begin
         write('M[',i,']='); readln(M[i]);
     end;
     write('Vi tri chen: ');readln(k);
     for i:=n+1 downto k+1 do M[i]:=M[i-1];
     write('Nhap so can chen: '); readln(M[k]);
     for i:=1 to n+1 do write(M[i],', ');
     readln
end.


2.  Viết chương trình cho phép nhập n số và cho biết số nhỏ nhất trong các số vừa nhập là số thứ mấy.
a.Hướng dẫn:
-         Dùng biến n để lưu lượng số cần nhập.
-         Dùng mảng để lưu các số vừa nhập.
-         Cho Min = M[1], j = 1 (Xem phần tử đầu tiên là bé nhất)
-         So sánh Min với n-1 số còn lại. Trong quá trình so sánh nếu Min > M[i] thì gán Min = M[i], j=i và tiếp tục so sánh .
b.Mã chương trình:
Program TIM_NHO_NHAT;
uses crt;
var n,i,nhonhat:integer;
    m: array[1..100] of real;
    min:real;
begin
     write('Nhap n: '); readln(n);
     for i:=1 to n do
     begin
          write('M[',i,']='); readln(m[i]);
     end;
     min:=m[1];
     nhonhat:=1;
     for i:=2 to n do if m[i]  < min then
     begin
          min:=m[i]; nhonhat:=i;
     end;
     writeln('phan tu nho nhat la phan tu thu',nhonhat);
     readln
end.


3.   Viết chương trình cho phép nhập n số sắp xếp và in ra các số đã nhập theo thứ tự tăng dần.
a. Hướng dẫn:

b. Mã chương trình:
Program Sap_xep_mang;
Var M: array[1..10] of integer;
    i,j,n: byte;
    tam: integer;
Begin
    Write('Nhap so phan tu n:');Readln(n);
    For i:=1 to n do
    Begin Write('M[',i,']='); Readln(M[i]); End;
    For i:=1 to n-1 do
    For j:=i+1 to n do if M[j] <=M[i] then
    Begin Tam:= M[i]; M[i]:=M[j]; M[j]:=tam; End;
    Write('Sau khi sap xep: ');
    For i:=1 to n do Write(M[i],';');
    Readln;
End.

4.  Viết chương trình in dãy n số fibonacy.
a.Hướng dẫn:
- Sử dụng mảng M để chứa dãy n số fibonacy. Tạo lập hai phần tử đầu tiên là 1, 1.
- Cho i chạy từ 3 đến n. M [i] = M[i-1]+M[i-2].
- In n phần tử đầu tiên của mảng.
b.Mã chương trình:
Program Fibonacy_mang;
uses crt;
var i,n: integer;
    m:array[1..100] of longint;
begin
     write('Nhap so phan tu can in:'); readln(n);
     m[1]:=1;
     m[2]:=1;
     for i:=3 to n do m[i]:=m[i-1]+m[i-2];
     for i:=1 to n do write(m[i],' ,');
     readln
end.

5. 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          2          1
                        1          3          3          1
                        1          4          6          4          1
... Hàng thứ n được xác định từ hàng n-1:
- Phần tử đầu tiên và phần tử cuối cùng đều bằng 1.
- Phần tử thứ 2 là tổng của phần tử thứ nhất và thứ 2 của hàng n-1
- Phần tử thứ k của hàng thứ n là tổng của phần tử thứ k-1 và k của hàng thứ n-1.
Thuật toán:
Bước 1: Khởi tạo một mảng một chiều  n phần tử có giá trị 0.
Bước 2: Khởi tạo giá trị cho hàng thứ nhất M[1,1] = 1.
Bước 3: - Đối với hàng thứ i tính giá trị phần tử từ phần tử thứ i + 1 xuống phần tử thứ 2: M[j]:=M[j] + M[j-1]
                                    - In ra hàng thứ i.
Chương trình:
Program Tam_giac_Pascal_mot_chieu;
Var n,i,j: integer;
    M: array[1..10] of integer;
Begin
    Write('Nhap n: '); Readln(n);
    For i:= 1 to n do M[i]:=0;
    M[1]:=1;
    For i:=1 to n do
    Begin
        For j:=i+ 1 downto 2 do M[j]:=M[j]+M[j-1];
        For j:=1 to i+ 1 do Write(M[j]:3);
        Writeln;
    End;
    Readln
End.

2 nhận xét: