PDA

View Full Version : Bài tập Pascal



Quang Tinh
24-08-2009, 09:52
Chào mọi người!
Mình mới học Pascal nên có chương trình này xin mọi người xem giúp với:
Program xemsongaytrongthang;
USES CRT;
VAR songay,thang: byte;
nam: integer;
Begin
CLRSCR;
Writeln('nhap thang (dang so):');
Readln(thang);
Case thang of
4,6,9,11: songay:=30;
2:
begin
Writeln('thang thuoc nam nao(bon chu so):');
Readln(nam);
If nam mod 4=0 then songay=:29;
else songay:=28;
end
else
songay:=31;
end;
If thang:=2 then Writeln('thang',thang,'/',nam,'co',songay,'ngay.');
Else Writeln('thang',thang,'co',songay,'ngay.');
readln
end.

an f9 xem chả được toàn báo lỗi số bốn mong mọi người xem giúp đỡ với

hang_vt
24-08-2009, 12:44
Program xemsongaytrongthang;
USES CRT;
VAR songay,thang: byte;
nam: integer;
Begin
CLRSCR;
Writeln('nhap thang (dang so):');
Readln(thang);
Case thang of
4,6,9,11: songay:=30;
2:
begin
Writeln('thang thuoc nam nao(bon chu so):');
Readln(nam);
If nam mod 4=0 then songay:=29
else songay:=28;
end
else
songay:=31;
end;
If thang=2 then Writeln('thang ',thang,'/',nam,' co ',songay,' ngay.')
Else Writeln('thang ',thang,' co ',songay,' ngay.');
readln
end.


bạn xem lại cấu trúc câu lệnh "if then else" nha :)

Quang Tinh
24-08-2009, 14:32
vẫn không được bạn à. bạn nói rõ hơn được không?

