DIỄN ĐÀN ĐÀ NẴNG - DANANG FORUM

DIỄN ĐÀN ĐÀ NẴNG - DANANG FORUM (http://forum.dng.vn/index.php)
-   Pascal (http://forum.dng.vn/forumdisplay.php?f=342)
-   -   Ngôn Ngữ Pascal (http://forum.dng.vn/showthread.php?t=4224)

minhphuc 20-04-2009 12:04 PM

Ngôn Ngữ Pascal
 
Tại sao Pascal được dạy đầu tiên khi bước vào học lập trình?

Có nhiều lý do nhưng các lý do nhiều người công nhận:

1. Pascal là ngôn ngữ căn bản.
2. Vì nó là căn bản nên nó chuẩn, đơn giản và dễ hiểu.
3. Cái gì đơn giản và dễ hiểu thì sẽ dễ tiếp cận.
4. Ngôn ngữ Pascal giúp người học về lập trình hơn là học về ngôn ngữ lập trình.
...

Ngoài ra, theo kết quả nghiên cứu của một số trường ĐH ở nước ngoài cho thấy người bắt đầu học ngôn ngữ lập trình Pascal sẽ tiếp thu các ngôn ngữ lập trình khác nhanh hơn.

Các bạn học sinh trung học chưa yêu ngôn ngữ lập trình Pascal, tại sao?
Câu trả lời đơn giản: bạn chưa hiểu Pascal, hoặc hiểu nhưng chưa biết lập trình thế nào, hoặc biết lập trình nhưng chưa phân tích được vấn đề.

Vậy các bạn hãy gởi bất kỳ câu hỏi/bài tập về ngôn ngữ này, anh chị em đã từng kinh nghiệm sẽ giúp các bạn trong khả năng có thể? (Đặc biệt mùa thi đang đến gần :-c)

Trong khi chờ đợi câu hỏi từ các bạn, thành viên CLB tin học sẽ thu gom, lượm lặt các câu hỏi về Pascal để cùng giải đáp.

kubi 20-04-2009 12:25 PM

học cái này cũng thú lắm,đã từng đi thi HSG môn này suýt có giải hehe

minhphuc 21-04-2009 09:40 AM

Bài tập 1
 
Chúng ta cùng bắt đầu với bài tập thứ 1. (Đây là đề ôn thi môn tin học dành cho học sinh lớp 11 của một trường PTTH)


1. Viết chương trình nhập 2 số tự nhiên N va M . Hãy in các ước nguyên tố trong đoạn [min(M,N), max (N,M)], cho biết có bao nhiêu số nguyên tố và tổng của chúng. Chương trinh kết thúc khi nhâp M=N.



p/s: đây là những bài tập dành cho các em học sinh phổ thông nên tương đối dễ so với các bạn sinh viên CNTT. Tuy nhiên các bạn có thể dùng những giải thuật nhằm tối ưu hóa. Thân mến!

rcp 23-04-2009 07:34 AM

Ðề: Bài tập 1
 
Trích:

Nguyên văn bởi minhphuc (Gửi 13906)
Chúng ta cùng bắt đầu với bài tập thứ 1. (Đây là đề ôn thi môn tin học dành cho học sinh lớp 11 của một trường PTTH)


1. Viết chương trình nhập 2 số tự nhiên N va M . Hãy in các ước nguyên tố trong đoạn [min(M,N), max (N,M)], cho biết có bao nhiêu số nguyên tố và tổng của chúng. Chương trinh kết thúc khi nhâp M=N.

p/s: đây là những bài tập dành cho các em học sinh phổ thông nên tương đối dễ so với các bạn sinh viên CNTT. Tuy nhiên các bạn có thể dùng những giải thuật nhằm tối ưu hóa. Thân mến!

hihi.. minhphúcc làm các em giật mình..

đề tài này tưởng là khó.. nhưng niú các bạn chia làm 4 phần, như:

phần 1) Viết chương trình nhập 2 số tự nhiên N va M

phần 2) Hãy in các ước nguyên tố trong đoạn [min(M,N), max (N,M)]

phần 3) cho biết có bao nhiêu số nguyên tố và tổng của chúng

và phần 4) Chương trinh kết thúc khi nhâp M=N.

-----------------o0o -----------------
phần 1) Viết chương trình nhập 2 số tự nhiên N va M
-----------------------------------------------------------------------
Uses Crt;


SoN, SoM: Integer; // đăng kí 2 số nguyên (Integer) N và M


