Hướng dẫn chương trình pascal mẫu

newbie




Tổng số bài gửi : 54
Join date : 06/03/2008

Hướng dẫn chương trình pascal mẫu
Hướng dẫn chương trình pascal mẫu
Tiêu đề: Một số bài mẫu PASCAL (10/3/2008)   
Hướng dẫn chương trình pascal mẫu
Mon Mar 10, 2008 9:37 pm

Bài 4 : Viết chương trình in tam giác số n dòng

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
1 2 4 4 5 6 7 8 9

Để giải bài này thì ta cần dùng hai vòng lặp lồng nhau (FOR, Repeat hay While đều được). Nếu gọi i là biến chạy của hàng, và j là biến chạy của cột thì

Hướng dẫn chương trình pascal mẫu


Giá trị của biến chạy j sẽ là chạy từ 1 đến i. Ví dụ dòng i= 1 thì j chạy từ 1 tới 1. Dòng i=2 thì j chạy từ 1 đến 2. Như vậy ta có thể giải bài toán như sau


Giải

Code:

Program bai4;
Uses CRT;
Var
  i,j,n : integer;

BEGIN

  clrscr;
 
  {doc vao so dong can in}
    write('So dong can in N = ?') ;
    readln(n);

    {in tam giac so}
    For i:=1 to N do
        begin
              For j:=1 to i do write(j:4);
              writeln;
        end;
 
    {dung man hinh}
    repeat until keypressed;
END.


Chú ý : Trong bài trên ta cần in có quy cách giá trị của biến nguyên j
Code:

 For j:=1 to i do write(j:4); 

(Dành 4 vị trí để in giá trị của j) để phòng trường hợp giá trị của j có nhiều hơn 2 chữ số mà ta in theo
Code:

For j:=1 to i do write(j);

Sẽ làm lêch tam giác. Không tin các bạn có thể bỏ số 4 đi và nhập giá trị N >10 !

Trong cách in
Code:

 For j:=1 to i do write(j:4);

cũng chỉ được đến trường hợp j có nhỏ hơn hoặc bằng 4 chữ số, nhiều hơn thì sẽ lệch tam giác số ! Bạn thử nhập N >= 10000 thì sẽ thấy.

LikeDislike

newbie




Tổng số bài gửi : 54
Join date : 06/03/2008

Hướng dẫn chương trình pascal mẫu
Hướng dẫn chương trình pascal mẫu
Tiêu đề: Re: Một số bài mẫu PASCAL (10/3/2008)   
Hướng dẫn chương trình pascal mẫu
Mon Mar 10, 2008 9:46 pm

Bài 5 : Viết chương trình in tam giác số n dòng

1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
6 6 6 6 6 6
7 7 7 7 7 7 7

Bài này ta làm hoàn toàn tương tự bài 4 nhưng thay câu lệnh
Code:

For j:=1 to i do write(j:4);

thay bằng
Code:

For j:=1 to i do write(i:4);

LikeDislike

newbie




Tổng số bài gửi : 54
Join date : 06/03/2008

Hướng dẫn chương trình pascal mẫu
Hướng dẫn chương trình pascal mẫu
Tiêu đề: Re: Một số bài mẫu PASCAL (10/3/2008)   
Hướng dẫn chương trình pascal mẫu
Mon Mar 10, 2008 9:55 pm

Bài 6 : Viết chương trình nhập một dãy số gồm n số nguyên từ bàn phím. Tính và in ra màn hình tổng và giá trị trung bình của dãy vừa nhập.

Ta có thể dùng For, Repeat hay While đều được. Ở đây ta sẽ dùng While

Giải

Code:

program bai6;
Uses CRT;
Var
  i,N,x  : integer;
  Tong  : real;

BEGIN
  clrscr;
 
  {nhap N}
  write('Gia tri N = ? '); readln(N);
 
  {Nhap N so va tinh tong}
    Tong:=0;
    i:=1;
    While(i<=N) do
    Begin
        write('Nhap so thu ',i,' = ');
        readln(x);
        Tong:=Tong+x;
        i:=i+1; {tang gia tri bien dem}
    End;

    {Tinh va in ra ket qua}
    writeln('Tong n so vua nhap : ',Tong:10:4);
    writeln('Trung binh cua day so : ', Tong/N:10:4);

    {dung man hinh cho nguoi dung}
    repeat until keypressed;
END.

LikeDislike

newbie




Tổng số bài gửi : 54
Join date : 06/03/2008

Hướng dẫn chương trình pascal mẫu
Hướng dẫn chương trình pascal mẫu
Tiêu đề: Re: Một số bài mẫu PASCAL (10/3/2008)   
Hướng dẫn chương trình pascal mẫu
Mon Mar 10, 2008 10:15 pm