hang_vt
24-08-2009, 17:32
hơ , mình chạy đc mà :( . Báo lỗi j` vậy bạn . Bạn thử xóa câu lệnh "USES CRT" và "CLRSCR" xem

quangtq
24-08-2009, 18:36
1. Lỗi: Trước Else ko có ;
2. Việc gì phải xóa thế chị, down FP về đi: http://freepascal.org
Vào mục download

Quang Tinh
31-08-2009, 08:50
Hix sửa mãi cũng chả được nó cứ báo lỗi ERROR 4: Duplicate identifier (songay). Làm sao bây giờ

bld
31-08-2009, 09:21
khai báo biến songay 2 lần ,bỏ dòng chữ program ... thử xem
àh , biên dịch hiên dấu nháy lỗi ở dòng nào vậy

Quang Tinh
31-08-2009, 11:11
He làm được rồi may quá .Cảm ơn các bạn đã giúp đỡ nhá

hang_vt
31-08-2009, 14:53
mãi vẫn chẳng hỉu , cái fp , tb lâu lâu tưng tưng . 1 ct , máy ở nhà kq khác , máy ở trường kq khác ="= , máy ở nhà chạy đc , máy ở trường báo lội . Nhiều khi khổ sở =.=!

mr_invincible
31-08-2009, 23:06
Cũng có cả trường hợp là cùng một máy chạy nhiều lần ra nhiều kết quả. Chẳng hạn: Không khởi tạo giá trị biến trong chương trình con => mỗi lần chạy 1 kiểu

Thông thường thì các lỗi do chạy mỗi máy một kiểu thường là do sai ở đâu đó.

Báo lỗi thì do tùy hướng biên dịch mặc định của mỗi máy. Nói chung khi code nên đặt {$R+,Q+} ở đầu chương trình để đảm bảo luôn kiểm tra tràn mảng, tràn số, trừ một số trường hợp lợi dụng việc tràn số để code (chẳng hạn khi dùng hash để tránh phải làm việc với số lớn có thể chấp nhận tràn số ...)

quangtq
01-09-2009, 21:05
Ơ hơ. Anh RR lâu lắm mới thấy lên đây nhở.

lehang_gb1
24-09-2009, 21:48
Chào mọi người!
Mình mới học Pascal nên có chương trình này xin mọi người xem giúp với:
Program xemsongaytrongthang;
USES CRT;
VAR songay,thang: byte;
nam: integer;
Begin
CLRSCR;
Writeln('nhap thang (dang so):');
Readln(thang);
Case thang of
4,6,9,11: songay:=30;
2:
begin
Writeln('thang thuoc nam nao(bon chu so):');
Readln(nam);
If nam mod 4=0 then songay=:29;
else songay:=28;
end
else
songay:=31;
end;
If thang:=2 then Writeln('thang',thang,'/',nam,'co',songay,'ngay.');
Else Writeln('thang',thang,'co',songay,'ngay.');
readln
end.

an f9 xem chả được toàn báo lỗi số bốn mong mọi người xem giúp đỡ với

Các lỗi cú pháp của chương trình sẽ được chưong trình dich phát hiện nhờ nhấn Alt+F9 và vị trí lỗi là gần vị trí con trỏ
Nếu bạn gõ chương trình nguồn y như thế này thì bạn có 1 số lỗi cú pháp songay=:29 viết lại là songay:=29
If thang:=2 sửa lại là thang=2 vì đây là biểu thức quan hệ điều kiện bạn lại dùng lệnh gán máy sẽ báo lỗi

Quang Tinh
28-09-2009, 16:28
Bài đó mình sửa lại làm được rồi bây giờ có bài này các bạn sửa giúp lỗi mình với nhá:

Program tinhgiatribt;
USES CRT;
const pi=3.14;
VAR a,b,x:integer;
t:real;
begin
clrscr;
Writeln('Nhap cac gia tri bien a,b,x:');
Readln(a,b,x);
t:=(power(x,3)+sin(b*pi/180)-exp(0.00234))/(5+x+SQRT(x+a));
Writeln('gia tri cua t la:',t);
readln;
end.
----------------------------
không biết biểu diễn x mũ 3 có phải viết power(x,3) giống trong excel không mà nó báo lỗi số ,3 con trỏ chỉ nơi hàm power , các bạn giúp mình khắc phục lỗi này với nhá.

quangtq
28-09-2009, 18:04
Ặc.
Pascal ko có hàm mũ. Bạn phải tự xây dựng.
P/S: Bạn ko biết đọc lỗi à, chỉ biết nhìn xem con trỏ ở đâu. Nản :|

Quang Tinh
29-09-2009, 08:35
Hix mới học đã biết gì đâu tại thấy con trỏ ở hàm power nên sinh nghi. Bây giờ như trường hợp đó phải thiết lập như thế nào cho phù hợp nhỉ.Chỉ mình với mình còn kém lắm các bản chỉ dạy tận tình nhé. thanks!

quangtq
29-09-2009, 16:40
Đơn giản nhất là dùng vòng lặp:


Function Power(a,x:LongInt):LongInt;
Var tg,i:LongInt;
Begin
tg:=1;
For i:=1 to x do tg:=tg*a;
Power:=tg;
End;

Đấy là trường hợp a^x với x không âm. X âm thì bạn tự xây dựng đc rồi.
Ct:


a^x = exp(x*ln(a));

lehang_gb1
01-10-2009, 08:42
Bài đó mình sửa lại làm được rồi bây giờ có bài này các bạn sửa giúp lỗi mình với nhá:

Program tinhgiatribt;
USES CRT;
const pi=3.14;
VAR a,b,x:integer;
t:real;
begin
clrscr;
Writeln('Nhap cac gia tri bien a,b,x:');
Readln(a,b,x);
t:=(power(x,3)+sin(b*pi/180)-exp(0.00234))/(5+x+SQRT(x+a));
Writeln('gia tri cua t la:',t);
readln;
end.
----------------------------
không biết biểu diễn x mũ 3 có phải viết power(x,3) giống trong excel không mà nó báo lỗi số ,3 con trỏ chỉ nơi hàm power , các bạn giúp mình khắc phục lỗi này với nhá.

Bạn sửa lại như sau:



Program tinhgiatribt;
USES CRT;
const pi=3.14;
VAR a,b,x:integer;
t:real;
begin
clrscr;
Writeln('Nhap cac gia tri bien a,b,x:');
Readln(a,b,x);
t:=x*x*x+sin(b*pi/180)-exp(0.00234))/(5+x+SQRT(x+a));
Writeln('gia tri cua t la:',t:10:4);
readln;
end.
(*Nếu bạn nhập vào b là số đo của góc theo độ thì tính như vậy*)


[=========> Bổ sung bài viết <=========]


Đơn giản nhất là dùng vòng lặp:


Function Power(a,x:LongInt):LongInt;
Var tg,i:LongInt;
Begin
tg:=1;
For i:=1 to x do tg:=tg*a;
Power:=tg;
End;

Đấy là trường hợp a^x với x không âm. X âm thì bạn tự xây dựng đc rồi.
Ct:


a^x = exp(x*ln(a));


x âm hay không cũng tính được theo công thức a^x = exp(x*ln(a)); chứ nhỉ

Quang Tinh
01-10-2009, 08:59
trường hợp bạn lehang như trường hợp x^3 thiết lập như thế thì được giả sử như x^100 hay 1000 thì viết như thế sao được. hay x^3=x^ln(exp(3)) có được không nhỉ

lehang_gb1
01-10-2009, 09:38
Bạn không viết mũ như vậy được Pascal sẽ báo lỗi. Nếu mũ lớn bạn dùng hàm như bạn quangtq hoặc bạn không dùng hàm thì trong chương trình dùng vòng lặp For cũng được (với x nguyên)
mu:=1;
For i:=1 to x do mu:=mu*a;
hoặc là bạn dùng hàm như quangtq cũng được mu:=exp(x*l(a)) - với a >0

Quang Tinh
01-10-2009, 10:22
không có cách nào dùng chung cho mọi số sao nếu phải phân ra từng trường hợp thì thật là phiền phức

quangtq
03-10-2009, 16:06
Nản quá.
Có 1,2 dòng code thêm cũng ngại.
Thế thì C đi


mu = (a<0)?exp(x*ln(a)):exp(x*ln(-a));

duykhuong-it
03-10-2009, 16:25
Bác ơi, bác làm ơn send cho em chương trình Pascal của bác được không? em kiếm mãi mà toàn thiếu thư viện không à, muốn làm mấy bài ôn lại cũng không được, bác send cho em nha duykhuong0901@gmail.com

cảm ơn bác trước

Quang Tinh
05-10-2009, 10:05
Cảm ơn quangtq nhưng mà mình đang giải quyết vấn đề này bằng pascal mà, thôi đành viết thêm vài chữ vậy cũng chả nhiều nhặn mấy .
-----------------
Có bài tập này mình hỏi nữa nhá :

Program giaiptbac2;
USES CRT;
VAR a,b,c:integer;
denta:real;
begin
Clrscr;
Writeln('giai phuong trinh bac 2: ax^2 + bx + c = 0');
Writeln('nhap a,b va c:');
Readln(a,b,c);
denta:=b*b-4*a*c;
IF (a=0) and (b=0) and (c=0) then Writeln('Phuong trinh co vo so nghiem')
else
IF (a=0) and (b<>0) then Writeln('Phuong trinh co mot nghiem x = ',-c/b)
else
if (a<>0) then
begin
if denta<0 then writeln('phuong trinh vo nghiem')
else
if denta=0 then writeln('phuong trinh co mot nghiem chung x=',-b/2*a)
else
Writeln('phuong trinh co hai nghiem phan biet.');
Writeln('X1 =',(-b+sqrt(denta))/2*a);
Writeln('X2 =',(-b-sqrt(denta))/2*a);
end;
readln;
end.
----------------------------------------------------------------
chương trình chạy bình thường các trường hợp khác thì không vấn đề gì chỉ riêng trường hợp nhập a,b,c để denta<0 thì báo lỗi là sao nhỉ. Nhưng thoát chương trình đi thì lại thấy mấy dòng này:
phuong trình vo nghiem
x= runtime erro 207 at 0BF1:0B05
thế là sao nhỉ các bạn giúp mình với. Thanks nhìu

[=========> Bổ sung bài viết <=========]

Sao chả có ai giải thích giùm mình cả vậy buồn và sốt ruột wa ???????

thedaigiapro
08-10-2009, 09:37
Chào mọi người!
Mình mới học Pascal nên có chương trình này xin mọi người xem giúp với:
Program xemsongaytrongthang;
USES CRT;
VAR songay,thang: byte;
nam: integer;
Begin
CLRSCR;
Writeln('nhap thang (dang so):');
Readln(thang);
Case thang of
4,6,9,11: songay:=30;
2:
begin
Writeln('thang thuoc nam nao(bon chu so):');
Readln(nam);
If nam mod 4=0 then songay=:29;
else songay:=28;
end
else
songay:=31;
end;
If thang:=2 then Writeln('thang',thang,'/',nam,'co',songay,'ngay.');
Else Writeln('thang',thang,'co',songay,'ngay.');
readln
end.

an f9 xem chả được toàn báo lỗi số bốn mong mọi người xem giúp đỡ với

hehe bài này đâu có sai gì đâu vãn chạy tốt mà có lẽ pascal cảu bạn bj lỗi, bạn nên cài bản khác đj,

MyHieu
08-10-2009, 10:13
Ôi pascal, tuổi thơ của tôi :D

mylinh9006
16-10-2009, 09:21
ai đó giúp mình với. mình định viết 1chương trình tp để làm bài thi giữa kì nhưng thật sự mình hok biết gì về tp hết.ai đó có thể giúp mình giải quyết bài này không?
sử dụng unit viết chương trình tính chu vi hình chữ nhật,tròn,tam giác và diện tích của hình chữ nhật, tròn, tam giác(sử dụng chương trình con ).lưu với đuôi TPU.thật sự mình hok biết ai đó giúp mình nhá,thank!!