Procedure Nhap();
Begin
Write(' nhập 1 số tự nhiên thứ nhất: ');
Readln(SoN); // tiếp nhận số N
Write(' nhập 1 số tự nhiên thứ hai: ');
Readln(SoM); // tiếp nhận số N
End;


phần 2) Hãy in các ước nguyên tố trong đoạn [min(M,N), max (N,M)]
-----------------------------------------------------------------------
a) ở đây, bạn nên tìm ra có đc những con số nhỏ nhất của cặp M và N: min(M,N)
b) ở đây, bạn nên tìm ra có đc những con số lớn nhất của cặp M và N: max (M,N)

nghĩa là... seo hén ...


hihi.. mình giải thix.. hok bit có đc rõ nghĩa lém chăng.. Mong bạn giải cho chút ý kiến hén...

--- rcp ---

minhphuc 23-04-2009 06:31 PM

Ðề: Ngôn Ngữ Pascal
 
Trích:

Nguyên văn bởi rcp (Gửi 14024)

phần 2) Hãy in các ước nguyên tố trong đoạn [min(M,N), max (N,M)]
-----------------------------------------------------------------------
a) ở đây, bạn nên tìm ra có đc những con số nhỏ nhất của cặp M và N: min(M,N)
b) ở đây, bạn nên tìm ra có đc những con số lớn nhất của cặp M và N: max (M,N)

Để tìm max và min của 2 số SoM, SoN (hì hì, cái này là dễ nên Phúc xung phong làm nhường các bạn phần khó hơn)

var soMin, soMax: integer;

procedure tim_Gia_Tri _Min_Max()

begin
soMin = SoM;
soMax = SoN;

if (SoM > SoN) then

begin
soMin = SoN;
soMax = SoM;
end;
end;

-----------------------------------------------------------------------------------------------
Thêm một hàm kiểm tra số nguyên tố để bà con không mắng vốn,


function kiem_Tra_La_So_Nguyen_To(soCanKiemTra: integer):boolean;
var idx, gt: integer;
var isNguyenTo: boolean;


begin //bat dau function
isNguyenTo:=true;

if soCanKiemTra=1 then isNguyenTo:=false;


if (soCanKiemTra > 2) then
begin //bat dau khoi lenh trong if

gt:= trunc(sqrt(soCanKiemTra));
idx:=2;

while (idx<= gt and isNguyenTo == true) do
begin //bat dau khoi lenh do

if soCanKiemTra mod idx=0 then isNguyenTo:=false;
idx:=idx+1;
end; //ket thuc do

end; //ket thuc if

kiem_Tra_La_So_Nguyen_To:= isNguyenTo;
end; //ket thuc function


Công đoạn tiếp theo là tìm các ước số nguyên tố của đoạn [soMin, soMax] thì mời thành viên tiếp theo

rcp 24-04-2009 06:32 AM

Ðề: Ngôn Ngữ Pascal
 
ha ha... mừng wá... mừng wá ... cũm ơn bạn minhphuc giúp cho hàm kiểm tra số nguyên tố để bà con không mắng vốn,

dzay thi chúng ta có đc:

phần 1) Viết chương trình nhập 2 số tự nhiên N va M
-----------------------------------------------------------------------
Uses Crt;


SoN, SoM: Integer; // đăng kí 2 số nguyên (Integer) N và M


Procedure Nhap();
Begin
Repeat
Begin
Write(' nhập 1 số tự nhiên thứ nhất: ');
Readln(SoN); // tiếp nhận số N
End // của If kiem_Tra_La_So_Nguyen_To(SoN)
// kiễm tra cho đến khi nào ngta cho dzô một số nguyên
If (kiem_Tra_La_So_Nguyen_To(SoN) == false) then
then Writeln(' số tự nhiên thứ nhất phải là số nguyên khác mí 0 (dzéro) ');
Until SoN<>0;
End // của Repeat
End // của If kiem_Tra_La_So_Nguyen_To(SoN)

Repeat
Begin
Write(' nhập 1 số tự nhiên thứ hai: ');
Readln(SoM); // tiếp nhận số N
End // của If kiem_Tra_La_So_Nguyen_To(SoM)
// kiễm tra cho đến khi nào ngta cho dzô một số nguyên
If (kiem_Tra_La_So_Nguyen_To(SoM) == false) then
then Writeln(' số tự nhiên thứ hai phải là số nguyên khác mí 0 (dzéro) ');
Until SoM<>0;
End // của Repeat
End // của If kiem_Tra_La_So_Nguyen_To(SoN)


End; // Procedure Nhap()

--- rcp ---