Bài 7 : Viết chương trình nhập một dãy số âm từ bàn phím cho tới khi gặp số 0 thì dừng. Tìm và in ra màn hình giá trị nhỏ nhất, lớn nhất của dãy vừa nhập.
Hướng dẫn : Dùng vòng lặp Repeat hoặc While

Giải

Trong bài này thì số phần tử cần nhập vào là chưa biết trước (gặp số 0 thì dừng). Do đó ta phải dùng lệnh lặp với số lần lặp chưa biết trước, và do chưa có cách lưu trữ các số này nên tại mỗi bước ta cần kiểm tra số vừa nhập có phải là nhỏ nhất hay lớn nhất không (so với các số đã nhập trước đó). Để lưu giá trị nhỏ nhất và lớn nhất của dãy cho đến bước lặp hiện tại thì ta cần dùng hai biến Min ( cho giá trị nhỏ nhất ) và Max (cho giá trị lớn nhất).

Giá trị ban đầu của Min sẽ được gán là giá trị lớn nhất có thể. Đối với bài toán này dãy số là âm nên Min := 0; là đủ

Giá trị ban đầu của Max sẽ được gán là giá trị nhỏ nhất có thể. Đối với bài toán này dãy số là âm nên Max gán là số âm nhỏ nhất. (Nếu mà kiểu của các số âm là kiểu nguyên Integer thì Max := -32768;)

Code:

program Bai7;
uses CRT;
Var
    Min,Max,x:integer;

