Read-only archive. Login and posting are unavailable.

PDA

View Full Version : giải giúp em 2 bài pascal này


avada_kedavra
14-01-2010, 20:32
1. e(n)=1+1/1!+1/2!+...+1/n!+... cho đến khi 1/n! < 2x10^-6
sử dụng for to do hoặc while do nhé anh
2. 1 người gửi tiết kiệm ko kì hạn với số tiền A đồng với lãi suất 0.3% mỗi tháng. Hỏi sau bao nhiu tháng, người đó rút hết tiền thì sẽ nhận đc số tiền ít nhất là B đồng? Biết rằng với việc gửi tiết kiệm ko kì hạn thì lãi ko đc cộng vào vốn.
sử dụng câu lênh while do nhé
cảm ơn, mai em kiểm tra 1 tiết rồi

NTa6
14-01-2010, 21:01
cho ké phát nhé :

convert số từ binary qua decimal và ngược lại

// cho em xin cái ý tưởng :brick:

Keyboárd C@t
14-01-2010, 21:06
Pascal thì mình chịu rồi, nếu là C++/C#/Java thì mình còn giúp được :nosebleed:
cho ké phát nhé :

convert số từ binary qua decimal và ngược lại

// cho em xin cái ý tưởng :brick:

input: binary ( string)
output: decimal ( number)
variables: c ( number), factor (number)

decimal = 0
factor = 1

for each char in binary starting with the last one
{
- take the character for the current step from binary
- convert it to number ( in variable c). It must be 0 or 1 otherwise the number is not in binary format
- decimal = decimal + b*factor

- factor = factor * 2
}

dacaubong
14-01-2010, 21:13
cho ké phát nhé :

convert số từ binary qua decimal và ngược lại

// cho em xin cái ý tưởng :brick:

Mình lâu cũng ko viết pascal nên đành nêu thuật toán thôi vậy. Bạn dùng được thì dùng nhé :haha:
1. Từ decimal sang binary: cái này thì đơn giản, cứ div liên tục cho 2 đến khi nào giá trị bé hơn 2, mỗi lần div thì lưu kết quả của phép mod 2 vào 1 mảng buffer, đến lúc chia xong thì đọc ngược từ cuối. Nhớ có 1 biến lưu số lần lặp để đọc ngược mảng.

2. Từ binary sang decimal: trường hợp này nên chuyển sang dạng string để đếm số chữ cái, giả sử là n. Dùng 1 vòng lặp để tính giá trị hệ số ban đầu là hs:=2^(n-1). Sau đó thì cứ lấy từng kí tự của string đấy, chuyển sang dạng số, rồi nhân với hs, sau mỗi lần lặp như vậy thì giảm hệ số đi 2 lần (nên dùng phép div), cứ thế cho đủ n lần là sẽ ra số dec thôi mà

Good luck :D

anhdangtimvo
14-01-2010, 21:15
e(n)=1+1/1!+1/2!+...+1/n!+... cho đến khi 1/n! < 2x10^-6
//chả hiểu là tính e(n) hay tìm n? thôi làm cả 2

user crt; {cho máu}
var
n:integer;
en:real;
function giaithua(a:integer)
begin
if a<=1 giaithua:=1 else giaithua:=a*giaithua(a-1);
end;
begin
en:=0;
n:=0;
whilte((1/giaithua(n))>=0.000002) do
begin
en:=en+1/giaithua(n);
n:=n+1;
end;
writeln('e(n)=',en);
writeln('n=',n);
readln;
end.

Code trên chưa test trên pascal, và cũng lâu lắm rồi ko dùng pascal, nếu sai bạn tự sửa lại nhé, nhưng đại khái là thế

codushi
14-01-2010, 21:19
bài 1:(ý tưởng cho bạn thôi nhé, mình bỏ pascal cũng 4 năm rồi)

i:=0;
s:=1;
stop:=2/1000000;
while (true) do
begin
i++;
gt:=1;
for j:=1 to i do
gt=gt*j;
gt:=1/gt;
if (gt sau vòng lập s là tổng cần tìm

bài 2: mình nghĩ là quá dễ vì nếu lãi không cộng vào gốc => số tiền lãi một tháng là cố định, thì bạn cứ lấy B trừ A là ra số tiền lãi tổng cộng. Sau đó lấy tổng tiền lãi đó chia cho lãi 1 tháng là ra số tháng mà!!!

dacaubong
14-01-2010, 21:19
e(n)=1+1/1!+1/2!+...+1/n!+... cho đến khi 1/n! < 2x10^-6
//chả hiểu là tính e(n) hay tìm n? thôi làm cả 2

user crt; {cho máu}
var
n:integer;
en:real;
function giaithua(a:integer)
begin
if a<=1 giaithua:=1 else giaithua:=a*giaithua(a-1);
end;
begin
en:=0;
n:=0;
whilte((1/giaithua(n))>=0.000002) do
begin
en:=en+1/giaithua(n);
n:=n+1;
end;
writeln('e(n)=',en);
writeln('n=',n);
readln;
end.

Code trên chưa test trên pascal, và cũng lâu lắm rồi ko dùng pascal, nếu sai bạn tự sửa lại nhé, nhưng đại khái là thế

Bài này thực ra có thể làm mà không cần dùng đến hàm giai thừa.
Với mẫu số của các phần tử trung chuỗi khai triển ta sẽ gán giá trị ban đầu là 1, sau mỗi lần lặp thì nhân thêm với bước lặp. Vd: 1, 1.2, 1.2.3, 1.2.3.4 :D

NTa6
15-01-2010, 07:23
Pascal thì mình chịu rồi, nếu là C++/C#/Java thì mình còn giúp được :nosebleed:

Mình lâu cũng ko viết pascal nên đành nêu thuật toán thôi vậy. Bạn dùng được thì dùng nhé :haha:
1. Từ decimal sang binary: cái này thì đơn giản, cứ div liên tục cho 2 đến khi nào giá trị bé hơn 2, mỗi lần div thì lưu kết quả của phép mod 2 vào 1 mảng buffer, đến lúc chia xong thì đọc ngược từ cuối. Nhớ có 1 biến lưu số lần lặp để đọc ngược mảng.

2. Từ binary sang decimal: trường hợp này nên chuyển sang dạng string để đếm số chữ cái, giả sử là n. Dùng 1 vòng lặp để tính giá trị hệ số ban đầu là hs:=2^(n-1). Sau đó thì cứ lấy từng kí tự của string đấy, chuyển sang dạng số, rồi nhân với hs, sau mỗi lần lặp như vậy thì giảm hệ số đi 2 lần (nên dùng phép div), cứ thế cho đủ n lần là sẽ ra số dec thôi mà

Good luck :D

Thanks a bro nhá, đã ra :beauty:

//giờ thì đi học tối về spam típ :)

sheva
15-01-2010, 07:55
cho ké phát nhé :

convert số từ binary qua decimal và ngược lại

// cho em xin cái ý tưởng :brick:

mấy bài này thường được lấy ví dụ khi học về stack . Mở bài stack ra thế nào chẳng có .