minhphuc 24-04-2009 09:44 AM

Ðề: Ngôn Ngữ Pascal
 
Trích:

Nguyên văn bởi rcp (Gửi 14088)
phần 1) Viết chương trình nhập 2 số tự nhiên N va M
-----------------------------------------------------------------------
Uses Crt;


SoN, SoM: Integer; // đăng kí 2 số nguyên (Integer) N và M


Procedure Nhap();
Begin
Repeat
Begin
Write(' nhập 1 số tự nhiên thứ nhất: ');
Readln(SoN); // tiếp nhận số N
End // của If kiem_Tra_La_So_Nguyen_To(SoN)
// kiễm tra cho đến khi nào ngta cho dzô một số nguyên
If (kiem_Tra_La_So_Nguyen_To(SoN) == false) then
then Writeln(' số tự nhiên thứ nhất phải là số nguyên khác mí 0 (dzéro) ');
Until SoN<>0;
End // của Repeat
End // của If kiem_Tra_La_So_Nguyen_To(SoN)

....

Hì hì, không biết đoạn ni làm chi hết Rcp ơi!

If (kiem_Tra_La_So_Nguyen_To(SoN) == false) then
Writeln(' số tự nhiên thứ nhất phải là số nguyên khác mí 0 (dzéro) ');

Phải kiểm tra số nhập vào khác 0 và phải là số tự nhiên chứ ạ!

rcp 24-04-2009 06:57 PM

Ðề: Ngôn Ngữ Pascal
 
Trích:

Nguyên văn bởi minhphuc (Gửi 14091)
Hì hì, không biết đoạn ni làm chi hết Rcp ơi!

If (kiem_Tra_La_So_Nguyen_To(SoN) == false) then
Writeln(' số tự nhiên thứ nhất phải là số nguyên khác mí 0 (dzéro) ');

Phải kiểm tra số nhập vào khác 0 và phải là số tự nhiên chứ ạ!


hihi.. minhphuc nói đúng.. rcp xí lộn..nên viết lại...

phần 1) Viết chương trình nhập 2 số tự nhiên N va M
-----------------------------------------------------------------------
Uses Crt;


SoN, SoM: Integer; // đăng kí 2 số nguyên (Integer) N và M

Procedure Nhap();
Begin
Write(' nhập 1 số tự nhiên thứ nhất: '); Readln(SoN); // tiếp nhận số N
Write(' nhập 1 số tự nhiên thứ hai: '); Readln(SoM); // tiếp nhận số M
End;


phần 2a) Để tìm max và min của 2 số SoM, SoN
---------------------------------------------------------------

var soMin, soMax: integer;
procedure tim_Gia_Tri _Min_Max()

begin
soMin = SoM;
soMax = SoN;

if (SoM > SoN) then

begin
soMin = SoN;
soMax = SoM;
end;
end;


phần 2b) với một hàm kiểm tra số nguyên tố, in các ước nguyên tố trong đoạn [min(M,N), max (N,M)]
---------------------------------------------------------------

function kiem_Tra_La_So_Nguyen_To(soCanKiemTra: integer):boolean;
var idx, gt: integer;
var isNguyenTo: boolean;


begin //bat dau function
isNguyenTo:=true;

if soCanKiemTra=1 then isNguyenTo:=false;


if (soCanKiemTra > 2) then
begin //bat dau khoi lenh trong if

gt:= trunc(sqrt(soCanKiemTra));
idx:=2;

while (idx<= gt and isNguyenTo == true) do
begin //bat dau khoi lenh do

if soCanKiemTra mod idx=0 then isNguyenTo:=false;
idx:=idx+1;
end; //ket thuc do

end; //ket thuc if

kiem_Tra_La_So_Nguyen_To:= isNguyenTo;
end; //ket thuc function


hihi.. các bạn nào viết tip hẻn..
với một hàm kiểm tra số nguyên tố,
mần răng mờ in ra được các ước nguyên tố trong đoạn [min(M,N), max (N,M)]


Hướng dẫn algorithm:
a) Số nguyên tố là số chỉ chia hết cho 1 và chính nó . (
kiem_Tra_La_So_Nguyen_To(soCanKiemTra: integer) == true)
b) Như vậy, hướng giải quyết là chạy vòng lặp (dùng for hay repeat...until), với số lần lặp max = chính số n.
- Bên trong vòng lặp, chia n cho counter, nếu chia hết thì break, nếu không thì chạy tiếp.
- Thêm một biến làm flag, nếu chạy được hết toàn bộ các lần lặp (kiểm tra qua giá trị của flag) thì đưa n vào một array. Nếu vòng lặp bị break thì thôi.
- Như vậy, có thể kiểm tra các số từ 1 đến n có bao nhiêu số nguyên tố, và các số đó là số nào.