BEGIN
    clrscr;
   
    {Nhap day so va xet Min, Max}
      Min:=0;
      Max:=-32768;
      x:=-1;
      while (x<0) do
      Begin
          write('Nhap x ');
          readln(x);
         
          {kiem tra Min, Max chi xet cac gia tri x am}
            if(x<0) then
            Begin
                if (x>Max) then Max:=x;
                if (x            End;
      End; {end cua while}

      {in ra cac gia tri tim duoc}
      writeln('Gia tri lon nhat la ',Max);
      writeln('Gia tri nho nhat la ',Min);

        Repeat until keypressed;
END. 


chú ý : Trong cách giải trên vẫn còn 1 lỗi nhỏ là giả sử ta nhập ngay giá trị đầu là lớn hơn 0, nghĩa là khi dãy số không có số nào thì chương trình vẫn in ra kết quả là Min=0 và
Max=-32768. Để khắc phục lỗi này ta có thể thêm 1 lệnh kiểm tra khi in ra kết quả. Các bạn hãy tự thêm vào !

LikeDislike

newbie




Tổng số bài gửi : 54
Join date : 06/03/2008

Hướng dẫn chương trình pascal mẫu
Hướng dẫn chương trình pascal mẫu
Tiêu đề: Re: Một số bài mẫu PASCAL (10/3/2008)   
Hướng dẫn chương trình pascal mẫu
Tue Mar 11, 2008 10:06 am

Bài 9 : Viết chương trình tìm tất cả các số có 3 chữ số abc sao tổng các lập phương của các chữ số bằng chính chữ số đó

Hướng dẫn chương trình pascal mẫu


GIAI

Số abc là số có 3 chữ số nên giá trị có thể của a phải là từ 1 tới 9 không thể là 0 được.
Giá trị có thể của b và c là 0 tới 9.

Ta sử dụng vòng lặp FOR

Code:

program bai9;
Uses CRT;
var
    a,b,c        :integer;
BEGIN
    clrscr;
   
    For a:=1 to 9 do
        For b:=0 to 9 do
              for c:=0 to 9 do
                  If (100*a+10*b+c = a*a*a + b*b*b + c*c*c) then
                    begin   
                          write('So ',a,b,c);
                          writeln;
                    end;

    repeat until keypressed;
END.


Ta có thể thêm biến đếm vào để đếm số lượng số tìm được bằng cách :
khai báo thêm biến đếm

Code:

Var 
        dem : integer;


Ban đầu gánCode:

dem:=0;

Trong đoạn begin, end của lệnh if thêm
Code:

dem:=dem+1;

LikeDislike

newbie




Tổng số bài gửi : 54
Join date : 06/03/2008

Hướng dẫn chương trình pascal mẫu
Hướng dẫn chương trình pascal mẫu
Tiêu đề: Re: Một số bài mẫu PASCAL (10/3/2008)   
Hướng dẫn chương trình pascal mẫu
Tue Mar 11, 2008 10:10 am

Bài 10 : In ra cách để có 300 từ các đồng giấy bạc 1 đồng, 2 đồng, 5 đồng.
Ví dụ dùng 100 giấy bạc loại 1 đồng, 30 giấy bạc loại 5 đồng và 25 giấy bạc loại 2 đồng
(100*1 + 30*5 + 25*2 = 300).

Bài này ta cũng giải tương tự bài 9. Đặt a,b,c tương tứng là số loại giấy bạc 1 đồng, 2 đồng và 5 đồng.
Giá trị có thể của a là 0 - 300
Giá trị có thể của b là 0 - 150 (tối đa có 300/2 = 150 tờ 2 đồng)
Giá trị có thể của c là 0 - 60 (tối đa có 300/5 = 60 tờ 5 đồng)

Ta thay các giá trị này vào các vòng lặp tương ứng ở trên

LikeDislike

newbie




Tổng số bài gửi : 54
Join date : 06/03/2008

Hướng dẫn chương trình pascal mẫu
Hướng dẫn chương trình pascal mẫu
Tiêu đề: Re: Một số bài mẫu PASCAL (10/3/2008)   
Hướng dẫn chương trình pascal mẫu
Tue Mar 11, 2008 10:51 am

Bài 11 : Tìm số nguyên dương lớn nhất thoả mãn điều kiện

Hướng dẫn chương trình pascal mẫu


Giải :

Để giải bài này ta phải dùng vòng lặp không biết trước số lần lặp,
1 : ban đầu n được gán là giá trị nguyên dương nhỏ nhất là 0 (n:=0;)
2 : Tại mỗi bước lặp ta thử kiểm tra giá trị n có thảo mãn hay không.
nếu n thỏa mãn thì ta lại tiếp tục tăng n.
Nếu N không thỏa mãn thì dừng và in ra giá trị trước đó (giá trị n thỏa mãn)

Sơ đồ khối

Hướng dẫn chương trình pascal mẫu


Code:

program bai10;
Uses CRT;
Var
      n:integer;

BEGIN
    clrscr;
    n:=0;
   
    While (n*n*n+2*n-4 <100)
      begin
          n:=n+1;
      end;
   
    Writeln('Gia tri lon nhat cua n thoa man la : ',n-1);

    repeat until keypressed;
END.

LikeDislike

newbie




Tổng số bài gửi : 54
Join date : 06/03/2008

Hướng dẫn chương trình pascal mẫu
Hướng dẫn chương trình pascal mẫu
Tiêu đề: Re: Một số bài mẫu PASCAL (10/3/2008)   
Hướng dẫn chương trình pascal mẫu
Tue Mar 11, 2008 11:29 am

Bài 12 : Lập chương trình đọc x, n rồi tính và in ra giá trị biểu thức

Hướng dẫn chương trình pascal mẫu


Giải

Bài này ta cũng làm tương tự Bài 2
Nhập N, Tính tổng
Hướng dẫn chương trình pascal mẫu


Tuy nhiên ở đây ta cần nhập thêm giá trị của x và tính giá trị
Hướng dẫn chương trình pascal mẫu
tại mỗi bước lặp. Để tính ta có thể dùng vòng lặp FOR

tại mỗi bước lặp ta dùng thêm biến tg để tính
Hướng dẫn chương trình pascal mẫu


Code:

tg:=1;
for j:=1 to i do
    tg:=tg*x;


sau đó cập nhật giá trị tổng S
Code:

S:=S+tg/i;


Chương trình sẽ được viết là

Code:

program bai12;
Uses CRT;
Var
    i,j,n    :integer;
    s,tg,x :Real;

BEGIN
    clrscr;
    write('X= ? '); readln(x);
    write('N= ? '); readln(n);
    s:=0;
    for i:=1 to n do
      begin
            tg:=1;
            for j:=1 to i do
                tg:=tg*x;
       
            s:=s+tg/i;
      end;
   
    writeln('gia tri tong S tinh duoc la : ',s:10:4);

    repeat until keypressed; 
END.


Tuy nhiên trong cách làm trên thì tại bước lặp tiếp theo của i là i+1 ta lại phải lặp lại việc tính
Hướng dẫn chương trình pascal mẫu
mà đã tính được từ trước, ta có thể tối ưu chương trình bằng cách sử dụng kết quả đã có của lần lặp trước như sau

Code:

program bai12;
Uses CRT;
Var
    i,j,n    :integer;
    s,tg,x :Real;

BEGIN
    clrscr;
    write('X= ? '); readln(x);
    write('N= ? '); readln(n);
    s:=0;

    {thay doi}
    tg:=1;

    for i:=1 to n do
      begin
            tg:=tg*x;     
            s:=s+tg/i;
      end;
   
    writeln('gia tri tong S tinh duoc la : ',s:10:4);

    repeat until keypressed; 
END.

LikeDislike