Mời các bạn thực hành xem hẻn...


--- rcp ---

minhphuc 28-04-2009 04:27 PM

Ðề: Ngôn Ngữ Pascal
 
Và đây là đoạn code đã của bài tập trên. Có thể có lỗi cú pháp trong đoạn code này vì Phúc chưa chạy thử.

************************************************** ***************
program tim_Uoc_So_Nguyen_To_va_Tinh_Tong
Uses Crt;

//---------------------------------------------------------------khai bao bien
var SoN, SoM: Integer;
var soMin, soMax: integer;
var tong, bienDemUSNT: integer;
var idx, giatri, uocso, soTunhien: integer;

//---------------------------------------------------------------nhap so nguyen duong N va M
Procedure Nhap();
Begin
----------repeat
--------------------Write(' nhap so tu nhien thu nhat: '); Readln(SoN);
----------until ( 0 < SoN);

----------repeat
--------------------Write(' nhap so tu nhien thu hai: '); Readln(SoM);
----------until (0 < SoM);
End;

//---------------------------------------------------------------tim max, min cua SoN va SoM
procedure tim_Gia_Tri _Min_Max()
begin
----------soMin = SoM;
----------soMax = SoN;

----------if (SoM > SoN) then
----------begin
--------------------soMin = SoN;
--------------------soMax = SoM;
----------end;
end;

//---------------------------------------------------------------Kiem tra mot so tu nhien co phai la so nguyen to
function kiem_Tra_La_So_Nguyen_To(soCanKiemTra: integer):boolean;
var isNguyenTo: boolean;

begin //bat dau function
----------isNguyenTo:=true;

----------if soCanKiemTra=1 then isNguyenTo:=false;

----------if (soCanKiemTra > 2) then
----------begin //bat dau khoi lenh trong if
--------------------giatri := trunc(sqrt(soCanKiemTra));
--------------------idx:=2;
--------------------while (idx <= giatri and isNguyenTo = true) do
--------------------begin //bat dau khoi lenh do
------------------------------if soCanKiemTra mod idx=0 then isNguyenTo:=false;
------------------------------idx:=idx+1;
--------------------end; //ket thuc do
----------end; //ket thuc if

----------kiem_Tra_La_So_Nguyen_To:= isNguyenTo;
end;

//--------------------------------------------------------------- Chuong trinh chinh
begin
----------repeat
----------begin

--------------------tong :=0;
--------------------bienDemUSNT :=0;

--------------------// nhap vao so N va M
--------------------Nhap();

--------------------// tim so min va max
--------------------tim_Gia_Tri _Min_Max();

--------------------for soTunhien:= soMin to soMax do
--------------------begin
------------------------------if (kiem_Tra_La_So_Nguyen_To(soTunhien)) then
------------------------------begin
----------------------------------------tong :=tong + soTunhien;
----------------------------------------bienDemUSNT := bienDemUSNT + 1;
------------------------------end
------------------------------else
------------------------------begin
----------------------------------------giatri := trunc(sqrt(soTunhien));

----------------------------------------for idx:=2 to giatri do
----------------------------------------begin
--------------------------------------------------uocso := soTunhien/idx;
--------------------------------------------------if ((soTunhien mod idx = 0) and kiem_Tra_La_So_Nguyen_To(uocso)) then
--------------------------------------------------begin
------------------------------------------------------------tong :=tong + uocso;
------------------------------------------------------------bienDemUSNT := bienDemUSNT + 1;
--------------------------------------------------end;
----------------------------------------end;
------------------------------end;
--------------------end;

--------------------writeln ('So luong uoc so nguyen to can tim', bienDemUSNT);
--------------------writeln ('Tong cua cac uoc so nguyen to can tim', tong);
----------end;
----------until (SoM = SoN);
end.

vuakeomut9x 28-10-2010 11:22 AM

Ðề: Ngôn Ngữ Pascal
 
các bạn có thể chỉ 1 cách chi tiết cho mình được k.
nếu được liên hệ với mình qua yahoo: hoaanhdao_1992_hlat
hoặc gmail vuakeomut1992@gmail.com
nha
tk các bạn trước nha


Múi giờ GMT +8. Hiện tại là 09:38 AM.

Diễn đàn Đà Nẵng - DNG Forums
Member of DNG Group